anchor.diff:  	 (rest args)
          args))))
   
  +
   (lisp:deftype enum (&rest args)
     `(member ,@(map-mappings args :symbols)))
   
   (deftype-method translate-type-spec enum (type-spec)
  -  (destructuring-bind (name &rest args) (type-expand-to 'enum type-spec)
  -    (declare (ignore name))
  +  (let ((args (cdr (type-expand-to 'enum type-spec))))
       (if (integerp (first args))
  -	`(signed ,(first args))
  -      '(signed 32))))
  +	(translate-type-spec `(signed ,(first args)))
  +      (translate-type-spec 'signed))))
  +
  +(deftype-method size-of enum (type-spec)
  +  (let ((args (cdr (type-expand-to 'enum type-spec))))
  +    (if (integerp (first args))
  +	(size-of `(signed ,(first args)))
  +      (size-of 'signed))))
   
   (deftype-method translate-to-alien enum (type-spec expr &optional copy)
     (declare (ignore copy))
  -  (destructuring-bind (name &rest args) (type-expand-to 'enum type-spec)
  -    (declare (ignore name))
  -    `(ecase ,expr
  -       ,@(map-mappings args :enum-int))))
  +  (let ((args (cdr (type-expand-to 'enum type-spec))))
  +    `(let ((expr ,expr))
  +       (if (integerp expr)
  +	   expr
  +	 (ecase expr
  +	   ,@(map-mappings args :enum-int))))))
   
   (deftype-method translate-from-alien enum (type-spec expr &optional alloc)
     (declare (ignore alloc))
  
positive.code:   'system-area-pointer)
  
  (deftype-method translate-to-alien null (type-spec expr &optional copy)
    (declare (ignore type-spec copy))
    `(make-pointer 0))
  
  
  
negative.code: 
  
  (deftype-method translate-type-spec boolean (type-spec)
    (translate-type-spec
     (cons 'unsigned (cdr (mklist (type-expand-to 'boolean type-spec))))))
  
  (deftype-method size-of boolean (type-spec)
    (size-of
     (cons 'unsigned (cdr (mklist (type-expand-to 'boolean type-spec))))))
  
  (deftype-method translate-to-alien boolean (type-spec boolean &optional copy)
    (declare (ignore type-spec copy))
  