Stamp the module name onto types properly.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 10 Apr 2015 14:19:25 +0000 (15:19 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 20 Apr 2015 11:53:45 +0000 (12:53 +0100)
Our types are `dynamic', because the Python code adds extra methods to
them.  Apparently the correct thing to do in such cases is to put the
raw type name in the `tp_name' slot, and stuff the module name into
`tp_dict' by hand.

util.c

diff --git a/util.c b/util.c
index f56c7fd..717c3d9 100644 (file)
--- a/util.c
+++ b/util.c
@@ -170,9 +170,12 @@ void *newtype(PyTypeObject *metaty,
 
 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);
   return (ty);
 }