- #'(lambda (class object slotd)
- (declare (ignore class slotd))
- (not (eq (funcall function object) *slot-unbound*))))
-
-(defun get-optimized-std-slot-value-using-class-method-function (class slotd name)
- (if (structure-class-p class)
- (ecase name
- (reader (make-optimized-structure-slot-value-using-class-method-function
- (slot-definition-internal-reader-function slotd)))
- (writer (make-optimized-structure-setf-slot-value-using-class-method-function
- (slot-definition-internal-writer-function slotd)))
- (boundp (make-optimized-structure-slot-boundp-using-class-method-function
- (slot-definition-internal-writer-function slotd))))
- (let* ((fsc-p (cond ((standard-class-p class) nil)
- ((funcallable-standard-class-p class) t)
- (t (error "~S is not a standard-class" class))))
- (slot-name (slot-definition-name slotd))
- (index (slot-definition-location slotd))
- (function
- (ecase name
- (reader
- #'make-optimized-std-slot-value-using-class-method-function)
- (writer
- #'make-optimized-std-setf-slot-value-using-class-method-function)
- (boundp
- #'make-optimized-std-slot-boundp-using-class-method-function))))
- (declare (type function function))
- (values (funcall function fsc-p slot-name index) index))))
-
-(defun make-optimized-std-slot-value-using-class-method-function
- (fsc-p slot-name index)
+ (lambda (nv class object slotd)
+ (declare (ignore class slotd))
+ (funcall function nv object)))
+
+(defun make-optimized-structure-slot-boundp-using-class-method-function ()
+ (lambda (class object slotd)
+ (declare (ignore class object slotd))
+ t))
+
+(defun get-optimized-std-slot-value-using-class-method-function
+ (class slotd name)
+ (cond
+ ((structure-class-p class)
+ (ecase name
+ (reader (make-optimized-structure-slot-value-using-class-method-function
+ (slot-definition-internal-reader-function slotd)))
+ (writer (make-optimized-structure-setf-slot-value-using-class-method-function
+ (slot-definition-internal-writer-function slotd)))
+ (boundp (make-optimized-structure-slot-boundp-using-class-method-function))))
+ ((condition-class-p class)
+ (ecase name
+ (reader
+ (let ((fun (slot-definition-reader-function slotd)))
+ (declare (type function fun))
+ (lambda (class object slotd)
+ (declare (ignore class slotd))
+ (funcall fun object))))
+ (writer
+ (let ((fun (slot-definition-writer-function slotd)))
+ (declare (type function fun))
+ (lambda (new-value class object slotd)
+ (declare (ignore class slotd))
+ (funcall fun new-value object))))
+ (boundp
+ (let ((fun (slot-definition-boundp-function slotd)))
+ (declare (type function fun))
+ (lambda (class object slotd)
+ (declare (ignore class slotd))
+ (funcall fun object))))))
+ (t
+ (let* ((fsc-p (cond ((standard-class-p class) nil)
+ ((funcallable-standard-class-p class) t)
+ (t (error "~S is not a standard-class" class))))
+ (function
+ (ecase name
+ (reader
+ #'make-optimized-std-slot-value-using-class-method-function)
+ (writer
+ #'make-optimized-std-setf-slot-value-using-class-method-function)
+ (boundp
+ #'make-optimized-std-slot-boundp-using-class-method-function))))
+ (declare (type function function))
+ (values (funcall function fsc-p slotd)
+ (slot-definition-location slotd))))))
+
+(defun make-optimized-std-slot-value-using-class-method-function (fsc-p slotd)