When defining a class that has a parent with a forward reference, we can not call finalize-inheritance (A. Gavrilov)

(defclass foo (bar) ())
(defclass baz (foo) ())
This commit is contained in:
Juan Jose Garcia Ripoll 2010-03-19 19:16:04 +01:00
parent 9983c3b7ad
commit 801fb69069

View file

@ -143,8 +143,14 @@
(defmethod effective-slot-definition-class ((class T) &rest canonicalized-slot)
(find-class 'standard-effective-slot-definition nil))
(defun has-forward-referenced-parents (class)
(or (forward-referenced-class-p class)
(and (not (class-finalized-p class))
(some #'has-forward-referenced-parents
(class-direct-superclasses class)))))
(defun finalize-unless-forward (class)
(unless (find-if #'forward-referenced-class-p (class-direct-superclasses class))
(unless (find-if #'has-forward-referenced-parents (class-direct-superclasses class))
(finalize-inheritance class)))
(defmethod initialize-instance ((class class) &rest initargs