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