diff options
author | wb9688 <36312-wb9688@users.noreply.gitlab.gnome.org> | 2020-05-26 11:57:03 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2020-05-26 12:58:33 +0200 |
commit | 6edde4b658ea372a489b367d6a43f79fe79b0087 (patch) | |
tree | 97438ace4874ef8f0237bc4f7dd3c25c84bcf6ba /vala/valagenieparser.vala | |
parent | 6312d8c7563c227b77d2098c9de1048f65c3b51f (diff) | |
download | vala-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.vala | 19 |
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); |