Properly check the types of arguments, instead of testing for subtypes
or supertypes of LIST, check for arguments to be subtypes of NULL or CONS.
Reported by Jerry James.
changes relative to sbcl-1.1.8:
* enchancement: disassemble now annotates some previously missing static
functions, like LENGTH.
changes relative to sbcl-1.1.8:
* enchancement: disassemble now annotates some previously missing static
functions, like LENGTH.
+ * bug fix: problems with NCONC type derivation (reported by Jerry James).
* optimization: calls to static functions on x86-64 use less instructions.
* optimization: compute encode-universal-time at compile time when possible.
* optimization: when referencing internal functions as #'x, don't go through
* optimization: calls to static functions on x86-64 use less instructions.
* optimization: compute encode-universal-time at compile time when possible.
* optimization: when referencing internal functions as #'x, don't go through
while next
do
(let ((lvar-type (lvar-type arg)))
while next
do
(let ((lvar-type (lvar-type arg)))
- (unless (or (csubtypep list-type lvar-type)
- (csubtypep lvar-type list-type)
- ;; Check for NIL specifically, because
- ;; SYMBOL or ATOM won't satisfie the above
+ (unless (or (csubtypep cons-type lvar-type)
(csubtypep null-type lvar-type))
(assert-lvar-type arg list-type
(lexenv-policy *lexenv*))
(csubtypep null-type lvar-type))
(assert-lvar-type arg list-type
(lexenv-policy *lexenv*))
(lambda (x y) (nconc x (the list y) x)) t
(lambda (x y) (nconc (the atom x) y)) t
(lambda (x y) (nconc (the (or null (eql 10)) x) y)) t
(lambda (x y) (nconc x (the list y) x)) t
(lambda (x y) (nconc (the atom x) y)) t
(lambda (x y) (nconc (the (or null (eql 10)) x) y)) t
+ (lambda (x y) (nconc (the (or cons vector) x) y)) t
+ (lambda (x y) (nconc (the sequence x) y)) t
(lambda (x y) (print (length y)) (append x y)) sequence)))
(loop for (function result-type) on test-cases by #'cddr
do (assert (equal (car (cdaddr (sb-kernel:%simple-fun-type
(lambda (x y) (print (length y)) (append x y)) sequence)))
(loop for (function result-type) on test-cases by #'cddr
do (assert (equal (car (cdaddr (sb-kernel:%simple-fun-type