- (let ((subobjects '()))
- (dolist (slot (class-slots cl))
- (let-when (subobj-def (esd-subobject slot))
- (let ((subobject (make-instance 'subobject
- :name-class (class-name cl)
- :name-slot (slot-definition-name slot)
- :lookup (if (atom subobj-def)
- subobj-def
- (car subobj-def))
- :lookup-keys (if (atom subobj-def)
- nil
- (cdr subobj-def)))))
- (unless (eq (lookup subobject) t)
- #+(or sbcl scl cmu)
- (push `(def-lazy-reader ,(name-class subobject)
- ,(name-slot subobject) ,(lookup subobject)
- ,@(lookup-keys subobject))
- *queued-definitions*)
- #-(or sbcl scl cmu)
- (eval `(def-lazy-reader ,(name-class subobject)
- ,(name-slot subobject) ,(lookup subobject)
- ,@(lookup-keys subobject))))
- (push subobject subobjects))))
- subobjects)))
+ (let ((subobjects '()))
+ (dolist (slot (class-slots cl))
+ (let-when (subobj-def (esd-subobject slot))
+ (let ((subobject (make-instance 'subobject
+ :name-class (class-name cl)
+ :name-slot (slot-definition-name slot)
+ :lookup (if (atom subobj-def)
+ subobj-def
+ (car subobj-def))
+ :lookup-keys (if (atom subobj-def)
+ nil
+ (cdr subobj-def)))))
+ (unless (eq (lookup subobject) t)
+ #-(or sbcl cmu lispworks)
+ (eval
+ `(hyperobject::def-lazy-reader ,(name-class subobject)
+ ,(name-slot subobject) ,(lookup subobject)
+ ,@(lookup-keys subobject)))
+ #+(or sbcl cmu lispworks)
+ (apply #'ensure-lazy-reader
+ (name-class subobject) (name-slot subobject) (lookup subobject) (lookup-keys subobject))
+ )
+ (push subobject subobjects))))
+ ;; sbcl/cmu reverse class-slots compared to the defclass form
+ ;; subobject is already reversed from the dolist/push loop, so re-reverse on cmu/sbcl
+ #+(or cmu sbcl) subobjects
+ #-(or cmu sbcl) (nreverse subobjects)
+ )))