/* -*-c-*-
- *
- * $Id$
*
* Miscellaneous utilities (not Catacomb-specific)
*
* (c) 2005 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of the Python interface to Catacomb.
*
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* Catacomb/Python is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with Catacomb/Python; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "catacomb-python.h"
+/*----- External values ---------------------------------------------------*/
+
+static PyObject *modname = 0;
+
/*----- Conversions -------------------------------------------------------*/
PyObject *getulong(unsigned long w)
(PyHeapTypeObject *)_PyObject_GC_Malloc(_PyObject_VAR_SIZE(metaty, 0));
if (!skel) skel = &emptytype;
memcpy(ty, skel, sizeof(*skel));
- if (ty->type.tp_base) Py_INCREF(ty->type.tp_base);
+ if (ty->ht_type.tp_base) Py_INCREF(ty->ht_type.tp_base);
#define COPY(blah) do { \
- if (ty->type.tp_as_##blah) { \
+ if (ty->ht_type.tp_as_##blah) { \
memcpy(&ty->as_##blah, \
- ty->type.tp_as_##blah, \
+ ty->ht_type.tp_as_##blah, \
sizeof(ty->as_##blah)); \
- ty->type.tp_as_##blah = &ty->as_##blah; \
+ ty->ht_type.tp_as_##blah = &ty->as_##blah; \
} \
} while (0)
COPY(number);
COPY(buffer);
#undef COPY
if (name)
- ty->name = PyString_FromString(name);
- else if (ty->type.tp_name)
- ty->name = PyString_FromString(ty->type.tp_name);
- if (ty->name)
- ty->type.tp_name = PyString_AS_STRING(ty->name);
- PyObject_INIT(&ty->type, metaty);
+ ty->ht_name = PyString_FromString(name);
+ else if (ty->ht_type.tp_name)
+ ty->ht_name = PyString_FromString(ty->ht_type.tp_name);
+ if (ty->ht_name)
+ ty->ht_type.tp_name = PyString_AS_STRING(ty->ht_name);
+ DISCARD(PyObject_INIT(&ty->ht_type, metaty));
Py_INCREF(metaty);
return (ty);
}
+void typeready(PyTypeObject *ty)
+{
+ PyType_Ready(ty);
+ PyDict_SetItemString(ty->tp_dict, "__module__", modname);
+}
+
PyTypeObject *inittype(PyTypeObject *tyskel)
{
PyTypeObject *ty = newtype(&PyType_Type, tyskel, 0);
ty->tp_flags |= Py_TPFLAGS_HEAPTYPE;
- PyType_Ready(ty);
+ typeready(ty);
return (ty);
}
static PyObject *itemiter_pynext(PyObject *me)
{
PyObject *k = 0, *v = 0, *rc = 0;
-
+
if ((k = PyIter_Next(ITER_I(me))) != 0 &&
(v = PyObject_GetItem(ITER_MAP(me), k)) != 0)
rc = Py_BuildValue("(OO)", k, v);
static PyObject *valiter_pynext(PyObject *me)
{
PyObject *k = 0, *rc = 0;
-
+
if ((k = PyIter_Next(ITER_I(me))) != 0)
rc = PyObject_GetItem(ITER_MAP(me), k);
Py_XDECREF(k);
PyMapping_HasKey, /* @sq_contains@ */
0, /* @sq_inplace_concat@ */
0 /* @sq_inplace_repeat@ */
-};
+};
int gmap_pysize(PyObject *me)
{
(l = PyList_New(0)) == 0 ||
(i = PyObject_GetIter(me)) == 0)
goto done;
- while ((k = PyIter_Next(i)) != 0) {
+ while ((k = PyIter_Next(i)) != 0) {
if ((v = PyObject_GetItem(me, k)) == 0 ||
PyList_Append(l, v))
err = -1;
/*----- Initialization ----------------------------------------------------*/
-void util_init(void)
+void util_pyinit(void)
{
+ modname = PyString_FromString("catacomb");
INITTYPE(itemiter, root);
INITTYPE(valiter, root);
}
-void util_insert(PyObject *mod)
+void util_pyinsert(PyObject *mod)
{
INSERT("ItemIter", itemiter_pytype);
INSERT("ValueIter", valiter_pytype);