From: Christophe R. <cr...@us...> - 2004-05-03 23:02:08
|
Update of /cvsroot/sbcl/sbcl/src/compiler/generic In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26644/src/compiler/generic Modified Files: vm-type.lisp Log Message: 0.8.10.9: Fix bugs in COMPLEX type specifier and UPGRADED-COMPLEX-PART-TYPE ... make them more tightly coupled; ... rearrange COMPLEX type translator so that it can use CTYPE-OF (and thus remove logic duplication) ... implement U-C-P-T in terms of (specifier-type `(complex ,x)) ... fix MEMBER type specifier not to use CTYPE-OF on complex members; ... add tests. Index: vm-type.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/generic/vm-type.lisp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- vm-type.lisp 5 Apr 2004 23:16:36 -0000 1.18 +++ vm-type.lisp 3 May 2004 23:01:29 -0000 1.19 @@ -137,6 +137,27 @@ (type-specifier (array-type-specialized-element-type (specifier-type `(array ,spec)))))) +(defun sb!xc:upgraded-complex-part-type (spec &optional environment) + #!+sb-doc + "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))))) + ;;; Return the most specific integer type that can be quickly checked that ;;; includes the given type. (defun containing-integer-type (subtype) |