(&mut self)
| 510 | } |
| 511 | |
| 512 | fn parse_try_statement(&mut self) -> Result<Statement, ParsingError> { |
| 513 | let node = self.start_node(); |
| 514 | let mut is_try_star = false; |
| 515 | self.expect(Kind::Try); |
| 516 | self.expect(Kind::Colon)?; |
| 517 | let body = self.parse_suite()?; |
| 518 | let handlers = if self.at(Kind::Except) { |
| 519 | if matches!(self.peek_kind(), Ok(Kind::Mul)) { |
| 520 | is_try_star = true; |
| 521 | } |
| 522 | self.parse_except_clauses()? |
| 523 | } else { |
| 524 | vec![] |
| 525 | }; |
| 526 | let orelse = if self.eat(Kind::Else) { |
| 527 | self.expect(Kind::Colon)?; |
| 528 | self.parse_suite()? |
| 529 | } else { |
| 530 | vec![] |
| 531 | }; |
| 532 | |
| 533 | let finalbody = if self.eat(Kind::Finally) { |
| 534 | self.expect(Kind::Colon)?; |
| 535 | self.parse_suite()? |
| 536 | } else { |
| 537 | vec![] |
| 538 | }; |
| 539 | |
| 540 | if is_try_star { |
| 541 | Ok(Statement::TryStarStatement(Box::new(TryStar { |
| 542 | node: self.finish_node_chomped(node), |
| 543 | body, |
| 544 | handlers, |
| 545 | orelse, |
| 546 | finalbody, |
| 547 | }))) |
| 548 | } else { |
| 549 | Ok(Statement::TryStatement(Box::new(Try { |
| 550 | node: self.finish_node(node), |
| 551 | body, |
| 552 | handlers, |
| 553 | orelse, |
| 554 | finalbody, |
| 555 | }))) |
| 556 | } |
| 557 | } |
| 558 | |
| 559 | fn parse_except_clauses(&mut self) -> Result<Vec<ExceptHandler>, ParsingError> { |
| 560 | let mut handlers = vec![]; |
no test coverage detected