diff -r d0eae8cddce5 Include/object.h
--- a/Include/object.h Thu Aug 30 09:46:39 2012 -0400
+++ b/Include/object.h Thu Sep 06 11:44:19 2012 -0400
@@ -436,6 +436,9 @@
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*);
#endif
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
+PyAPI_FUNC(PyObject*) PyType_FromSpecEx(PyTypeObject *, PyType_Spec*, PyObject*);
+#endif
#ifndef Py_LIMITED_API
/* The *real* layout of a type object when allocated on the heap */
diff -r d0eae8cddce5 Objects/typeobject.c
--- a/Objects/typeobject.c Thu Aug 30 09:46:39 2012 -0400
+++ b/Objects/typeobject.c Thu Sep 06 11:44:19 2012 -0400
@@ -2380,9 +2380,9 @@
};
PyObject *
-PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
-{
- PyHeapTypeObject *res = (PyHeapTypeObject*)PyType_GenericAlloc(&PyType_Type, 0);
+PyType_FromSpecEx(PyTypeObject *metatype, PyType_Spec *spec, PyObject *bases)
+{
+ PyHeapTypeObject *res = (PyHeapTypeObject*)metatype->tp_alloc(metatype, 0);
PyTypeObject *type, *base;
char *s;
char *res_start = (char*)res;
@@ -2504,9 +2504,15 @@
}
PyObject *
+PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
+{
+ return PyType_FromSpecEx(&PyType_Type, spec, bases);
+}
+
+PyObject *
PyType_FromSpec(PyType_Spec *spec)
{
- return PyType_FromSpecWithBases(spec, NULL);
+ return PyType_FromSpecEx(&PyType_Type, spec, NULL);
}