0.7.13.pcl-class.1
[sbcl.git] / src / compiler / generic / vm-type.lisp
index 65561c9..9c50878 100644 (file)
@@ -24,9 +24,9 @@
 \f
 ;;;; implementation-dependent DEFTYPEs
 
-;;; Make DOUBLE-FLOAT a synonym for LONG-FLOAT, SINGLE-FLOAT for SHORT-FLOAT.
-;;; This is expanded before the translator gets a chance, so we will get
-;;; precedence.
+;;; Make DOUBLE-FLOAT a synonym for LONG-FLOAT, SINGLE-FLOAT for
+;;; SHORT-FLOAT. This is expanded before the translator gets a chance,
+;;; so we will get precedence.
 #!-long-float
 (setf (info :type :kind 'long-float) :defined)
 #!-long-float
@@ -82,7 +82,8 @@
 (defvar *specialized-array-element-types*)
 (!cold-init-forms
   (setf *specialized-array-element-types*
-       '(bit
+       '(nil
+         bit
          (unsigned-byte 2)
          (unsigned-byte 4)
          (unsigned-byte 8)
 (defun specialize-array-type (type)
   (let ((eltype (array-type-element-type type)))
     (setf (array-type-specialized-element-type type)
-         (if (eq eltype *wild-type*)
+         (if (or (eq eltype *wild-type*)
+                 ;; This is slightly dubious, but not as dubious as
+                 ;; assuming that the upgraded-element-type should be
+                 ;; equal to T, given the way that the AREF
+                 ;; DERIVE-TYPE optimizer works.  -- CSR, 2002-08-19
+                 (unknown-type-p eltype))
              *wild-type*
              (dolist (stype-name *specialized-array-element-types*
                                  *universal-type*)
      (if (type= type (specifier-type 'cons))
         'sb!c:check-cons
         nil))
-    (built-in-class
+    (built-in-classoid
      (if (type= type (specifier-type 'symbol))
         'sb!c:check-symbol
         nil))