[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
From: Steve Bacher (CSDL)
To: Robert Elton Maas
Subject: Compiler side effects lossage
It sounds like your compiler used the C... properties exclusively,
refusing to use normal propertis {sic} even when the C... property
didn't exist.
I can't speak for Charles Hedrick or his compiler, but I do know that
this problem can definitely occur even when the property masking you
describe is in use. Consider the case of a DEFMACRO which references
a function defined via DEFUN (or DEFMACRO, etc.) in the same file.
If the compiler dutifully assigns a CMACRO or CFUNCTION property for
the function in question, then invokes MACROEXPAND on the macro
definition associated with the first DEFMACRO, you should expect to
run into trouble if your macroexpander uses the standard evaluator,
since that one, as described, WILL NOT find compiler-generated defs
like CFUNCTION. Now, unless you want to rewrite the evaluator for
the compiler to process Cfrobs, you can't get around this.
The user will simply have to wrap an (eval-when (compile ...))
around the ancillary DEFstuff - and this implies that the way the
compiler treats DEFUN, DEFMACRO, etc. *cannot* be desribed as a case
of an implicit (eval-when (compile)). Which means that I must take
issue with the earlier statement of Rob MacLachlan's that there's no
way to override the implicit eval-whenitude of DEFUN et al.
Lest you believe that this is all idle speculation and windbagging,
let me point out that this is essentially how I have structured my
LISP compiler, and this problem does come up despite the best of
intentions. (Another screw case is defining SETF methods.)
- Steve Bacher