diff --git i/src/code/host-alieneval.lisp w/src/code/host-alieneval.lisp index 1f554c6..7aefbd0 100644 --- i/src/code/host-alieneval.lisp +++ w/src/code/host-alieneval.lisp @@ -1052,7 +1052,8 @@ (defun parse-alien-record-fields (kind fields env) (overall-alignment 1) (parsed-fields nil)) (dolist (field fields) - (destructuring-bind (var type &key alignment) field + (destructuring-bind (var type &key alignment bits offset) field + (declare (ignore bits)) (let* ((field-type (parse-alien-type type env)) (bits (alien-type-bits field-type)) (parsed-field @@ -1068,7 +1069,7 @@ (defun parse-alien-record-fields (kind fields env) (setf overall-alignment (max overall-alignment alignment)) (ecase kind (:struct - (let ((offset (align-offset total-bits alignment))) + (let ((offset (or offset (align-offset total-bits alignment)))) (setf (alien-record-field-offset parsed-field) offset) (setf total-bits (+ offset bits)))) (:union @@ -1095,7 +1096,9 @@ (defun unparse-alien-record-field (field) `(,(alien-record-field-name field) ,(%unparse-alien-type (alien-record-field-type field)) ,@(when (alien-record-field-bits field) - (list (alien-record-field-bits field))))) + (list :bits (alien-record-field-bits field))) + ,@(when (alien-record-field-offset field) + (list :offset (alien-record-field-offset field))))) ;;; Test the record fields. Keep a hashtable table of already compared ;;; types to detect cycles.