@@ -469,7 +469,6 @@ type block =
469
469
type program =
470
470
{ start : Addr .t
471
471
; blocks : block Addr.Map .t
472
- ; free_pc : Addr .t
473
472
}
474
473
475
474
let start p = p.start
@@ -498,14 +497,7 @@ let free_pc p =
498
497
| None -> p.start + 1
499
498
| Some (pc , _ ) -> pc + 1
500
499
501
- let program start blocks =
502
- { start
503
- ; blocks
504
- ; free_pc =
505
- (match Addr.Map. max_binding_opt blocks with
506
- | None -> start + 1
507
- | Some (pc , _ ) -> pc + 1 )
508
- }
500
+ let program start blocks = { start; blocks }
509
501
510
502
let map_blocks ~f p = { p with blocks = Addr.Map. map f p.blocks }
511
503
@@ -694,29 +686,21 @@ let fold_closures p f accu =
694
686
695
687
(* ***)
696
688
697
- let prepend ({ start; blocks; free_pc } as p ) body =
689
+ let prepend ({ start; blocks } as p ) body =
698
690
match body with
699
691
| [] -> p
700
692
| _ -> (
701
693
match Addr.Map. find start blocks with
702
694
| block ->
703
695
{ p with
704
696
blocks = Addr.Map. add start { block with body = body @ block.body } blocks
705
- }
706
- | exception Not_found ->
707
- let new_start = free_pc in
708
- let blocks =
709
- Addr.Map. add new_start { params = [] ; body; branch = Stop } blocks
710
- in
711
- let free_pc = free_pc + 1 in
712
- { start = new_start; blocks; free_pc })
697
+ })
713
698
714
699
let empty_block = { params = [] ; body = [] ; branch = Stop }
715
700
716
701
let empty =
717
702
let start = 0 in
718
- let blocks = Addr.Map. singleton start empty_block in
719
- { start; blocks; free_pc = start + 1 }
703
+ program start (Addr.Map. singleton start empty_block)
720
704
721
705
let is_empty p =
722
706
match Addr.Map. cardinal p.blocks with
@@ -934,7 +918,7 @@ let cont_compare (pc, args) (pc', args') =
934
918
935
919
let with_invariant = Debug. find " invariant"
936
920
937
- let do_compact { blocks; start; free_pc = _ } =
921
+ let do_compact { blocks; start } =
938
922
let remap =
939
923
let max = fst (Addr.Map. max_binding blocks) in
940
924
let a = Array. make (max + 1 ) 0 in
@@ -971,9 +955,8 @@ let do_compact { blocks; start; free_pc = _ } =
971
955
blocks
972
956
Addr.Map. empty
973
957
in
974
- let free_pc = (Addr.Map. max_binding blocks |> fst) + 1 in
975
958
let start = remap.(start) in
976
- { blocks; start; free_pc }
959
+ program start blocks
977
960
978
961
let compact p =
979
962
let t = Timer. make () in
@@ -994,7 +977,7 @@ let compact p =
994
977
p
995
978
996
979
let used_blocks p =
997
- let visited = BitSet. create' p. free_pc in
980
+ let visited = BitSet. create' ( free_pc p) in
998
981
let rec mark_used pc =
999
982
if not (BitSet. mem visited pc)
1000
983
then (
0 commit comments