[pypy-commit] pypy py3.3: fix yield from returns
pjenvey
noreply at buildbot.pypy.org
Wed Jul 30 02:32:51 CEST 2014
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3.3
Changeset: r72613:936bfd7e5628
Date: 2014-07-29 17:30 -0700
http://bitbucket.org/pypy/pypy/changeset/936bfd7e5628/
Log: fix yield from returns
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -1012,13 +1012,14 @@
else:
w_retval = space.call_method(w_gen, "send", w_value)
except OperationError as e:
- if not e.match(self.space, self.space.w_StopIteration):
+ if not e.match(space, space.w_StopIteration):
raise
self.popvalue() # Remove iter from stack
+ e.normalize_exception(space)
try:
w_value = space.getattr(e.get_w_value(space), space.wrap("value"))
except OperationError as e:
- if not e.match(self.space, self.space.w_AttributeError):
+ if not e.match(space, space.w_AttributeError):
raise
w_value = space.w_None
self.pushvalue(w_value)
diff --git a/pypy/interpreter/test/test_generator.py b/pypy/interpreter/test/test_generator.py
--- a/pypy/interpreter/test/test_generator.py
+++ b/pypy/interpreter/test/test_generator.py
@@ -316,6 +316,24 @@
assert False, 'Expected StopIteration'
"""
+ def test_yield_from_return(self):
+ """
+ def f1():
+ result = yield from f2()
+ return result
+ def f2():
+ yield 1
+ return 2
+ g = f1()
+ assert next(g) == 1
+ try:
+ next(g)
+ except StopIteration as e:
+ assert e.value == 2
+ else:
+ assert False, 'Expected StopIteration'
+ """
+
def test_should_not_inline(space):
from pypy.interpreter.generator import should_not_inline
More information about the pypy-commit
mailing list