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:


as a statement.


as an expression



as a statement



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.

Reply via email to