X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fearly-type.lisp;h=0af428157eacbfe6d067541c25d03492e2381b45;hb=a74b0bdb483504f6faddf8089f848f61ed94b92a;hp=8dcb9c70b6069db83715c59027c915bcace78425;hpb=722703e7cbd3a4b279a4c1baab5d95df2c23cce9;p=sbcl.git diff --git a/src/code/early-type.lisp b/src/code/early-type.lisp index 8dcb9c7..0af4281 100644 --- a/src/code/early-type.lisp +++ b/src/code/early-type.lisp @@ -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 @@ -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)