From d3e7c565a9d5285a91ee2102a8b994dc12cfc808 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Tue, 19 Dec 2023 14:46:11 +0100 Subject: [PATCH] Closure conversion: use multiple let-in --- compiler/lcalc/closure_conversion.ml | 31 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index f5e6192e..f30e61bf 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -255,22 +255,21 @@ let rec transform_closures_expr : in let call_expr = let m1 = Mark.get e1 in - Expr.make_let_in code_var - (TAny, Expr.pos e) - (Expr.etupleaccess - ~e:(Bindlib.box_var code_env_var, m1) - ~index:0 ~size:2 m) - (Expr.make_let_in env_var - (TAny, Expr.pos e) - (Expr.etupleaccess - ~e:(Bindlib.box_var code_env_var, m1) - ~index:1 ~size:2 m) - (Expr.eapp - ~f:(Bindlib.box_var code_var, m1) - ~args:((Bindlib.box_var env_var, m1) :: new_args) - ~tys:((TClosureEnv, Expr.pos e1) :: tys) - m) - (Expr.pos e)) + let env_arg_ty = TClosureEnv, Expr.pos e1 in + Expr.make_multiple_let_in [| code_var; env_var |] + [TArrow (env_arg_ty :: tys, (TAny, Expr.pos e)), Expr.pos e; env_arg_ty] + [ + Expr.etupleaccess + ~e:(Bindlib.box_var code_env_var, m1) + ~index:0 ~size:2 m; + Expr.etupleaccess + ~e:(Bindlib.box_var code_env_var, m1) + ~index:1 ~size:2 m; + ] + (Expr.eapp + ~f:(Bindlib.box_var code_var, m1) + ~args:((Bindlib.box_var env_var, m1) :: new_args) + ~tys:(env_arg_ty :: tys) m) (Expr.pos e) in ( free_vars,