Check scope of break statements
[tiger.ml.git] / compiler / src / lib / tiger / tiger_symbol.ml
index f1dc51a..b5d895b 100644 (file)
@@ -5,22 +5,30 @@ type t =
   ; symbol : int
   }
 
   ; symbol : int
   }
 
-let nextsym = ref 0
+let counter = ref 0
 
 let symbols = H.create 16
 
 
 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 of_string name =
   match H.find_opt symbols name with
 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}
+  | Some s -> {name; symbol=s}
+  | None   -> new_of_string name
 
 let to_string {name; _} =
   name
 
 let is_equal {symbol=s1; _} {symbol=s2; _} =
   s1 = s2
 
 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
This page took 0.027908 seconds and 4 git commands to generate.