diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2013-02-25 18:53:23 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2013-02-25 18:53:23 +0100 |
commit | 199b5c5cbb7c1cf87436406035c3f2d2eceb3a4d (patch) | |
tree | 5cde490f4bcb3f6023b4b25bd6a23e385e6568d7 /Cython/Compiler/ModuleNode.py | |
parent | b25259c9abf63188c08de40151fef74d9d4a0e34 (diff) | |
download | cython-199b5c5cbb7c1cf87436406035c3f2d2eceb3a4d.tar.gz |
initialise all fields to 0 when using object structs from the freelist
--HG--
extra : rebase_source : 346e99306b247c116d988b58802ed7e7eb62754c
Diffstat (limited to 'Cython/Compiler/ModuleNode.py')
-rw-r--r-- | Cython/Compiler/ModuleNode.py | 6 |
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);") |