(self)
| 647 | return BlockStmt(open, stmts, close) |
| 648 | |
| 649 | def stmt(self) -> Stmt: |
| 650 | if tkn := self.expect(lx.IF): |
| 651 | return self.if_stmt(tkn) |
| 652 | elif self.expect(lx.LBRACE): |
| 653 | self.backup() |
| 654 | return self.block() |
| 655 | elif tkn := self.expect(lx.FOR): |
| 656 | return self.for_stmt(tkn) |
| 657 | elif tkn := self.expect(lx.WHILE): |
| 658 | return self.while_stmt(tkn) |
| 659 | elif tkn := self.expect(lx.CMACRO_IF): |
| 660 | return self.macro_if(tkn) |
| 661 | elif tkn := self.expect(lx.CMACRO_ELSE): |
| 662 | msg = "Unexpected #else" |
| 663 | raise self.make_syntax_error(msg) |
| 664 | elif tkn := self.expect(lx.CMACRO_ENDIF): |
| 665 | msg = "Unexpected #endif" |
| 666 | raise self.make_syntax_error(msg) |
| 667 | elif tkn := self.expect(lx.CMACRO_OTHER): |
| 668 | return SimpleStmt([tkn]) |
| 669 | elif tkn := self.expect(lx.SWITCH): |
| 670 | msg = "switch statements are not supported due to their complex flow control. Sorry." |
| 671 | raise self.make_syntax_error(msg) |
| 672 | tokens = self.consume_to(lx.SEMI) |
| 673 | return SimpleStmt(tokens) |
| 674 | |
| 675 | def if_stmt(self, if_: lx.Token) -> IfStmt: |
| 676 | lparen = self.require(lx.LPAREN) |
no test coverage detected