X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_symbol.ml;h=747cb03f0e717c77a3878a975b0ba59f5b8e024c;hb=fd2204fa98928a900f303209818dce7f2bae3c8a;hp=f1dc51a82ea61bf75fc7efa99d967fc85d47934d;hpb=cbb4ffb6428f52eaea42f6039332af0c392cdd0f;p=tiger.ml.git diff --git a/compiler/src/lib/tiger/tiger_symbol.ml b/compiler/src/lib/tiger/tiger_symbol.ml index f1dc51a..747cb03 100644 --- a/compiler/src/lib/tiger/tiger_symbol.ml +++ b/compiler/src/lib/tiger/tiger_symbol.ml @@ -5,22 +5,29 @@ type t = ; symbol : int } -let nextsym = ref 0 +let counter = ref 0 let symbols = H.create 16 +let unique_of_string name = + incr counter; + let symbol = !counter in + {name; symbol} + 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 t = unique_of_string name in + H.replace symbols ~key:t.name ~data:t.symbol; + t let to_string {name; _} = name let is_equal {symbol=s1; _} {symbol=s2; _} = s1 = s2 + +let show {name; symbol} = + Printf.sprintf "Symbol[%S, %d]" name symbol