Skip to content

Commit 86b6a9f

Browse files
committed
WIP
1 parent 012c5e3 commit 86b6a9f

File tree

4 files changed

+21
-17
lines changed

4 files changed

+21
-17
lines changed

compiler/lib/code.ml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,17 @@ let block pc p = Addr.Map.find pc p.blocks
480480

481481
let 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+
483494
let remove_block pc p = { p with blocks = Addr.Map.remove pc p.blocks }
484495

485496
let free_pc p =

compiler/lib/code.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ val add_block : Addr.t -> block -> program -> program
231231

232232
val remove_block : Addr.t -> program -> program
233233

234+
val update_block : Addr.t -> program -> f:(block -> block) -> program
235+
234236
val program : Addr.t -> block Addr.Map.t -> program
235237

236238
val map_blocks : f:(block -> block) -> program -> program

compiler/lib/eval.ml

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff 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

compiler/lib/subst.ml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)