File tree Expand file tree Collapse file tree 4 files changed +21
-17
lines changed Expand file tree Collapse file tree 4 files changed +21
-17
lines changed Original file line number Diff line number Diff line change @@ -480,6 +480,17 @@ let block pc p = Addr.Map.find pc p.blocks
480
480
481
481
let add_block pc block p = { p with blocks = Addr.Map. add pc block p.blocks }
482
482
483
+ let update_block pc p ~f =
484
+ { p with
485
+ blocks =
486
+ Addr.Map. update
487
+ pc
488
+ (function
489
+ | None -> raise Not_found
490
+ | Some b -> Some (f b))
491
+ p.blocks
492
+ }
493
+
483
494
let remove_block pc p = { p with blocks = Addr.Map. remove pc p.blocks }
484
495
485
496
let free_pc p =
Original file line number Diff line number Diff line change @@ -231,6 +231,8 @@ val add_block : Addr.t -> block -> program -> program
231
231
232
232
val remove_block : Addr .t -> program -> program
233
233
234
+ val update_block : Addr .t -> program -> f :(block -> block ) -> program
235
+
234
236
val program : Addr .t -> block Addr.Map .t -> program
235
237
236
238
val map_blocks : f :(block -> block ) -> program -> program
Original file line number Diff line number Diff line change @@ -778,20 +778,13 @@ let drop_exception_handler drop_count p =
778
778
incr drop_count;
779
779
let b = { b with branch = Branch cont1 } in
780
780
let p = Code. add_block pc b p in
781
- let blocks =
782
- List. fold_left
783
- ~f: (fun blocks pc2 ->
784
- Addr.Map. update
785
- pc2
786
- (function
787
- | Some ({ branch = Poptrap cont ; _ } as b ) ->
788
- Some { b with branch = Branch cont }
789
- | None | Some _ -> assert false )
790
- blocks)
791
- rewrite
792
- ~init: (Code. blocks p)
793
- in
794
- Code. program (Code. start p) blocks)
781
+ List. fold_left
782
+ ~f: (fun p pc2 ->
783
+ Code. update_block pc2 p ~f: (function
784
+ | { branch = Poptrap cont ; _ } as b -> { b with branch = Branch cont }
785
+ | _ -> assert false ))
786
+ rewrite
787
+ ~init: p)
795
788
| _ -> p)
796
789
(Code. blocks p)
797
790
p
Original file line number Diff line number Diff line change @@ -66,9 +66,7 @@ module Excluding_Binders = struct
66
66
let block s block =
67
67
{ params = block.params; body = instrs s block.body; branch = last s block.branch }
68
68
69
- let program s p =
70
- let blocks = Addr.Map. map (fun b -> block s b) (Code. blocks p) in
71
- Code. program (Code. start p) blocks
69
+ let program s p = Code. map_blocks p ~f: (fun b -> block s b)
72
70
73
71
let rec cont ' s pc p visited =
74
72
if Addr.Set. mem pc visited
You can’t perform that action at this time.
0 commit comments