On Monday, 9 April 2018 at 08:27:50 UTC, Per Nordlöw wrote:
Is it possible to get the source expression sent to a lazy function?

So that I can implement something like

show(Arg)(lazy Arg arg)
{
    writeln(arg.sourceof, arg);
}

used as

    show(1+2+3);

will print

    1+2+3:6

Because of the way D works with a given piece of code may not have a source-location or even a representation which is valid D source code.

Note: There is a way to fix this but it's very involved.

Step 1: you use cow (copy-on-write) when modifying AST nodes in semantic() or you keep distinct trees. Step 2: you sanitize implicitly generated code to make sure it's actually valid code. Step 3: you write the generated code, to a well-defined location such that source-of can point to a valid location.

also note that support for sourceof at compiletime will bloat the executable since it needs to store the source-text.

Reply via email to