summaryrefslogtreecommitdiff
path: root/vala/valaparser.vala
diff options
context:
space:
mode:
authorwszqkzqk <wszqkzqk@qq.com>2022-12-13 21:56:53 +0800
committerRico Tzschichholz <ricotz@ubuntu.com>2022-12-22 17:13:52 +0100
commitc5679d09cdc8b49c9b886fc6617db901350c301d (patch)
treea75445dfdeaef656e8c03140f793028c3e746369 /vala/valaparser.vala
parenta67d19f51082944e3751760d6c0ae09efc35b860 (diff)
downloadvala-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.vala27
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;