0.9.8.34:
[sbcl.git] / src / code / host-alieneval.lisp
index 56e743d..4f018d6 100644 (file)
         (unless (and max (> max val)) (setq max val))
         (unless (and min (< min val)) (setq min val))
         (when (rassoc val from-alist)
-          (error "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)