From: Christophe R. <cr...@us...> - 2004-12-02 19:43:42
|
Update of /cvsroot/sbcl/sbcl/src/compiler/generic In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12338/src/compiler/generic Modified Files: vm-type.lisp Log Message: 0.8.17.17: Fix (UPGRADED-COMPLEX-PART-TYPE NIL) to return NIL ... fortunately we don't actually have to implement the (COMPLEX NIL) type, unlike with arrays; one cannot create a COMPLEX independent of its elements. Index: vm-type.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/vm-type.lisp,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- vm-type.lisp 4 Aug 2004 22:15:33 -0000 1.21 +++ vm-type.lisp 2 Dec 2004 19:43:32 -0000 1.22 @@ -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. |