+module H = MoreLabels.Hashtbl
+
+type t =
+ { name : string
+ ; symbol : int
+ }
+
+let nextsym = ref 0
+
+let symbols = H.create 16
+
+let of_string name =
+ match H.find_opt symbols name with
+ | Some symbol ->
+ {name; symbol}
+ | None ->
+ incr nextsym;
+ let symbol = !nextsym in
+ H.replace symbols ~key:name ~data:symbol;
+ {name; symbol}
+
+let to_string {name; _} =
+ name