summaryrefslogtreecommitdiff
path: root/Cython/Compiler/ModuleNode.py
diff options
context:
space:
mode:
Diffstat (limited to 'Cython/Compiler/ModuleNode.py')
-rw-r--r--Cython/Compiler/ModuleNode.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py
index 9c716586c..b67721086 100644
--- a/Cython/Compiler/ModuleNode.py
+++ b/Cython/Compiler/ModuleNode.py
@@ -1076,10 +1076,14 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
else:
code.putln("PyObject *o;")
if freelist_size:
+ code.globalstate.use_utility_code(
+ UtilityCode.load_cached("IncludeStringH", "StringTools.c"))
+ obj_struct = type.declaration_code("", deref=True)
code.putln("if ((%s > 0) & (t->tp_basicsize == sizeof(%s))) {" % (
- freecount_name, type.declaration_code("", deref=True)))
+ freecount_name, obj_struct))
code.putln("o = (PyObject*)%s[--%s];" % (
freelist_name, freecount_name))
+ code.putln("memset(o, 0, sizeof(%s));" % obj_struct)
code.putln("PyObject_INIT(o, t);")
if scope.needs_gc():
code.putln("PyObject_GC_Track(o);")