Skip to content

Commit f84798f

Browse files
committed
Refactor common code of analyze_{super,macro}
Also removed some dead code from the former (somehow the case for CacheEffect had crept back in).
1 parent cc77d6a commit f84798f

File tree

1 file changed

+18
-28
lines changed

1 file changed

+18
-28
lines changed

Tools/cases_generator/generate_cases.py

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,6 @@ def write_body(self, out: Formatter, cache_adjust: int) -> None:
271271
out.assign(var, oeffect)
272272

273273

274-
# TODO: Use a common base class for {Super,Macro}Instruction
275-
276-
277274
@dataclasses.dataclass
278275
class SuperOrMacroInstruction:
279276
"""Common fields for super- and macro instructions."""
@@ -469,22 +466,9 @@ def analyze_super(self, super: parser.Super) -> SuperInstruction:
469466
stack, initial_sp = self.stack_analysis(components)
470467
sp = initial_sp
471468
parts: list[Component] = []
472-
for component in components:
473-
match component:
474-
case parser.CacheEffect() as ceffect:
475-
parts.append(ceffect)
476-
case Instruction() as instr:
477-
input_mapping: StackEffectMapping = []
478-
for ieffect in reversed(instr.input_effects):
479-
sp -= 1
480-
input_mapping.append((stack[sp], ieffect))
481-
output_mapping: StackEffectMapping = []
482-
for oeffect in instr.output_effects:
483-
output_mapping.append((stack[sp], oeffect))
484-
sp += 1
485-
parts.append(Component(instr, input_mapping, output_mapping))
486-
case _:
487-
typing.assert_never(component)
469+
for instr in components:
470+
part, sp = self.analyze_instruction(instr, stack, sp)
471+
parts.append(part)
488472
final_sp = sp
489473
return SuperInstruction(super.name, stack, initial_sp, final_sp, super, parts)
490474

@@ -498,20 +482,26 @@ def analyze_macro(self, macro: parser.Macro) -> MacroInstruction:
498482
case parser.CacheEffect() as ceffect:
499483
parts.append(ceffect)
500484
case Instruction() as instr:
501-
input_mapping: StackEffectMapping = []
502-
for ieffect in reversed(instr.input_effects):
503-
sp -= 1
504-
input_mapping.append((stack[sp], ieffect))
505-
output_mapping: StackEffectMapping = []
506-
for oeffect in instr.output_effects:
507-
output_mapping.append((stack[sp], oeffect))
508-
sp += 1
509-
parts.append(Component(instr, input_mapping, output_mapping))
485+
part, sp = self.analyze_instruction(instr, stack, sp)
486+
parts.append(part)
510487
case _:
511488
typing.assert_never(component)
512489
final_sp = sp
513490
return MacroInstruction(macro.name, stack, initial_sp, final_sp, macro, parts)
514491

492+
def analyze_instruction(
493+
self, instr: Instruction, stack: list[StackEffect], sp: int
494+
) -> tuple[Component, int]:
495+
input_mapping: StackEffectMapping = []
496+
for ieffect in reversed(instr.input_effects):
497+
sp -= 1
498+
input_mapping.append((stack[sp], ieffect))
499+
output_mapping: StackEffectMapping = []
500+
for oeffect in instr.output_effects:
501+
output_mapping.append((stack[sp], oeffect))
502+
sp += 1
503+
return Component(instr, input_mapping, output_mapping), sp
504+
515505
def check_super_components(self, super: parser.Super) -> list[Instruction]:
516506
components: list[Instruction] = []
517507
for op in super.ops:

0 commit comments

Comments
 (0)