[cffi-devel] defenum proposal

When translating anonymous enums to Lisp, it might be easier to use something like the defcenum: (defmacro defenum (&body enums) `(progn ,@(loop for value in enums for index = 0 then (1+ index) when (listp value) do (setf index (second value) value (first value)) collect `(defconstant ,value ,index)))) This will be expanded to a block of defconstants: (defenum a (b 10) c) -> (PROGN (DEFCONSTANT A 0) (DEFCONSTANT B 10) (DEFCONSTANT C 11)) It is not necessary to use keywords like for the named enums, because unnamed enums in C are just syntatic sugar for a list of "#define"s, which is mapped to a list of defconstants. I don't know, if this macro fits in the philosophy of CFFI, perhaps in some utility class, and maybe with another name "defanonenum". -- Frank Buss, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de

On 2006-jan-22, at 14:47, Frank Buss wrote:
It is not necessary to use keywords like for the named enums, because unnamed enums in C are just syntatic sugar for a list of "#define"s, which is mapped to a list of defconstants. I don't know, if this macro fits in the philosophy of CFFI, perhaps in some utility class, and maybe with another name "defanonenum".
I don't really think of C's enum that way. If I want constants, I use #define (and defconstant in CL). If I want to represent some sort of entity or concept I use an enum (and symbols in CL). For example: #define MAX_COUNT 127 (defconstant +max-count+ 127) vs. enum { RED, BLUE }; :red, :blue (or 'red, 'blue) I suppose defcenum shouldn't force the user to use keywords though? -- Luís Oliveira http://student.dei.uc.pt/~lmoliv/ Equipa Portuguesa do Translation Project http://www.iro.umontreal.ca/translation/registry.cgi?team=pt

Hello, Another concern of the original post was how to handle anonymous C enums in cffi. Should one use `defconstants' for them? Or should cffi provide a mechanism to declare anonymous enums? As per my understanding cffi requires all enums to be named. Thanks. -- Surendra Singhi http://ssinghi.kreeti.com/ -----Original Message----- From: Luís Oliveira <luismbo@gmail.com> To: Frank Buss <fb@frank-buss.de> Cc: cffi-devel@common-lisp.net; justinhj@gmail.com; 'Surendra Singhi' <EFuzzyONE@netscape.net> Sent: Sun, 22 Jan 2006 15:56:45 +0000 Subject: Re: [cffi-devel] defenum proposal On 2006-jan-22, at 14:47, Frank Buss wrote:
It is not necessary to use keywords like for the named enums, because unnamed enums in C are just syntatic sugar for a list of > "#define"s, which is mapped to a list of defconstants. I don't know, if this macro > fits in the philosophy of CFFI, perhaps in some utility class, and maybe with > another name "defanonenum".
I don't really think of C's enum that way. If I want constants, I use #define (and defconstant in CL). If I want to represent some sort of entity or concept I use an enum (and symbols in CL). For example: #define MAX_COUNT 127 (defconstant +max-count+ 127) vs. enum { RED, BLUE }; :red, :blue (or 'red, 'blue) I suppose defcenum shouldn't force the user to use keywords though? --Luís Oliveira http://student.dei.uc.pt/~lmoliv/ Equipa Portuguesa do Translation Project http://www.iro.umontreal.ca/translation/registry.cgi?team=pt ___________________________________________________ Try the New Netscape Mail Today! Virtually Spam-Free | More Storage | Import Your Contact List http://mail.netscape.com

On 1/24/06, efuzzyone@netscape.net <efuzzyone@netscape.net> wrote:
Hello, Another concern of the original post was how to handle anonymous C enums in cffi.
Should one use `defconstants' for them? Or should cffi provide a mechanism to declare anonymous enums?
As per my understanding cffi requires all enums to be named.
Thanks. -- Surendra Singhi http://ssinghi.kreeti.com/
-----Original Message----- From: Luís Oliveira <luismbo@gmail.com> To: Frank Buss <fb@frank-buss.de> Cc: cffi-devel@common-lisp.net; justinhj@gmail.com; 'Surendra Singhi' <EFuzzyONE@netscape.net> Sent: Sun, 22 Jan 2006 15:56:45 +0000 Subject: Re: [cffi-devel] defenum proposal
On 2006-jan-22, at 14:47, Frank Buss wrote:
It is not necessary to use keywords like for the named enums, because unnamed enums in C are just syntatic sugar for a list of > "#define"s, which is mapped to a list of defconstants. I don't know, if this macro > fits in the philosophy of CFFI, perhaps in some utility class, and maybe with > another name "defanonenum".
I don't really think of C's enum that way. If I want constants, I use #define (and defconstant in CL). If I want to represent some sort of entity or concept I use an enum (and symbols in CL). For example:
#define MAX_COUNT 127
(defconstant +max-count+ 127)
vs.
enum { RED, BLUE };
:red, :blue (or 'red, 'blue)
I suppose defcenum shouldn't force the user to use keywords though?
--Luís Oliveira http://student.dei.uc.pt/~lmoliv/ Equipa Portuguesa do Translation Project http://www.iro.umontreal.ca/translation/registry.cgi?team=pt
___________________________________________________ Try the New Netscape Mail Today! Virtually Spam-Free | More Storage | Import Your Contact List http://mail.netscape.com
The problem I am looking at is that SDL uses un-named enums quite a lot. In addition it does arithmetic on them to create other enums... enum { a_value, another_value, } then it does #define MAKE_MASK (n) (1<<n) enum { MAKE_MASK(a_value), MAKE_MASK(another_value) } In order to do this I can define a lisp function in my swig interface which does the same thing, but for that to work you need someway of getting to the value of the first enums. Justin
participants (4)
-
efuzzyone@netscape.net
-
Frank Buss
-
Justin Heyes-Jones
-
Luís Oliveira