summaryrefslogtreecommitdiff
path: root/Cython/Compiler/ModuleNode.py
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2013-02-24 17:35:43 +0100
committerStefan Behnel <stefan_ml@behnel.de>2013-02-24 17:35:43 +0100
commitd2b46ecc3ac75eba8ca0fa8543b167f1b0030c2b (patch)
tree69bebb7568455dded65c955cd8e91a075d4049d3 /Cython/Compiler/ModuleNode.py
parent11e3944a0f24c5e625772be4ef27a9e95f781350 (diff)
downloadcython-d2b46ecc3ac75eba8ca0fa8543b167f1b0030c2b.tar.gz
extend freelist support to all subtypes that have the same object struct size
Diffstat (limited to 'Cython/Compiler/ModuleNode.py')
-rw-r--r--Cython/Compiler/ModuleNode.py8
1 files changed, 4 insertions, 4 deletions
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py
index 34f228129..6cf5f8a3f 100644
--- a/Cython/Compiler/ModuleNode.py
+++ b/Cython/Compiler/ModuleNode.py
@@ -1065,8 +1065,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
else:
code.putln("PyObject *o;")
if freelist_size:
- code.putln("if ((%s > 0) & (t == %s)) {" % (
- freecount_name, type.typeptr_cname))
+ code.putln("if ((%s > 0) & (t->tp_basicsize == sizeof(%s))) {" % (
+ freecount_name, type.declaration_code("", deref=True)))
code.putln("o = (PyObject*)%s[--%s];" % (
freelist_name, freecount_name))
code.putln("PyObject_INIT(o, t);")
@@ -1208,8 +1208,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
freecount_name = scope.mangle_internal(Naming.freecount_name)
type = scope.parent_type
- code.putln("if ((%s < %d) & (Py_TYPE(o) == %s)) {" % (
- freecount_name, freelist_size, type.typeptr_cname))
+ code.putln("if ((%s < %d) & (Py_TYPE(o)->tp_basicsize == sizeof(%s))) {" % (
+ freecount_name, freelist_size, type.declaration_code("", deref=True)))
code.putln("%s[%s++] = %s;" % (
freelist_name, freecount_name, type.cast_code("o")))
code.putln("} else {")