On Sunday, 6 September 2015 at 21:16:18 UTC, Prudence wrote:
Yeah, but wouldn't it be so much nicer? (and probably debuggable inline)

interpret({
    var a = 5;
    a += 2;
    a;
}


Not really because that already more-or-less works today (add a q before that { and it will compile).

The interpreter throws exceptions when it gets a bad program; syntax errors, runtime errors, etc. Those exceptions are propagated to the compiler user in the form of error messages. Delete the last semicolon and rerun it. The compiler now spews:


/home/me/arsd/script.d(2164): Error: uncaught CTFE exception arsd.script.ScriptCompileException("4: Parse error, unexpected end of input when reading expression, expecting ;") d.d(4): called from here: interpret("\x0a\x09\x09var a = 5;\x0a\x09\x09a += 2;\x0a\x09\x09a\x0a\x09", var(cast(Type)0, Payload(null, , , , , , )).this(null), null)
d.d(9):        while evaluating pragma(msg, a)


d.d line 4 is the interpret function call. The error message from the interpreter is listed above that and lists line 4 of its input.


So it isn't exactly nice to read.... but probably could be. Keep in mind that I didn't write this thing for compile time, it is a runtime script interpreter that just happens to also work at compile time. If I wrote a thing that caught that exception and nicely formatted it at compile time, it could be made prettier.


But still, that message *does* contain the information you need because exceptions from the external parser are returned to the D compiler.




THAT SAID, I do know what you're asking and I've kinda wanted it before. It would be nice to have a .sourceof for an alias function (and I think that's been implemented in a pull request before, it isn't impossible to do). I just don't feel it would be all that important, since what we have now really goes a very long way.

Reply via email to