aboutsummaryrefslogtreecommitdiffstats
path: root/lib/syntax_tools/src/merl_transform.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2016-08-22 14:39:22 +0200
committerBjörn Gustavsson <[email protected]>2016-08-22 14:39:22 +0200
commitbbcfcb140c56324df1989fd9de440e76f0c74a25 (patch)
tree841a76c6da006520a520f0b4c88390e2d2b662c9 /lib/syntax_tools/src/merl_transform.erl
parent2c1897c6ca6d4bfa4e30ebfd64dcfa807a596a51 (diff)
parentfee45935eb7f5a098cbbbaf1c8d1a8f9a77ce418 (diff)
downloadotp-bbcfcb140c56324df1989fd9de440e76f0c74a25.tar.gz
otp-bbcfcb140c56324df1989fd9de440e76f0c74a25.tar.bz2
otp-bbcfcb140c56324df1989fd9de440e76f0c74a25.zip
Merge branch 'gomoripeti/syntax_tools/merl-transform/PR-1123/OTP-13755' into maint
* gomoripeti/syntax_tools/merl-transform/PR-1123/OTP-13755: Fix infinite loop in merl_transform
Diffstat (limited to 'lib/syntax_tools/src/merl_transform.erl')
-rw-r--r--lib/syntax_tools/src/merl_transform.erl13
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/syntax_tools/src/merl_transform.erl b/lib/syntax_tools/src/merl_transform.erl
index fe58b6a122..497baddd0a 100644
--- a/lib/syntax_tools/src/merl_transform.erl
+++ b/lib/syntax_tools/src/merl_transform.erl
@@ -104,10 +104,15 @@ expand_qquote([Text, Env], T, Line) ->
case erl_syntax:is_literal(Text) of
true ->
As = [Line, erl_syntax:concrete(Text)],
- %% expand further if possible
- expand(merl:qquote(Line, "merl:subst(_@tree, _@env)",
- [{tree, eval_call(Line, quote, As, T)},
- {env, Env}]));
+ case eval_call(Line, quote, As, failed) of
+ failed ->
+ T;
+ T1 ->
+ %% expand further if possible
+ expand(merl:qquote(Line, "merl:subst(_@tree, _@env)",
+ [{tree, T1},
+ {env, Env}]))
+ end;
false ->
T
end;