mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
fix `a = b = b + c;' (probably d + c, too). Caused by forgetting to emit
an assignment for `a ='.
This commit is contained in:
parent
7a06a2254a
commit
8bbef35197
1 changed files with 7 additions and 3 deletions
|
@ -822,7 +822,7 @@ emit_function_call (expr_t *e, def_t *dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
def_t *
|
def_t *
|
||||||
emit_assign_expr (expr_t *e)
|
emit_assign_expr (expr_t *e, def_t *dest)
|
||||||
{
|
{
|
||||||
def_t *def_a, *def_b;
|
def_t *def_a, *def_b;
|
||||||
opcode_t *op;
|
opcode_t *op;
|
||||||
|
@ -854,6 +854,10 @@ emit_assign_expr (expr_t *e)
|
||||||
op = PR_Opcode_Find ("=", 5, def_a, def_b, def_b);
|
op = PR_Opcode_Find ("=", 5, def_a, def_b, def_b);
|
||||||
emit_statement (op, def_b, def_a, 0);
|
emit_statement (op, def_b, def_a, 0);
|
||||||
}
|
}
|
||||||
|
if (dest) {
|
||||||
|
op = PR_Opcode_Find ("=", 5, dest, def_b, def_b);
|
||||||
|
emit_statement (op, def_b, dest, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return def_b;
|
return def_b;
|
||||||
}
|
}
|
||||||
|
@ -875,7 +879,7 @@ emit_sub_expr (expr_t *e, def_t *dest)
|
||||||
if (e->e.expr.op == 'c')
|
if (e->e.expr.op == 'c')
|
||||||
return emit_function_call (e, dest);
|
return emit_function_call (e, dest);
|
||||||
if (e->e.expr.op == '=')
|
if (e->e.expr.op == '=')
|
||||||
return emit_assign_expr (e);
|
return emit_assign_expr (e, dest);
|
||||||
def_a = emit_sub_expr (e->e.expr.e1, 0);
|
def_a = emit_sub_expr (e->e.expr.e1, 0);
|
||||||
def_b = emit_sub_expr (e->e.expr.e2, 0);
|
def_b = emit_sub_expr (e->e.expr.e2, 0);
|
||||||
switch (e->e.expr.op) {
|
switch (e->e.expr.op) {
|
||||||
|
@ -1014,7 +1018,7 @@ emit_expr (expr_t *e)
|
||||||
case ex_expr:
|
case ex_expr:
|
||||||
switch (e->e.expr.op) {
|
switch (e->e.expr.op) {
|
||||||
case '=':
|
case '=':
|
||||||
emit_assign_expr (e);
|
emit_assign_expr (e, 0);
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
emit_branch (op_ifnot, e->e.expr.e1, e->e.expr.e2);
|
emit_branch (op_ifnot, e->e.expr.e1, e->e.expr.e2);
|
||||||
|
|
Loading…
Reference in a new issue