summaryrefslogtreecommitdiffstats
path: root/Tools/cases_generator/parser.py
diff options
context:
space:
mode:
authorJacob Bower <1978924+jbower-fb@users.noreply.github.com>2023-03-04 04:59:21 (GMT)
committerGitHub <noreply@github.com>2023-03-04 04:59:21 (GMT)
commit8de59c1bb9fdcea69ff6e6357972ef1b75b71721 (patch)
tree6d44ed84232528b4c52c885811659413e6d6f3eb /Tools/cases_generator/parser.py
parentcb944d0be869dfb1189265467ec8a986176cc104 (diff)
downloadcpython-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.py17
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]]: