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__)