0.6.10.18:
authorWilliam Harold Newman <william.newman@airmail.net>
Sun, 18 Feb 2001 17:20:21 +0000 (17:20 +0000)
committerWilliam Harold Newman <william.newman@airmail.net>
Sun, 18 Feb 2001 17:20:21 +0000 (17:20 +0000)
MNA bugfixes from sbcl-devel 2001-02-14..
fixed BUG 34 (concerning byte-comp.lisp)
fixed error reporting accessing a missing PCL slot
increased *COMPILER-ERROR-FOO* defaults (by even more than MNA
proposed)

BUGS
NEWS
src/compiler/byte-comp.lisp
src/pcl/slots.lisp
version.lisp-expr

diff --git a/BUGS b/BUGS
index a464bdb..eb72b94 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -335,42 +335,6 @@ returning an array as first value always.
   And as long as we're wishing, it would be awfully nice if INSPECT could
   also report on closures, telling about the values of the bound variables.
 
-34:
-  WHN test case: Compile this file:
-    (eval-when (:compile-toplevel :load-toplevel :execute)
-      (defclass a-class () (a)))
-    (defconstant +a-constant+ (make-instance 'a-class))
-    (defconstant +another-constant+ (vector +a-constant+))
-  as reported by Robert Strandh on the CMU CL mailing list 12 Jun 2000:
-    $ cat xx.lisp
-    (defconstant +a-constant+ (make-instance 'a-class))
-    (defconstant +another-constant+ (vector +a-constant+))
-    $ lisp
-    CMU Common Lisp release x86-linux 2.4.19  8 February 2000 build 456,
-    running on
-    bobby
-    Send bug reports and questions to your local CMU CL maintainer,
-    or to pvaneynd@debian.org
-    or to cmucl-help@cons.org. (prefered)
-    type (help) for help, (quit) to exit, and (demo) to see the demos
-    Loaded subsystems:
-      Python 1.0, target Intel x86
-      CLOS based on PCL version:  September 16 92 PCL (f)
-    * (defclass a-class () ())
-    #<STANDARD-CLASS A-CLASS {48027BD5}>
-    * (compile-file "xx.lisp")
-    Python version 1.0, VM version Intel x86 on 12 JUN 00 08:12:55 am.
-    Compiling:
-    /home/strandh/Research/Functional/Common-Lisp/CLIM/Development/McCLIM
-    /xx.lisp 12 JUN 00 07:47:14 am
-    Compiling Load Time Value of (PCL::GET-MAKE-INSTANCE-FUNCTION-SYMBOL
-    '(A-CLASS NIL NIL)):
-    Byte Compiling Top-Level Form:
-    Error in function C::DUMP-STRUCTURE:  Attempt to dump invalid
-    structure:
-      #<A-CLASS {4803A5B5}>
-    How did this happen?
-
 35:
   The compiler assumes that any time a function of declared FTYPE
   doesn't signal an error, its arguments were of the declared type.
@@ -847,6 +811,17 @@ Error in function C::GET-LAMBDA-TO-COMPILE:
 80:
   (fixed early Feb 2001 by MNA)
 
+81:
+  As reported by wbuss@TELDA.NET (Wolfhard Buss) on cmucl-help
+  2001-02-14, 
+    According to CLHS
+        (loop with (a . b) of-type float = '(0.0 . 1.0)
+          and (c . d) of-type float = '(2.0 . 3.0)
+          return (list a b c d))
+    should evaluate to (0.0 1.0 2.0 3.0). cmucl-18c disagrees and
+    invokes the debugger: "B is not of type list".
+  SBCL does the same thing.
+
 
 KNOWN BUGS RELATED TO THE IR1 INTERPRETER
 
diff --git a/NEWS b/NEWS
index 8c22dbd..dc3063e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -642,27 +642,35 @@ changes in sbcl-0.6.10 relative to sbcl-0.6.9:
   some time ago.
 
 changes in sbcl-0.6.11 relative to sbcl-0.6.10:
+* bug 34 fixed by Martin Atzmueller: dumping/loading instances works
+  better
+* fixed bug 40: TYPEP, SUBTYPEP, UPGRADED-ARRAY-ELEMENT-TYPE, 
+  and UPGRADED-COMPLEX-PART-TYPE now work better with of compound
+  types built from undefined types, e.g. '(VECTOR SOME-UNDEF-TYPE).
 * The Gray subclassable streams extension now works, thanks to a 
   patch from Martin Atzmueller.
+* DESCRIBE now works on structure objects again.
+* Compiler output is now more verbose, with messages truncated
+  later than before. (There should be some supported way for users
+  to override the default verbosity, but I haven't decided how to 
+  provide it yet, so this behavior is still controlled by the internal
+  SB-C::*COMPILER-ERROR-PRINT-FOO* variables in
+  src/compiler/ir1util.lisp.)
 * The full LOAD-FOREIGN extension (not just the primitive
   LOAD-FOREIGN-1) now works, thanks to a patch from Martin Atzmueller.
 * The default behavior of RUN-PROGRAM has changed. Now, unlike CMU CL
   but like most other programs, it defaults to copying the Unix
   environment from the original process instead of starting the
   new process in an empty environment.
-* fixed bug 40: TYPEP, SUBTYPEP, UPGRADED-ARRAY-ELEMENT-TYPE, 
-  and UPGRADED-COMPLEX-PART-TYPE now work better with of compound
-  types built from undefined types, e.g. '(VECTOR SOME-UNDEF-TYPE).
 * Extensions which manipulate the Unix environment now support
   an :ENVIRONMENT keyword option which doesn't smash case or 
   do other bad things. The CMU-CL-style :ENV option is retained
   for porting convenience.
 * LOAD-FOREIGN (and LOAD-1-FOREIGN) now support logical pathnames,
   as per Daniel Barlow's suggestion and Martin Atzmueller's patch
-* DESCRIBE now works on structure objects again.
 * Fasl file format version numbers have increased again, because
-  support for the Gray streams extension changes the format of the
-  system's stream objects.
+  support for the Gray streams extension changes the layout of the
+  system's STREAM objects.
 
 planned incompatible changes in 0.7.x:
 * The debugger prompt sequence now goes "5]", "5[2]", "5[3]", etc.
index 25b72f1..196ae9b 100644 (file)
         (t
          (etypecase leaf
            (constant
-            (output-push-constant-leaf segment leaf))
+             (cond ((legal-immediate-constant-p leaf)
+                     (output-push-constant-leaf segment leaf))
+                   (t
+                     (output-push-constant segment (leaf-name leaf))
+                     (output-do-inline-function segment 'symbol-value))))
            (clambda
             (let* ((refered-env (lambda-environment leaf))
                    (closure (environment-closure refered-env)))
index a7bcb6d..5d2e4de 100644 (file)
@@ -29,7 +29,7 @@
   ((instance :reader unbound-slot-instance :initarg :instance)
    (slot :reader unbound-slot-slot :initarg :slot))
   (:report (lambda(condition stream)
-            (format stream "The slot ~S is unbound in the object ~S"
+            (format stream "The slot ~S is unbound in the object ~S."
                     (unbound-slot-slot condition)
                     (unbound-slot-instance condition)))))
 
   (let* ((class (class-of object))
         (slot-definition (find-slot-definition class slot-name)))
     (if (null slot-definition)
-       (slot-missing class object slot-name 'setf)
+       (slot-missing class object slot-name 'setf new-value)
        (setf (slot-value-using-class class object slot-definition)
              new-value))))
 
 (setf (gdefinition 'set-slot-value-normal) #'set-slot-value)
 
-(define-compiler-macro set-slot-value (object-form slot-name-form new-value-form)
+(define-compiler-macro set-slot-value (object-form
+                                      slot-name-form
+                                      new-value-form)
   (if (and (constantp slot-name-form)
           (let ((slot-name (eval slot-name-form)))
             (and (symbolp slot-name) (symbol-package slot-name))))
                   (cond ((std-instance-p object)
                          ;; FIXME: EQ T (WRAPPER-STATE ..) is better done
                          ;; through INVALID-WRAPPER-P (here and below).
-                         (unless (eq 't (wrapper-state (std-instance-wrapper object)))
+                         (unless (eq t (wrapper-state (std-instance-wrapper
+                                                       object)))
                            (check-wrapper-validity object))
                          (%instance-ref (std-instance-slots object) location))
                         ((fsc-instance-p object)
-                         (unless (eq 't (wrapper-state (fsc-instance-wrapper object)))
+                         (unless (eq t (wrapper-state (fsc-instance-wrapper
+                                                       object)))
                            (check-wrapper-validity object))
                          (%instance-ref (fsc-instance-slots object) location))
                         (t (error "unrecognized instance type"))))
                  (cons
                   (cdr location))
                  (t
-                  (error "The slot ~S has neither :INSTANCE nor :CLASS allocation, ~@
-                          so it can't be read by the default ~S method."
+                  (error "~@<The slot ~S has neither :INSTANCE nor :CLASS ~
+                           allocation, so it can't be read by the default ~
+                           ~S method.~@:>"
                          slotd 'slot-value-using-class)))))
     (if (eq value +slot-unbound+)
        (slot-unbound class object (slot-definition-name slotd))
     (typecase location
       (fixnum
        (cond ((std-instance-p object)
-             (unless (eq 't (wrapper-state (std-instance-wrapper object)))
+             (unless (eq t (wrapper-state (std-instance-wrapper object)))
                (check-wrapper-validity object))
-             (setf (%instance-ref (std-instance-slots object) location) new-value))
+             (setf (%instance-ref (std-instance-slots object) location)
+                   new-value))
             ((fsc-instance-p object)
-             (unless (eq 't (wrapper-state (fsc-instance-wrapper object)))
+             (unless (eq t (wrapper-state (fsc-instance-wrapper object)))
                (check-wrapper-validity object))
-             (setf (%instance-ref (fsc-instance-slots object) location) new-value))
+             (setf (%instance-ref (fsc-instance-slots object) location)
+                   new-value))
             (t (error "unrecognized instance type"))))
       (cons
        (setf (cdr location) new-value))
       (t
-       (error "The slot ~S has neither :INSTANCE nor :CLASS allocation, ~@
-                          so it can't be written by the default ~S method."
+       (error "~@<The slot ~S has neither :INSTANCE nor :CLASS allocation, ~
+                  so it can't be written by the default ~S method.~:@>"
              slotd '(setf slot-value-using-class))))))
 
 (defmethod slot-boundp-using-class
         (value (typecase location
                  (fixnum
                   (cond ((std-instance-p object)
-                         (unless (eq 't (wrapper-state (std-instance-wrapper object)))
+                         (unless (eq t (wrapper-state (std-instance-wrapper
+                                                       object)))
                            (check-wrapper-validity object))
                          (%instance-ref (std-instance-slots object) location))
                         ((fsc-instance-p object)
-                         (unless (eq 't (wrapper-state (fsc-instance-wrapper object)))
+                         (unless (eq t (wrapper-state (fsc-instance-wrapper
+                                                       object)))
                            (check-wrapper-validity object))
                          (%instance-ref (fsc-instance-slots object) location))
                         (t (error "unrecognized instance type"))))
                  (cons
                   (cdr location))
                  (t
-                  (error "The slot ~S has neither :INSTANCE nor :CLASS allocation, ~@
-                          so it can't be read by the default ~S method."
+                  (error "~@<The slot ~S has neither :INSTANCE nor :CLASS ~
+                           allocation, so it can't be read by the default ~S ~
+                           method.~@:>"
                          slotd 'slot-boundp-using-class)))))
     (not (eq value +slot-unbound+))))
 
     (typecase location
       (fixnum
        (cond ((std-instance-p object)
-             (unless (eq 't (wrapper-state (std-instance-wrapper object)))
+             (unless (eq t (wrapper-state (std-instance-wrapper object)))
                (check-wrapper-validity object))
              (setf (%instance-ref (std-instance-slots object) location)
                    +slot-unbound+))
             ((fsc-instance-p object)
-             (unless (eq 't (wrapper-state (fsc-instance-wrapper object)))
+             (unless (eq t (wrapper-state (fsc-instance-wrapper object)))
                (check-wrapper-validity object))
              (setf (%instance-ref (fsc-instance-slots object) location)
                    +slot-unbound+))
       (cons
        (setf (cdr location) +slot-unbound+))
       (t
-       (error "The slot ~S has neither :INSTANCE nor :CLASS allocation, ~@
-                          so it can't be written by the default ~S method."
+       (error "~@<The slot ~S has neither :INSTANCE nor :CLASS allocation, ~
+              so it can't be written by the default ~S method.~@:>"
              slotd 'slot-makunbound-using-class))))
   nil)
 
 \f
 (defmethod slot-missing
           ((class t) instance slot-name operation &optional new-value)
-  (error "When attempting to ~A,~%the slot ~S is missing from the object ~S."
+  (error "~@<When attempting to ~A, the slot ~S is missing from the ~
+          object ~S.~@:>"
         (ecase operation
           (slot-value "read the slot's value (slot-value)")
           (setf (format nil
index 5b8413c..4149a54 100644 (file)
@@ -15,4 +15,4 @@
 ;;; versions, and a string like "0.6.5.12" is used for versions which
 ;;; aren't released but correspond only to CVS tags or snapshots.
 
-"0.6.10.17"
+"0.6.10.18"