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;
45 variable_declaration_statement_t *variable;
47 global_variable_t *global_variable;
48 method_parameter_t *method_parameter;
52 struct call_argument_t {
53 expression_t *expression;
54 call_argument_t *next;
57 struct call_expression_t {
58 expression_t expression;
60 call_argument_t *arguments;
66 UNEXPR_BITWISE_NEGATE,
70 UNEXPR_POSTFIX_INCREMENT,
71 UNEXPR_POSTFIX_DECREMENT,
72 UNEXPR_PREFIX_INCREMENT,
73 UNEXPR_PREFIX_DECREMENT,
75 } unary_expression_type_t;
77 struct unary_expression_t {
78 expression_t expression;
79 unary_expression_type_t type;
109 BINEXPR_SHIFTLEFT_ASSIGN,
110 BINEXPR_SHIFTRIGHT_ASSIGN,
111 BINEXPR_BITWISE_AND_ASSIGN,
112 BINEXPR_BITWISE_XOR_ASSIGN,
113 BINEXPR_BITWISE_OR_ASSIGN
114 } binary_expression_type_t;
116 struct binary_expression_t {
117 expression_t expression;
118 binary_expression_type_t type;
123 struct select_expression_t {
124 expression_t expression;
125 expression_t *compound;
128 compound_entry_t *compound_entry;
131 struct array_access_expression_t {
132 expression_t expression;
133 expression_t *array_ref;
137 struct sizeof_expression_t {
138 expression_t expression;
141 expression_t *size_expression;
145 struct conditional_expression_t {
146 expression_t expression;
147 expression_t *condition;
148 expression_t *true_expression;
149 expression_t *false_expression;
152 struct expression_list_element_t {
153 expression_t *expression;
157 struct comma_expression_t {
158 expression_t expression;
159 expression_list_element_t *expressions;
166 STATEMENT_VARIABLE_DECLARATION,
168 STATEMENT_EXPRESSION,
174 statement_type_t type;
176 source_position_t source_position;
179 struct return_statement_t {
180 statement_t statement;
181 expression_t *return_value;
184 struct block_statement_t {
185 statement_t statement;
186 statement_t *first_statement;
189 struct variable_declaration_statement_t {
190 statement_t statement;
194 int value_number; /**< filled in by semantic phase */
198 struct if_statement_t {
199 statement_t statement;
200 expression_t *condition;
201 statement_t *true_statement;
202 statement_t *false_statement;
205 struct goto_statement_t {
206 statement_t statement;
207 symbol_t *label_symbol;
208 label_statement_t *label;
211 struct label_statement_t {
212 statement_t statement;
216 struct expression_statement_t {
217 statement_t statement;
218 expression_t *expression;
221 enum namespace_entry_type_t {
222 NAMESPACE_ENTRY_INVALID,
223 NAMESPACE_ENTRY_METHOD,
224 NAMESPACE_ENTRY_VARIABLE,
227 struct namespace_entry_t {
228 namespace_entry_type_t type;
229 namespace_entry_t *next;
230 source_position_t source_position;
233 struct method_parameter_t {
234 method_parameter_t *next;
241 namespace_entry_t namespace_entry;
244 method_parameter_t *parameters;
246 statement_t *statement;
249 struct global_variable_t {
250 namespace_entry_t namespace_entry;
256 namespace_entry_t *entries;
260 void *_allocate_ast(size_t size)
262 return obstack_alloc(&ast_obstack, size);
265 #define allocate_ast(size) _allocate_ast(size)