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
480480
481481let add_block pc block p = { p with blocks = Addr.Map. add pc block p.blocks }
482482
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+
483494let remove_block pc p = { p with blocks = Addr.Map. remove pc p.blocks }
484495
485496let 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
231231
232232val remove_block : Addr .t -> program -> program
233233
234+ val update_block : Addr .t -> program -> f :(block -> block ) -> program
235+
234236val program : Addr .t -> block Addr.Map .t -> program
235237
236238val 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 =
778778 incr drop_count;
779779 let b = { b with branch = Branch cont1 } in
780780 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)
795788 | _ -> p)
796789 (Code. blocks p)
797790 p
Original file line number Diff line number Diff line change @@ -66,9 +66,7 @@ module Excluding_Binders = struct
6666 let block s block =
6767 { params = block.params; body = instrs s block.body; branch = last s block.branch }
6868
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)
7270
7371 let rec cont ' s pc p visited =
7472 if Addr.Set. mem pc visited
You can’t perform that action at this time.
0 commit comments