X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fearly-type.lisp;h=0af428157eacbfe6d067541c25d03492e2381b45;hb=ab6263cd50869be699c7afea271d626f83a5a27d;hp=2eea09772a3a53b5bd43300c2e7238d96acebbd0;hpb=67d2b80e478824a46317419f076ab1f6b020f6b1;p=sbcl.git diff --git a/src/code/early-type.lisp b/src/code/early-type.lisp index 2eea097..0af4281 100644 --- a/src/code/early-type.lisp +++ b/src/code/early-type.lisp @@ -24,7 +24,7 @@ (defstruct (hairy-type (:include ctype (class-info (type-class-or-lose 'hairy)) (enumerable t) - (might-contain-other-types? t)) + (might-contain-other-types-p t)) (:copier nil) #!+cmu (:pure nil)) ;; the Common Lisp type-specifier of the type we represent @@ -58,7 +58,9 @@ (defstruct (values-type (:include args-type (class-info (type-class-or-lose 'values))) + (:constructor %make-values-type) (:copier nil))) +(define-cached-synonym make-values-type) (!define-type-class values) @@ -207,6 +209,7 @@ ;;; things such as SIMPLE-STRING. (defstruct (array-type (:include ctype (class-info (type-class-or-lose 'array))) + (:constructor %make-array-type) (:copier nil)) ;; the dimensions of the array, or * if unspecified. If a dimension ;; is unspecified, it is *. @@ -217,6 +220,7 @@ (element-type (missing-arg) :type ctype) ;; the element type as it is specialized in this implementation (specialized-element-type *wild-type* :type ctype)) +(define-cached-synonym make-array-type) ;;; A MEMBER-TYPE represent a use of the MEMBER type specifier. We ;;; bother with this at this level because MEMBER types are fairly @@ -232,7 +236,7 @@ ;;; A COMPOUND-TYPE is a type defined out of a set of types, the ;;; common parent of UNION-TYPE and INTERSECTION-TYPE. (defstruct (compound-type (:include ctype - (might-contain-other-types? t)) + (might-contain-other-types-p t)) (:constructor nil) (:copier nil)) (types nil :type list :read-only t)) @@ -248,6 +252,7 @@ (class-info (type-class-or-lose 'union))) (:constructor %make-union-type (enumerable types)) (:copier nil))) +(define-cached-synonym make-union-type) ;;; An INTERSECTION-TYPE represents a use of the AND type specifier ;;; which we couldn't canonicalize to something simpler. Canonical form: @@ -309,7 +314,7 @@ (logand (sxhash x) #x3FF)) :hash-bits 10 :init-wrapper !cold-init-forms) - ((orig eq)) + ((orig equal)) (let ((u (uncross orig))) (or (info :type :builtin u) (let ((spec (type-expand u))) @@ -359,6 +364,12 @@ (error "VALUES type illegal in this context:~% ~S" x)) res)) +(defun single-value-specifier-type (x) + (let ((res (specifier-type x))) + (if (eq res *wild-type*) + *universal-type* + res))) + ;;; Similar to MACROEXPAND, but expands DEFTYPEs. We don't bother ;;; returning a second value. (defun type-expand (form)