| 622 | return None |
| 623 | |
| 624 | def members(self, allow_sequence : bool=False) -> list[str] | None: |
| 625 | here = self.getpos() |
| 626 | if tkn := self.expect(lx.IDENTIFIER): |
| 627 | members = [tkn.text] |
| 628 | while self.expect(lx.COMMA): |
| 629 | if tkn := self.expect(lx.IDENTIFIER): |
| 630 | members.append(tkn.text) |
| 631 | else: |
| 632 | break |
| 633 | peek = self.peek() |
| 634 | kinds = [lx.RBRACE, lx.RBRACKET] if allow_sequence else [lx.RBRACE] |
| 635 | if not peek or peek.kind not in kinds: |
| 636 | raise self.make_syntax_error( |
| 637 | f"Expected comma or right paren{'/bracket' if allow_sequence else ''}") |
| 638 | return members |
| 639 | self.setpos(here) |
| 640 | return None |
| 641 | |
| 642 | def block(self) -> BlockStmt: |
| 643 | open = self.require(lx.LBRACE) |