[Ur] Proposed location literals to track caller's location in error msgs.
Gabriel Riba
gabriel at xarxaire.com
Fri May 29 08:47:14 EDT 2015
El 28/05/15 a les 14:29, Adam Chlipala ha escrit:
> Why not just implement this functionality purely in the lexer, lexing
> the special marker as a string literal with the right contents? You can
> call [ErrorMsg.spanOf] directly in the lexer, rather than via its alias
> [s] in the parser.
You are right, the simpler, the better.
Here is a possible code to add to urweb.lex, leaving urweb.grm untouched.
<INITIAL> "_LOC_" => (let val strLoc = ErrorMsg.spanToString
(ErrorMsg.spanOf (pos yypos, pos yypos + size yytext))
in
Tokens.STRING (strLoc, pos yypos, pos yypos +
size yytext)
end);
What do you prefer, the shorter _LOC_ or the PHP's style __LOC__ ?
-----------
Simple test sample:
---
fun myPartialListHd [a] (loc: string) (li: list a): a =
case li of
| h :: t => h
| _ => error <xml>myPartialListHd: invalid arguments at {[loc]}
</xml>
fun main () : transaction page =
let val res = myPartialListHd _LOC_ ([] : list int)
in
return <xml><body>result: {[res]}</body></xml>
end
More information about the Ur
mailing list