This is the mail archive of the cgen@sourceware.org mailing list for the CGEN project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Opinions wanted: What should (.list pmacro-name 42) do?


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).



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]