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;
49 long double float_value;
53 struct string_literal_t {
54 expression_t expression;
58 struct builtin_symbol_expression_t {
59 expression_t expression;
63 struct reference_expression_t {
64 expression_t expression;
66 declaration_t *declaration;
69 struct call_argument_t {
70 expression_t *expression;
71 call_argument_t *next;
74 struct call_expression_t {
75 expression_t expression;
77 call_argument_t *arguments;
84 UNEXPR_BITWISE_NEGATE,
88 UNEXPR_POSTFIX_INCREMENT,
89 UNEXPR_POSTFIX_DECREMENT,
90 UNEXPR_PREFIX_INCREMENT,
91 UNEXPR_PREFIX_DECREMENT,
93 } unary_expression_type_t;
95 struct unary_expression_t {
96 expression_t expression;
97 unary_expression_type_t type;
113 BINEXPR_GREATEREQUAL,
127 BINEXPR_SHIFTLEFT_ASSIGN,
128 BINEXPR_SHIFTRIGHT_ASSIGN,
129 BINEXPR_BITWISE_AND_ASSIGN,
130 BINEXPR_BITWISE_XOR_ASSIGN,
131 BINEXPR_BITWISE_OR_ASSIGN,
133 } binary_expression_type_t;
135 struct binary_expression_t {
136 expression_t expression;
137 binary_expression_type_t type;
142 struct select_expression_t {
143 expression_t expression;
144 expression_t *compound;
147 declaration_t *compound_entry;
150 struct array_access_expression_t {
151 expression_t expression;
152 expression_t *array_ref;
156 struct sizeof_expression_t {
157 expression_t expression;
159 expression_t *size_expression;
162 struct member_designator_t {
164 expression_t *array_access;
165 member_designator_t *next;
168 struct offsetof_expression_t {
169 expression_t expression;
171 member_designator_t *member_designators;
174 struct conditional_expression_t {
175 expression_t expression;
176 expression_t *condition;
177 expression_t *true_expression;
178 expression_t *false_expression;
181 struct statement_expression_t {
182 expression_t expression;
183 statement_t *statement;
188 STORAGE_CLASS_TYPEDEF,
189 STORAGE_CLASS_EXTERN,
190 STORAGE_CLASS_STATIC,
192 STORAGE_CLASS_REGISTER,
193 STORAGE_CLASS_ENUM_ENTRY
196 struct declaration_t {
197 storage_class_t storage_class;
200 statement_t *statement;
201 expression_t *initializer;
202 source_position_t source_position;
212 STATEMENT_DECLARATION,
215 STATEMENT_EXPRESSION,
220 STATEMENT_CASE_LABEL,
227 statement_type_t type;
229 source_position_t source_position;
232 struct return_statement_t {
233 statement_t statement;
234 expression_t *return_value;
237 struct compound_statement_t {
238 statement_t statement;
239 statement_t *statements;
243 struct declaration_statement_t {
244 statement_t statement;
245 declaration_t *declarations_begin;
246 declaration_t *declarations_end;
248 int value_number; /**< filled in by semantic phase */
252 struct if_statement_t {
253 statement_t statement;
254 expression_t *condition;
255 statement_t *true_statement;
256 statement_t *false_statement;
259 struct switch_statement_t {
260 statement_t statement;
261 expression_t *expression;
265 struct goto_statement_t {
266 statement_t statement;
267 symbol_t *label_symbol;
268 label_statement_t *label;
271 struct case_label_statement_t {
272 statement_t statement;
273 expression_t *expression;
276 struct label_statement_t {
277 statement_t statement;
281 struct expression_statement_t {
282 statement_t statement;
283 expression_t *expression;
286 struct while_statement_t {
287 statement_t statement;
288 expression_t *condition;
292 struct do_while_statement_t {
293 statement_t statement;
294 expression_t *condition;
298 struct for_statement_t {
299 statement_t statement;
300 expression_t *initialisation;
301 expression_t *condition;
307 struct translation_unit_t {
312 void *_allocate_ast(size_t size)
314 return obstack_alloc(&ast_obstack, size);
317 #define allocate_ast(size) _allocate_ast(size)