10 extern struct obstack ast_obstack;
34 declaration_t *declarations;
35 compound_type_t *structs;
36 compound_type_t *unions;
41 expresion_type_t type;
43 source_position_t source_position;
47 expression_t expression;
50 long double float_value;
54 struct string_literal_t {
55 expression_t expression;
59 struct builtin_symbol_expression_t {
60 expression_t expression;
64 struct reference_expression_t {
65 expression_t expression;
67 declaration_t *declaration;
70 struct call_argument_t {
71 expression_t *expression;
72 call_argument_t *next;
75 struct call_expression_t {
76 expression_t expression;
78 call_argument_t *arguments;
85 UNEXPR_BITWISE_NEGATE,
89 UNEXPR_POSTFIX_INCREMENT,
90 UNEXPR_POSTFIX_DECREMENT,
91 UNEXPR_PREFIX_INCREMENT,
92 UNEXPR_PREFIX_DECREMENT,
94 } unary_expression_type_t;
96 struct unary_expression_t {
97 expression_t expression;
98 unary_expression_type_t type;
114 BINEXPR_GREATEREQUAL,
128 BINEXPR_SHIFTLEFT_ASSIGN,
129 BINEXPR_SHIFTRIGHT_ASSIGN,
130 BINEXPR_BITWISE_AND_ASSIGN,
131 BINEXPR_BITWISE_XOR_ASSIGN,
132 BINEXPR_BITWISE_OR_ASSIGN,
134 } binary_expression_type_t;
136 struct binary_expression_t {
137 expression_t expression;
138 binary_expression_type_t type;
143 struct select_expression_t {
144 expression_t expression;
145 expression_t *compound;
148 declaration_t *compound_entry;
151 struct array_access_expression_t {
152 expression_t expression;
153 expression_t *array_ref;
157 struct sizeof_expression_t {
158 expression_t expression;
160 expression_t *size_expression;
163 struct designator_t {
165 expression_t *array_access;
169 struct offsetof_expression_t {
170 expression_t expression;
172 designator_t *designator;
175 struct va_arg_expression_t {
176 expression_t expression;
181 struct conditional_expression_t {
182 expression_t expression;
183 expression_t *condition;
184 expression_t *true_expression;
185 expression_t *false_expression;
188 struct statement_expression_t {
189 expression_t expression;
190 statement_t *statement;
195 STORAGE_CLASS_TYPEDEF,
196 STORAGE_CLASS_EXTERN,
197 STORAGE_CLASS_STATIC,
199 STORAGE_CLASS_REGISTER,
200 STORAGE_CLASS_ENUM_ENTRY
206 } initializer_type_t;
208 struct initializer_t {
209 initializer_type_t type;
210 designator_t *designator;
218 struct declaration_t {
219 storage_class_t storage_class;
222 statement_t *statement;
223 initializer_t *initializer;
224 source_position_t source_position;
234 STATEMENT_DECLARATION,
237 STATEMENT_EXPRESSION,
242 STATEMENT_CASE_LABEL,
249 statement_type_t type;
251 source_position_t source_position;
254 struct return_statement_t {
255 statement_t statement;
256 expression_t *return_value;
259 struct compound_statement_t {
260 statement_t statement;
261 statement_t *statements;
265 struct declaration_statement_t {
266 statement_t statement;
267 declaration_t *declarations_begin;
268 declaration_t *declarations_end;
270 int value_number; /**< filled in by semantic phase */
274 struct if_statement_t {
275 statement_t statement;
276 expression_t *condition;
277 statement_t *true_statement;
278 statement_t *false_statement;
281 struct switch_statement_t {
282 statement_t statement;
283 expression_t *expression;
287 struct goto_statement_t {
288 statement_t statement;
289 symbol_t *label_symbol;
290 label_statement_t *label;
293 struct case_label_statement_t {
294 statement_t statement;
295 expression_t *expression;
298 struct label_statement_t {
299 statement_t statement;
303 struct expression_statement_t {
304 statement_t statement;
305 expression_t *expression;
308 struct while_statement_t {
309 statement_t statement;
310 expression_t *condition;
314 struct do_while_statement_t {
315 statement_t statement;
316 expression_t *condition;
320 struct for_statement_t {
321 statement_t statement;
322 expression_t *initialisation;
323 expression_t *condition;
329 struct translation_unit_t {
334 void *_allocate_ast(size_t size)
336 return obstack_alloc(&ast_obstack, size);
339 #define allocate_ast(size) _allocate_ast(size)