X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_symbol.ml;h=a850406bb0e55001c57a077810b0ac732ecbf632;hb=HEAD;hp=b5d895b084b428fb7cb03d0337aae6995d6db0f0;hpb=35dccbd3999a8c3bb1dc9e96e21b69a39f44fc6f;p=tiger.ml.git diff --git a/compiler/src/lib/tiger/tiger_symbol.ml b/compiler/src/lib/tiger/tiger_symbol.ml index b5d895b..a850406 100644 --- a/compiler/src/lib/tiger/tiger_symbol.ml +++ b/compiler/src/lib/tiger/tiger_symbol.ml @@ -5,24 +5,25 @@ type t = ; symbol : int } -let counter = ref 0 +let next = + let counter = ref 0 in + fun () -> + incr counter; + !counter let symbols = H.create 16 -let next name = - incr counter; - let symbol = !counter in - {name; symbol} - -let new_of_string name = - let t = next name in - H.replace symbols ~key:t.name ~data:t.symbol; - t +let unique_of_string name = + {name; symbol = next ()} let of_string name = match H.find_opt symbols name with - | Some s -> {name; symbol=s} - | None -> new_of_string name + | Some symbol -> + {name; symbol} + | None -> + let t = unique_of_string name in + H.replace symbols ~key:t.name ~data:t.symbol; + t let to_string {name; _} = name