diff --git a/compiler/erg_parser/parse.rs b/compiler/erg_parser/parse.rs index 70c0ef13..fa3c403e 100644 --- a/compiler/erg_parser/parse.rs +++ b/compiler/erg_parser/parse.rs @@ -1328,6 +1328,28 @@ impl Parser { } } } + Some(t) if t.is(LSqBr) => { + let Some(ExprOrOp::Expr(obj)) = stack.pop() else { + self.level -= 1; + let err = self.skip_and_throw_syntax_err(caused_by!()); + self.errs.push(err); + return Err(()); + }; + self.skip(); + let index = self + .try_reduce_expr(false, false, in_brace, false) + .map_err(|_| self.stack_dec())?; + let r_sqbr = self.lpop(); + if !r_sqbr.is(RSqBr) { + self.restore(r_sqbr); + self.level -= 1; + let err = self.skip_and_throw_syntax_err(caused_by!()); + self.errs.push(err); + return Err(()); + } + let acc = Accessor::subscr(obj, index, r_sqbr); + stack.push(ExprOrOp::Expr(Expr::Accessor(acc))); + } Some(t) if t.is(Comma) && winding => { let first_elem = PosOrKwArg::Pos(PosArg::new( enum_unwrap!(stack.pop(), Some:(ExprOrOp::Expr:(_))),