19 ; pos : Tiger_position.t
22 { func : Tiger_symbol.t
24 ; pos : Tiger_position.t
30 ; pos : Tiger_position.t
33 { fields : (Tiger_symbol.t * exp * Tiger_position.t) list
34 ; typ : Tiger_symbol.t
35 ; pos : Tiger_position.t
38 (exp * Tiger_position.t) list
42 ; pos : Tiger_position.t
48 ; pos : Tiger_position.t
53 ; pos : Tiger_position.t
56 { var : Tiger_symbol.t
57 ; escape : bool ref (* Whoa - why a mutable cell in AST? *)
61 ; pos : Tiger_position.t
68 ; pos : Tiger_position.t
71 { typ : Tiger_symbol.t
74 ; pos : Tiger_position.t
80 { symbol : Tiger_symbol.t
81 ; pos : Tiger_position.t
85 ; symbol : Tiger_symbol.t
86 ; pos : Tiger_position.t
91 ; pos : Tiger_position.t
94 | FunDecs of (* "FunctionDec" in Appel's code *)
97 { name : Tiger_symbol.t
98 ; escape : bool ref (* Again, why mutable? *)
99 ; typ : (Tiger_symbol.t * Tiger_position.t) option
101 ; pos : Tiger_position.t
103 | TypeDecs of (* "TypeDec" in Appel's code *)
107 { symbol : Tiger_symbol.t
108 ; pos : Tiger_position.t
113 { symbol : Tiger_symbol.t
114 ; pos : Tiger_position.t
118 { name : Tiger_symbol.t
120 ; typ : Tiger_symbol.t
121 ; pos : Tiger_position.t
124 | TypeDec of (* An anonymous record in Appel's code *)
125 { name : Tiger_symbol.t
127 ; pos : Tiger_position.t
131 { name : Tiger_symbol.t
132 ; params : field list
133 ; result : (Tiger_symbol.t * Tiger_position.t) option
135 ; pos : Tiger_position.t
140 val to_string : t -> string
142 val op_show : oper -> string