Starts processing either an array reference or a builtin call and disambiguates between the two.
(
&mut self,
vref: VarRef,
vref_pos: LineCol,
)
| 396 | /// Starts processing either an array reference or a builtin call and disambiguates between the |
| 397 | /// two. |
| 398 | fn parse_array_or_builtin_call( |
| 399 | &mut self, |
| 400 | vref: VarRef, |
| 401 | vref_pos: LineCol, |
| 402 | ) -> Result<Statement> { |
| 403 | match self.lexer.peek()?.token { |
| 404 | Token::LeftParen => { |
| 405 | let left_paren = self.lexer.consume_peeked(); |
| 406 | let spans = self.parse_comma_separated_exprs()?; |
| 407 | let mut exprs = spans.into_iter().map(|span| span.expr.unwrap()).collect(); |
| 408 | match self.lexer.peek()?.token { |
| 409 | Token::Equal => { |
| 410 | self.lexer.consume_peeked(); |
| 411 | self.parse_array_assignment(vref, vref_pos, exprs) |
| 412 | } |
| 413 | _ => { |
| 414 | if exprs.len() != 1 { |
| 415 | return Err(Error::Bad( |
| 416 | left_paren.pos, |
| 417 | "Expected expression".to_owned(), |
| 418 | )); |
| 419 | } |
| 420 | self.parse_builtin_call(vref, vref_pos, Some(exprs.remove(0))) |
| 421 | } |
| 422 | } |
| 423 | } |
| 424 | _ => self.parse_builtin_call(vref, vref_pos, None), |
| 425 | } |
| 426 | } |
| 427 | |
| 428 | /// Parses the type name of an `AS` type definition. |
| 429 | /// |
no test coverage detected