diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-12-22 16:58:58 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-12-22 16:58:58 +0100 |
commit | 144566870cb7263ba7827459bf2ec2a9aa86e193 (patch) | |
tree | ac98bf5c6c6223478122d2416fc4c179edbb2c24 | |
parent | 07d18c71941f8db4177549afa560b798206659b3 (diff) | |
download | vala-144566870cb7263ba7827459bf2ec2a9aa86e193.tar.gz |
parser: Move parsing of IS and AS type checks to dedicated function
-rw-r--r-- | vala/valagenieparser.vala | 35 | ||||
-rw-r--r-- | vala/valaparser.vala | 35 |
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; } } |