0.8.0.24:
authorChristophe Rhodes <csr21@cam.ac.uk>
Sun, 1 Jun 2003 15:44:54 +0000 (15:44 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Sun, 1 Jun 2003 15:44:54 +0000 (15:44 +0000)
A couple of small fixes:
... make the raw-slot reffer/setters in the case of
UNSIGNED-BYTE raw type (when the accessor is just AREF) know
that they're dealing with a (SIMPLE-ARRAY (UNSIGNED-BYTE 32)
(*)), quietening the compiler a little.
... make a fallback constructor, not an optimized constructor,
for condition classes.  (reported by eightjean on #lisp IRC)

src/code/defstruct.lisp
src/pcl/ctor.lisp
version.lisp-expr

index e523eed..e4f0119 100644 (file)
 ;;;
 ;;; FIXME: This should use the data in *RAW-SLOT-DATA-LIST*.
 (defun structure-raw-slot-type-and-size (type)
-  (cond #+nil
-       (;; FIXME: For now we suppress raw slots, since there are various
-        ;; issues about the way that the cross-compiler handles them.
-        (not (boundp '*dummy-placeholder-to-stop-compiler-warnings*))
-        (values nil nil nil))
-       ((and (sb!xc:subtypep type '(unsigned-byte 32))
+  (cond ((and (sb!xc:subtypep type '(unsigned-byte 32))
              (multiple-value-bind (fixnum? fixnum-certain?)
                  (sb!xc:subtypep type 'fixnum)
                ;; (The extra test for FIXNUM-CERTAIN? here is
          (multiple-value-bind (scaled-dsd-index misalignment)
              (floor (dsd-index dsd) raw-n-words)
            (aver (zerop misalignment))
-           `(,raw-slot-accessor (,ref ,instance-name ,(dd-raw-index dd))
-                                ,scaled-dsd-index))))))
+           (let* ((raw-vector-bare-form
+                   `(,ref ,instance-name ,(dd-raw-index dd)))
+                  (raw-vector-form
+                   (if (eq raw-type 'unsigned-byte)
+                       (progn
+                         (aver (= raw-n-words 1))
+                         (aver (eq raw-slot-accessor 'aref))
+                         ;; FIXME: when the 64-bit world rolls
+                         ;; around, this will need to be reviewed,
+                         ;; along with the whole RAW-SLOT thing.
+                         `(truly-the (simple-array (unsigned-byte 32) (*))
+                                     ,raw-vector-bare-form))
+                       raw-vector-bare-form)))
+             `(,raw-slot-accessor ,raw-vector-form ,scaled-dsd-index)))))))
 
 ;;; Return source transforms for the reader and writer functions of
 ;;; the slot described by DSD. They should be inline expanded, but
index 0e094b5..0ef967b 100644 (file)
     ;; together with the system-defined ones in what
     ;; COMPUTE-APPLICABLE-METHODS returns.
     (or (and (not (structure-class-p class))
+            (not (condition-class-p class))
             (null (cdr make-instance-methods))
             (null (cdr allocate-instance-methods))
             (null (check-initargs-1 class (plist-keys (ctor-initargs ctor))
index 88827d4..762b862 100644 (file)
@@ -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.0.23"
+"0.8.0.24"