From 022fde666f1463300ca237d24da8d7ac7af3b07b Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Thu, 3 Mar 2011 13:10:07 +0900 Subject: [PATCH] Implement unary expression statements. --- tools/qfcc/source/statements.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/qfcc/source/statements.c b/tools/qfcc/source/statements.c index d3d161abf..a1760d2c4 100644 --- a/tools/qfcc/source/statements.c +++ b/tools/qfcc/source/statements.c @@ -589,6 +589,9 @@ expr_cast (sblock_t *sblock, expr_t *e, operand_t **op) static sblock_t * expr_uexpr (sblock_t *sblock, expr_t *e, operand_t **op) { + const char *opcode; + statement_t *s; + switch (e->e.expr.op) { case '&': sblock = expr_address (sblock, e, op); @@ -603,8 +606,17 @@ expr_uexpr (sblock_t *sblock, expr_t *e, operand_t **op) sblock = expr_cast (sblock, e, op); break; default: - //FIXME implement unary expressions - ; + opcode = convert_op (e->e.expr.op); + if (!opcode) + internal_error (e, "ice ice baby"); + s = new_statement (opcode, e); + sblock = statement_subexpr (sblock, e->e.expr.e1, &s->opa); + if (!*op) { + *op = new_operand (op_temp); + (*op)->type = low_level_type (e->e.expr.type); + } + s->opc = *op; + sblock_add_statement (sblock, s); } return sblock; }