(defun guess-alignment (bits)
(cond ((null bits) nil)
- #!-(or x86 (and ppc darwin)) ((> bits 32) 64)
+ #!-(or (and x86 (not win32)) (and ppc darwin)) ((> bits 32) 64)
((> bits 16) 32)
((> bits 8) 16)
((> bits 1) 8)
(unless (and max (> max val)) (setq max val))
(unless (and min (< min val)) (setq min val))
(when (rassoc val from-alist)
- (warn "The element value ~S is used more than once." val))
+ (style-warn "The element value ~S is used more than once." val))
(when (assoc sym from-alist :test #'eq)
(error "The enumeration element ~S is used more than once." sym))
(push (cons sym val) from-alist)))
(overall-alignment 1)
(parsed-fields nil))
(dolist (field fields)
- (destructuring-bind (var type &optional bits) field
- (declare (ignore bits))
+ (destructuring-bind (var type &key alignment) field
(let* ((field-type (parse-alien-type type env))
(bits (alien-type-bits field-type))
- (alignment (alien-type-alignment field-type))
(parsed-field
(make-alien-record-field :type field-type
:name var)))
+ (unless alignment
+ (setf alignment (alien-type-alignment field-type)))
(push parsed-field parsed-fields)
(when (null bits)
(error "unknown size: ~S" (unparse-alien-type field-type)))
\f
;;;; the FUNCTION and VALUES alien types
-;;; not documented in CMU CL:-(
-;;;
-;;; reverse engineering observations:
-;;; * seems to be set when translating return values
-;;; * seems to enable the translation of (VALUES), which is the
-;;; Lisp idiom for C's return type "void" (which is likely
-;;; why it's set when when translating return values)
-(defvar *values-type-okay* nil)
-
(define-alien-type-class (fun :include mem-block)
(result-type (missing-arg) :type alien-type)
(arg-types (missing-arg) :type list)