[pypy-commit] pypy py3.7: generator_stop is not the default
cfbolz
pypy.commits at gmail.com
Fri Jan 31 09:48:02 EST 2020
Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: py3.7
Changeset: r98613:cac6a157cae7
Date: 2020-01-31 15:37 +0100
http://bitbucket.org/pypy/pypy/changeset/cac6a157cae7/
Log: generator_stop is not the default
diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -163,23 +163,14 @@
self.frame.w_yielding_from = w_delegate
def _leak_stopiteration(self, e):
- # Check for __future__ generator_stop and conditionally turn
- # a leaking StopIteration into RuntimeError (with its cause
- # set appropriately).
+ # turn a leaking StopIteration into RuntimeError (with its cause set
+ # appropriately).
space = self.space
- if self.pycode.co_flags & (consts.CO_FUTURE_GENERATOR_STOP |
- consts.CO_COROUTINE |
- consts.CO_ITERABLE_COROUTINE |
- consts.CO_ASYNC_GENERATOR):
- e2 = OperationError(space.w_RuntimeError,
- space.newtext("%s raised StopIteration" %
- self.KIND))
- e2.chain_exceptions_from_cause(space, e)
- raise e2
- else:
- space.warn(space.newtext("generator '%s' raised StopIteration"
- % self.get_qualname()),
- space.w_DeprecationWarning)
+ e2 = OperationError(space.w_RuntimeError,
+ space.newtext("%s raised StopIteration" %
+ self.KIND))
+ e2.chain_exceptions_from_cause(space, e)
+ raise e2
def _leak_stopasynciteration(self, e):
space = self.space
diff --git a/pypy/interpreter/test/apptest_generator.py b/pypy/interpreter/test/apptest_generator.py
--- a/pypy/interpreter/test/apptest_generator.py
+++ b/pypy/interpreter/test/apptest_generator.py
@@ -221,16 +221,6 @@
g = f()
assert g.close() is None
-def test_close2():
- def f():
- try:
- yield 1
- except GeneratorExit:
- raise StopIteration
- g = f()
- next(g)
- assert g.close() is None
-
def test_close3():
def f():
try:
@@ -275,21 +265,6 @@
with raises(TypeError):
g.send(1) # not started, must send None
-def test_generator_explicit_stopiteration():
- def f():
- yield 1
- raise StopIteration
- g = f()
- assert [x for x in g] == [1]
-
-def test_generator_propagate_stopiteration():
- def f():
- it = iter([1])
- while 1:
- yield next(it)
- g = f()
- assert [x for x in g] == [1]
-
def test_generator_restart():
def g():
i = next(me)
@@ -325,12 +300,6 @@
assert set(g) == set()
assert set(i for i in range(0)) == set()
-def test_explicit_stop_iteration_unpackiterable():
- def f():
- yield 1
- raise StopIteration
- assert tuple(f()) == (1,)
-
def test_exception_is_cleared_by_yield():
def f():
try:
@@ -826,34 +795,18 @@
assert isinstance(excinfo.value.__context__, ValueError)
-def test_past_generator_stop():
- # how it works without 'from __future__' import generator_stop
- def f(x):
- raise StopIteration
+def test_stopiteration_turned_into_runtime_error():
+ def badgenerator(x):
+ if x == 5:
+ raise StopIteration
yield x
- with raises(StopIteration):
- next(f(5))
-
-def test_future_generator_stop():
- d = {}
- exec("""from __future__ import generator_stop
-
-def f(x):
- raise StopIteration
- yield x
-""", d)
- f = d['f']
with raises(RuntimeError):
- next(f(5))
+ next(badgenerator(5))
def test_generator_stop_cause():
- d = {}
- exec("""from __future__ import generator_stop
-
-def gen1():
- yield 42
-""", d)
- my_gen = d['gen1']()
+ def gen1():
+ yield 42
+ my_gen = gen1()
assert next(my_gen) == 42
stop_exc = StopIteration('spam')
with raises(RuntimeError) as e:
More information about the pypy-commit
mailing list