4 #include <libfirm/firm_types.h>
13 extern struct obstack ast_obstack;
39 declaration_t *declarations;
42 struct expression_base_t {
43 expression_type_t type;
45 source_position_t source_position;
48 struct const_expression_t {
49 expression_base_t expression;
52 long double float_value;
56 struct string_literal_expression_t {
57 expression_base_t expression;
61 struct builtin_symbol_expression_t {
62 expression_base_t expression;
66 struct reference_expression_t {
67 expression_base_t expression;
69 declaration_t *declaration;
72 struct call_argument_t {
73 expression_t *expression;
74 call_argument_t *next;
77 struct call_expression_t {
78 expression_base_t expression;
79 expression_t *function;
80 call_argument_t *arguments;
87 UNEXPR_BITWISE_NEGATE,
91 UNEXPR_POSTFIX_INCREMENT,
92 UNEXPR_POSTFIX_DECREMENT,
93 UNEXPR_PREFIX_INCREMENT,
94 UNEXPR_PREFIX_DECREMENT,
96 } unary_expression_type_t;
98 struct unary_expression_t {
99 expression_base_t expression;
100 unary_expression_type_t type;
116 BINEXPR_GREATEREQUAL,
130 BINEXPR_SHIFTLEFT_ASSIGN,
131 BINEXPR_SHIFTRIGHT_ASSIGN,
132 BINEXPR_BITWISE_AND_ASSIGN,
133 BINEXPR_BITWISE_XOR_ASSIGN,
134 BINEXPR_BITWISE_OR_ASSIGN,
136 } binary_expression_type_t;
138 struct binary_expression_t {
139 expression_base_t expression;
140 binary_expression_type_t type;
145 struct select_expression_t {
146 expression_base_t expression;
147 expression_t *compound;
150 declaration_t *compound_entry;
153 struct array_access_expression_t {
154 expression_base_t expression;
155 expression_t *array_ref;
157 bool flipped; /* index/ref was written in a 5[a] way */
160 struct sizeof_expression_t {
161 expression_base_t expression;
163 expression_t *size_expression;
166 struct designator_t {
168 expression_t *array_access;
172 struct offsetof_expression_t {
173 expression_base_t expression;
175 designator_t *designator;
178 struct va_arg_expression_t {
179 expression_base_t expression;
184 struct conditional_expression_t {
185 expression_base_t expression;
186 expression_t *condition;
187 expression_t *true_expression;
188 expression_t *false_expression;
191 struct statement_expression_t {
192 expression_base_t expression;
193 statement_t *statement;
196 struct classify_type_expression_t {
197 expression_base_t expression;
198 expression_t *type_expression;
202 expression_type_t type;
203 expression_base_t base;
204 const_expression_t conste;
205 string_literal_expression_t string_literal;
206 builtin_symbol_expression_t builtin_symbol;
207 reference_expression_t reference;
208 call_expression_t call;
209 unary_expression_t unary;
210 binary_expression_t binary;
211 select_expression_t select;
212 array_access_expression_t array_access;
213 sizeof_expression_t sizeofe;
214 offsetof_expression_t offsetofe;
215 va_arg_expression_t va_arge;
216 conditional_expression_t conditional;
217 statement_expression_t statement;
218 classify_type_expression_t classify_type;
223 STORAGE_CLASS_TYPEDEF,
224 STORAGE_CLASS_EXTERN,
225 STORAGE_CLASS_STATIC,
227 STORAGE_CLASS_REGISTER,
228 STORAGE_CLASS_ENUM_ENTRY
229 } storage_class_tag_t;
244 } initializer_type_t;
246 struct initializer_base_t {
247 initializer_type_t type;
250 struct initializer_value_t {
251 initializer_base_t initializer;
255 struct initializer_list_t {
256 initializer_base_t initializer;
258 initializer_t *initializers[];
261 struct initializer_string_t {
262 initializer_base_t initializer;
266 union initializer_t {
267 initializer_type_t type;
268 initializer_base_t base;
269 initializer_value_t value;
270 initializer_list_t list;
271 initializer_string_t string;
274 struct declaration_t {
275 unsigned char namespc;
276 unsigned char storage_class;
277 unsigned int address_taken : 1;
278 unsigned int is_inline : 1;
281 source_position_t source_position;
284 statement_t *statement;
285 initializer_t *initializer;
286 expression_t *enum_value;
289 context_t *parent_context;
291 /** next declaration in a context */
293 /** next declaration with same symbol */
294 declaration_t *symbol_next;
296 unsigned char declaration_type; /* used in ast2firm module */
298 unsigned int value_number; /* used in ast2firm module */
299 ir_entity *entity; /* used in ast2firm module */
300 ir_node *block; /* used in ast2firm module */
301 tarval *enum_val; /* used in ast2firm module */
309 STATEMENT_DECLARATION,
312 STATEMENT_EXPRESSION,
317 STATEMENT_CASE_LABEL,
323 struct statement_base_t {
324 statement_type_t type;
326 source_position_t source_position;
329 struct return_statement_t {
330 statement_base_t statement;
331 expression_t *return_value;
334 struct compound_statement_t {
335 statement_base_t statement;
336 statement_t *statements;
340 struct declaration_statement_t {
341 statement_base_t statement;
342 declaration_t *declarations_begin;
343 declaration_t *declarations_end;
346 struct if_statement_t {
347 statement_base_t statement;
348 expression_t *condition;
349 statement_t *true_statement;
350 statement_t *false_statement;
353 struct switch_statement_t {
354 statement_base_t statement;
355 expression_t *expression;
359 struct goto_statement_t {
360 statement_base_t statement;
361 declaration_t *label;
364 struct case_label_statement_t {
365 statement_base_t statement;
366 expression_t *expression;
367 statement_t *label_statement;
370 struct label_statement_t {
371 statement_base_t statement;
372 declaration_t *label;
373 statement_t *label_statement;
376 struct expression_statement_t {
377 statement_base_t statement;
378 expression_t *expression;
381 struct while_statement_t {
382 statement_base_t statement;
383 expression_t *condition;
387 struct do_while_statement_t {
388 statement_base_t statement;
389 expression_t *condition;
393 struct for_statement_t {
394 statement_base_t statement;
395 expression_t *initialisation;
396 expression_t *condition;
403 statement_type_t type;
404 statement_base_t base;
405 return_statement_t returns;
406 compound_statement_t compound;
407 declaration_statement_t declaration;
409 switch_statement_t switchs;
410 goto_statement_t gotos;
411 case_label_statement_t case_label;
412 label_statement_t label;
413 expression_statement_t expression;
414 while_statement_t whiles;
415 do_while_statement_t do_while;
416 for_statement_t fors;
419 struct translation_unit_t {
424 void *_allocate_ast(size_t size)
426 return obstack_alloc(&ast_obstack, size);
429 #define allocate_ast(size) _allocate_ast(size)