summaryrefslogtreecommitdiff
path: root/vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2022-12-22 16:58:58 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2022-12-22 16:58:58 +0100
commit144566870cb7263ba7827459bf2ec2a9aa86e193 (patch)
treeac98bf5c6c6223478122d2416fc4c179edbb2c24 /vala
parent07d18c71941f8db4177549afa560b798206659b3 (diff)
downloadvala-144566870cb7263ba7827459bf2ec2a9aa86e193.tar.gz
parser: Move parsing of IS and AS type checks to dedicated function
Diffstat (limited to 'vala')
-rw-r--r--vala/valagenieparser.vala35
-rw-r--r--vala/valaparser.vala35
2 files changed, 34 insertions, 36 deletions
diff --git a/vala/valagenieparser.vala b/vala/valagenieparser.vala
index 9781cd339..cca9919eb 100644
--- a/vala/valagenieparser.vala
+++ b/vala/valagenieparser.vala
@@ -1440,9 +1440,22 @@ public class Vala.Genie.Parser : CodeVisitor {
return left;
}
- Expression parse_relational_expression () throws ParseError {
+ Expression parse_type_check_expression () throws ParseError {
var begin = get_location ();
var left = parse_shift_expression ();
+ if (accept (TokenType.ISA)) {
+ var type = parse_type (true, false);
+ left = new TypeCheck (left, type, get_src (begin));
+ } else if (accept (TokenType.AS)) {
+ var type = parse_type (true, false);
+ left = new CastExpression.silent (left, type, get_src (begin));
+ }
+ return left;
+ }
+
+ Expression parse_relational_expression () throws ParseError {
+ var begin = get_location ();
+ var left = parse_type_check_expression ();
bool found = true;
while (found) {
var operator = get_binary_operator (current ());
@@ -1451,14 +1464,14 @@ public class Vala.Genie.Parser : CodeVisitor {
case BinaryOperator.LESS_THAN_OR_EQUAL:
case BinaryOperator.GREATER_THAN_OR_EQUAL:
next ();
- var right = parse_shift_expression ();
+ var right = parse_type_check_expression ();
left = new BinaryExpression (operator, left, right, get_src (begin));
break;
case BinaryOperator.GREATER_THAN:
next ();
// ignore >> and >>= (two tokens due to generics)
if (current () != TokenType.OP_GT && current () != TokenType.OP_GE) {
- var right = parse_shift_expression ();
+ var right = parse_type_check_expression ();
left = new BinaryExpression (operator, left, right, get_src (begin));
} else {
prev ();
@@ -1466,21 +1479,7 @@ public class Vala.Genie.Parser : CodeVisitor {
}
break;
default:
- switch (current ()) {
- case TokenType.ISA:
- next ();
- var type = parse_type (true, false);
- left = new TypeCheck (left, type, get_src (begin));
- break;
- case TokenType.AS:
- next ();
- var type = parse_type (true, false);
- left = new CastExpression.silent (left, type, get_src (begin));
- break;
- default:
- found = false;
- break;
- }
+ found = false;
break;
}
}
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index a5d338956..d932b8b2d 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -1427,9 +1427,22 @@ public class Vala.Parser : CodeVisitor {
return left;
}
- Expression parse_relational_expression () throws ParseError {
+ Expression parse_type_check_expression () throws ParseError {
var begin = get_location ();
var left = parse_shift_expression ();
+ if (accept (TokenType.IS)) {
+ var type = parse_type (true, false);
+ left = new TypeCheck (left, type, get_src (begin));
+ } else if (accept (TokenType.AS)) {
+ var type = parse_type (true, false);
+ left = new CastExpression.silent (left, type, get_src (begin));
+ }
+ return left;
+ }
+
+ Expression parse_relational_expression () throws ParseError {
+ var begin = get_location ();
+ var left = parse_type_check_expression ();
bool first = true;
bool found = true;
@@ -1440,7 +1453,7 @@ public class Vala.Parser : CodeVisitor {
case BinaryOperator.LESS_THAN_OR_EQUAL:
case BinaryOperator.GREATER_THAN_OR_EQUAL:
next ();
- var right = parse_shift_expression ();
+ var right = parse_type_check_expression ();
if (first) {
left = new BinaryExpression (operator, left, right, get_src (begin));
} else {
@@ -1452,7 +1465,7 @@ public class Vala.Parser : CodeVisitor {
next ();
// ignore >> and >>= (two tokens due to generics)
if (current () != TokenType.OP_GT && current () != TokenType.OP_GE) {
- var right = parse_shift_expression ();
+ var right = parse_type_check_expression ();
if (first) {
left = new BinaryExpression (operator, left, right, get_src (begin));
} else {
@@ -1465,21 +1478,7 @@ public class Vala.Parser : CodeVisitor {
}
break;
default:
- switch (current ()) {
- case TokenType.IS:
- next ();
- var type = parse_type (true, false);
- left = new TypeCheck (left, type, get_src (begin));
- break;
- case TokenType.AS:
- next ();
- var type = parse_type (true, false);
- left = new CastExpression.silent (left, type, get_src (begin));
- break;
- default:
- found = false;
- break;
- }
+ found = false;
break;
}
}