@@ -1393,13 +1393,19 @@ and translate_instrs (ctx : Ctx.t) expr_queue instr last =
13931393 let names, mut, pcs, all, rem = collect_closures ctx instr in
13941394 match Code.Var.Set. cardinal mut with
13951395 | 0 ->
1396- let st_rev, expr_queue =
1397- List. fold_left all ~init: ([] , expr_queue) ~f: (fun (st_rev , expr_queue ) i ->
1398- let l, expr_queue = translate_instr ctx expr_queue i in
1396+ let st_rev, expr_queue_fun =
1397+ List. fold_left all ~init: ([] , [] ) ~f: (fun (st_rev , expr_queue ) i ->
1398+ let l, expr_queue_fun = translate_instr ctx [] i in
1399+ let expr_queue =
1400+ match expr_queue_fun with
1401+ | [] -> expr_queue
1402+ | [ x ] -> x :: expr_queue
1403+ | _ -> assert false
1404+ in
13991405 List. rev_append l st_rev, expr_queue)
14001406 in
1401- let instrs, expr_queue = translate_instrs ctx expr_queue rem last in
1402- List. rev_append st_rev instrs, expr_queue
1407+ let instrs, expr_queue_after = translate_instrs ctx expr_queue_fun rem last in
1408+ flush_all expr_queue ( List. rev_append st_rev instrs), expr_queue_after
14031409 | _ ->
14041410 let muts =
14051411 Code.Var.Set. diff mut names
@@ -1436,7 +1442,7 @@ and translate_instrs (ctx : Ctx.t) expr_queue instr last =
14361442 in
14371443 (J. variable_declaration ~kind: Let (List. rev l_rev), J. N ) :: st_rev, expr_queue
14381444 in
1439- (* Mutually recursive need to be properly scoped. *)
1445+ (* Mutually recursive functions need to be properly scoped. *)
14401446 let st_rev, expr_queue =
14411447 List. fold_left all ~init: ([] , expr_queue) ~f: (fun (st_rev , expr_queue ) i ->
14421448 let l, expr_queue = translate_instr ctx expr_queue i in
0 commit comments