aboutsummaryrefslogtreecommitdiffstats
path: root/lib/syntax_tools/src/merl_transform.erl
AgeCommit message (Collapse)Author
2016-07-09Fix infinite loop in merl_transformPéter Gömöri
This can happen when a syntactically incorrect text is passed to a merl:qquote/2,/3 call. The parse transform optimizes calls to some functions in merl by converting strings into templates at compile time. If this evaluation fails (in eval_call/4 - for example because of a sytanx error in the parsed text) the original function call should be kept unchanged. However in case of qquote/3 the call is converted into a combination of quote/2 and subst/2, but upon failure the original qquote/3 call is substituted into the wrong place. E.g.: this expression merl:qquote(Pos, Text, Env) is first converted to merl:subst(merl:quote(Pos, Text), Env) then if evaluating the quote call fails into merl:subst(merl:qquote(Pos, Text, Env), Env) and the expansion is run again on the internal qquote/3 argument resulting in an infinite loop. This is now fixed so in case of failure the original qquote/3 call is kept.
2015-09-15syntax_tools: Use the erl_anno module a bit moreHans Bolinder
2015-05-22Include Merl in Syntax ToolsRichard Carlsson