[pypy-commit] pypy py3.5-corowrapper: Comment, test about StopAsyncIteration
arigo
pypy.commits at gmail.com
Sat Sep 17 17:15:43 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5-corowrapper
Changeset: r87201:b16d98337497
Date: 2016-09-17 23:15 +0200
http://bitbucket.org/pypy/pypy/changeset/b16d98337497/
Log: Comment, test about StopAsyncIteration
diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -107,6 +107,9 @@
frame = self.frame
if frame is None:
if isinstance(self, Coroutine):
+ # NB. CPython checks a flag 'closing' here, but instead
+ # we can simply not be here at all if frame is None in
+ # this case
raise oefmt(space.w_RuntimeError,
"cannot reuse already awaited coroutine")
# xxx a bit ad-hoc, but we don't want to go inside
diff --git a/pypy/interpreter/test/test_coroutine.py b/pypy/interpreter/test/test_coroutine.py
--- a/pypy/interpreter/test/test_coroutine.py
+++ b/pypy/interpreter/test/test_coroutine.py
@@ -32,6 +32,31 @@
assert False, "should have raised"
"""
+ def test_StopAsyncIteration(self): """
+ class X:
+ def __aiter__(self):
+ return MyAIter()
+ class MyAIter:
+ count = 0
+ async def __anext__(self):
+ if self.count == 3:
+ raise StopAsyncIteration
+ self.count += 1
+ return 42
+ async def f(x):
+ sum = 0
+ async for a in x:
+ sum += a
+ return sum
+ cr = f(X())
+ try:
+ cr.send(None)
+ except StopIteration as e:
+ assert e.value == 42 * 3
+ else:
+ assert False, "should have raised"
+ """
+
def test_async_for_old_style(self): """
class X:
def __aiter__(self):
More information about the pypy-commit
mailing list