diff options
author | wszqkzqk <wszqkzqk@qq.com> | 2022-12-13 21:56:53 +0800 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-12-22 17:13:52 +0100 |
commit | c5679d09cdc8b49c9b886fc6617db901350c301d (patch) | |
tree | a75445dfdeaef656e8c03140f793028c3e746369 /vala/valaparser.vala | |
parent | a67d19f51082944e3751760d6c0ae09efc35b860 (diff) | |
download | vala-c5679d09cdc8b49c9b886fc6617db901350c301d.tar.gz |
parser: Properly handle chained equality expressions
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1385
Diffstat (limited to 'vala/valaparser.vala')
-rw-r--r-- | vala/valaparser.vala | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/vala/valaparser.vala b/vala/valaparser.vala index d932b8b2d..25769ec54 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -1452,6 +1452,8 @@ public class Vala.Parser : CodeVisitor { case BinaryOperator.LESS_THAN: case BinaryOperator.LESS_THAN_OR_EQUAL: case BinaryOperator.GREATER_THAN_OR_EQUAL: + case BinaryOperator.EQUALITY: + case BinaryOperator.INEQUALITY: next (); var right = parse_type_check_expression (); if (first) { @@ -1485,32 +1487,11 @@ public class Vala.Parser : CodeVisitor { return left; } - Expression parse_equality_expression () throws ParseError { - var begin = get_location (); - var left = parse_relational_expression (); - bool found = true; - while (found) { - var operator = get_binary_operator (current ()); - switch (operator) { - case BinaryOperator.EQUALITY: - case BinaryOperator.INEQUALITY: - next (); - var right = parse_relational_expression (); - left = new BinaryExpression (operator, left, right, get_src (begin)); - break; - default: - found = false; - break; - } - } - return left; - } - Expression parse_and_expression () throws ParseError { var begin = get_location (); - var left = parse_equality_expression (); + var left = parse_relational_expression (); while (accept (TokenType.BITWISE_AND)) { - var right = parse_equality_expression (); + var right = parse_relational_expression (); left = new BinaryExpression (BinaryOperator.BITWISE_AND, left, right, get_src (begin)); } return left; |