0.8.9.6.netbsd.2:
[sbcl.git] / src / code / early-type.lisp
index 56aac8c..6f34191 100644 (file)
 
 (!begin-collecting-cold-init-forms)
 
-;;; Has the type system been properly initialized? (I.e. is it OK to
-;;; use it?)
-(defvar *type-system-initialized* #+sb-xc-host nil) ; (set in cold load)
-\f
 ;;;; representations of types
 
 ;;; A HAIRY-TYPE represents anything too weird to be described
          (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))))
+    ()))
+       
 \f
 ;;;; type utilities