parse empty array as [Any] where a type is expected]
This commit is contained in:
@@ -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))) => (),
|
||||||
|
|||||||
Reference in New Issue
Block a user