10 extern struct obstack ast_obstack;
26 expresion_type_t type;
28 source_position_t source_position;
32 expression_t expression;
36 struct string_literal_t {
37 expression_t expression;
41 struct reference_expression_t {
42 expression_t expression;
44 declaration_t *declaration;
47 struct call_argument_t {
48 expression_t *expression;
49 call_argument_t *next;
52 struct call_expression_t {
53 expression_t expression;
55 call_argument_t *arguments;
62 UNEXPR_BITWISE_NEGATE,
66 UNEXPR_POSTFIX_INCREMENT,
67 UNEXPR_POSTFIX_DECREMENT,
68 UNEXPR_PREFIX_INCREMENT,
69 UNEXPR_PREFIX_DECREMENT,
71 } unary_expression_type_t;
73 struct unary_expression_t {
74 expression_t expression;
75 unary_expression_type_t type;
105 BINEXPR_SHIFTLEFT_ASSIGN,
106 BINEXPR_SHIFTRIGHT_ASSIGN,
107 BINEXPR_BITWISE_AND_ASSIGN,
108 BINEXPR_BITWISE_XOR_ASSIGN,
109 BINEXPR_BITWISE_OR_ASSIGN
110 } binary_expression_type_t;
112 struct binary_expression_t {
113 expression_t expression;
114 binary_expression_type_t type;
119 struct select_expression_t {
120 expression_t expression;
121 expression_t *compound;
124 compound_entry_t *compound_entry;
127 struct array_access_expression_t {
128 expression_t expression;
129 expression_t *array_ref;
133 struct sizeof_expression_t {
134 expression_t expression;
138 struct conditional_expression_t {
139 expression_t expression;
140 expression_t *condition;
141 expression_t *true_expression;
142 expression_t *false_expression;
145 struct expression_list_element_t {
146 expression_t *expression;
150 struct comma_expression_t {
151 expression_t expression;
152 expression_list_element_t *expressions;
157 STORAGE_CLASS_TYPEDEF,
158 STORAGE_CLASS_EXTERN,
159 STORAGE_CLASS_STATIC,
161 STORAGE_CLASS_REGISTER
164 struct method_parameter_t {
165 method_parameter_t *next;
171 struct declaration_t {
172 storage_class_t storage_class;
175 method_parameter_t *parameters;
176 statement_t *statement;
177 source_position_t source_position;
184 STATEMENT_DECLARATION,
186 STATEMENT_EXPRESSION,
192 statement_type_t type;
194 source_position_t source_position;
197 struct return_statement_t {
198 statement_t statement;
199 expression_t *return_value;
202 struct block_statement_t {
203 statement_t statement;
204 statement_t *first_statement;
207 struct declaration_statement_t {
208 statement_t statement;
209 declaration_t declaration;
211 int value_number; /**< filled in by semantic phase */
215 struct if_statement_t {
216 statement_t statement;
217 expression_t *condition;
218 statement_t *true_statement;
219 statement_t *false_statement;
222 struct goto_statement_t {
223 statement_t statement;
224 symbol_t *label_symbol;
225 label_statement_t *label;
228 struct label_statement_t {
229 statement_t statement;
233 struct expression_statement_t {
234 statement_t statement;
235 expression_t *expression;
238 struct unit_entry_t {
239 declaration_t declaration;
243 struct translation_unit_t {
244 unit_entry_t *entries;
248 void *_allocate_ast(size_t size)
250 return obstack_alloc(&ast_obstack, size);
253 #define allocate_ast(size) _allocate_ast(size)