package lrgrep
Source file usage.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42type mark = { mutable used: bool; } let new_mark () = { used = false } let is_used t = t.used let is_unused t = not (is_used t) let cmon_mark _ = Cmon.constant "<Usage.mark>" type set = | Empty | Leaf of mark | Join of {s1: set; s2: set; mutable used: bool} let empty = Empty let is_empty = function | Empty -> true | _ -> false let singleton mark = Leaf mark let join s1 s2 = if s1 == s2 then s1 else match s1, s2 with | Empty, s | s, Empty -> s | _ -> Join {s1; s2; used=false} let rec mark_used = function | Empty -> () | Leaf m -> m.used <- true | Join j when j.used -> () | Join j -> j.used <- true; mark_used j.s1; mark_used j.s2 let cmon_set _ = Cmon.constant "<Usage.set>"