244 };
245 };
246
247 /* Constant expression values */
248 int is_zero_constant(struct expression *);
249 int expr_truth_value(struct expression *expr);
250 long long get_expression_value(struct expression *);
251 long long const_expression_value(struct expression *);
252 long long get_expression_value_silent(struct expression *expr);
253
254 /* Expression parsing */
255 struct token *parse_expression(struct token *token, struct expression **tree);
256 struct token *conditional_expression(struct token *token, struct expression **tree);
257 struct token *primary_expression(struct token *token, struct expression **tree);
258 struct token *parens_expression(struct token *token, struct expression **expr, const char *where);
259 struct token *assignment_expression(struct token *token, struct expression **tree);
260
261 extern void evaluate_symbol_list(struct symbol_list *list);
262 extern struct symbol *evaluate_statement(struct statement *stmt);
263 extern struct symbol *evaluate_expression(struct expression *);
264
265 extern int expand_symbol(struct symbol *);
266
267 static inline struct expression *alloc_expression(struct position pos, int type)
268 {
269 struct expression *expr = __alloc_expression(0);
270 expr->type = type;
271 expr->pos = pos;
272 expr->flags = CEF_NONE;
273 return expr;
274 }
275
276 static inline struct expression *alloc_const_expression(struct position pos, int value)
277 {
278 struct expression *expr = __alloc_expression(0);
279 expr->type = EXPR_VALUE;
280 expr->pos = pos;
281 expr->value = value;
282 expr->ctype = &int_ctype;
283 expr->flags = CEF_SET_INT;
|
244 };
245 };
246
247 /* Constant expression values */
248 int is_zero_constant(struct expression *);
249 int expr_truth_value(struct expression *expr);
250 long long get_expression_value(struct expression *);
251 long long const_expression_value(struct expression *);
252 long long get_expression_value_silent(struct expression *expr);
253
254 /* Expression parsing */
255 struct token *parse_expression(struct token *token, struct expression **tree);
256 struct token *conditional_expression(struct token *token, struct expression **tree);
257 struct token *primary_expression(struct token *token, struct expression **tree);
258 struct token *parens_expression(struct token *token, struct expression **expr, const char *where);
259 struct token *assignment_expression(struct token *token, struct expression **tree);
260
261 extern void evaluate_symbol_list(struct symbol_list *list);
262 extern struct symbol *evaluate_statement(struct statement *stmt);
263 extern struct symbol *evaluate_expression(struct expression *);
264 struct symbol *find_identifier(struct ident *ident, struct symbol_list *_list, int *offset);
265
266 extern int expand_symbol(struct symbol *);
267
268 static inline struct expression *alloc_expression(struct position pos, int type)
269 {
270 struct expression *expr = __alloc_expression(0);
271 expr->type = type;
272 expr->pos = pos;
273 expr->flags = CEF_NONE;
274 return expr;
275 }
276
277 static inline struct expression *alloc_const_expression(struct position pos, int value)
278 {
279 struct expression *expr = __alloc_expression(0);
280 expr->type = EXPR_VALUE;
281 expr->pos = pos;
282 expr->value = value;
283 expr->ctype = &int_ctype;
284 expr->flags = CEF_SET_INT;
|