X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fcoerce.lisp;h=576aba5965a36dc093ef0a295a71a9852ae10d0a;hb=43c1fa847c7a392e145f7d39b5e1ef2cef83e78c;hp=dfd208d1cb616531d45db4ae6ca9ba85065fb881;hpb=f569125f053885898e83203324a72e11c9de0f85;p=sbcl.git diff --git a/src/code/coerce.lisp b/src/code/coerce.lisp index dfd208d..576aba5 100644 --- a/src/code/coerce.lisp +++ b/src/code/coerce.lisp @@ -192,10 +192,23 @@ res)) ((csubtypep type (specifier-type 'list)) (if (vectorp object) - (vector-to-list* object) + (cond ((type= type (specifier-type 'list)) + (vector-to-list* object)) + ((type= type (specifier-type 'null)) + (if (= (length object) 0) + 'nil + (sequence-type-length-mismatch-error type + (length object)))) + ((csubtypep (specifier-type '(cons nil t)) type) + (if (> (length object) 0) + (vector-to-list* object) + (sequence-type-length-mismatch-error type 0))) + (t (sequence-type-too-hairy (type-specifier type)))) (coerce-error))) ((csubtypep type (specifier-type 'vector)) (typecase object + ;; FOO-TO-VECTOR* go through MAKE-SEQUENCE, so length + ;; errors are caught there. -- CSR, 2002-10-18 (list (list-to-vector* object output-type-spec)) (vector (vector-to-vector* object output-type-spec)) (t