From 07e396b3f52da2a027173253ca26e1449243253a Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Fri, 6 Mar 2020 10:50:52 +0800 Subject: [PATCH] Allow chaining of array indexing operations. --- src/parser.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 4a634d90..204998b0 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1189,7 +1189,7 @@ fn parse_primary<'a>(input: &mut Peekable>) -> Result Ok(Expr::IntegerConstant(x, pos)), Some((Token::FloatConstant(x), pos)) => Ok(Expr::FloatConstant(x, pos)), Some((Token::CharConstant(c), pos)) => Ok(Expr::CharConstant(c, pos)), @@ -1222,18 +1222,16 @@ fn parse_primary<'a>(input: &mut Peekable>) -> Result { - // Possible indexing - input.next(); - parse_index_expr(Box::new(r), input) - } - _ => Ok(r), + // Tail processing all possible indexing + while let Some(&(Token::LeftBracket, _)) = input.peek() { + input.next(); + root_expr = parse_index_expr(Box::new(root_expr), input)?; } + + Ok(root_expr) } fn parse_unary<'a>(input: &mut Peekable>) -> Result {