Hello,
I am wondering if anyone can explain the reason for the defined but not used variable in setf that this code is experiencing:
CL-USER> (set-macro-character #$ (lambda (stream char) (declare (ignore char)) (let ((v (read stream))) (list (get v 'setf-handler-name) v))))
(defmacro defactive (var value &key write-handler read-handler) (let ((setf-handler-name (gensym))) `(progn (defparameter ,var ,value) (defmacro ,setf-handler-name (,var) (let ((read-handler (gensym))) `(let ((,read-handler (get ',',var :read-handler))) (if ,read-handler (funcall ,read-handler (eval ,',var)) ,',var)))) (defsetf ,setf-handler-name (,var) (new-val) (let ((write-handler (gensym))) `(let ((,write-handler (get ',',var :write-handler))) (when ,write-handler (funcall ,write-handler (eval ,',var) ,new-val)) (setf ,',var ,new-val)))) (setf (get ',var 'setf-handler-name) ',setf-handler-name) (setf (get ',var :write-handler) ,write-handler) (setf (get ',var :read-handler) ,read-handler) ,value)))
(defmacro setactive (var &key read-handler write-handler) `(progn (when ,read-handler (setf (get ',var :read-handler) ,read-handler)) (when ,write-handler (setf (get ',var :write-handler) ,write-handler))))
(defactive x 0 :write-handler (lambda (old-val new-val) (format t "old: ~A new: ~A" old-val new-val)) :read-handler (lambda (val) (format t "value: ~A" val) val)) ;(setactive x :read-handler (lambda (val) (format t "~A !!! ~A" val))) ;(setactive x :write-handler (lambda (old-val new-val) (format t "~A !!! ~A" old-val new-val)))
(defactive d6 (random 6) :read-handler (lambda (val) (let ((old val)) (setf d6 (random 6)) old)))
STYLE-WARNING: redefining COMMON-LISP-USER::DEFACTIVE in DEFMACRO STYLE-WARNING: redefining COMMON-LISP-USER::SETACTIVE in DEFMACRO 1 CL-USER> (setf $x 10) ; in: SETF (#:G1129 X) ; (LET* ((#:G1175 X)) ; (MULTIPLE-VALUE-BIND (#:G1176) ; 10 ; (LET ((#:G1177 #)) ; (WHEN #:G1177 (FUNCALL #:G1177 # #:G1176)) ; (SETF X #:G1176)))) ; ; caught STYLE-WARNING: ; The variable #:G1175 is defined but never used. ; ; compilation unit finished ; caught 1 STYLE-WARNING condition old: 0 new: 10 10
-- Burton Samograd http://kruhft.dyndns.org