parse empty array as [Any] where a type is expected]

This commit is contained in:
2024-10-19 22:20:08 -04:00
parent 3027ef4820
commit 605a6ae460

View File

@@ -446,6 +446,23 @@ impl<'a, I: Iterator<Item = Result<Token, TokenizeError>>> Parser<'a, I> {
Ok(Type::Function(FunctionType(Box::new(rett), args.clone()))) Ok(Type::Function(FunctionType(Box::new(rett), args.clone())))
}, },
Some(Ok(Token::Operator(Op::OpenArray))) => { 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::<Result<Vec<_>, 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 t = Self::parse_type(tokens)?;
let _ = match tokens.next() { let _ = match tokens.next() {
Some(Ok(Token::Operator(Op::CloseArray))) => (), Some(Ok(Token::Operator(Op::CloseArray))) => (),