collect `(array ,(sb-vm:saetp-specifier x)))))
=> NIL, T (when it should be T, T)
-307: "Problem in obsolete instance protocol"
- (reported by Bruno Haible as the fourth problem in sbcl-devel
- "installing sbcl" 2004-04-15)
-
- (progn
- (defclass foo92b (foo92a) ((s :initarg :s)))
- (defclass foo92a () ())
- (let ((x (make-instance 'foo92b :s 5)) (update-counter 0))
- (defclass foo92b (foo92a) ((s) (s1) (s2))) ; still subclass of foo92a
- (slot-value x 's)
- (defmethod update-instance-for-redefined-class
- ((object foo92b) added-slots discarded-slots plist &rest initargs)
- (incf update-counter))
- (make-instances-obsolete 'foo92a)
- (slot-value x 's)
- update-counter))
- => 0 ; should be 1
-
308: "Characters without names"
(reported by Bruno Haible sbcl-devel "character names are missing"
2004-04-19)
;;; as non-exponential notation, using the method described in the
;;; Steele and White paper.
+ See also CSR sbcl-devel with an implementation of Berger and
+ Dybvig's algorithm for printing and a fix for reading.
+
311: "Tokeniser not thread-safe"
(see also Robert Marlow sbcl-help "Multi threaded read chucking a
spak" 2004-04-19)
* fixed bug 313: source-transform for <fun-name> was erroneously
applied to a call of a value of a variable with name <fun-name>.
(reported by Antonio Menezes Leitao)
+ * fixed bug 307: The obsolete instance protocol ensures that
+ subclasses are properly obsoleted. (thanks to Nikodemus Siivola)
* on X86 fixed bug 298, revealed by Paul F. Dietz' test suite: SBCL
can remove dead unknown-values globs from the middle of the stack.
* added a new restart to *BREAK-ON-SIGNALS* handling to make it
easier to resume long computations after using *BREAK-ON-SIGNALS*
- to diagnose and fix failures (thanks to Nikodemus Siivola)
+ to diagnose and fix failures. (thanks to Nikodemus Siivola)
planned incompatible changes in 0.8.x:
* (not done yet, but planned:) When the profiling interface settles
;; INSTANCE's class. See also the comment above
;; FORCE-CACHE-FLUSHES. Paul Dietz has test cases for this.
((member t)
- (let ((class (class-of instance)))
- (force-cache-flushes class)
- (class-wrapper class)))
+ (force-cache-flushes (class-of instance))
+ (check-wrapper-validity instance))
(cons
(ecase (car state)
(:flush
(with-pcl-lock
(update-lisp-class-layout class nwrapper)
(setf (slot-value class 'wrapper) nwrapper)
- (invalidate-wrapper owrapper :flush nwrapper))))))
+ ;; Use :OBSOLETE instead of :FLUSH if any superclass has
+ ;; been obsoleted.
+ (if (find-if (lambda (x)
+ (and (consp x) (eq :obsolete (car x))))
+ (layout-inherits owrapper)
+ :key #'layout-invalid)
+ (invalidate-wrapper owrapper :obsolete nwrapper)
+ (invalidate-wrapper owrapper :flush nwrapper)))))))
(defun flush-cache-trap (owrapper nwrapper instance)
(declare (ignore owrapper))
((size :initarg :size :initform 2 :allocation :class)))
(assert (= (slot-value i 'size) 1)))
+;;; reported by Bruno Haible sbcl-devel 2004-04-15
+(defclass superclass-born-to-be-obsoleted () (a))
+(defclass subclass-born-to-be-obsoleted (superclass-born-to-be-obsoleted) ())
+(defparameter *born-to-be-obsoleted*
+ (make-instance 'subclass-born-to-be-obsoleted))
+(defparameter *born-to-be-obsoleted-obsoleted* nil)
+(defmethod update-instance-for-redefined-class
+ ((o subclass-born-to-be-obsoleted) a d pl &key)
+ (setf *born-to-be-obsoleted-obsoleted* t))
+(make-instances-obsolete 'superclass-born-to-be-obsoleted)
+(slot-boundp *born-to-be-obsoleted* 'a)
+(assert *born-to-be-obsoleted-obsoleted*)
+
+;;; additional test suggested by Bruno Haible sbcl-devel 2004-04-21
+(defclass super-super-obsoleted () (a))
+(defclass super-obsoleted-1 (super-super-obsoleted) ())
+(defclass super-obsoleted-2 (super-super-obsoleted) ())
+(defclass obsoleted (super-obsoleted-1 super-obsoleted-2) ())
+(defparameter *obsoleted* (make-instance 'obsoleted))
+(defparameter *obsoleted-counter* 0)
+(defmethod update-instance-for-redefined-class ((o obsoleted) a d pl &key)
+ (incf *obsoleted-counter*))
+(make-instances-obsolete 'super-super-obsoleted)
+(slot-boundp *obsoleted* 'a)
+(assert (= *obsoleted-counter* 1))
+
;;;; success
(sb-ext:quit :unix-status 104)
;;; For one of the interupt-thread tests, we want a foreign function
;;; that does not make syscalls
-(with-open-file (o "threads-foreign.c" :direction :output)
+(with-open-file (o "threads-foreign.c" :direction :output :if-exists :supersede)
(format o "void loop_forever() { while(1) ; }~%"))
(sb-ext:run-program
"cc"
;;; 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.6"
+"0.8.10.7"