(let ((class (class-of object)))
(not (null (find-slot-definition class slot-name)))))
+(defvar *unbound-slot-value-marker* (make-unprintable-object "unbound slot"))
+
;;; This isn't documented, but is used within PCL in a number of print
;;; object methods. (See NAMED-OBJECT-PRINT-FUNCTION.)
-(defun slot-value-or-default (object slot-name &optional (default "unbound"))
+(defun slot-value-or-default (object slot-name &optional
+ (default *unbound-slot-value-marker*))
(if (slot-boundp object slot-name)
(slot-value object slot-name)
default))
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