X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fearly-type.lisp;h=53137bacba2d2b04c1ba8a13b60457c90c0f2f66;hb=f3f1143a09fa2e50eec13614cc6b0306b2b11fad;hp=56aac8c3691dcd7559e3d95baa2359e6ec653be7;hpb=d3c56c291d4d4eff8c3ec234d5ed904fe5b55df4;p=sbcl.git diff --git a/src/code/early-type.lisp b/src/code/early-type.lisp index 56aac8c..53137ba 100644 --- a/src/code/early-type.lisp +++ b/src/code/early-type.lisp @@ -460,6 +460,24 @@ (eq cdr-type *empty-type*)) *empty-type* (%make-cons-type car-type cdr-type))) + +(defun cons-type-length-info (type) + (declare (type cons-type type)) + (do ((min 1 (1+ min)) + (cdr (cons-type-cdr-type type) (cons-type-cdr-type cdr))) + ((not (cons-type-p cdr)) + (cond + ((csubtypep cdr (specifier-type 'null)) + (values min t)) + ((csubtypep *universal-type* cdr) + (values min nil)) + ((type/= (type-intersection (specifier-type 'cons) cdr) *empty-type*) + (values min nil)) + ((type/= (type-intersection (specifier-type 'null) cdr) *empty-type*) + (values min t)) + (t (values min :maybe)))) + ())) + ;;;; type utilities