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); }