#define root_pytype 0
#define type_pytype &PyType_Type
-#define INITTYPE(ty, base) do { \
+#define INITTYPE_META(ty, base, meta) do { \
ty##_pytype_skel.tp_base = base##_pytype; \
- ty##_pytype = inittype(&ty##_pytype_skel); \
+ ty##_pytype = inittype(&ty##_pytype_skel, meta##_pytype); \
} while (0)
+#define INITTYPE(ty, base) INITTYPE_META(ty, base, type)
#define INSERT(name, ob) do { \
PyObject *_o = (PyObject *)(ob); \
extern PyObject *mkexc(PyObject *, PyObject *, const char *, PyMethodDef *);
extern void typeready(PyTypeObject *);
-extern PyTypeObject *inittype(PyTypeObject *);
+extern PyTypeObject *inittype(PyTypeObject *, PyTypeObject *);
extern void addmethods(const PyMethodDef *);
extern PyMethodDef *donemethods(void);
PyDict_SetItemString(ty->tp_dict, "__module__", modname);
}
-PyTypeObject *inittype(PyTypeObject *tyskel)
+PyTypeObject *inittype(PyTypeObject *tyskel, PyTypeObject *meta)
{
- PyTypeObject *ty = newtype(&PyType_Type, tyskel, 0);
+ PyTypeObject *ty = newtype(meta, tyskel, 0);
ty->tp_flags |= Py_TPFLAGS_HEAPTYPE;
typeready(ty);
return (ty);