10 extern struct obstack ast_obstack;
33 declaration_t *declarations;
34 compound_type_t *structs;
35 compound_type_t *unions;
40 expresion_type_t type;
42 source_position_t source_position;
46 expression_t expression;
50 struct string_literal_t {
51 expression_t expression;
55 struct builtin_symbol_expression_t {
57 expression_t expression;
60 struct reference_expression_t {
61 expression_t expression;
63 declaration_t *declaration;
66 struct call_argument_t {
67 expression_t *expression;
68 call_argument_t *next;
71 struct call_expression_t {
72 expression_t expression;
74 call_argument_t *arguments;
81 UNEXPR_BITWISE_NEGATE,
85 UNEXPR_POSTFIX_INCREMENT,
86 UNEXPR_POSTFIX_DECREMENT,
87 UNEXPR_PREFIX_INCREMENT,
88 UNEXPR_PREFIX_DECREMENT,
90 } unary_expression_type_t;
92 struct unary_expression_t {
93 expression_t expression;
94 unary_expression_type_t type;
110 BINEXPR_GREATEREQUAL,
124 BINEXPR_SHIFTLEFT_ASSIGN,
125 BINEXPR_SHIFTRIGHT_ASSIGN,
126 BINEXPR_BITWISE_AND_ASSIGN,
127 BINEXPR_BITWISE_XOR_ASSIGN,
128 BINEXPR_BITWISE_OR_ASSIGN,
130 } binary_expression_type_t;
132 struct binary_expression_t {
133 expression_t expression;
134 binary_expression_type_t type;
139 struct select_expression_t {
140 expression_t expression;
141 expression_t *compound;
144 declaration_t *compound_entry;
147 struct array_access_expression_t {
148 expression_t expression;
149 expression_t *array_ref;
153 struct sizeof_expression_t {
154 expression_t expression;
156 expression_t *size_expression;
159 struct member_designator_t {
161 expression_t *array_access;
162 member_designator_t *next;
165 struct offsetof_expression_t {
166 expression_t expression;
168 member_designator_t *member_designators;
171 struct conditional_expression_t {
172 expression_t expression;
173 expression_t *condition;
174 expression_t *true_expression;
175 expression_t *false_expression;
178 struct statement_expression_t {
179 expression_t expression;
180 statement_t *statement;
185 STORAGE_CLASS_TYPEDEF,
186 STORAGE_CLASS_EXTERN,
187 STORAGE_CLASS_STATIC,
189 STORAGE_CLASS_REGISTER,
190 STORAGE_CLASS_ENUM_ENTRY
193 struct declaration_t {
194 storage_class_t storage_class;
197 statement_t *statement;
198 expression_t *initializer;
199 source_position_t source_position;
209 STATEMENT_DECLARATION,
212 STATEMENT_EXPRESSION,
217 STATEMENT_CASE_LABEL,
224 statement_type_t type;
226 source_position_t source_position;
229 struct return_statement_t {
230 statement_t statement;
231 expression_t *return_value;
234 struct compound_statement_t {
235 statement_t statement;
236 statement_t *statements;
240 struct declaration_statement_t {
241 statement_t statement;
242 declaration_t *declarations_begin;
243 declaration_t *declarations_end;
245 int value_number; /**< filled in by semantic phase */
249 struct if_statement_t {
250 statement_t statement;
251 expression_t *condition;
252 statement_t *true_statement;
253 statement_t *false_statement;
256 struct switch_statement_t {
257 statement_t statement;
258 expression_t *expression;
262 struct goto_statement_t {
263 statement_t statement;
264 symbol_t *label_symbol;
265 label_statement_t *label;
268 struct case_label_statement_t {
269 statement_t statement;
270 expression_t *expression;
273 struct label_statement_t {
274 statement_t statement;
278 struct expression_statement_t {
279 statement_t statement;
280 expression_t *expression;
283 struct while_statement_t {
284 statement_t statement;
285 expression_t *condition;
289 struct do_while_statement_t {
290 statement_t statement;
291 expression_t *condition;
295 struct for_statement_t {
296 statement_t statement;
297 expression_t *initialisation;
298 expression_t *condition;
304 struct translation_unit_t {
309 void *_allocate_ast(size_t size)
311 return obstack_alloc(&ast_obstack, size);
314 #define allocate_ast(size) _allocate_ast(size)