From 22fcb3d5a7f95b99bee0e8bbed66a4c6c569a7aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lozier?= Date: Sat, 3 Oct 2026 12:43:55 -0400 Subject: [PATCH] Fix double walk in yield from --- .../IronPython/Compiler/Ast/YieldFromExpression.cs | 2 +- tests/suite/test_generator.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/IronPython/Compiler/Ast/YieldFromExpression.cs b/src/core/IronPython/Compiler/Ast/YieldFromExpression.cs index e9f02c09e..15976d816 100644 --- a/src/core/IronPython/Compiler/Ast/YieldFromExpression.cs +++ b/src/core/IronPython/Compiler/Ast/YieldFromExpression.cs @@ -90,7 +90,7 @@ public override MSAst.Expression Reduce() { public override void Walk(PythonWalker walker) { if (walker.Walk(this)) { - Expression?.Walk(walker); + // Expression is already walked as part of statement so skip it statement.Walk(walker); result.Walk(walker); } diff --git a/tests/suite/test_generator.py b/tests/suite/test_generator.py index 3aaf1882e..c384e3657 100644 --- a/tests/suite/test_generator.py +++ b/tests/suite/test_generator.py @@ -524,4 +524,14 @@ def gen(): next(x) self.assertIsNone(cm.exception.value) + def test_ipy3_gh1616(self): + # https://github.com/IronLanguages/ironpython3/issues/1616 + def f(b): + yield from (b for x in range(3)) + self.assertEqual(list(f(5)), [5, 5, 5]) + + def g(): + yield from (lambda: [1, 2])() + self.assertEqual(list(g()), [1, 2]) + run_test(__name__)