X-Git-Url: https://git.xandkar.net/?p=tiger.ml.git;a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_symbol.ml;fp=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_symbol.ml;h=eb32942e227ac09ca926df0eb2a9d78c678645bc;hp=0000000000000000000000000000000000000000;hb=cda83e5ec171672a59966d2bd9cd28bd7a8fe083;hpb=46486dc8836fede7e00aaa614d99d98ed7646bdc diff --git a/compiler/src/lib/tiger/tiger_symbol.ml b/compiler/src/lib/tiger/tiger_symbol.ml new file mode 100644 index 0000000..eb32942 --- /dev/null +++ b/compiler/src/lib/tiger/tiger_symbol.ml @@ -0,0 +1,23 @@ +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