summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Campbell2018-01-29 16:13:13 +0000
committerBrian Campbell2018-01-29 16:55:45 +0000
commitc89cc7e43d0f3f2a5106d193dfe8bf6525591e92 (patch)
treeef1ef94bc8d72bd753ef0b41724d75a0618a93b2 /src
parentebe835cb795a2ebaa06cdb4880b80fdd1d981a56 (diff)
Leave pure if-conditions in place instead of pulling out let-bindings
Diffstat (limited to 'src')
-rw-r--r--src/rewrites.ml15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/rewrites.ml b/src/rewrites.ml
index 7825c153..99105a6d 100644
--- a/src/rewrites.ml
+++ b/src/rewrites.ml
@@ -2343,13 +2343,14 @@ let rewrite_defs_letbind_effects =
n_exp_nameL exps (fun exps ->
k (rewrap (E_tuple exps)))
| E_if (exp1,exp2,exp3) ->
- n_exp_name exp1 (fun exp1 ->
- let (E_aux (_,annot2)) = exp2 in
- let (E_aux (_,annot3)) = exp3 in
- let newreturn = effectful exp2 || effectful exp3 in
- let exp2 = n_exp_term newreturn exp2 in
- let exp3 = n_exp_term newreturn exp3 in
- k (rewrap (E_if (exp1,exp2,exp3))))
+ let e_if exp1 =
+ let (E_aux (_,annot2)) = exp2 in
+ let (E_aux (_,annot3)) = exp3 in
+ let newreturn = effectful exp2 || effectful exp3 in
+ let exp2 = n_exp_term newreturn exp2 in
+ let exp3 = n_exp_term newreturn exp3 in
+ k (rewrap (E_if (exp1,exp2,exp3))) in
+ if value exp1 then e_if (n_exp_term false exp1) else n_exp_name exp1 e_if
| E_for (id,start,stop,by,dir,body) ->
n_exp_name start (fun start ->
n_exp_name stop (fun stop ->