Module Flambda2_from_lambda.Closure_conversion
Introduce closures into CPS code, producing Flambda.
module IR = Flambda2_from_lambda.Closure_conversion_aux.IRmodule Env = Flambda2_from_lambda.Closure_conversion_aux.Envmodule Acc = Flambda2_from_lambda.Closure_conversion_aux.Accmodule Function_decl =
Flambda2_from_lambda.Closure_conversion_aux.Function_decls.Function_declmodule Expr_with_acc =
Flambda2_from_lambda.Closure_conversion_aux.Expr_with_accval close_let :
Acc.t ->
Env.t ->
(Ident.t
* Flambda2_identifiers.Flambda_debug_uid.t
* Flambda2_kinds.Flambda_kind.With_subkind.t)
list ->
IR.user_visible ->
IR.named ->
body:(Acc.t -> Env.t -> Expr_with_acc.t) ->
Expr_with_acc.tval close_let_rec :
Acc.t ->
Env.t ->
function_declarations:Function_decl.t list ->
body:(Acc.t -> Env.t -> Expr_with_acc.t) ->
current_region:Ident.t option ->
Expr_with_acc.tval close_let_cont :
Acc.t ->
Env.t ->
name:Flambda2_identifiers.Continuation.t ->
is_exn_handler:bool ->
params:
(Ident.t
* Flambda2_identifiers.Flambda_debug_uid.t
* IR.user_visible
* Flambda2_kinds.Flambda_kind.With_subkind.t)
list ->
recursive:Asttypes.rec_flag ->
handler:(Acc.t -> Env.t -> Expr_with_acc.t) ->
body:(Acc.t -> Env.t -> Expr_with_acc.t) ->
Expr_with_acc.tval close_apply : Acc.t -> Env.t -> IR.apply -> Expr_with_acc.tval close_apply_cont :
Acc.t ->
Env.t ->
dbg:Debuginfo.t ->
Flambda2_identifiers.Continuation.t ->
IR.trap_action option ->
IR.simple list ->
Expr_with_acc.tval close_switch :
Acc.t ->
Env.t ->
condition_dbg:Debuginfo.t ->
Ident.t ->
IR.switch ->
Expr_with_acc.tval close_raise :
Acc.t ->
Env.t ->
raise_kind:Lambda.raise_kind ->
arg:IR.simple ->
dbg:Debuginfo.t ->
IR.exn_continuation ->
Expr_with_acc.ttype 'a close_program_metadata = | Normal : [ `Normal ] Flambda2_from_lambda.Closure_conversion.close_program_metadata| Classic : (Flambda2_cmx.Exported_code.t * Flambda2_nominal.Name_occurrences.t * Flambda2_cmx.Flambda_cmx_format.t option * Flambda2_simplify_shared.Exported_offsets.t) -> [ `Classic ] Flambda2_from_lambda.Closure_conversion.close_program_metadata
type 'a close_program_result = {unit : Flambda2_terms.Flambda_unit.t;metadata : 'a Flambda2_from_lambda.Closure_conversion.close_program_metadata;code_slot_offsets : Flambda2_simplify_shared.Slot_offsets.t Flambda2_identifiers.Code_id.Map.t;
}val close_program :
mode:'mode Flambda2_ui.Flambda_features.mode ->
machine_width:Target_system.Machine_width.t ->
big_endian:bool ->
cmx_loader:Flambda2_cmx.Flambda_cmx.loader ->
compilation_unit:Compilation_unit.t ->
module_repr:Lambda.module_representation ->
program:(Acc.t -> Env.t -> Expr_with_acc.t) ->
prog_return_cont:Flambda2_identifiers.Continuation.t ->
exn_continuation:Flambda2_identifiers.Continuation.t ->
toplevel_my_region:Ident.t ->
toplevel_my_ghost_region:Ident.t ->
'mode Flambda2_from_lambda.Closure_conversion.close_program_result