-(defmethod direct-slot-definition-class ((cl attributes-class)
- &rest iargs &key attributes)
- (declare (ignorable attributes))
-;; (format t "attributes:~s iargs:~s~%" attributes iargs)
- (find-class 'attributes-dsd))
-
-(eval-when (:compile-toplevel :load-toplevel :execute)
- (when (>= (length (generic-function-lambda-list
- (ensure-generic-function
- 'compute-effective-slot-definition)))
- 3)
- (push :ho-named-cesd-fun cl:*features*)))
-
-(defmethod compute-effective-slot-definition :around
- ((cl attributes-class) #+ho-named-cesd-fun name dsds)
- #+ho-named-cesd-fun (declare (ignore name))
- (apply
- #'make-instance 'attributes-esd
- :attributes (remove-duplicates (mapappend #'attributes dsds))
- (compute-effective-slot-definition-initargs cl dsds))
- )
-
-
-#+ignore
-(defmethod compute-effective-slot-definition :around
- ((cl attributes-class) #+ho-named-cesd-fun name dsds)
- #+ho-named-cesd-fun (declare (ignore name))
- (let ((normal-slot (call-next-method)))
- (setf (slot-definition-attributes normal-slot)
- (remove-duplicates
- (mapappend #'slot-definition-attributes dsds)))
- normal-slot))
-
-
-(defmethod compute-slots ((class attributes-class))
+(defmethod kmr-mop:direct-slot-definition-class ((cl attributes-class) #+kmrcl::normal-dsdc &rest initargs)
+ (declare (ignore initargs))
+ (kmr-mop:find-class 'attributes-dsd))
+
+(defmethod kmr-mop:effective-slot-definition-class ((cl attributes-class) #+kmrcl::normal-dsdc &rest initargs)
+ (declare (ignore initargs))
+ (kmr-mop:find-class 'attributes-esd))
+
+(defmethod kmr-mop:compute-effective-slot-definition
+ ((cl attributes-class) #+kmrcl::normal-cesd name dsds)
+ #+kmrcl::normal-cesd (declare (ignore name))
+ (let ((esd (call-next-method)))
+ (setf (esd-attributes esd) (remove-duplicates (mapappend #'dsd-attributes dsds)))
+ esd))
+
+;; This does not work in Lispworks prior to version 4.3
+
+(defmethod kmr-mop:compute-slots ((class attributes-class))