Trip notes from Israel
Timon Gehr via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Mon May 22 10:41:30 PDT 2017
On 22.05.2017 17:38, Adam D. Ruppe wrote:
> On Monday, 22 May 2017 at 15:26:26 UTC, Andrei Alexandrescu wrote:
>> Yah, didn't want to overload the article (or the discussion) with the
>> expression/statement distinction. -- Andrei
>
> Yeah, the details might be too much for a general audience (and I
> realize you know this, I'm commenting more for other readers who might
> be interested), but I do think this illustrates an important point for
> anyone who wants to use mixin: it is similar to, but not exactly like
> copy/pasting code into the source.
>
> mixin parses a piece of code, then pastes the *AST node*, not the source
> code, into the tree where the mixin is found. That's why the semicolon
> is required in the statement context - it needs a complete branch that
> actually fits the AST at the moment, not just a string that is pasted
> into the source code at the location.
>
> So similar enough to copy/paste to get someone quickly started playing
> with code generation, but this key difference is needed to really
> understand it.
The grammar has:
expression;
as a statement.
mixin(...)
as an expression
and
mixin(...);
as a statement
Hence,
mixin(...);
is actually grammatically ambiguous and the behaviour of the compiler is
somewhat arbitrary.
The compiler could easily compensate for the ambiguity during semantic
and not require the terminating semicolon when parsing the string of a
mixin statement.
More information about the Digitalmars-d-announce
mailing list