]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Add dedicated BinaryExpression.chained() constructor
authorRico Tzschichholz <ricotz@ubuntu.com>
Thu, 14 Dec 2017 16:38:38 +0000 (17:38 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Thu, 14 Dec 2017 19:17:43 +0000 (20:17 +0100)
codegen/valaccodebasemodule.vala
vala/valabinaryexpression.vala
vala/valaparser.vala

index 56ff942919df76eff52932a4a25531d2bad09bfa..7c8edb482a3fc34621454dfb23e156b449560871 100644 (file)
@@ -5303,14 +5303,14 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                var cright = get_cvalue (expr.right);
 
                CCodeExpression? left_chain = null;
-               if (expr.chained) {
+               if (expr.is_chained) {
                        var lbe = (BinaryExpression) expr.left;
 
                        var temp_decl = get_temp_variable (lbe.right.target_type, true, null, false);
                        emit_temp_var (temp_decl);
                        var cvar = get_variable_cexpression (temp_decl.name);
                        var clbe = (CCodeBinaryExpression) get_cvalue (lbe);
-                       if (lbe.chained) {
+                       if (lbe.is_chained) {
                                clbe = (CCodeBinaryExpression) clbe.right;
                        }
                        ccode.add_assignment (cvar, get_cvalue (lbe.right));
index afdc75640bd5594b4972e6453fd81e20df2a0d44..ecfdda5e330b8484c8a57fd4ef80d24d1fdf546e 100644 (file)
@@ -58,7 +58,7 @@ public class Vala.BinaryExpression : Expression {
                }
        }
        
-       public bool chained;
+       public bool is_chained { get; private set; }
 
        private Expression _left;
        private Expression _right;
@@ -76,6 +76,15 @@ public class Vala.BinaryExpression : Expression {
                operator = op;
                left = _left;
                right = _right;
+               is_chained = false;
+               source_reference = source;
+       }
+
+       public BinaryExpression.chained (BinaryOperator op, Expression _left, Expression _right, SourceReference? source = null) {
+               operator = op;
+               left = _left;
+               right = _right;
+               is_chained = true;
                source_reference = source;
        }
 
@@ -425,7 +434,7 @@ public class Vala.BinaryExpression : Expression {
                        } else {
                                DataType resulting_type;
 
-                               if (chained) {
+                               if (is_chained) {
                                        var lbe = (BinaryExpression) left;
                                        resulting_type = context.analyzer.get_arithmetic_result_type (lbe.right.target_type, right.target_type);
                                } else {
@@ -438,7 +447,7 @@ public class Vala.BinaryExpression : Expression {
                                        return false;
                                }
 
-                               if (!chained) {
+                               if (!is_chained) {
                                        left.target_type = resulting_type.copy ();
                                }
                                right.target_type = resulting_type.copy ();
index 2423e22cb87c751a584dd0ff1c80f5979f47ffe8..de3ee64b93b5c33780ed896a24308ff3b1d212af 100644 (file)
@@ -1266,10 +1266,10 @@ public class Vala.Parser : CodeVisitor {
                        case BinaryOperator.GREATER_THAN_OR_EQUAL:
                                next ();
                                var right = parse_shift_expression ();
-                               left = new BinaryExpression (operator, left, right, get_src (begin));
-                               if (!first) {
-                                       var be = (BinaryExpression) left;
-                                       be.chained = true;
+                               if (first) {
+                                       left = new BinaryExpression (operator, left, right, get_src (begin));
+                               } else {
+                                       left = new BinaryExpression.chained (operator, left, right, get_src (begin));
                                }
                                first = false;
                                break;
@@ -1278,10 +1278,10 @@ public class Vala.Parser : CodeVisitor {
                                // ignore >> and >>= (two tokens due to generics)
                                if (current () != TokenType.OP_GT && current () != TokenType.OP_GE) {
                                        var right = parse_shift_expression ();
-                                       left = new BinaryExpression (operator, left, right, get_src (begin));
-                                       if (!first) {
-                                               var be = (BinaryExpression) left;
-                                               be.chained = true;
+                                       if (first) {
+                                               left = new BinaryExpression (operator, left, right, get_src (begin));
+                                       } else {
+                                               left = new BinaryExpression.chained (operator, left, right, get_src (begin));
                                        }
                                        first = false;
                                } else {