X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsrctran.lisp;h=997e50b12083b32fe41ed9831f1a6398203b9ef4;hb=a6661cdaac013752213d381aa469cb0919a6ce4c;hp=82be1f24ed18d002fa8f4ce9072f34839d92366c;hpb=123a8dd97ab99b5e205b6768f6389d7cc7c12656;p=sbcl.git diff --git a/src/compiler/srctran.lisp b/src/compiler/srctran.lisp index 82be1f2..997e50b 100644 --- a/src/compiler/srctran.lisp +++ b/src/compiler/srctran.lisp @@ -176,12 +176,11 @@ (loop for (arg next) on args while next do - (let ((lvar-type (lvar-type arg))) - (unless (or (csubtypep cons-type lvar-type) - (csubtypep null-type lvar-type)) - (assert-lvar-type arg list-type - (lexenv-policy *lexenv*)) - (return *empty-type*)))) + (when (eq (type-intersection (lvar-type arg) list-type) + *empty-type*) + (assert-lvar-type arg list-type + (lexenv-policy *lexenv*)) + (return *empty-type*))) (loop with all-nil = t for (arg next) on args for lvar-type = (lvar-type arg) @@ -189,7 +188,7 @@ do (cond ;; Cons in the middle guarantees the result will be a cons - ((csubtypep lvar-type cons-type) + ((not (csubtypep null-type lvar-type)) (return cons-type)) ;; If all but the last are NIL the type of the last arg ;; can be used