Hide counter inside closure
[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 next =
9 let counter = ref 0 in
10 fun () ->
11 incr counter;
12 !counter
13
14 let symbols = H.create 16
15
16 let unique_of_string name =
17 {name; symbol = next ()}
18
19 let of_string name =
20 match H.find_opt symbols name with
21 | Some symbol ->
22 {name; symbol}
23 | None ->
24 let t = unique_of_string name in
25 H.replace symbols ~key:t.name ~data:t.symbol;
26 t
27
28 let to_string {name; _} =
29 name
30
31 let is_equal {symbol=s1; _} {symbol=s2; _} =
32 s1 = s2
33
34 let show {name; symbol} =
35 Printf.sprintf "Symbol[%S, %d]" name symbol
This page took 0.049492 seconds and 4 git commands to generate.