4 #include <libfirm/firm_types.h>
12 extern struct obstack ast_obstack;
38 declaration_t *declarations;
42 expresion_type_t type;
44 source_position_t source_position;
48 expression_t expression;
51 long double float_value;
55 struct string_literal_t {
56 expression_t expression;
60 struct builtin_symbol_expression_t {
61 expression_t expression;
65 struct reference_expression_t {
66 expression_t expression;
68 declaration_t *declaration;
71 struct call_argument_t {
72 expression_t *expression;
73 call_argument_t *next;
76 struct call_expression_t {
77 expression_t expression;
78 expression_t *function;
79 call_argument_t *arguments;
86 UNEXPR_BITWISE_NEGATE,
90 UNEXPR_POSTFIX_INCREMENT,
91 UNEXPR_POSTFIX_DECREMENT,
92 UNEXPR_PREFIX_INCREMENT,
93 UNEXPR_PREFIX_DECREMENT,
95 } unary_expression_type_t;
97 struct unary_expression_t {
98 expression_t expression;
99 unary_expression_type_t type;
115 BINEXPR_GREATEREQUAL,
129 BINEXPR_SHIFTLEFT_ASSIGN,
130 BINEXPR_SHIFTRIGHT_ASSIGN,
131 BINEXPR_BITWISE_AND_ASSIGN,
132 BINEXPR_BITWISE_XOR_ASSIGN,
133 BINEXPR_BITWISE_OR_ASSIGN,
135 } binary_expression_type_t;
137 struct binary_expression_t {
138 expression_t expression;
139 binary_expression_type_t type;
144 struct select_expression_t {
145 expression_t expression;
146 expression_t *compound;
149 declaration_t *compound_entry;
152 struct array_access_expression_t {
153 expression_t expression;
154 expression_t *array_ref;
158 struct sizeof_expression_t {
159 expression_t expression;
161 expression_t *size_expression;
164 struct designator_t {
166 expression_t *array_access;
170 struct offsetof_expression_t {
171 expression_t expression;
173 designator_t *designator;
176 struct va_arg_expression_t {
177 expression_t expression;
182 struct conditional_expression_t {
183 expression_t expression;
184 expression_t *condition;
185 expression_t *true_expression;
186 expression_t *false_expression;
189 struct statement_expression_t {
190 expression_t expression;
191 statement_t *statement;
194 struct classify_type_expression_t {
195 expression_t expression;
196 expression_t *type_expression;
201 STORAGE_CLASS_TYPEDEF,
202 STORAGE_CLASS_EXTERN,
203 STORAGE_CLASS_STATIC,
205 STORAGE_CLASS_REGISTER,
206 STORAGE_CLASS_ENUM_ENTRY
221 } initializer_type_t;
223 struct initializer_t {
224 initializer_type_t type;
227 struct initializer_value_t {
228 initializer_t initializer;
232 struct initializer_list_t {
233 initializer_t initializer;
235 initializer_t *initializers[];
238 struct initializer_string_t {
239 initializer_t initializer;
243 struct declaration_t {
244 unsigned char namespc;
245 unsigned char storage_class;
246 unsigned int address_taken : 1;
247 unsigned int is_inline : 1;
250 source_position_t source_position;
253 statement_t *statement;
254 initializer_t *initializer;
255 expression_t *enum_value;
258 context_t *parent_context;
260 /** next declaration in a context */
262 /** next declaration with same symbol */
263 declaration_t *symbol_next;
265 unsigned char declaration_type; /* used in ast2firm module */
267 unsigned int value_number; /* used in ast2firm module */
268 ir_entity *entity; /* used in ast2firm module */
269 ir_node *block; /* used in ast2firm module */
277 STATEMENT_DECLARATION,
280 STATEMENT_EXPRESSION,
285 STATEMENT_CASE_LABEL,
292 statement_type_t type;
294 source_position_t source_position;
297 struct return_statement_t {
298 statement_t statement;
299 expression_t *return_value;
302 struct compound_statement_t {
303 statement_t statement;
304 statement_t *statements;
308 struct declaration_statement_t {
309 statement_t statement;
310 declaration_t *declarations_begin;
311 declaration_t *declarations_end;
314 struct if_statement_t {
315 statement_t statement;
316 expression_t *condition;
317 statement_t *true_statement;
318 statement_t *false_statement;
321 struct switch_statement_t {
322 statement_t statement;
323 expression_t *expression;
327 struct goto_statement_t {
328 statement_t statement;
329 declaration_t *label;
332 struct case_label_statement_t {
333 statement_t statement;
334 expression_t *expression;
335 statement_t *label_statement;
338 struct label_statement_t {
339 statement_t statement;
340 declaration_t *label;
341 statement_t *label_statement;
344 struct expression_statement_t {
345 statement_t statement;
346 expression_t *expression;
349 struct while_statement_t {
350 statement_t statement;
351 expression_t *condition;
355 struct do_while_statement_t {
356 statement_t statement;
357 expression_t *condition;
361 struct for_statement_t {
362 statement_t statement;
363 expression_t *initialisation;
364 expression_t *condition;
370 struct translation_unit_t {
375 void *_allocate_ast(size_t size)
377 return obstack_alloc(&ast_obstack, size);
380 #define allocate_ast(size) _allocate_ast(size)