mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
GH-135379: Remove types from stack items in code generator. (GH-135384)
* Make casts explicit in the instruction definitions
This commit is contained in:
parent
49d72365cd
commit
c87b5b2cb6
13 changed files with 257 additions and 255 deletions
|
|
@ -247,12 +247,11 @@ def accept(self, visitor: Visitor) -> None:
|
|||
@dataclass
|
||||
class StackEffect(Node):
|
||||
name: str = field(compare=False) # __eq__ only uses type, cond, size
|
||||
type: str = "" # Optional `:type`
|
||||
size: str = "" # Optional `[size]`
|
||||
# Note: size cannot be combined with type or cond
|
||||
|
||||
def __repr__(self) -> str:
|
||||
items = [self.name, self.type, self.size]
|
||||
items = [self.name, self.size]
|
||||
while items and items[-1] == "":
|
||||
del items[-1]
|
||||
return f"StackEffect({', '.join(repr(item) for item in items)})"
|
||||
|
|
@ -463,20 +462,13 @@ def stack_effect(self) -> StackEffect | None:
|
|||
# IDENTIFIER [':' IDENTIFIER [TIMES]] ['if' '(' expression ')']
|
||||
# | IDENTIFIER '[' expression ']'
|
||||
if tkn := self.expect(lx.IDENTIFIER):
|
||||
type_text = ""
|
||||
if self.expect(lx.COLON):
|
||||
type_text = self.require(lx.IDENTIFIER).text.strip()
|
||||
if self.expect(lx.TIMES):
|
||||
type_text += " *"
|
||||
size_text = ""
|
||||
if self.expect(lx.LBRACKET):
|
||||
if type_text:
|
||||
raise self.make_syntax_error("Unexpected [")
|
||||
if not (size := self.expression()):
|
||||
raise self.make_syntax_error("Expected expression")
|
||||
self.require(lx.RBRACKET)
|
||||
size_text = size.text.strip()
|
||||
return StackEffect(tkn.text, type_text, size_text)
|
||||
return StackEffect(tkn.text, size_text)
|
||||
return None
|
||||
|
||||
@contextual
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue