(in-package "SB!KERNEL")
+(/show0 "code/alien-type.lisp 16")
+
(!begin-collecting-cold-init-forms)
(defstruct (alien-type-type
- (:include ctype
- (class-info (type-class-or-lose 'alien)))
- (:constructor %make-alien-type-type (alien-type)))
+ (:include ctype
+ (class-info (type-class-or-lose 'alien)))
+ (:constructor %make-alien-type-type (alien-type))
+ (:copier nil))
(alien-type nil :type alien-type))
-(define-type-class alien)
+(!define-type-class alien)
+
+(!define-type-method (alien :negate) (type)
+ (make-negation-type :type type))
-(define-type-method (alien :unparse) (type)
+(!define-type-method (alien :unparse) (type)
`(alien ,(unparse-alien-type (alien-type-type-alien-type type))))
-(define-type-method (alien :simple-subtypep) (type1 type2)
+(!define-type-method (alien :simple-subtypep) (type1 type2)
(values (alien-subtype-p (alien-type-type-alien-type type1)
- (alien-type-type-alien-type type2))
- t))
+ (alien-type-type-alien-type type2))
+ t))
-;;; KLUDGE: This DEFINE-SUPERCLASSES gets executed much later than the others
-;;; (toplevel form time instead of cold load init time) because ALIEN-VALUE
-;;; itself is a structure which isn't defined until fairly late.
-;;;
-;;; FIXME: I'm somewhat tempted to just punt ALIEN from the type system.
-;;; It's sufficiently unlike the others that it's a bit of a pain, and
-;;; it doesn't seem to be put to any good use either in type inference or
-;;; in type declarations.
-(define-superclasses alien ((alien-value)) progn)
+;;; KLUDGE: This !DEFINE-SUPERCLASSES gets executed much later than the
+;;; others (toplevel form time instead of cold load init time) because
+;;; ALIEN-VALUE itself is a structure which isn't defined until fairly
+;;; late.
+(!define-superclasses alien ((alien-value)) progn)
-(define-type-method (alien :simple-=) (type1 type2)
+(!define-type-method (alien :simple-=) (type1 type2)
(let ((alien-type-1 (alien-type-type-alien-type type1))
- (alien-type-2 (alien-type-type-alien-type type2)))
+ (alien-type-2 (alien-type-type-alien-type type2)))
(values (or (eq alien-type-1 alien-type-2)
- (alien-type-= alien-type-1 alien-type-2))
- t)))
+ (alien-type-= alien-type-1 alien-type-2))
+ t)))
-(def-type-translator alien (&optional (alien-type nil))
+(!def-type-translator alien (&optional (alien-type nil))
(typecase alien-type
(null
(make-alien-type-type))
(defun make-alien-type-type (&optional alien-type)
(if alien-type
(let ((lisp-rep-type (compute-lisp-rep-type alien-type)))
- (if lisp-rep-type
- (specifier-type lisp-rep-type)
- (%make-alien-type-type alien-type)))
+ (if lisp-rep-type
+ (single-value-specifier-type lisp-rep-type)
+ (%make-alien-type-type alien-type)))
*universal-type*))
(!defun-from-collected-cold-init-forms !alien-type-cold-init)
+
+(/show0 "code/alien-type.lisp end of file")