10 extern struct obstack ast_obstack;
32 declaration_t *declarations;
33 compound_type_t *structs;
34 compound_type_t *unions;
39 expresion_type_t type;
41 source_position_t source_position;
45 expression_t expression;
49 struct string_literal_t {
50 expression_t expression;
54 struct builtin_symbol_expression_t {
56 expression_t expression;
59 struct reference_expression_t {
60 expression_t expression;
62 declaration_t *declaration;
65 struct call_argument_t {
66 expression_t *expression;
67 call_argument_t *next;
70 struct call_expression_t {
71 expression_t expression;
73 call_argument_t *arguments;
80 UNEXPR_BITWISE_NEGATE,
84 UNEXPR_POSTFIX_INCREMENT,
85 UNEXPR_POSTFIX_DECREMENT,
86 UNEXPR_PREFIX_INCREMENT,
87 UNEXPR_PREFIX_DECREMENT,
89 } unary_expression_type_t;
91 struct unary_expression_t {
92 expression_t expression;
93 unary_expression_type_t type;
109 BINEXPR_GREATEREQUAL,
123 BINEXPR_SHIFTLEFT_ASSIGN,
124 BINEXPR_SHIFTRIGHT_ASSIGN,
125 BINEXPR_BITWISE_AND_ASSIGN,
126 BINEXPR_BITWISE_XOR_ASSIGN,
127 BINEXPR_BITWISE_OR_ASSIGN,
129 } binary_expression_type_t;
131 struct binary_expression_t {
132 expression_t expression;
133 binary_expression_type_t type;
138 struct select_expression_t {
139 expression_t expression;
140 expression_t *compound;
143 declaration_t *compound_entry;
146 struct array_access_expression_t {
147 expression_t expression;
148 expression_t *array_ref;
152 struct sizeof_expression_t {
153 expression_t expression;
155 expression_t *size_expression;
158 struct member_designator_t {
160 expression_t *array_access;
161 member_designator_t *next;
164 struct offsetof_expression_t {
165 expression_t expression;
167 member_designator_t *member_designators;
170 struct conditional_expression_t {
171 expression_t expression;
172 expression_t *condition;
173 expression_t *true_expression;
174 expression_t *false_expression;
177 struct statement_expression_t {
178 expression_t expression;
179 statement_t *statement;
184 STORAGE_CLASS_TYPEDEF,
185 STORAGE_CLASS_EXTERN,
186 STORAGE_CLASS_STATIC,
188 STORAGE_CLASS_REGISTER,
189 STORAGE_CLASS_ENUM_ENTRY
192 struct declaration_t {
193 storage_class_t storage_class;
196 statement_t *statement;
197 expression_t *initializer;
198 source_position_t source_position;
208 STATEMENT_DECLARATION,
211 STATEMENT_EXPRESSION,
216 STATEMENT_CASE_LABEL,
223 statement_type_t type;
225 source_position_t source_position;
228 struct return_statement_t {
229 statement_t statement;
230 expression_t *return_value;
233 struct compound_statement_t {
234 statement_t statement;
235 statement_t *statements;
239 struct declaration_statement_t {
240 statement_t statement;
241 declaration_t *declarations_begin;
242 declaration_t *declarations_end;
244 int value_number; /**< filled in by semantic phase */
248 struct if_statement_t {
249 statement_t statement;
250 expression_t *condition;
251 statement_t *true_statement;
252 statement_t *false_statement;
255 struct switch_statement_t {
256 statement_t statement;
257 expression_t *expression;
261 struct goto_statement_t {
262 statement_t statement;
263 symbol_t *label_symbol;
264 label_statement_t *label;
267 struct case_label_statement_t {
268 statement_t statement;
269 expression_t *expression;
272 struct label_statement_t {
273 statement_t statement;
277 struct expression_statement_t {
278 statement_t statement;
279 expression_t *expression;
282 struct while_statement_t {
283 statement_t statement;
284 expression_t *condition;
288 struct do_while_statement_t {
289 statement_t statement;
290 expression_t *condition;
294 struct for_statement_t {
295 statement_t statement;
296 expression_t *initialisation;
297 expression_t *condition;
303 struct translation_unit_t {
308 void *_allocate_ast(size_t size)
310 return obstack_alloc(&ast_obstack, size);
313 #define allocate_ast(size) _allocate_ast(size)