Let's see if I understand right: you want some token you can write in source code, to be replaced at compile time by the location of the token, along the lines of C's __FILE__ and __LINE__.

Yes, it sounds like an easy feature to add. I would actually do it entirely in the parser. I'd extend src/urweb.lex with a production for a new reserved identifier for this 'macro', and I'd extend one of the expression nonterminals in src/urweb.grm with a rule that translates the source location of said token into an Ur/Web string literal, using [ErrorMsg.spanToString], getting ahold of the span in the same way that it is already being produced to label each expression with its location for purposes of later error messages.

On 03/14/2015 09:27 AM, Sergey Mironov wrote:
Hi. I'd like to experiment with establishing a connection between
Ur/Web application and the OpenSource hosting such as GitHub. The idea
is to provide the user with links like 'patch this place' or even
'translate this section'. In order to generate such a link I need to
calculate a) current revision and b) source location of the current
expression. I already know how to do the first point, but AFAIK there
is no way to extract the latter at the moment. I would be happy to try
myself in urweb hacking and implement it. My plan is to provide
necessary definitions in basis.urs and then instruct the compiler to
replace the function calls with the exact location value calculated by
the compiler. Does it sound real? Is monoize.sml the best place to
insert the hook?


_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to