Author: Manuel Jacob <m...@manueljacob.de> Branch: py3.6 Changeset: r94205:252f070e9c1a Date: 2018-03-31 20:17 +0200 http://bitbucket.org/pypy/pypy/changeset/252f070e9c1a/
Log: Test and fix async generator with 'await' in 'finally' block. diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py --- a/pypy/interpreter/generator.py +++ b/pypy/interpreter/generator.py @@ -718,7 +718,7 @@ # TODO: add equivalent to CPython's o->agt_gen->ag_closed = 1; w_value = self.async_gen.throw(space.w_GeneratorExit, None, None) - if w_value is not None: + if w_value is not None and isinstance(w_value, AsyncGenValueWrapper): raise oefmt(space.w_RuntimeError, "async generator ignored GeneratorExit") else: 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 @@ -504,6 +504,39 @@ raises(RuntimeError, run().send, None) """ + def test_async_aclose_await_in_finally(self): """ + import types + + @types.coroutine + def coro(): + yield 'coro' + + state = 0 + async def ag(): + nonlocal state + try: + yield + finally: + state = 1 + await coro() + state = 2 + + async def run(): + a = ag() + async for i in a: + break + await a.aclose() + a = run() + assert state == 0 + assert a.send(None) == 'coro' + assert state == 1 + try: + a.send(None) + except StopIteration: + pass + assert state == 2 + """ + def test_async_anext_close(self): """ async def ag(): yield 42 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit