X-Git-Url: https://git.distorted.org.uk/~mdw/clg/blobdiff_plain/33939600f4eeda6c3e54f575a633f1247cf4cbce..c96c452a4938c33e24bb9736810b0c7bd9e7940d:/glib/genums.lisp diff --git a/glib/genums.lisp b/glib/genums.lisp index 1ed19c2..406a1a5 100644 --- a/glib/genums.lisp +++ b/glib/genums.lisp @@ -15,7 +15,7 @@ ;; License along with this library; if not, write to the Free Software ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -;; $Id: genums.lisp,v 1.9 2005-02-11 19:09:38 espen Exp $ +;; $Id: genums.lisp,v 1.11 2005-02-25 17:20:25 espen Exp $ (in-package "GLIB") @@ -23,14 +23,15 @@ (defun %map-enum (mappings op) (loop - as value = 1 then (1+ value) + as value = 0 then (1+ value) for mapping in mappings collect (let ((symbol (if (atom mapping) mapping (first mapping)))) (unless (atom mapping) (setq value (second mapping))) (ecase op - (:symbol-int (list symbol value)) - (:int-symbol (list value symbol)) + (:symbol-int `(,symbol ,value)) + (:int-symbol `(,value ,symbol)) + (:int-quoted-symbol `(,value ',symbol)) (:symbols symbol))))) (deftype enum (&rest args) @@ -53,8 +54,8 @@ (defmethod from-alien-form (form (type (eql 'enum)) &rest args) (declare (ignore type)) - `(ecase ,form - ,@(%map-enum args :int-symbol))) + `(case ,form + ,@(%map-enum args :int-quoted-symbol))) (defmethod to-alien-function ((type (eql 'enum)) &rest args) (declare (ignore type)) @@ -106,8 +107,8 @@ ,@(%map-enum args :symbol-int) (t (error 'type-error :datum enum :expected-type ',name)))) (defun ,int-enum (value) - (ecase value - ,@(%map-enum args :int-symbol))) + (case value + ,@(%map-enum args :int-quoted-symbol))) (defmethod to-alien-form (form (type (eql ',name)) &rest args) (declare (ignore type args)) (list ',enum-int form)) @@ -142,8 +143,8 @@ (unless (atom mapping) (setq value (second mapping))) (ecase op - (:symbol-int (list symbol value)) - (:int-symbol (list value symbol)) + (:symbol-int `(,symbol ,value)) + (:int-symbol `(,value ,symbol)) (:symbols symbol))))) (deftype flags (&rest args)