From 844a8c9f4267d998960ef19eb8cd0aabe60cf50e Mon Sep 17 00:00:00 2001 From: Ivan Levkivskyi Date: Sat, 22 Nov 2025 23:48:18 +0000 Subject: [PATCH] [mypyc] Fix crash on super in generator --- mypyc/irbuild/expression.py | 4 ++-- mypyc/test-data/run-classes.test | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mypyc/irbuild/expression.py b/mypyc/irbuild/expression.py index 86cc2c7fb145..2ed347ca1e79 100644 --- a/mypyc/irbuild/expression.py +++ b/mypyc/irbuild/expression.py @@ -296,8 +296,8 @@ def transform_super_expr(builder: IRBuilder, o: SuperExpr) -> Value: # Grab first argument vself: Value = next(iter_env) if builder.fn_info.is_generator: - # grab sixth argument (see comment in translate_super_method_call) - self_targ = list(builder.symtables[-1].values())[6] + # grab seventh argument (see comment in translate_super_method_call) + self_targ = list(builder.symtables[-1].values())[7] vself = builder.read(self_targ, builder.fn_info.fitem.line) elif not ir.is_ext_class: vself = next(iter_env) # second argument is self if non_extension class diff --git a/mypyc/test-data/run-classes.test b/mypyc/test-data/run-classes.test index 2c2eac505797..da72fe59f456 100644 --- a/mypyc/test-data/run-classes.test +++ b/mypyc/test-data/run-classes.test @@ -322,6 +322,17 @@ if sys.version_info[:2] > (3, 5): assert TestEnum.b.name == 'b' assert TestEnum.b.value == 2 +[case testRunSuperYieldFromDict] +from typing import Any, Iterator + +class DictSubclass(dict): + def items(self) -> Iterator[Any]: + yield 1 + yield from super().items() + +def test_sub_dict() -> None: + assert list(DictSubclass().items()) == [1] + [case testGetAttribute] class C: x: int