projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.7.6.3:
[sbcl.git]
/
src
/
code
/
early-type.lisp
diff --git
a/src/code/early-type.lisp
b/src/code/early-type.lisp
index
84e4c1e
..
8dcb9c7
100644
(file)
--- a/
src/code/early-type.lisp
+++ b/
src/code/early-type.lisp
@@
-23,10
+23,11
@@
;;; the original type spec.
(defstruct (hairy-type (:include ctype
(class-info (type-class-or-lose 'hairy))
;;; the original type spec.
(defstruct (hairy-type (:include ctype
(class-info (type-class-or-lose 'hairy))
- (enumerable t))
+ (enumerable t)
+ (might-contain-other-types-p t))
(:copier nil)
#!+cmu (:pure nil))
(:copier nil)
#!+cmu (:pure nil))
- ;; the Common Lisp type-specifier
+ ;; the Common Lisp type-specifier of the type we represent
(specifier nil :type t))
(!define-type-class hairy)
(specifier nil :type t))
(!define-type-class hairy)
@@
-230,7
+231,8
@@
;;; A COMPOUND-TYPE is a type defined out of a set of types, the
;;; common parent of UNION-TYPE and INTERSECTION-TYPE.
;;; 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)
+(defstruct (compound-type (:include ctype
+ (might-contain-other-types-p t))
(:constructor nil)
(:copier nil))
(types nil :type list :read-only t))
(:constructor nil)
(:copier nil))
(types nil :type list :read-only t))
@@
-275,7
+277,7
@@
type))
;;; A CONS-TYPE is used to represent a CONS type.
type))
;;; A CONS-TYPE is used to represent a CONS type.
-(defstruct (cons-type (:include ctype (:class-info (type-class-or-lose 'cons)))
+(defstruct (cons-type (:include ctype (class-info (type-class-or-lose 'cons)))
(:constructor
;; ANSI says that for CAR and CDR subtype
;; specifiers '* is equivalent to T. In order
(:constructor
;; ANSI says that for CAR and CDR subtype
;; specifiers '* is equivalent to T. In order
@@
-304,12
+306,7
@@
;;; type is defined (or redefined).
(defun-cached (values-specifier-type
:hash-function (lambda (x)
;;; type is defined (or redefined).
(defun-cached (values-specifier-type
:hash-function (lambda (x)
- ;; FIXME: The THE FIXNUM stuff is
- ;; redundant in SBCL (or modern CMU
- ;; CL) because of type inference.
- (the fixnum
- (logand (the fixnum (sxhash x))
- #x3FF)))
+ (logand (sxhash x) #x3FF))
:hash-bits 10
:init-wrapper !cold-init-forms)
((orig eq))
:hash-bits 10
:init-wrapper !cold-init-forms)
((orig eq))
@@
-343,7
+340,9
@@
(funcall fun lspec))
((or (and (consp spec) (symbolp (car spec)))
(symbolp spec))
(funcall fun lspec))
((or (and (consp spec) (symbolp (car spec)))
(symbolp spec))
- (when *type-system-initialized*
+ (when (and *type-system-initialized*
+ (not (eq (info :type :kind spec)
+ :forthcoming-defclass-type)))
(signal 'parse-unknown-type :specifier spec))
;; (The RETURN-FROM here inhibits caching.)
(return-from values-specifier-type
(signal 'parse-unknown-type :specifier spec))
;; (The RETURN-FROM here inhibits caching.)
(return-from values-specifier-type