package lrgrep

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

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
42
type 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>"