X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Falien-type.lisp;h=b0aeb651a86207b97687ec878930d54cec761d4e;hb=bfb19d306581ac86feb4371846c4b9953d692dd8;hp=b76b3e9c11b9f5d9cdedb42bf2b187f72b9e545a;hpb=11b8fcf55c80cb2686fb49663fa4d96f9b152ce4;p=sbcl.git diff --git a/src/code/alien-type.lisp b/src/code/alien-type.lisp index b76b3e9..b0aeb65 100644 --- a/src/code/alien-type.lisp +++ b/src/code/alien-type.lisp @@ -18,21 +18,24 @@ (!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)) - (:copier nil)) + (: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-method (alien :negate) (type) + (make-negation-type :type 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) (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 @@ -42,10 +45,10 @@ (!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)) (typecase alien-type @@ -59,9 +62,9 @@ (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)