4 #include <libfirm/firm_types.h>
12 extern struct obstack ast_obstack;
37 declaration_t *declarations;
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;
77 expression_t *function;
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
214 } initializer_type_t;
216 struct initializer_t {
217 initializer_type_t type;
218 designator_t *designator;
226 struct declaration_t {
227 unsigned char namespc;
228 unsigned char storage_class;
229 unsigned int address_taken : 1;
230 unsigned int is_inline : 1;
233 source_position_t source_position;
236 statement_t *statement;
237 initializer_t *initializer;
240 context_t *parent_context;
242 /** next declaration in a context */
244 /** next declaration with same symbol */
245 declaration_t *symbol_next;
247 unsigned char declaration_type; /* used in ast2firm module */
249 unsigned int value_number; /* used in ast2firm module */
250 ir_entity *entity; /* used in ast2firm module */
251 ir_node *block; /* used in ast2firm module */
259 STATEMENT_DECLARATION,
262 STATEMENT_EXPRESSION,
267 STATEMENT_CASE_LABEL,
274 statement_type_t type;
276 source_position_t source_position;
279 struct return_statement_t {
280 statement_t statement;
281 expression_t *return_value;
284 struct compound_statement_t {
285 statement_t statement;
286 statement_t *statements;
290 struct declaration_statement_t {
291 statement_t statement;
292 declaration_t *declarations_begin;
293 declaration_t *declarations_end;
296 struct if_statement_t {
297 statement_t statement;
298 expression_t *condition;
299 statement_t *true_statement;
300 statement_t *false_statement;
303 struct switch_statement_t {
304 statement_t statement;
305 expression_t *expression;
309 struct goto_statement_t {
310 statement_t statement;
311 declaration_t *label;
314 struct case_label_statement_t {
315 statement_t statement;
316 expression_t *expression;
319 struct label_statement_t {
320 statement_t statement;
321 declaration_t *label;
322 statement_t *label_statement;
325 struct expression_statement_t {
326 statement_t statement;
327 expression_t *expression;
330 struct while_statement_t {
331 statement_t statement;
332 expression_t *condition;
336 struct do_while_statement_t {
337 statement_t statement;
338 expression_t *condition;
342 struct for_statement_t {
343 statement_t statement;
344 expression_t *initialisation;
345 expression_t *condition;
351 struct translation_unit_t {
356 void *_allocate_ast(size_t size)
358 return obstack_alloc(&ast_obstack, size);
361 #define allocate_ast(size) _allocate_ast(size)