]> granicus.if.org Git - python/commitdiff
Merged revisions 67954 via svnmerge from
authorBenjamin Peterson <benjamin@python.org>
Sat, 27 Dec 2008 19:03:36 +0000 (19:03 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sat, 27 Dec 2008 19:03:36 +0000 (19:03 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r67954 | benjamin.peterson | 2008-12-27 12:24:11 -0600 (Sat, 27 Dec 2008) | 1 line

  #4748 lambda generators shouldn't return values
........

Lib/test/test_generators.py
Misc/NEWS
Python/compile.c

index 8f2da7d9e393ec53afed7527dad3cad3388a591d..9b4e3428affa6a02f72c4869b7924a17fdda54b0 100644 (file)
@@ -928,6 +928,16 @@ Test the __name__ attribute and the repr()
 'f'
 >>> repr(g)  # doctest: +ELLIPSIS
 '<generator object f at ...>'
+
+Lambdas shouldn't have their usual return behavior.
+
+>>> x = lambda: (yield 1)
+>>> list(x())
+[1]
+
+>>> x = lambda: ((yield 1), (yield 2))
+>>> list(x())
+[1, 2]
 """
 
 # conjoin is a simple backtracking generator, named in honor of Icon's
index ed62a01c655201cf9c89ed5206b6347f42fac52d..f86712a4c340292879fe6abc7e11708c12a648c8 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -56,6 +56,8 @@ Core and Builtins
 - Issue #4569: Interpreter crash when mutating a memoryview with an item size
   larger than 1.
 
+- Issue #4748: Lambda generators no longer return a value.
+
 Library
 -------
 
index 36f8c13d527fc2076a39e254bb9f7c4f0ee12847..e50c75cf5c20eee5016ff4e49e07e49434602ec4 100644 (file)
@@ -1704,7 +1704,12 @@ compiler_lambda(struct compiler *c, expr_ty e)
        c->u->u_argcount = asdl_seq_LEN(args->args);
        c->u->u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs);
        VISIT_IN_SCOPE(c, expr, e->v.Lambda.body);
-       ADDOP_IN_SCOPE(c, RETURN_VALUE);
+       if (c->u->u_ste->ste_generator) {
+               ADDOP_IN_SCOPE(c, POP_TOP);
+       }
+       else {
+               ADDOP_IN_SCOPE(c, RETURN_VALUE);
+       }
        co = assemble(c, 1);
        compiler_exit_scope(c);
        if (co == NULL)