summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bauereiss2020-08-14 16:16:44 +0100
committerThomas Bauereiss2020-09-02 16:28:05 +0100
commit56ac810880fa48e9992dffba050f2f3acad0018c (patch)
treebe4538bc9d4013ae8f535e40603136bcaf2bc418
parentc16e6137e954e9a4cd24fb81dbafcfef27206837 (diff)
Consider case expressions in early return rewrite
-rw-r--r--src/rewrites.ml8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/rewrites.ml b/src/rewrites.ml
index 5f529e48..574356d4 100644
--- a/src/rewrites.ml
+++ b/src/rewrites.ml
@@ -1601,6 +1601,14 @@ let rewrite_defs_early_return env (Defs defs) =
rewrap (E_block (Util.butlast es @ [add_final_return true (Util.last es)]))
| E_if (c, t, e) ->
rewrap (E_if (c, add_final_return true t, add_final_return true e))
+ | E_case (e, pes) ->
+ let add_final_return_pexp = function
+ | Pat_aux (Pat_exp (p, e), a) ->
+ Pat_aux (Pat_exp (p, add_final_return true e), a)
+ | Pat_aux (Pat_when (p, g, e), a) ->
+ Pat_aux (Pat_when (p, g, add_final_return true e), a)
+ in
+ rewrap (E_case (e, List.map add_final_return_pexp pes))
| E_let (lb, exp) ->
rewrap (E_let (lb, add_final_return true exp))
| E_var (lexp, e1, e2) ->