[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