reorder generated variable in for_each
This commit is contained in:
parent
30f2581f8b
commit
8dfc8a0469
@ -552,13 +552,14 @@ and compile_for I.{binder;start;final;increment;body} =
|
|||||||
ok @@ restore_mutable_variable return_expr captured_name_list env_rec
|
ok @@ restore_mutable_variable return_expr captured_name_list env_rec
|
||||||
|
|
||||||
and compile_for_each I.{binder;collection;collection_type; body} =
|
and compile_for_each I.{binder;collection;collection_type; body} =
|
||||||
|
let env_rec = Var.fresh () in
|
||||||
let args = Var.fresh () in
|
let args = Var.fresh () in
|
||||||
|
|
||||||
let%bind element_names = ok @@ match snd binder with
|
let%bind element_names = ok @@ match snd binder with
|
||||||
| Some v -> [fst binder;v]
|
| Some v -> [fst binder;v]
|
||||||
| None -> [fst binder]
|
| None -> [fst binder]
|
||||||
in
|
in
|
||||||
|
|
||||||
let env = Var.fresh () in
|
|
||||||
let%bind body = compile_expression body in
|
let%bind body = compile_expression body in
|
||||||
let%bind ((_,free_vars), body) = repair_mutable_variable_in_loops body element_names args in
|
let%bind ((_,free_vars), body) = repair_mutable_variable_in_loops body element_names args in
|
||||||
let for_body = add_to_end body @@ (O.e_record_accessor (O.e_variable args) (Label "0")) in
|
let for_body = add_to_end body @@ (O.e_record_accessor (O.e_variable args) (Label "0")) in
|
||||||
@ -582,9 +583,9 @@ and compile_for_each I.{binder;collection;collection_type; body} =
|
|||||||
| Map -> ok @@ O.C_MAP_FOLD | Set -> ok @@ O.C_SET_FOLD | List -> ok @@ O.C_LIST_FOLD
|
| Map -> ok @@ O.C_MAP_FOLD | Set -> ok @@ O.C_SET_FOLD | List -> ok @@ O.C_LIST_FOLD
|
||||||
in
|
in
|
||||||
let fold = fun expr ->
|
let fold = fun expr ->
|
||||||
O.e_let_in (env,None) false false (O.e_constant op_name [lambda; collect ; init_record]) expr
|
O.e_let_in (env_rec,None) false false (O.e_constant op_name [lambda; collect ; init_record]) expr
|
||||||
in
|
in
|
||||||
ok @@ restore_mutable_variable fold free_vars env
|
ok @@ restore_mutable_variable fold free_vars env_rec
|
||||||
|
|
||||||
let compile_declaration : I.declaration Location.wrap -> _ =
|
let compile_declaration : I.declaration Location.wrap -> _ =
|
||||||
fun {wrap_content=declaration;location} ->
|
fun {wrap_content=declaration;location} ->
|
||||||
|
Loading…
Reference in New Issue
Block a user