-;;; HACK: initialization does not happ en properly
-;;; when compiling and loading or something like that.
-;;; Obviously i'm not sure why.
-;;; So we're going to explicitly initialize things.
-;;; For now. --drewc
-
- (pushnew class *defined-descriptions*)
-
-;;; ENDHACK.
-
- (let* ((description (find-layer class))
- (attribute-objects
- (setf (description-class-attributes (class-of description))
- (mapcar
- (lambda (slot)
- (or (find-attribute description
- (slot-definition-name slot) nil)
- (let* ((*init-time-description* description)
- (attribute-class (or
- (ignore-errors
- (slot-value-using-class
- (class-of description) description slot))
- 'standard-attribute))
- (attribute
- (apply #'make-instance
- attribute-class
- :description description
- :attribute-class attribute-class
- (attribute-object-initargs slot))))
- (setf (slot-definition-attribute-object slot) attribute))))
- (remove 'described-object (class-slots (class-of description))
- :key #'slot-definition-name))))
- (defining-classes
- (partial-class-defining-classes class)))
+(defun compute-effective-attribute-objects (description)
+ (mapcar
+ (lambda (slot)
+ (or (find-attribute description
+ (slot-definition-name slot) nil)
+ (let* ((*init-time-description* description)
+ (attribute-class (or
+ (ignore-errors
+ (slot-value-using-class
+ (class-of description) description slot))
+ 'standard-attribute))
+ (attribute
+ (apply #'make-instance
+ attribute-class
+ :description description
+ :attribute-class attribute-class
+ (attribute-object-initargs slot))))
+ (setf (slot-definition-attribute-object slot) attribute))))
+ (remove 'described-object (class-slots (class-of description))
+ :key #'slot-definition-name)))
+
+(defun initialize-effective-attribute-values-for-description-class (class description attribute-objects)