[cffi-devel] Re: defcenum values not evaluated
James Bielman
jamesjb at haytonsystems.com
Mon May 21 22:40:42 UTC 2007
On Wed, 2007-05-16 at 01:22 +0100, Luis Oliveira wrote:
> "Lawrence Nakamura" <ln at imap.cc> writes:
> > In the defcenum macro, the values don't seem to be evaluated. Is this
> > behavior a bug or a feature?
>
> I'm not sure. What's your use case? Would #. work there?
I just got another report about this as well. For now, I agree that
#. is a serviceable workaround:
(defcenum foo
(:bar #.(ash 1 0)))
If I may ramble a bit on this, I'm inclined to say that we should
evaluate it, but we need to think about at what time the evaluation is
done:
- If we evaluate the value at compile-time, then we leave the
door open for optimizing enum values to constants (I don't
think we do anything like this yet, do we?)
The downside to this approach is the user will need to supply
the appropriate EVAL-WHENs around variable definitions that are
to be used as enumeration values.
- If we don't care about the enum value at compile-time, it might
be better to use LOAD-TIME-VALUE to evaluate the enum's value in
the expansion of DEFCENUM.
I suspect this could be useful for some users, such as copying
CLISP fasl files from one platform to another. If they were
evaluated at compile-time as above, they'd get hardcoded into
the fasl file.
- I don't think we can change the EVAL-WHEN in the expansion of
DEFCENUM to create the type at load-time, because then the type
won't be visible to compiler macros in the same translation unit.
- Of course, there's the possibility of just using EVAL in the
expansion, but I don't think there are any real advantages there.
Any thoughts?
James
More information about the cffi-devel
mailing list