Opinions wanted: What should (.list pmacro-name 42) do?
Doug Evans
dje@sebabeach.org
Thu Aug 20 17:44:00 GMT 2009
Doug Evans wrote:
> Hi.
>
> What should the output of
>
> (define-pmacro (foo a) (add a 1))
> (.list foo 42)
>
> be?
>
> Currently the result is (<pmacro> 42)
> where <pmacro> is the pmacro object for "foo".
>
> It's not ideal because it means that a pmacro object "escapes"
> pmacro-processing and can be seen by, for example, rtl compilation.
>
> However, it's not that unexpected. The user asked for a list
> containing two objects, the pmacro and 42.
> This is akin to saying (list + 42) in Scheme.
>
> We *could* have the pmacro evaluator re-examine the result and if it
> sees (<pmacro> mumble) then re-expand it. That's what we do for
> symbols today (i.e. if the result of pmacro-expansion is a symbol that
> names a pmacro, we re-evaluate it), but that has problems, e.g.
> http://sourceware.org/ml/cgen/2009-q3/msg00052.html
> and I'm leaning toward removing that behavior.
>
> It's not clear to me what The Right Thing to do is.
> Opinions?
>
[For completeness' sake ...]
An alternative is of course to flag any pmacros that "escape" as
errors. We need to do that anyway for cases like (.list 42 foo).
More information about the Cgen
mailing list