Hide counter inside closure
[tiger.ml.git] / compiler / src / lib / tiger / tiger_symbol.ml
CommitLineData
28875fec
SK
1module H = MoreLabels.Hashtbl
2
3type t =
4 { name : string
5 ; symbol : int
6 }
7
54fbe594
SK
8let next =
9 let counter = ref 0 in
10 fun () ->
11 incr counter;
12 !counter
28875fec
SK
13
14let symbols = H.create 16
15
fd2204fa 16let unique_of_string name =
54fbe594 17 {name; symbol = next ()}
35dccbd3 18
28875fec
SK
19let of_string name =
20 match H.find_opt symbols name with
fd2204fa
SK
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
28875fec
SK
27
28let to_string {name; _} =
29 name
cbb4ffb6
SK
30
31let is_equal {symbol=s1; _} {symbol=s2; _} =
32 s1 = s2
35dccbd3
SK
33
34let show {name; symbol} =
35 Printf.sprintf "Symbol[%S, %d]" name symbol
This page took 0.020145 seconds and 4 git commands to generate.