[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Why does my Macro get expanded 8 times?
Date: Wed, 6 Jul 88 12:26 CDT
From: David Vinayak Wallace <Gumby@MCC.COM>
Date: Wed, 6 Jul 88 10:13 EDT
From: DLA@JASPER.SCRC.Symbolics.COM (David L. Andre)
Date: Sat, 2 Jul 88 00:41 EDT
From: Salem@Think.COM (Jim Salem)
If the definition of CLI::EXCASE were changed to have a NIL after the LET, ECASEs would
macroexpand twice as fast. [Anyone listening there at Symbolics ?]
Okay, I fixed the our development system. It will be in the Ivory
release.
How does this manage to do the right thing? According to CLtL p 60 you
can have any number of declarations and documentation strings (although
it's not clear what multiple doc strings imply) before the body of the
expression. P 153 restates this for all cases where declarations may
appear. So it seems that merely expanding the first form in the body
can't be enough; you have to keep expanding until you expand into
something which isn't a declaration
And NIL isn't a declaration, so that answers your question.
(it doesn't appear that you can
expand into a documentation string, although if you allow a macro to
expand into a declaration, which I think is bogus, you should allow the
same for doc strings).
One way to improve this would be to use macromemo, and/or have a flag
which disables this "feature."
Right.