From 80fa861cd688c8e7c92e27feaf6623ecfaa4901e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 5 Aug 2018 17:24:44 +0300 Subject: index expr --- src/grammar/expressions/mod.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/grammar/expressions/mod.rs') diff --git a/src/grammar/expressions/mod.rs b/src/grammar/expressions/mod.rs index 4421a444c..7f3bc78f2 100644 --- a/src/grammar/expressions/mod.rs +++ b/src/grammar/expressions/mod.rs @@ -147,6 +147,7 @@ fn postfix_expr(p: &mut Parser, mut lhs: CompletedMarker) -> CompletedMarker { loop { lhs = match p.current() { L_PAREN => call_expr(p, lhs), + L_BRACK => index_expr(p, lhs), DOT if p.nth(1) == IDENT => if p.nth(2) == L_PAREN || p.nth(2) == COLONCOLON { method_call_expr(p, lhs) } else { @@ -172,6 +173,19 @@ fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { m.complete(p, CALL_EXPR) } +// test index_expr +// fn foo() { +// x[1][2]; +// } +fn index_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { + assert!(p.at(L_BRACK)); + let m = lhs.precede(p); + p.bump(); + expr(p); + p.expect(R_BRACK); + m.complete(p, INDEX_EXPR) +} + // test method_call_expr // fn foo() { // x.foo(); -- cgit v1.2.3