summaryrefslogtreecommitdiff
path: root/vala/valagenieparser.vala
diff options
context:
space:
mode:
authorwb9688 <36312-wb9688@users.noreply.gitlab.gnome.org>2020-05-26 11:57:03 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2020-05-26 12:58:33 +0200
commit6edde4b658ea372a489b367d6a43f79fe79b0087 (patch)
tree97438ace4874ef8f0237bc4f7dd3c25c84bcf6ba /vala/valagenieparser.vala
parent6312d8c7563c227b77d2098c9de1048f65c3b51f (diff)
downloadvala-6edde4b658ea372a489b367d6a43f79fe79b0087.tar.gz
parser: Map empty start/end index to 0/length for slice expressions
This allows a syntax like a[:], a[2:] or a[:3] for arrays and strings. Co-authored-by: Simon Werbeck <simon.werbeck@gmail.com> Fixes https://gitlab.gnome.org/GNOME/vala/issues/238
Diffstat (limited to 'vala/valagenieparser.vala')
-rw-r--r--vala/valagenieparser.vala19
1 files changed, 16 insertions, 3 deletions
diff --git a/vala/valagenieparser.vala b/vala/valagenieparser.vala
index 45e0d9729..ef87646f4 100644
--- a/vala/valagenieparser.vala
+++ b/vala/valagenieparser.vala
@@ -963,12 +963,25 @@ public class Vala.Genie.Parser : CodeVisitor {
}
Expression parse_element_access (SourceLocation begin, Expression inner) throws ParseError {
- expect (TokenType.OPEN_BRACKET);
- var index_list = parse_expression_list ();
Expression? stop = null;
+ List<Expression> index_list;
+
+ expect (TokenType.OPEN_BRACKET);
+ if (current () == TokenType.COLON) {
+ // slice expression
+ index_list = new ArrayList<Expression> ();
+ index_list.add (new IntegerLiteral ("0", get_src (begin)));
+ } else {
+ index_list = parse_expression_list ();
+ }
+
if (index_list.size == 1 && accept (TokenType.COLON)) {
// slice expression
- stop = parse_expression ();
+ if (current () == TokenType.CLOSE_BRACKET) {
+ stop = new MemberAccess (inner, "length", get_src (begin));
+ } else {
+ stop = parse_expression ();
+ }
}
expect (TokenType.CLOSE_BRACKET);