(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))
(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))
(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))
(clos-slots-ref (fsc-instance-slots instance) location))
(defmethod slot-value-using-class ((class std-class)
- (object std-object)
+ (object standard-object)
(slotd standard-effective-slot-definition))
(check-obsolete-instance object)
(let* ((location (slot-definition-location slotd))
(defmethod (setf slot-value-using-class)
(new-value (class std-class)
- (object std-object)
+ (object standard-object)
(slotd standard-effective-slot-definition))
(check-obsolete-instance object)
(let ((location (slot-definition-location slotd)))
(defmethod slot-boundp-using-class
((class std-class)
- (object std-object)
+ (object standard-object)
(slotd standard-effective-slot-definition))
(check-obsolete-instance object)
(let* ((location (slot-definition-location slotd))
(defmethod slot-makunbound-using-class
((class std-class)
- (object std-object)
+ (object standard-object)
(slotd standard-effective-slot-definition))
(check-obsolete-instance object)
(let ((location (slot-definition-location slotd)))
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