in the wrapper, and then to update the instance just run through
all the old wrappers in order from oldest to newest.
-331: "lazy creation of CLOS classes for user-defined conditions"
- (defstruct foo)
- (defstruct (bar (:include foo)))
- (sb-mop:class-direct-subclasses (find-class 'foo))
- returns NIL, rather than a singleton list containing the BAR class.
-
332: "fasl stack inconsistency in structure redefinition"
(reported by Tim Daly Jr sbcl-devel 2004-05-06)
Even though structure redefinition is undefined by the standard, the
changes in sbcl-0.8.18 relative to sbcl-0.8.17:
* new feature: reloading changed shared object files with
LOAD-SHARED-OBJECT now causes the new definitions to take effect.
+ * fixed bug #331: structure-class instances corresponding to
+ DEFSTRUCT forms are now created eagerly.
changes in sbcl-0.8.17 relative to sbcl-0.8.16:
* new feature: a build-time option (controlled by the :SB-UNICODE
(t
(error "~@<~S is not the name of a class.~@:>" name)))))
-(defun maybe-reinitialize-structure-class (classoid)
+(defun ensure-defstruct-class (classoid)
(let ((class (classoid-pcl-class classoid)))
- (when class
- (ensure-non-standard-class (class-name class) class))))
+ (cond (class
+ (ensure-non-standard-class (class-name class) class))
+ ((eq 'complete *boot-state*)
+ (ensure-non-standard-class (classoid-name classoid))))))
-(pushnew 'maybe-reinitialize-structure-class sb-kernel::*defstruct-hooks*)
+(pushnew 'ensure-defstruct-class sb-kernel::*defstruct-hooks*)
\f
(defun make-class-predicate (class name)
(let* ((gf (ensure-generic-function name :lambda-list '(object)))
(defclass tomato () ())
(assert (null (sb-mop:class-direct-subclasses (find-class 'vegetable))))
+;;; bug 331: lazy creation of clos classes for defstructs
+(defstruct bug-331-super)
+(defstruct (bug-331-sub (:include bug-331-super)))
+(let ((subs (sb-mop:class-direct-subclasses (find-class 'bug-331-super))))
+ (assert (= 1 (length subs)))
+ (assert (eq (car subs) (find-class 'bug-331-sub))))
+
\f
;;;; success
(sb-ext:quit :unix-status 104)
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.17.1"
+"0.8.17.2"