From a04473e2bb95483e84404c57426ee9ed21fa5d6b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 7 Aug 2018 17:00:45 +0300 Subject: Semi statements --- src/grammar/patterns.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/grammar/patterns.rs') diff --git a/src/grammar/patterns.rs b/src/grammar/patterns.rs index f1d48b5fa..36ead7561 100644 --- a/src/grammar/patterns.rs +++ b/src/grammar/patterns.rs @@ -17,6 +17,7 @@ pub(super) fn pattern(p: &mut Parser) { UNDERSCORE => placeholder_pat(p), AMP => ref_pat(p), L_PAREN => tuple_pat(p), + L_BRACK => slice_pat(p), _ => p.err_and_bump("expected pattern"), } } @@ -128,6 +129,28 @@ fn tuple_pat(p: &mut Parser) { m.complete(p, TUPLE_PAT); } +// test slice_pat +// fn main() { +// let [a, b, ..] = []; +// } +fn slice_pat(p: &mut Parser) { + assert!(p.at(L_BRACK)); + let m = p.start(); + p.bump(); + while !p.at(EOF) && !p.at(R_BRACK) { + match p.current() { + DOTDOT => p.bump(), + _ => pattern(p), + } + if !p.at(R_BRACK) { + p.expect(COMMA); + } + } + p.expect(R_BRACK); + + m.complete(p, SLICE_PAT); +} + // test bind_pat // fn main() { // let a = (); -- cgit v1.2.3