X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fearly-type.lisp;h=43394ffa6d9e5a571897202d0ef1736a4745aab2;hb=50f728671defadb8f7b1e8691c984cb0e6aba17c;hp=ae5dbd66d3097f24d32433997ed078fb0174e9f3;hpb=58ff25d134554f86b15d1978ae21861ccbe70f3d;p=sbcl.git diff --git a/src/code/early-type.lisp b/src/code/early-type.lisp index ae5dbd6..43394ff 100644 --- a/src/code/early-type.lisp +++ b/src/code/early-type.lisp @@ -195,6 +195,11 @@ (t ;; no canonicalization necessary (values low high))) + (when (and (eq class 'rational) + (integerp canonical-low) + (integerp canonical-high) + (= canonical-low canonical-high)) + (setf class 'integer)) (%make-numeric-type :class class :format format :complexp complexp @@ -302,17 +307,22 @@ ;; possibly elsewhere, we slam all CONS-TYPE ;; objects into canonical form w.r.t. this ;; equivalence at creation time. - make-cons-type (car-raw-type - cdr-raw-type - &aux - (car-type (type-*-to-t car-raw-type)) - (cdr-type (type-*-to-t cdr-raw-type)))) + %make-cons-type (car-raw-type + cdr-raw-type + &aux + (car-type (type-*-to-t car-raw-type)) + (cdr-type (type-*-to-t cdr-raw-type)))) (:copier nil)) ;; the CAR and CDR element types (to support ANSI (CONS FOO BAR) types) ;; ;; FIXME: Most or all other type structure slots could also be :READ-ONLY. (car-type (missing-arg) :type ctype :read-only t) (cdr-type (missing-arg) :type ctype :read-only t)) +(defun make-cons-type (car-type cdr-type) + (if (or (eq car-type *empty-type*) + (eq cdr-type *empty-type*)) + *empty-type* + (%make-cons-type car-type cdr-type))) ;;;; type utilities @@ -334,15 +344,15 @@ ((and (not (eq spec u)) (info :type :builtin spec))) ((eq (info :type :kind spec) :instance) - (sb!xc:find-class spec)) - ((typep spec 'class) + (find-classoid spec)) + ((typep spec 'classoid) ;; There doesn't seem to be any way to translate ;; (TYPEP SPEC 'BUILT-IN-CLASS) into something which can be ;; executed on the host Common Lisp at cross-compilation time. #+sb-xc-host (error "stub: (TYPEP SPEC 'BUILT-IN-CLASS) on xc host") - (if (typep spec 'built-in-class) - (or (built-in-class-translation spec) spec) + (if (typep spec 'built-in-classoid) + (or (built-in-classoid-translation spec) spec) spec)) (t (let* (;; FIXME: This automatic promotion of FOO-style