aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/src
diff options
context:
space:
mode:
authorHans Bolinder <[email protected]>2017-06-13 08:48:59 +0200
committerHans Bolinder <[email protected]>2017-06-13 08:48:59 +0200
commit854fa6c03a397f838a8b7e6aa6c826acfe8f6572 (patch)
tree4254f19e9669dc05849168511f34cf551daed229 /lib/stdlib/src
parent2bcfb8efc8e86ceaa4d8a08e63607c06fbfca8ae (diff)
parent44d609df5fc694ed1030cf7d56c492fc7e222590 (diff)
downloadotp-854fa6c03a397f838a8b7e6aa6c826acfe8f6572.tar.gz
otp-854fa6c03a397f838a8b7e6aa6c826acfe8f6572.tar.bz2
otp-854fa6c03a397f838a8b7e6aa6c826acfe8f6572.zip
Merge branch 'hasse/stdlib/fun2ms_partial_eval/OTP-14454/ERIERL-29'
* hasse/stdlib/fun2ms_partial_eval/OTP-14454/ERIERL-29: stdlib: Evaluate expressions in fun2ms bodies
Diffstat (limited to 'lib/stdlib/src')
-rw-r--r--lib/stdlib/src/ms_transform.erl18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/stdlib/src/ms_transform.erl b/lib/stdlib/src/ms_transform.erl
index c1c09f091c..6616e957c0 100644
--- a/lib/stdlib/src/ms_transform.erl
+++ b/lib/stdlib/src/ms_transform.erl
@@ -501,10 +501,20 @@ tg0(Line,[H|T],B) ->
tg({match,Line,_,_},B) ->
throw({error,Line,?ERR_GENMATCH+B#tgd.eb});
-tg({op, Line, Operator, O1, O2}, B) ->
- {tuple, Line, [{atom, Line, Operator}, tg(O1,B), tg(O2,B)]};
-tg({op, Line, Operator, O1}, B) ->
- {tuple, Line, [{atom, Line, Operator}, tg(O1,B)]};
+tg({op, Line, Operator, O1, O2}=Expr, B) ->
+ case erl_eval:partial_eval(Expr) of
+ Expr ->
+ {tuple, Line, [{atom, Line, Operator}, tg(O1, B), tg(O2, B)]};
+ Value ->
+ Value
+ end;
+tg({op, Line, Operator, O1}=Expr, B) ->
+ case erl_eval:partial_eval(Expr) of
+ Expr ->
+ {tuple, Line, [{atom, Line, Operator}, tg(O1, B)]};
+ Value ->
+ Value
+ end;
tg({call, _Line, {atom, Line2, bindings},[]},_B) ->
{atom, Line2, '$*'};
tg({call, _Line, {atom, Line2, object},[]},_B) ->