From: Luca Bruno Date: Sat, 11 Jun 2011 09:10:25 +0000 (+0200) Subject: codegen: Simplify emit of postfix expression X-Git-Tag: 0.13.2~188 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0dc5e69db93797aac6d01ca264786e693e49e344;p=thirdparty%2Fvala.git codegen: Simplify emit of postfix expression --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index d20f1e7ce..ca3b915a5 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -3655,39 +3655,26 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { // property postfix expression var prop = (Property) ma.symbol_reference; - // assign current value to temp variable - var temp_decl = get_temp_variable (prop.property_type, true, expr, false); - emit_temp_var (temp_decl); - store_local (temp_decl, expr.inner.target_value, true); - // increment/decrement property var op = expr.increment ? CCodeBinaryOperator.PLUS : CCodeBinaryOperator.MINUS; - var cexpr = new CCodeBinaryExpression (op, get_variable_cexpression (temp_decl.name), new CCodeConstant ("1")); + var cexpr = new CCodeBinaryExpression (op, get_cvalue (expr.inner), new CCodeConstant ("1")); store_property (prop, ma.inner, new GLibValue (expr.value_type, cexpr)); // return previous value - expr.target_value = get_local_cvalue (temp_decl); + expr.target_value = expr.inner.target_value; return; } - 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); - store_local (temp_decl, expr.inner.target_value, true); + // assign current value to temp variable + var temp_value = store_temp_value (expr.inner.target_value, expr); - // 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_assignment (get_cvalue (expr.inner), cexpr); + // increment/decrement variable + var op = expr.increment ? CCodeBinaryOperator.PLUS : CCodeBinaryOperator.MINUS; + var cexpr = new CCodeBinaryExpression (op, get_cvalue_ (temp_value), new CCodeConstant ("1")); + ccode.add_assignment (get_cvalue (expr.inner), cexpr); - // return previous value - expr.target_value = get_local_cvalue (temp_decl); - } + // return previous value + expr.target_value = temp_value; } private MemberAccess? find_property_access (Expression expr) {