X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcode%2Flate-type.lisp;h=abe32f2b7aae43efe9a669a9b0df18bf7b95a9fb;hb=830db48da09c88c0e91b11e2991d21b2a1af2579;hp=bc996436001002f84d21a5344e8aad1ea0714f7c;hpb=0aecc2b20142e08068c3434273500131cb13fe2d;p=sbcl.git diff --git a/src/code/late-type.lisp b/src/code/late-type.lisp index bc99643..abe32f2 100644 --- a/src/code/late-type.lisp +++ b/src/code/late-type.lisp @@ -849,7 +849,6 @@ (eql yx :call-other-method)) *empty-type*) (t - (aver (and (not xy) (not yx))) ; else handled above nil)))))))) (defun-cached (type-intersection2 :hash-function type-cache-hash @@ -2119,7 +2118,8 @@ used for a COMPLEX component.~:@>" nil)) (t (if (<= most-negative-single-float cx most-positive-single-float) - (coerce cx format) + ;; FIXME: bug #389 + (coerce cx (or format 'single-float)) nil))))) (if (consp x) (list res) res))))) nil)) @@ -2999,11 +2999,15 @@ used for a COMPLEX component.~:@>" ;; more general case of the above, but harder to compute ((progn (setf car-not1 (type-negation car-type1)) - (not (csubtypep car-type2 car-not1))) + (multiple-value-bind (yes win) + (csubtypep car-type2 car-not1) + (and (not yes) win))) (frob-car car-type1 car-type2 cdr-type1 cdr-type2 car-not1)) ((progn (setf car-not2 (type-negation car-type2)) - (not (csubtypep car-type1 car-not2))) + (multiple-value-bind (yes win) + (csubtypep car-type1 car-not2) + (and (not yes) win))) (frob-car car-type2 car-type1 cdr-type2 cdr-type1 car-not2)) ;; Don't put these in -- consider the effect of taking the ;; union of (CONS (INTEGER 0 2) (INTEGER 5 7)) and