mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 15:22:04 +00:00
Allow the operand to override the symbol's type.
This commit is contained in:
parent
3f2793ef72
commit
16e013ff5d
2 changed files with 8 additions and 3 deletions
|
@ -40,7 +40,8 @@ typedef enum {
|
|||
|
||||
typedef struct operand_s {
|
||||
struct operand_s *next;
|
||||
op_type_e type;
|
||||
op_type_e op_type;
|
||||
etype_t type; ///< possibly override symbol's type
|
||||
union {
|
||||
struct symbol_s *symbol;
|
||||
struct ex_value_s *value;
|
||||
|
|
|
@ -54,7 +54,7 @@ static __attribute__ ((used)) const char rcsid[] = "$Id$";
|
|||
static void
|
||||
print_operand (operand_t *op)
|
||||
{
|
||||
switch (op->type) {
|
||||
switch (op->op_type) {
|
||||
case op_symbol:
|
||||
printf ("%s", op->o.symbol->name);
|
||||
break;
|
||||
|
@ -159,7 +159,7 @@ new_operand (op_type_e op)
|
|||
{
|
||||
operand_t *operand;
|
||||
ALLOC (256, operand_t, operands, operand);
|
||||
operand->type = op;
|
||||
operand->op_type = op;
|
||||
return operand;
|
||||
}
|
||||
|
||||
|
@ -294,6 +294,7 @@ expr_expr (sblock_t *sblock, expr_t *e, operand_t **op)
|
|||
sblock = statement_subexpr (sblock, e->e.expr.e1, &s->opa);
|
||||
sblock = statement_subexpr (sblock, e->e.expr.e2, &s->opb);
|
||||
*op = s->opc = new_operand (op_temp);
|
||||
s->opc->type = e->e.expr.type->type;
|
||||
sblock_add_statement (sblock, s);
|
||||
break;
|
||||
}
|
||||
|
@ -310,6 +311,7 @@ static sblock_t *
|
|||
expr_symbol (sblock_t *sblock, expr_t *e, operand_t **op)
|
||||
{
|
||||
*op = new_operand (op_symbol);
|
||||
(*op)->type = e->e.symbol->type->type;
|
||||
(*op)->o.symbol = e->e.symbol;
|
||||
return sblock;
|
||||
}
|
||||
|
@ -318,6 +320,7 @@ static sblock_t *
|
|||
expr_temp (sblock_t *sblock, expr_t *e, operand_t **op)
|
||||
{
|
||||
*op = new_operand (op_temp);
|
||||
(*op)->type = e->e.temp.type->type;
|
||||
return sblock;
|
||||
}
|
||||
|
||||
|
@ -325,6 +328,7 @@ static sblock_t *
|
|||
expr_value (sblock_t *sblock, expr_t *e, operand_t **op)
|
||||
{
|
||||
*op = new_operand (op_value);
|
||||
(*op)->type = e->e.value.type;
|
||||
(*op)->o.value = &e->e.value;
|
||||
return sblock;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue