Commit ddaffbe7 authored by Stefan Behnel's avatar Stefan Behnel

call PyBaseObject_Type.tp_new() in tp_new() functions instead of tp_alloc() directly

parent 72804793
...@@ -1125,7 +1125,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -1125,7 +1125,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
code.globalstate.use_utility_code( code.globalstate.use_utility_code(
UtilityCode.load_cached("IncludeStringH", "StringTools.c")) UtilityCode.load_cached("IncludeStringH", "StringTools.c"))
obj_struct = type.declaration_code("", deref=True) obj_struct = type.declaration_code("", deref=True)
code.putln("if (likely((%s > 0) & (t->tp_basicsize == sizeof(%s)))) {" % ( code.putln("if (likely((%s > 0) & (t->tp_basicsize == sizeof(%s)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {" % (
freecount_name, obj_struct)) freecount_name, obj_struct))
code.putln("o = (PyObject*)%s[--%s];" % ( code.putln("o = (PyObject*)%s[--%s];" % (
freelist_name, freecount_name)) freelist_name, freecount_name))
...@@ -1134,7 +1134,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -1134,7 +1134,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
if scope.needs_gc(): if scope.needs_gc():
code.putln("PyObject_GC_Track(o);") code.putln("PyObject_GC_Track(o);")
code.putln("} else {") code.putln("} else {")
code.putln("o = (*t->tp_alloc)(t, 0);") code.putln("o = (PyObject *) PyBaseObject_Type.tp_new(t, %s, 0);" % Naming.empty_tuple)
code.putln("if (unlikely(!o)) return 0;") code.putln("if (unlikely(!o)) return 0;")
if freelist_size and not base_type: if freelist_size and not base_type:
code.putln('}') code.putln('}')
......
...@@ -133,7 +133,9 @@ ...@@ -133,7 +133,9 @@
#if PY_VERSION_HEX < 0x02060000 #if PY_VERSION_HEX < 0x02060000
#define Py_TPFLAGS_HAVE_VERSION_TAG 0 #define Py_TPFLAGS_HAVE_VERSION_TAG 0
#endif #endif
#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT)
#define Py_TPFLAGS_IS_ABSTRACT 0
#endif
#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) #if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE)
#define Py_TPFLAGS_HAVE_FINALIZE 0 #define Py_TPFLAGS_HAVE_FINALIZE 0
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment