b5d895b084b428fb7cb03d0337aae6995d6db0f0
[tiger.ml.git] / compiler / src / lib / tiger / tiger_symbol.ml
1 module H = MoreLabels.Hashtbl
2
3 type t =
4 { name : string
5 ; symbol : int
6 }
7
8 let counter = ref 0
9
10 let symbols = H.create 16
11
12 let next name =
13 incr counter;
14 let symbol = !counter in
15 {name; symbol}
16
17 let new_of_string name =
18 let t = next name in
19 H.replace symbols ~key:t.name ~data:t.symbol;
20 t
21
22 let of_string name =
23 match H.find_opt symbols name with
24 | Some s -> {name; symbol=s}
25 | None -> new_of_string name
26
27 let to_string {name; _} =
28 name
29
30 let is_equal {symbol=s1; _} {symbol=s2; _} =
31 s1 = s2
32
33 let show {name; symbol} =
34 Printf.sprintf "Symbol[%S, %d]" name symbol
This page took 0.051655 seconds and 4 git commands to generate.