Skip to content

Commit 663ee11

Browse files
committed
Fix DisjointDomain TODOs about bot buckets
1 parent b911f6d commit 663ee11

1 file changed

Lines changed: 32 additions & 8 deletions

File tree

src/domain/disjointDomain.ml

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -565,17 +565,41 @@ struct
565565
let nonidempotent_union f m1 m2 = M.nonidempotent_union (fun b1 b2 ->
566566
B.nonidempotent_union f b1 b2
567567
) m1 m2
568-
let idempotent_inter f m1 m2 = M.idempotent_inter (fun b1 b2 ->
569-
B.idempotent_inter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
568+
let idempotent_inter f m1 m2 = M.idempotent_inter_filter (fun b1 b2 ->
569+
match B.idempotent_inter f b1 b2 with
570+
| b' when B.is_bot b' ->
571+
None (* remove bot bucket to preserve invariant *)
572+
| exception Lattice.BotValue ->
573+
None (* remove bot bucket to preserve invariant *)
574+
| b' ->
575+
Some b'
570576
) m1 m2
571-
let nonidempotent_inter f m1 m2 = M.nonidempotent_inter (fun b1 b2 ->
572-
B.nonidempotent_inter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
577+
let nonidempotent_inter f m1 m2 = M.nonidempotent_inter_filter (fun b1 b2 ->
578+
match B.nonidempotent_inter f b1 b2 with
579+
| b' when B.is_bot b' ->
580+
None (* remove bot bucket to preserve invariant *)
581+
| exception Lattice.BotValue ->
582+
None (* remove bot bucket to preserve invariant *)
583+
| b' ->
584+
Some b'
573585
) m1 m2
574-
let idempotent_inter_filter f m1 m2 = M.idempotent_inter (fun b1 b2 ->
575-
B.idempotent_inter_filter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
586+
let idempotent_inter_filter f m1 m2 = M.idempotent_inter_filter (fun b1 b2 ->
587+
match B.idempotent_inter_filter f b1 b2 with
588+
| b' when B.is_bot b' ->
589+
None (* remove bot bucket to preserve invariant *)
590+
| exception Lattice.BotValue ->
591+
None (* remove bot bucket to preserve invariant *)
592+
| b' ->
593+
Some b'
576594
) m1 m2
577-
let nonidempotent_inter_filter f m1 m2 = M.nonidempotent_inter (fun b1 b2 ->
578-
B.nonidempotent_inter_filter f b1 b2 (* TODO: should remove bot bucket to preserve invariant? *)
595+
let nonidempotent_inter_filter f m1 m2 = M.nonidempotent_inter_filter (fun b1 b2 ->
596+
match B.nonidempotent_inter_filter f b1 b2 with
597+
| b' when B.is_bot b' ->
598+
None (* remove bot bucket to preserve invariant *)
599+
| exception Lattice.BotValue ->
600+
None (* remove bot bucket to preserve invariant *)
601+
| b' ->
602+
Some b'
579603
) m1 m2
580604
let difference f m1 m2 = M.difference (fun b1 b2 ->
581605
match B.difference f b1 b2 with

0 commit comments

Comments
 (0)