Lines Matching refs:expr

39 static struct expression * dup_expression(struct expression *expr)
41 struct expression *dup = alloc_expression(expr->pos, expr->type);
42 *dup = *expr;
78 static struct expression * copy_expression(struct expression *expr)
80 if (!expr)
83 switch (expr->type) {
89 struct symbol *sym = copy_symbol(expr->pos, expr->symbol);
90 if (sym == expr->symbol)
92 expr = dup_expression(expr);
93 expr->symbol = sym;
107 struct expression *unop = copy_expression(expr->unop);
108 if (expr->unop == unop)
110 expr = dup_expression(expr);
111 expr->unop = unop;
116 struct expression *base = copy_expression(expr->base);
117 expr = dup_expression(expr);
118 expr->base = base;
127 struct expression *left = copy_expression(expr->left);
128 struct expression *right = copy_expression(expr->right);
129 if (left == expr->left && right == expr->right)
131 expr = dup_expression(expr);
132 expr->left = left;
133 expr->right = right;
138 struct expression *left = copy_expression(expr->left);
139 struct expression *right = copy_expression(expr->right);
140 if (expr->op == '=' && left == expr->left && right == expr->right)
142 expr = dup_expression(expr);
143 expr->left = left;
144 expr->right = right;
150 struct expression *deref = copy_expression(expr->deref);
151 expr = dup_expression(expr);
152 expr->deref = deref;
158 if (expr->cast_expression->type == EXPR_INITIALIZER) {
159 struct expression *cast = expr->cast_expression;
160 struct symbol *sym = expr->cast_type;
161 expr = dup_expression(expr);
162 expr->cast_expression = copy_expression(cast);
163 expr->cast_type = alloc_symbol(sym->pos, sym->type);
164 *expr->cast_type = *sym;
172 struct expression *cast = copy_expression(expr->cast_expression);
173 if (cast == expr->cast_expression)
175 expr = dup_expression(expr);
176 expr->cast_expression = cast;
183 struct expression *cond = copy_expression(expr->conditional);
184 struct expression *valt = copy_expression(expr->cond_true);
185 struct expression *valf = copy_expression(expr->cond_false);
186 if (cond == expr->conditional && valt == expr->cond_true && valf == expr->cond_false)
188 expr = dup_expression(expr);
189 expr->conditional = cond;
190 expr->cond_true = valt;
191 expr->cond_false = valf;
197 struct statement *stmt = alloc_statement(expr->pos, STMT_COMPOUND);
198 copy_statement(expr->statement, stmt);
199 expr = dup_expression(expr);
200 expr->statement = stmt;
206 struct expression *fn = copy_expression(expr->fn);
207 struct expression_list *list = expr->args;
210 expr = dup_expression(expr);
211 expr->fn = fn;
212 expr->args = NULL;
214 add_expression(&expr->args, copy_expression(arg));
221 struct expression_list *list = expr->expr_list;
223 expr = dup_expression(expr);
224 expr->expr_list = NULL;
226 add_expression(&expr->expr_list, copy_expression(entry));
233 struct symbol *label_symbol = copy_symbol(expr->pos, expr->label_symbol);
234 expr = dup_expression(expr);
235 expr->label_symbol = label_symbol;
240 struct expression *sub_expr = copy_expression(expr->idx_expression);
241 expr = dup_expression(expr);
242 expr->idx_expression = sub_expr;
247 struct expression *sub_expr = copy_expression(expr->ident_expression);
248 expr = dup_expression(expr);
249 expr->ident_expression = sub_expr;
255 struct expression *val = copy_expression(expr->init_expr);
256 expr = dup_expression(expr);
257 expr->init_expr = val;
261 struct expression *val = copy_expression(expr->down);
262 if (expr->op == '.') {
263 if (expr->down != val) {
264 expr = dup_expression(expr);
265 expr->down = val;
268 struct expression *idx = copy_expression(expr->index);
269 if (expr->down != val || expr->index != idx) {
270 expr = dup_expression(expr);
271 expr->down = val;
272 expr->index = idx;
278 expr = dup_expression(expr);
279 expr->control = copy_expression(expr->control);
280 if (!evaluate_expression(expr))
282 expr = copy_expression(expr);
286 warning(expr->pos, "trying to copy expression type %d", expr->type);
288 return expr;
300 new->expr = copy_expression(old->expr);
353 struct expression *expr = copy_expression(stmt->expression);
354 if (expr == stmt->expression)
357 stmt->expression = expr;
361 struct expression *expr = copy_expression(stmt->range_expression);
362 if (expr == stmt->expression)
365 stmt->range_expression = expr;
413 struct expression *expr = copy_expression(stmt->switch_expression);
420 stmt->switch_expression = expr;
513 int inline_function(struct expression *expr, struct symbol *sym)
517 struct expression_list *arg_list = expr->args;
518 struct statement *stmt = alloc_statement(expr->pos, STMT_COMPOUND);
532 expr->type = EXPR_STATEMENT;
533 expr->statement = stmt;
534 expr->ctype = fn->ctype.base_type;
559 struct statement *decl = alloc_statement(expr->pos, STMT_DECLARATION);