Changeset 418


Ignore:
Timestamp:
Jan 30, 2004, 11:28:48 AM (21 years ago)
Author:
Gary Byers
Message:

BIT/BITFIELD foreign integer types.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/lib/foreign-types.lisp

    r408 r418  
    646646    (make-foreign-integer-type :bits bits :signed nil)))
    647647
     648(def-foreign-type-translator bitfield (&optional (bits 1))
     649  (make-foreign-integer-type :bits bits :signed nil :alignment 1))
     650
     651                                                 
     652
    648653(def-foreign-type-method (integer :unparse) (type)
    649   (list (if (foreign-integer-type-signed type) :signed :unsigned)
    650         (foreign-integer-type-bits type)))
    651 
     654  (let* ((bits (foreign-integer-type-bits type))
     655         (signed (foreign-integer-type-signed type))
     656         (alignment (foreign-integer-type-alignment type)))
     657    (if (eql alignment 1)
     658      (if (eql bits 1)
     659        :bit
     660        `(:bitfield ,bits))
     661      (list (if signed :signed :unsigned) bits))))
     662 
    652663(def-foreign-type-method (integer :type=) (type1 type2)
    653664  (and (eq (foreign-integer-type-signed type1)
     
    14081419(def-foreign-type unsigned-long (unsigned 32))
    14091420(def-foreign-type unsigned-doubleword (unsigned 64))
     1421(def-foreign-type bit (bitfield 1))
    14101422
    14111423(def-foreign-type float single-float)
Note: See TracChangeset for help on using the changeset viewer.