X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fvm-type.lisp;h=85c1b0b8af7b94b031a66ae7429c36e13e5bb4e3;hb=b63c4fb9b98fa8188e17ba926e150ba417a74635;hp=6c9658ed18275567ebd78bf19b801e28d773a600;hpb=ace140856e6b3f92bb06597092a59753f1e59142;p=sbcl.git diff --git a/src/compiler/generic/vm-type.lisp b/src/compiler/generic/vm-type.lisp index 6c9658e..85c1b0b 100644 --- a/src/compiler/generic/vm-type.lisp +++ b/src/compiler/generic/vm-type.lisp @@ -145,21 +145,24 @@ "Return the element type of the most specialized COMPLEX number type that can hold parts of type SPEC." (declare (ignore environment)) - (if (unknown-type-p (specifier-type spec)) - (error "undefined type: ~S" spec) - (let ((ctype (specifier-type `(complex ,spec)))) - (cond - ((eq ctype *empty-type*) '(eql 0)) - ((csubtypep ctype (specifier-type '(complex single-float))) - 'single-float) - ((csubtypep ctype (specifier-type '(complex double-float))) - 'double-float) - #!+long-float - ((csubtypep ctype (specifier-type '(complex long-float))) - 'long-float) - ((csubtypep ctype (specifier-type '(complex rational))) - 'rational) - (t 'real))))) + (let ((type (specifier-type spec))) + (cond + ((eq type *empty-type*) nil) + ((unknown-type-p type) (error "undefined type: ~S" spec)) + (t + (let ((ctype (specifier-type `(complex ,spec)))) + (cond + ((eq ctype *empty-type*) '(eql 0)) + ((csubtypep ctype (specifier-type '(complex single-float))) + 'single-float) + ((csubtypep ctype (specifier-type '(complex double-float))) + 'double-float) + #!+long-float + ((csubtypep ctype (specifier-type '(complex long-float))) + 'long-float) + ((csubtypep ctype (specifier-type '(complex rational))) + 'rational) + (t 'real))))))) ;;; Return the most specific integer type that can be quickly checked that ;;; includes the given type.