[pypy-svn] r60950 - in pypy/trunk/pypy/interpreter: . test
antocuni at codespeak.net
antocuni at codespeak.net
Wed Jan 14 13:48:36 CET 2009
Author: antocuni
Date: Wed Jan 14 13:48:35 2009
New Revision: 60950
Modified:
pypy/trunk/pypy/interpreter/generator.py
pypy/trunk/pypy/interpreter/test/test_generator.py
Log:
make sure to close() the generator object when it's finalized. Reviews welcome
Modified: pypy/trunk/pypy/interpreter/generator.py
==============================================================================
--- pypy/trunk/pypy/interpreter/generator.py (original)
+++ pypy/trunk/pypy/interpreter/generator.py Wed Jan 14 13:48:35 2009
@@ -110,3 +110,6 @@
if w_retval is not None:
msg = "generator ignored GeneratorExit"
raise OperationError(space.w_RuntimeError, space.wrap(msg))
+
+ def __del__(self):
+ self.descr_close()
Modified: pypy/trunk/pypy/interpreter/test/test_generator.py
==============================================================================
--- pypy/trunk/pypy/interpreter/test/test_generator.py (original)
+++ pypy/trunk/pypy/interpreter/test/test_generator.py Wed Jan 14 13:48:35 2009
@@ -156,6 +156,23 @@
g.next()
raises(RuntimeError, g.close)
+ def test_close_on_collect(self):
+ ## we need to exec it, else it won't run on python2.4
+ exec """
+ def f():
+ try:
+ yield
+ finally:
+ f.x = 42
+ """.strip() in locals(), locals()
+
+ g = f()
+ g.next()
+ del g
+ import gc
+ gc.collect()
+ assert f.x == 42
+
def test_generator_raises_typeerror(self):
def f():
yield 1
More information about the Pypy-commit
mailing list