0.8.0.78.vector-nil-string.8:
[sbcl.git] / src / compiler / generic / vm-type.lisp
index 4a1b4fa..cde035f 100644 (file)
 
 (in-package "SB!KERNEL")
 
-(/show0 "vm-type.lisp 17")
-
-(!begin-collecting-cold-init-forms)
-\f
 ;;;; FIXME: I'm not sure where to put this. -- WHN 19990817
 
-(deftype sb!vm:word () `(unsigned-byte ,sb!vm:word-bits))
+(deftype sb!vm:word () `(unsigned-byte ,sb!vm:n-word-bits))
 \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
 ;;; internal time format. (Note: not a FIXNUM, ouch..)
 (sb!xc:deftype internal-time () 'unsigned-byte)
 
-(sb!xc:deftype bignum-element-type () `(unsigned-byte ,sb!vm:word-bits))
+(sb!xc:deftype bignum-element-type () `(unsigned-byte ,sb!vm:n-word-bits))
 (sb!xc:deftype bignum-type () 'bignum)
 (sb!xc:deftype bignum-index () 'index)
 \f
 ;;;; hooks into the type system
 
-;;; the kinds of specialized array that actually exist in this implementation
-(defvar *specialized-array-element-types*)
-(!cold-init-forms
-  (setf *specialized-array-element-types*
-       '(bit
-         (unsigned-byte 2)
-         (unsigned-byte 4)
-         (unsigned-byte 8)
-         (unsigned-byte 16)
-         (unsigned-byte 32)
-         (signed-byte 8)
-         (signed-byte 16)
-         (signed-byte 30)
-         (signed-byte 32)
-         (complex single-float)
-         (complex double-float)
-         #!+long-float (complex long-float)
-         base-char
-         single-float
-         double-float
-         #!+long-float long-float)))
-
 (sb!xc:deftype unboxed-array (&optional dims)
   (collect ((types (list 'or)))
     (dolist (type *specialized-array-element-types*)
 (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*)
                ;; them on the fly this way? (Call the new array
                ;; *SPECIALIZED-ARRAY-ELEMENT-SPECIFIER-TYPES* or something..)
                (let ((stype (specifier-type stype-name)))
+                 (aver (not (unknown-type-p stype)))
                  (when (csubtypep eltype stype)
                    (return stype))))))
     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))
           ((type= type (specifier-type '(unsigned-byte 32)))
            'sb!c:check-unsigned-byte-32)
           (t nil)))
-    (function-type
-     'sb!c:check-function)
+    (fun-type
+     'sb!c:check-fun)
     (t
      nil)))
-\f
-(!defun-from-collected-cold-init-forms !vm-type-cold-init)
-
-(/show0 "vm-type.lisp end of file")