From 13d52613a4c724e6b103c8c0690b74d751aa8826 Mon Sep 17 00:00:00 2001 From: wlott <wlott> Date: Wed, 11 Nov 1992 02:33:52 +0000 Subject: [PATCH] Changed enums to always take up an int to be compatable with C. Also, sort the from-alist so that enum aliens are unparsed in a canonical format. --- code/alieneval.lisp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/alieneval.lisp b/code/alieneval.lisp index 55d4e01af..8c85f14f7 100644 --- a/code/alieneval.lisp +++ b/code/alieneval.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/alieneval.lisp,v 1.26 1992/05/14 23:17:06 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/alieneval.lisp,v 1.27 1992/11/11 02:33:52 wlott Exp $") ;;; ;;; ********************************************************************** ;;; @@ -662,7 +662,7 @@ ;;;; The ENUM type. -(def-alien-type-class (enum :include integer) +(def-alien-type-class (enum :include (integer (:bits 32))) name ; name of this enum (if any) from ; alist from keywords to integers. to ; alist or vector from integers to keywords. @@ -721,10 +721,10 @@ (min-bits (if signed (1+ (max (integer-length min) (integer-length max))) - (integer-length max))) - (bits (max 8 (ash 1 (integer-length (1- min-bits)))))) - (when (> bits 32) + (integer-length max)))) + (when (> min-bits 32) (error "Can't represent enums needing more than 32 bits.")) + (setf from-alist (sort from-alist #'< :key #'cdr)) (cond ;; ;; If range is at least 20% dense, use vector mapping. Crossover @@ -737,11 +737,11 @@ (let ((to (make-array (1+ (- max min))))) (dolist (el from-alist) (setf (svref to (- (cdr el) min)) (car el))) - (make-alien-enum-type :name name :bits bits :signed signed + (make-alien-enum-type :name name :signed signed :from from-alist :to to :kind :vector :offset (- min)))) (t - (make-alien-enum-type :name name :bits bits :signed signed + (make-alien-enum-type :name name :signed signed :from from-alist :to (mapcar #'(lambda (x) (cons (cdr x) (car x))) from-alist) -- GitLab