(&mut self)
| 406 | } |
| 407 | |
| 408 | fn parse_for_statement(&mut self) -> Result<Statement, ParsingError> { |
| 409 | let node = self.start_node(); |
| 410 | let is_async = self.eat(Kind::Async); |
| 411 | self.bump(Kind::For); |
| 412 | let target = self.parse_target_list()?; |
| 413 | self.expect(Kind::In)?; |
| 414 | let iter_list = self.parse_starred_list(Kind::Colon)?; |
| 415 | let iter = match iter_list.len() { |
| 416 | 0 => { |
| 417 | panic!("Unexpected token {:?}", self.cur_token()); |
| 418 | } |
| 419 | 1 => iter_list.into_iter().next().unwrap(), |
| 420 | _ => Expression::Tuple(Box::new(Tuple { |
| 421 | node: self.finish_node(node), |
| 422 | elements: iter_list, |
| 423 | })), |
| 424 | }; |
| 425 | |
| 426 | self.expect(Kind::Colon)?; |
| 427 | let body = self.parse_suite()?; |
| 428 | let orelse = if self.eat(Kind::Else) { |
| 429 | self.expect(Kind::Colon)?; |
| 430 | self.parse_suite()? |
| 431 | } else { |
| 432 | vec![] |
| 433 | }; |
| 434 | |
| 435 | if is_async { |
| 436 | Ok(Statement::AsyncForStatement(Box::new(AsyncFor { |
| 437 | node: self.finish_node(node), |
| 438 | target, |
| 439 | iter, |
| 440 | body, |
| 441 | orelse, |
| 442 | }))) |
| 443 | } else { |
| 444 | Ok(Statement::ForStatement(Box::new(For { |
| 445 | node: self.finish_node(node), |
| 446 | target, |
| 447 | iter, |
| 448 | body, |
| 449 | orelse, |
| 450 | }))) |
| 451 | } |
| 452 | } |
| 453 | |
| 454 | fn parse_with_statement(&mut self) -> Result<Statement, ParsingError> { |
| 455 | let node = self.start_node(); |
no test coverage detected