diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2013-02-24 17:35:43 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2013-02-24 17:35:43 +0100 |
commit | d2b46ecc3ac75eba8ca0fa8543b167f1b0030c2b (patch) | |
tree | 69bebb7568455dded65c955cd8e91a075d4049d3 /Cython/Compiler/ModuleNode.py | |
parent | 11e3944a0f24c5e625772be4ef27a9e95f781350 (diff) | |
download | cython-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.py | 8 |
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 {") |