]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Move PostfixExpression transformation into the transformer
authorLuca Bruno <lucabru@src.gnome.org>
Sat, 1 Feb 2014 17:37:50 +0000 (18:37 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 1 Apr 2020 08:17:51 +0000 (10:17 +0200)
codegen/valaccodebasemodule.vala
codegen/valaccodetransformer.vala

index c68e9863dde4f0fd1f48e7c789845a68cb1f1520..ca2c4e91c062bd29facfb1cbfa1f9d4956da70cf 100644 (file)
@@ -4403,47 +4403,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                }
        }
 
-       public override void visit_postfix_expression (PostfixExpression expr) {
-               MemberAccess ma = find_property_access (expr.inner);
-               if (ma != null) {
-                       // property postfix expression
-                       var prop = (Property) ma.symbol_reference;
-
-                       // increment/decrement property
-                       var op = expr.increment ? CCodeBinaryOperator.PLUS : CCodeBinaryOperator.MINUS;
-                       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 = expr.inner.target_value;
-                       return;
-               }
-
-               // 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_cvalue_ (temp_value), new CCodeConstant ("1"));
-               ccode.add_assignment (get_cvalue (expr.inner), cexpr);
-
-               // return previous value
-               expr.target_value = temp_value;
-       }
-
-       private MemberAccess? find_property_access (Expression expr) {
-               if (!(expr is MemberAccess)) {
-                       return null;
-               }
-
-               var ma = (MemberAccess) expr;
-               if (ma.symbol_reference is Property) {
-                       return ma;
-               }
-
-               return null;
-       }
-
        static bool is_limited_generic_type (GenericType type) {
                unowned Class? cl = type.type_parameter.parent_symbol as Class;
                unowned Struct? st = type.type_parameter.parent_symbol as Struct;
index 3c55c779260ba887a1737e47de288310802be674..56578683ac8a66f1a20e44a5978b34430d88f918 100644 (file)
@@ -367,4 +367,16 @@ public class Vala.CCodeTransformer : CodeTransformer {
 
                end_replace_expression (replacement);
        }
+
+       public override void visit_postfix_expression (PostfixExpression expr) {
+               begin_replace_expression (expr);
+
+               var result = b.add_temp_declaration (copy_type (expr.value_type), expr.inner);
+               var op = expr.increment ? "+ 1" : "- 1";
+               b.add_expression (expression (@"$(expr.inner) = $result $op"));
+
+               var replacement = return_temp_access (result, expr.value_type, expr.target_type);
+
+               end_replace_expression (replacement);
+       }
 }