Commit | Line | Data |
---|---|---|
cc540a7e SK |
1 | open Printf |
2 | ||
3 | module Sym = Tiger_symbol | |
4 | ||
5 | module Counter : sig | |
6 | type t | |
7 | ||
8 | val create : unit -> t | |
9 | ||
10 | val next : t -> int | |
11 | end = struct | |
12 | type t = int ref | |
13 | ||
14 | let create () = | |
15 | ref 0 | |
16 | ||
17 | let next t = | |
18 | incr t; | |
19 | !t | |
20 | end | |
21 | ||
22 | module Temp = struct | |
23 | type t = int | |
24 | ||
25 | let t = Counter.create () | |
26 | ||
27 | let gen () = | |
28 | Counter.next t | |
29 | ||
30 | let to_string t = | |
31 | sprintf "t%d" t | |
32 | end | |
33 | ||
34 | module Label = struct | |
35 | type t = Sym.t | |
36 | ||
37 | let counter = Counter.create () | |
38 | ||
39 | let of_string = | |
40 | Sym.of_string | |
41 | ||
42 | let gen () = | |
43 | of_string (sprintf "L%d" (Counter.next counter)) | |
44 | ||
45 | let to_string = | |
46 | Sym.to_string | |
47 | end |