From 605a6ae460eeda5c91e34baef955cb055aa9fdfa Mon Sep 17 00:00:00 2001 From: minneelyyyy Date: Sat, 19 Oct 2024 22:20:08 -0400 Subject: [PATCH] parse empty array as [Any] where a type is expected] --- src/parser.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/parser.rs b/src/parser.rs index 9973bcb..3a6496a 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -446,6 +446,23 @@ impl<'a, I: Iterator>> Parser<'a, I> { Ok(Type::Function(FunctionType(Box::new(rett), args.clone()))) }, Some(Ok(Token::Operator(Op::OpenArray))) => { + let mut depth = 1; + let array_tokens = tokens.by_ref().take_while(|t| match t { + Ok(Token::Operator(Op::OpenArray)) => { + depth += 1; + true + }, + Ok(Token::Operator(Op::CloseArray)) => { + depth -= 1; + depth > 0 + } + _ => true, + }).collect::, TokenizeError>>().map_err(|e| ParseError::TokenizeError(e))?; + + if array_tokens.len() == 0 { + return Ok(Type::Array(Box::new(Type::Any))); + } + let t = Self::parse_type(tokens)?; let _ = match tokens.next() { Some(Ok(Token::Operator(Op::CloseArray))) => (),