Fix yield inside lambda
authorVitja Makarov <vitja.makarov@gmail.com>
Sun, 17 Apr 2011 15:15:38 +0000 (19:15 +0400)
committerVitja Makarov <vitja.makarov@gmail.com>
Sun, 17 Apr 2011 15:15:38 +0000 (19:15 +0400)
Cython/Compiler/ParseTreeTransforms.py
tests/run/generators.pyx
tests/run/generators_py.py

index f99f699988b606db73cf0431befbd7fef08eb083..ca683e07d97fc2d4806b877aec96db28cf7e7658 100644 (file)
@@ -193,9 +193,8 @@ class PostParse(ScopeTrackingTransform):
         collector = YieldNodeCollector()
         collector.visitchildren(node.result_expr)
         if collector.yields or isinstance(node.result_expr, ExprNodes.YieldExprNode):
-            body = ExprNodes.YieldExprNode(
-                node.result_expr.pos, arg=node.result_expr)
-            body = Nodes.ExprStatNode(node.result_expr.pos, expr=body)
+            body = Nodes.ExprStatNode(
+                node.result_expr.pos, expr=node.result_expr)
         else:
             body = Nodes.ReturnStatNode(
                 node.result_expr.pos, value=node.result_expr)
index ef0e8020f7a41fbec15f606cf202e919e3b7f146..97cc72b98ee35e4a25955644d5a996810454710a 100644 (file)
@@ -291,10 +291,11 @@ def test_inside_lambda():
     >>> obj = test_inside_lambda()()
     >>> next(obj)
     1
-    >>> obj.send('a')
+    >>> next(obj)
     2
-    >>> obj.send('b')
-    ('a', 'b')
+    >>> next(obj)
+    Traceback (most recent call last):
+    StopIteration
     """
     return lambda:((yield 1), (yield 2))
 
index 7fe485492f8e5dc433107d0ebaa39d103a043c82..57a11d0a9cccf553e310d176a933690a54c0a09c 100644 (file)
@@ -276,10 +276,11 @@ def test_inside_lambda():
     >>> obj = test_inside_lambda()()
     >>> next(obj)
     1
-    >>> obj.send('a')
+    >>> next(obj)
     2
-    >>> obj.send('b')
-    ('a', 'b')
+    >>> next(obj)
+    Traceback (most recent call last):
+    StopIteration
     """
     return lambda:((yield 1), (yield 2))