From: Jürg Billeter Date: Tue, 21 Dec 2010 16:05:56 +0000 (+0100) Subject: codegen: Use separate C statements for postfix expressions X-Git-Tag: 0.11.3~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a74bc78f3aedc5fd4104b255f82fcddba9d2f287;p=thirdparty%2Fvala.git codegen: Use separate C statements for postfix expressions --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 1373345f0..abd7d0e14 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -3727,10 +3727,25 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { set_cvalue (expr, get_variable_cexpression (temp_decl.name)); return; } - - var op = expr.increment ? CCodeUnaryOperator.POSTFIX_INCREMENT : CCodeUnaryOperator.POSTFIX_DECREMENT; - - set_cvalue (expr, new CCodeUnaryExpression (op, get_cvalue (expr.inner))); + + if (expr.parent_node is ExpressionStatement) { + var op = expr.increment ? CCodeUnaryOperator.POSTFIX_INCREMENT : CCodeUnaryOperator.POSTFIX_DECREMENT; + + ccode.add_expression (new CCodeUnaryExpression (op, get_cvalue (expr.inner))); + } else { + // assign current value to temp variable + var temp_decl = get_temp_variable (expr.inner.value_type, true, expr, false); + emit_temp_var (temp_decl); + ccode.add_expression (new CCodeAssignment (get_variable_cexpression (temp_decl.name), get_cvalue (expr.inner))); + + // increment/decrement variable + var op = expr.increment ? CCodeBinaryOperator.PLUS : CCodeBinaryOperator.MINUS; + var cexpr = new CCodeBinaryExpression (op, get_variable_cexpression (temp_decl.name), new CCodeConstant ("1")); + ccode.add_expression (new CCodeAssignment (get_cvalue (expr.inner), cexpr)); + + // return previous value + set_cvalue (expr, get_variable_cexpression (temp_decl.name)); + } } private MemberAccess? find_property_access (Expression expr) {