From: Christophe Rhodes Date: Mon, 31 May 2004 13:56:25 +0000 (+0000) Subject: 0.8.10.69: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=400bc3bc27cf38777a57ed66eacc4726c3caba33;p=sbcl.git 0.8.10.69: Fix BUG #327 ... at fixup time, loop over subclassoids of STRUCTURE-OBJECT and CONDITION and do FIND-CLASS on their names. Hacky, but there you go. ... this bloats the core quite significantly, but in addition to fixing #327 it also seems to fix the instability in stack exhaustion detection... --- diff --git a/BUGS b/BUGS index 19aeb2e..9b49d25 100644 --- a/BUGS +++ b/BUGS @@ -1417,17 +1417,4 @@ WORKAROUND: introduced. 327: "Lazy construction of CLOS classes from system classoids" - In a fresh SBCL, - (sb-mop:class-direct-subclasses (find-class 'pathname)) - returns NIL, despite the LOGICAL-PATHNAME class existing. However, - if we then do (find-class 'logical-pathname) and repeat the request - for direct subclasses, a list of the logical pathname class is - returned. (Though this particular example revealed the problem to - CSR, others have found that this gave consistent results for - PATHNAME, but not for SIMPLE-CONDITION.) - - Presumably the CLOS bootstrap process needs to iterate over - classoids (both structure- and condition-) to create CLOS classes - for them, so that this internal inconsistency does not arise? How - does this interact with the classoid hierarchy not perfectly - mirroring the class hierarchy? (e.g. INSTANCE?) + (fixed in sbcl-0.8.10.69) diff --git a/NEWS b/NEWS index 5bf1739..bc9379c 100644 --- a/NEWS +++ b/NEWS @@ -2476,6 +2476,9 @@ changes in sbcl-0.8.11 relative to sbcl-0.8.10: * fixed bug 321: define-method-combination argument lambda lists do not cause invalid code to be generated when &optional or &aux variables have default values. (reported by Bruno Haible) + * fixed bug 327: system subclasses of STRUCTURE-OBJECT or CONDITION + have CLOS classes; this appears also to have fixed reported + instability in stack exhaustion detection. * optimization: rearranged the expansion of various defining macros so that each expands into only one top-level form in a :LOAD-TOPLEVEL context; this appears to decrease fasl sizes by diff --git a/src/pcl/fixup.lisp b/src/pcl/fixup.lisp index e51da94..af0239f 100644 --- a/src/pcl/fixup.lisp +++ b/src/pcl/fixup.lisp @@ -25,6 +25,9 @@ (!fix-early-generic-functions) (compute-standard-slot-locations) +(dolist (s '(condition structure-object)) + (dohash (k v (classoid-subclasses (find-classoid s))) + (find-class (classoid-name k)))) (setq *boot-state* 'complete) (defun print-std-instance (instance stream depth) diff --git a/tests/mop.impure.lisp b/tests/mop.impure.lisp index d5116f9..e3c23f9 100644 --- a/tests/mop.impure.lisp +++ b/tests/mop.impure.lisp @@ -170,5 +170,10 @@ (assert (= (substandard-defgeneric 1 2) 3)) (assert (string= (substandard-defgeneric "1" "2") "12")) +(let* ((x (find-class 'pathname)) + (xs (class-direct-subclasses x))) + (assert (>= (length xs) 1)) + (assert (member (find-class 'logical-pathname) xs))) + ;;;; success (sb-ext:quit :unix-status 104) diff --git a/version.lisp-expr b/version.lisp-expr index 6989d69..c35ee82 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; 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.10.68" +"0.8.10.69"