summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
1d2032d)
The new code basically just punts to the method on
compute-slot-reader-function defined in proxy.lisp.
(append '(:special t) (call-next-method)))
(t (call-next-method))))
(append '(:special t) (call-next-method)))
(t (call-next-method))))
-(defmacro vsc-slot-x-using-class (x x-slot-name computer)
+(defmacro vsc-slot-x-using-class (x x-slot-name computer &key allow-string-fun-p)
(let ((generic-name (intern (concatenate 'string
"SLOT-" (string x) "-USING-CLASS"))))
`(defmethod ,generic-name
((class virtual-slots-class) (object virtual-slots-object)
(slotd effective-virtual-slot-definition))
(let ((generic-name (intern (concatenate 'string
"SLOT-" (string x) "-USING-CLASS"))))
`(defmethod ,generic-name
((class virtual-slots-class) (object virtual-slots-object)
(slotd effective-virtual-slot-definition))
- (unless (slot-boundp slotd ',x-slot-name)
+ (unless (and (slot-boundp slotd ',x-slot-name)
+ ,@(when allow-string-fun-p
+ `((not
+ (stringp (slot-value slotd ',x-slot-name))))))
(setf (slot-value slotd ',x-slot-name) (,computer slotd)))
(funcall (slot-value slotd ',x-slot-name) object))))
(setf (slot-value slotd ',x-slot-name) (,computer slotd)))
(funcall (slot-value slotd ',x-slot-name) object))))
-(vsc-slot-x-using-class value getter compute-slot-reader-function)
+(vsc-slot-x-using-class value getter compute-slot-reader-function
+ :allow-string-fun-p t)
(vsc-slot-x-using-class boundp boundp-function compute-slot-boundp-function)
(vsc-slot-x-using-class makunbound makunbound-function
compute-slot-makunbound-function)
(vsc-slot-x-using-class boundp boundp-function compute-slot-boundp-function)
(vsc-slot-x-using-class makunbound makunbound-function
compute-slot-makunbound-function)