MCPcopy Create free account
hub / github.com/Glyphack/enderpy / parse_try_statement

Method parse_try_statement

parser/src/parser/parser.rs:512–557  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

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![];

Callers 1

Calls 8

start_nodeMethod · 0.80
expectMethod · 0.80
parse_suiteMethod · 0.80
atMethod · 0.80
parse_except_clausesMethod · 0.80
eatMethod · 0.80
finish_node_chompedMethod · 0.80
finish_nodeMethod · 0.80

Tested by

no test coverage detected