Lines Matching refs:expr
62 *do_initializer(struct symbol *type, struct expression *expr),
63 *do_expression(usage_t mode, struct expression *expr),
145 static inline struct symbol *expr_symbol(struct expression *expr) in expr_symbol() argument
147 struct symbol *sym = expr->symbol; in expr_symbol()
150 sym = lookup_symbol(expr->symbol_name, NS_SYMBOL); in expr_symbol()
153 sym = alloc_symbol(expr->pos, SYM_BAD); in expr_symbol()
154 bind_symbol(sym, expr->symbol_name, NS_SYMBOL); in expr_symbol()
155 sym->kind = expr->op ?: 'v'; /* see EXPR_CALL */ in expr_symbol()
165 static struct symbol *report_symbol(usage_t mode, struct expression *expr) in report_symbol() argument
167 struct symbol *sym = expr_symbol(expr); in report_symbol()
171 return report_member(mode, &expr->pos, ret, expr->symbol); in report_symbol()
173 reporter->r_symbol(fix_mode(ret, mode), &expr->pos, sym); in report_symbol()
317 static struct expression *peek_preop(struct expression *expr, int op) in peek_preop() argument
320 if (expr->type != EXPR_PREOP) in peek_preop()
322 if (expr->op == op) in peek_preop()
323 return expr->unop; in peek_preop()
324 if (expr->op == '(') in peek_preop()
325 expr = expr->unop; in peek_preop()
328 } while (expr); in peek_preop()
333 static struct symbol *do_expression(usage_t mode, struct expression *expr) in do_expression() argument
338 if (expr) switch (expr->type) { in do_expression()
340 warning(expr->pos, "bad expr->type: %d", expr->type); in do_expression()
353 ret = do_statement(mode, expr->statement); in do_expression()
356 do_expression(U_VOID, expr->cast_expression); in do_expression()
359 do_expression(U_VOID, expr->left); in do_expression()
360 ret = do_expression(mode, expr->right); in do_expression()
363 ret = base_type(expr->cast_type); in do_expression()
364 do_initializer(ret, expr->cast_expression); in do_expression()
368 do_expression(mode, expr->left); in do_expression()
369 do_expression(mode, expr->right); in do_expression()
372 do_expression(expr->cond_true in do_expression()
374 expr->conditional); in do_expression()
375 ret = do_expression(mode, expr->cond_true); in do_expression()
376 ret = do_expression(mode, expr->cond_false); in do_expression()
379 if (expr->fn->type == EXPR_SYMBOL) in do_expression()
380 expr->fn->op = 'f'; /* for expr_symbol() */ in do_expression()
381 ret = do_expression(U_R_PTR, expr->fn); in do_expression()
384 DO_2_LIST(ret->arguments, expr->args, arg, val, in do_expression()
391 if (expr->op == '=') in do_expression()
393 ret = do_expression(mode, expr->left); in do_expression()
394 report_implicit(mode, &expr->pos, ret); in do_expression()
395 mode = expr->op == '=' in do_expression()
397 do_expression(mode, expr->right); in do_expression()
402 l = do_expression(mode, expr->left); in do_expression()
403 r = do_expression(mode, expr->right); in do_expression()
404 if (expr->op != '+' && expr->op != '-') in do_expression()
413 struct expression *unop = expr->unop; in do_expression()
415 switch (expr->op) { in do_expression()
425 if ((expr = peek_preop(unop, '*'))) in do_expression()
432 if ((expr = peek_preop(unop, '&'))) in do_expression()
454 p_type = do_expression(p_mode, expr->deref); in do_expression()
456 ret = report_member(mode, &expr->pos, p_type, in do_expression()
457 lookup_member(p_type, expr->member, NULL)); in do_expression()
461 struct symbol *in = base_type(expr->in); in do_expression()
464 if (expr->op == '.') { in do_expression()
465 in = report_member(U_VOID, &expr->pos, in, in do_expression()
466 lookup_member(in, expr->ident, NULL)); in do_expression()
468 do_expression(U_R_VAL, expr->index); in do_expression()
471 } while ((expr = expr->down)); in do_expression()
477 do_expression(U_VOID, expr->control); in do_expression()
479 for (map = expr->map; map; map = map->next) in do_expression()
480 ret = do_expression(mode, map->expr); in do_expression()
481 if (expr->def) in do_expression()
482 ret = do_expression(mode, expr->def); in do_expression()
486 ret = report_symbol(mode, expr); in do_expression()
494 DO_LIST(xputs, op, do_expression(U_W_AOF | mode, op->expr)); in do_asm_xputs()
566 static struct symbol *do_initializer(struct symbol *type, struct expression *expr) in do_initializer() argument
572 if (expr) switch (expr->type) { in do_initializer()
574 do_expression(u_lval(type), expr); in do_initializer()
577 do_initializer(base_type(type), expr->idx_expression); in do_initializer()
581 FOR_EACH_PTR(expr->expr_list, m_expr) { in do_initializer()