mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 01:41:10 +00:00
get struct copy to/from struct fields via pointers. fixes a bug found by
snax
This commit is contained in:
parent
6355674bd3
commit
9f662787e0
3 changed files with 14 additions and 2 deletions
|
@ -1147,7 +1147,7 @@ static operation_t op_struct[ev_type_count] = {
|
|||
do_op_invalid, // ev_entity
|
||||
do_op_invalid, // ev_field
|
||||
do_op_invalid, // ev_func
|
||||
do_op_invalid, // ev_pointer
|
||||
do_op_pointer, // ev_pointer
|
||||
do_op_invalid, // ev_quaternion
|
||||
do_op_invalid, // ev_integer
|
||||
do_op_invalid, // ev_uinteger
|
||||
|
|
|
@ -419,6 +419,16 @@ emit_deref_expr (expr_t *e, def_t *dest)
|
|||
dest->file = e->file;
|
||||
dest->users += 2;
|
||||
}
|
||||
if (dest->type->type == ev_struct) {
|
||||
expr_t *d = new_def_expr (dest);
|
||||
expr_t *m = new_move_expr (d, e, dest->type);
|
||||
d->line = dest->line;
|
||||
d->file = dest->file;
|
||||
m->line = e->line;
|
||||
m->file = e->file;
|
||||
emit_sub_expr (m, 0);
|
||||
return dest;
|
||||
}
|
||||
|
||||
if (e->type == ex_expr
|
||||
&& e->e.expr.op == '&'
|
||||
|
|
|
@ -277,8 +277,10 @@ ReuseConstant (expr_t *expr, def_t *def)
|
|||
reloc_def_field_ofs (e.e.pointer.def, cn->ofs);
|
||||
break;
|
||||
case ex_pointer:
|
||||
if (e.e.pointer.def)
|
||||
if (e.e.pointer.def) {
|
||||
EMIT_DEF_OFS (G_INT (cn->ofs), e.e.pointer.def);
|
||||
e.e.pointer.def->users--;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue