projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.7.12.10:
[sbcl.git]
/
src
/
code
/
early-type.lisp
diff --git
a/src/code/early-type.lisp
b/src/code/early-type.lisp
index
8dcb9c7
..
0af4281
100644
(file)
--- 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)))
(defstruct (values-type
(:include args-type
(class-info (type-class-or-lose 'values)))
+ (:constructor %make-values-type)
(:copier nil)))
(:copier nil)))
+(define-cached-synonym make-values-type)
(!define-type-class values)
(!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)))
;;; 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 *.
(: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))
(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
;;; 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)))
(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:
;;; 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)
(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)))
(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))
(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)
;;; Similar to MACROEXPAND, but expands DEFTYPEs. We don't bother
;;; returning a second value.
(defun type-expand (form)