X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fvm-type.lisp;h=9c50878187e5c5b0f0a7369dda9aeb39a968a73a;hb=ee3bfc5a989b5c0a1ea5a094e9541169ea2eb4ad;hp=a24de41a49da57c82633b85773b70a1f11ae766f;hpb=77360ee4a1f94c41b807be7ad0e8687199fceef1;p=sbcl.git diff --git a/src/compiler/generic/vm-type.lisp b/src/compiler/generic/vm-type.lisp index a24de41..9c50878 100644 --- a/src/compiler/generic/vm-type.lisp +++ b/src/compiler/generic/vm-type.lisp @@ -14,17 +14,19 @@ (in-package "SB!KERNEL") +(/show0 "vm-type.lisp 17") + (!begin-collecting-cold-init-forms) ;;;; 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)) ;;;; 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 @@ -70,7 +72,7 @@ ;;; 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) @@ -80,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) @@ -122,17 +125,21 @@ ;;; This function is called when the type code wants to find out how ;;; an array will actually be implemented. We set the -;;; Specialized-Element-Type to correspond to the actual +;;; SPECIALIZED-ELEMENT-TYPE to correspond to the actual ;;; specialization used in this implementation. (declaim (ftype (function (array-type) array-type) specialize-array-type)) (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* - ;; FIXME: Use *UNIVERSAL-TYPE* here? - (specifier-type 't)) + *universal-type*) ;; FIXME: Mightn't it be better to have ;; *SPECIALIZED-ARRAY-ELEMENT-TYPES* be stored as precalculated ;; SPECIFIER-TYPE results, instead of having to calculate @@ -163,7 +170,7 @@ (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)) @@ -175,9 +182,11 @@ ((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))) (!defun-from-collected-cold-init-forms !vm-type-cold-init) + +(/show0 "vm-type.lisp end of file")