X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fslots.lisp;h=a37f983399e250da4060ef4d19943a059b741a3b;hb=01e9e8c568777d6480699e6cb3947f38c3bed350;hp=6b7b120b0edb5ad1044731f85f1a85770aea75c8;hpb=1a405defbd26ca767e71494b67127fcc00a8af12;p=sbcl.git diff --git a/src/pcl/slots.lisp b/src/pcl/slots.lisp index 6b7b120..a37f983 100644 --- a/src/pcl/slots.lisp +++ b/src/pcl/slots.lisp @@ -90,7 +90,7 @@ (define-compiler-macro slot-value (&whole form object slot-name) (if (and (constantp slot-name) - (interned-symbol-p (eval slot-name))) + (interned-symbol-p (constant-form-value slot-name))) `(accessor-slot-value ,object ,slot-name) form)) @@ -105,7 +105,7 @@ (define-compiler-macro set-slot-value (&whole form object slot-name new-value) (if (and (constantp slot-name) - (interned-symbol-p (eval slot-name))) + (interned-symbol-p (constant-form-value slot-name))) `(accessor-set-slot-value ,object ,slot-name ,new-value) form)) @@ -120,7 +120,7 @@ (define-compiler-macro slot-boundp (&whole form object slot-name) (if (and (constantp slot-name) - (interned-symbol-p (eval slot-name))) + (interned-symbol-p (constant-form-value slot-name))) `(accessor-slot-boundp ,object ,slot-name) form)) @@ -318,7 +318,16 @@ instance)) (defmethod slot-unbound ((class t) instance slot-name) - (error 'unbound-slot :name slot-name :instance instance)) + (restart-case + (error 'unbound-slot :name slot-name :instance instance) + (use-value (v) + :report "Return a value as the slot-value." + :interactive read-evaluated-form + v) + (store-value (v) + :report "Store and return a value as the slot-value." + :interactive read-evaluated-form + (setf (slot-value instance slot-name) v)))) (defun slot-unbound-internal (instance position) (values