]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Move UnaryExpression tranformation into CCodeTransformer
authorLuca Bruno <lucabru@src.gnome.org>
Sat, 25 Feb 2012 20:25:57 +0000 (21:25 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Fri, 19 Apr 2019 13:29:54 +0000 (15:29 +0200)
codegen/valaccodetransformer.vala
vala/valaunaryexpression.vala

index dddade94da969a24c0f902c28cb6e4ede3c82c9c..f342018eed8b5907cb1879bb561dc65b13c60550 100644 (file)
@@ -318,6 +318,32 @@ public class Vala.CCodeTransformer : CodeTransformer {
                }
        }
 
+       public override void visit_unary_expression (UnaryExpression expr) {
+               var parent_statement = expr.parent_statement;
+               if (parent_statement == null) {
+                       base.visit_unary_expression (expr);
+                       return;
+               }
+
+               if (expr.operator == UnaryOperator.INCREMENT || expr.operator == UnaryOperator.DECREMENT) {
+                       var target_type = copy_type (expr.target_type);
+                       begin_replace_expression (expr);
+
+                       Expression replacement;
+                       if (expr.operator == UnaryOperator.INCREMENT) {
+                               replacement = expression (@"$(expr.inner) = $(expr.inner) + 1");
+                       } else {
+                               replacement = expression (@"$(expr.inner) = $(expr.inner) - 1");
+                       }
+                       replacement.target_type = target_type;
+
+                       end_replace_expression (replacement);
+                       return;
+               }
+
+               base.visit_unary_expression (expr);
+       }
+
        public override void visit_object_creation_expression (ObjectCreationExpression expr) {
                if (expr.tree_can_fail) {
                        if (expr.parent_node is LocalVariable || expr.parent_node is ExpressionStatement) {
index d371d39d926cb06fb3719c88502e865e45389b9d..8c8665d3eaafc41f464cb9f35b5c9501f65131ad 100644 (file)
@@ -209,14 +209,7 @@ public class Vala.UnaryExpression : Expression {
                                return false;
                        }
 
-                       var old_value = new MemberAccess (ma.inner, ma.member_name, inner.source_reference);
-                       var bin = new BinaryExpression (operator == UnaryOperator.INCREMENT ? BinaryOperator.PLUS : BinaryOperator.MINUS, old_value, new IntegerLiteral ("1"), source_reference);
-
-                       var assignment = new Assignment (ma, bin, AssignmentOperator.SIMPLE, source_reference);
-                       assignment.target_type = target_type;
-                       context.analyzer.replaced_nodes.add (this);
-                       parent_node.replace_expression (this, assignment);
-                       assignment.check (context);
+                       value_type = inner.value_type.copy ();
                        return true;
                } else if (operator == UnaryOperator.REF || operator == UnaryOperator.OUT) {
                        var ea = inner as ElementAccess;