diff options
author | Jacob Bower <1978924+jbower-fb@users.noreply.github.com> | 2023-03-04 04:59:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-04 04:59:21 (GMT) |
commit | 8de59c1bb9fdcea69ff6e6357972ef1b75b71721 (patch) | |
tree | 6d44ed84232528b4c52c885811659413e6d6f3eb /Tools/cases_generator/parser.py | |
parent | cb944d0be869dfb1189265467ec8a986176cc104 (diff) | |
download | cpython-8de59c1bb9fdcea69ff6e6357972ef1b75b71721.zip cpython-8de59c1bb9fdcea69ff6e6357972ef1b75b71721.tar.gz cpython-8de59c1bb9fdcea69ff6e6357972ef1b75b71721.tar.bz2 |
gh-102021 : Allow multiple input files for interpreter loop generator (#102022)
The input files no longer use `-i`.
Diffstat (limited to 'Tools/cases_generator/parser.py')
-rw-r--r-- | Tools/cases_generator/parser.py | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/Tools/cases_generator/parser.py b/Tools/cases_generator/parser.py index c7c8d8a..7bf45a3 100644 --- a/Tools/cases_generator/parser.py +++ b/Tools/cases_generator/parser.py @@ -33,7 +33,7 @@ class Context(NamedTuple): owner: PLexer def __repr__(self): - return f"<{self.begin}-{self.end}>" + return f"<{self.owner.filename}: {self.begin}-{self.end}>" @dataclass @@ -99,6 +99,7 @@ UOp = OpName | CacheEffect @dataclass class InstHeader(Node): + override: bool register: bool kind: Literal["inst", "op", "legacy"] # Legacy means no (inputs -- outputs) name: str @@ -108,6 +109,7 @@ class InstHeader(Node): @dataclass class InstDef(Node): + override: bool register: bool kind: Literal["inst", "op", "legacy"] name: str @@ -152,17 +154,18 @@ class Parser(PLexer): if hdr := self.inst_header(): if block := self.block(): return InstDef( - hdr.register, hdr.kind, hdr.name, hdr.inputs, hdr.outputs, block + hdr.override, hdr.register, hdr.kind, hdr.name, hdr.inputs, hdr.outputs, block ) raise self.make_syntax_error("Expected block") return None @contextual def inst_header(self) -> InstHeader | None: - # inst(NAME) - # | [register] inst(NAME, (inputs -- outputs)) - # | [register] op(NAME, (inputs -- outputs)) + # [override] inst(NAME) + # | [override] [register] inst(NAME, (inputs -- outputs)) + # | [override] [register] op(NAME, (inputs -- outputs)) # TODO: Make INST a keyword in the lexer. + override = bool(self.expect(lx.OVERRIDE)) register = bool(self.expect(lx.REGISTER)) if (tkn := self.expect(lx.IDENTIFIER)) and (kind := tkn.text) in ("inst", "op"): if self.expect(lx.LPAREN) and (tkn := self.expect(lx.IDENTIFIER)): @@ -171,10 +174,10 @@ class Parser(PLexer): inp, outp = self.io_effect() if self.expect(lx.RPAREN): if (tkn := self.peek()) and tkn.kind == lx.LBRACE: - return InstHeader(register, kind, name, inp, outp) + return InstHeader(override, register, kind, name, inp, outp) elif self.expect(lx.RPAREN) and kind == "inst": # No legacy stack effect if kind is "op". - return InstHeader(register, "legacy", name, [], []) + return InstHeader(override, register, "legacy", name, [], []) return None def io_effect(self) -> tuple[list[InputEffect], list[OutputEffect]]: |