From: Mark Wooding Date: Tue, 26 May 2015 15:02:01 +0000 (+0100) Subject: Fix the missing-module-names bug properly. X-Git-Url: https://git.distorted.org.uk/~mdw/pyke/commitdiff_plain/0156e4020eb3b13a1b9bcfa9887eb922ba5d9fa2 Fix the missing-module-names bug properly. Introduce a wrapper `typeready' around `PyType_Ready' which sets the module name, and call it everywhere it's needed. --- diff --git a/catacomb-python.h b/catacomb-python.h index bf2a840..bb84a74 100644 --- a/catacomb-python.h +++ b/catacomb-python.h @@ -247,6 +247,7 @@ extern PyObject *getulong(unsigned long); extern void *newtype(PyTypeObject *, const PyTypeObject *, const char *); extern PyObject *mkexc(PyObject *, PyObject *, const char *, PyMethodDef *); +extern void typeready(PyTypeObject *); extern PyTypeObject *inittype(PyTypeObject *); extern void addmethods(const PyMethodDef *); extern PyMethodDef *donemethods(void); diff --git a/util.c b/util.c index 717c3d9..8a0c06c 100644 --- a/util.c +++ b/util.c @@ -28,6 +28,10 @@ #include "catacomb-python.h" +/*----- External values ---------------------------------------------------*/ + +static PyObject *modname = 0; + /*----- Conversions -------------------------------------------------------*/ PyObject *getulong(unsigned long w) @@ -168,14 +172,17 @@ void *newtype(PyTypeObject *metaty, return (ty); } +void typeready(PyTypeObject *ty) +{ + PyType_Ready(ty); + PyDict_SetItemString(ty->tp_dict, "__module__", modname); +} + PyTypeObject *inittype(PyTypeObject *tyskel) { - static PyObject *modname = 0; PyTypeObject *ty = newtype(&PyType_Type, tyskel, 0); - if (!modname) modname = PyString_FromString("catacomb"); ty->tp_flags |= Py_TPFLAGS_HEAPTYPE; - PyType_Ready(ty); - PyDict_SetItemString(ty->tp_dict, "__module__", modname); + typeready(ty); return (ty); } @@ -637,6 +644,7 @@ PyMethodDef gmap_pymethods[] = { void util_pyinit(void) { + modname = PyString_FromString("catacomb"); INITTYPE(itemiter, root); INITTYPE(valiter, root); }