Begin translation module
[tiger.ml.git] / compiler / src / lib / tiger / tiger_symbol.ml
index b5d895b..a850406 100644 (file)
@@ -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
This page took 0.024633 seconds and 4 git commands to generate.