diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2012-11-30 13:30:31 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2012-11-30 13:30:31 +0100 |
commit | 5827f4c9bcfe6b9030358727c1ca3197425e576e (patch) | |
tree | 8ff171f0030ea9db4214546beecd522518c3bbe8 | |
parent | 37724cccf7258445d4d5b710519fbf4bcc2df7dc (diff) | |
download | cython-5827f4c9bcfe6b9030358727c1ca3197425e576e.tar.gz |
fix refnanny code for del statement inside of generators
-rwxr-xr-x | Cython/Compiler/ExprNodes.py | 2 | ||||
-rw-r--r-- | tests/run/generators_py.py | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 06fc30d2e..df4bff73a 100755 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -1861,6 +1861,8 @@ class NameNode(AtomicExprNode): code.put_error_if_unbound(self.pos, self.entry) if self.entry.type.is_pyobject: + if self.entry.in_closure: + code.put_gotref(self.result()) # generator code.put_decref(self.result(), self.ctype()) code.putln('%s = NULL;' % self.result()) else: diff --git a/tests/run/generators_py.py b/tests/run/generators_py.py index f044eb1d7..3159d521b 100644 --- a/tests/run/generators_py.py +++ b/tests/run/generators_py.py @@ -350,3 +350,15 @@ def test_generator_cleanup(): yield 1 finally: print('cleanup') + +def test_del_in_generator(): + """ + >>> [ s for s in test_del_in_generator() ] + ['abcabcabc', 'abcabcabc'] + """ + x = len('abc') * 'abc' + a = x + yield x + del x + yield a + del a |