summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2012-11-30 13:30:31 +0100
committerStefan Behnel <stefan_ml@behnel.de>2012-11-30 13:30:31 +0100
commit5827f4c9bcfe6b9030358727c1ca3197425e576e (patch)
tree8ff171f0030ea9db4214546beecd522518c3bbe8
parent37724cccf7258445d4d5b710519fbf4bcc2df7dc (diff)
downloadcython-5827f4c9bcfe6b9030358727c1ca3197425e576e.tar.gz
fix refnanny code for del statement inside of generators
-rwxr-xr-xCython/Compiler/ExprNodes.py2
-rw-r--r--tests/run/generators_py.py12
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