/*----- External values ---------------------------------------------------*/
-static PyObject *modname = 0;
+PyObject *modname = 0;
PyObject *home_module = 0;
/*----- Conversions -------------------------------------------------------*/
Py_DECREF(i); i = t;
if ((rc = PyNumber_Int(i)) == 0) goto end;
end:
- if (i) Py_DECREF(i);
- if (j) Py_DECREF(j);
+ Py_XDECREF(i);
+ Py_XDECREF(j);
return (rc);
#endif
}
rc = 1;
end:
- if (i) Py_DECREF(i);
+ Py_XDECREF(i);
return (rc);
}
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));
+ (void)PyObject_INIT(&ty->ht_type, metaty);
Py_INCREF(metaty);
return (ty);
}
/*----- Building method tables --------------------------------------------*/
-DA_DECL(method_v, PyMethodDef);
-static method_v global_pymethods = DA_INIT;
+static PyMethodDef *global_methods;
+static size_t nmethods, methodsz;
+
void addmethods(const PyMethodDef *m)
{
- size_t n;
+ size_t n, want, newsz;
for (n = 0; m[n].ml_name; n++);
- DA_ENSURE(&global_pymethods, n);
- memcpy(DA(&global_pymethods) + DA_LEN(&global_pymethods),
- m, n * sizeof(*m));
- DA_EXTEND(&global_pymethods, n);
+ want = nmethods + n + 1;
+ if (want > methodsz) {
+ newsz = methodsz ? 2*methodsz : 16;
+ while (want > newsz) newsz *= 2;
+ if (!global_methods)
+ global_methods = PyObject_Malloc(newsz*sizeof(PyMethodDef));
+ else
+ global_methods = PyObject_Realloc(global_methods,
+ newsz*sizeof(PyMethodDef));
+ assert(global_methods);
+ methodsz = newsz;
+ }
+ memcpy(global_methods + nmethods, m, n*sizeof(PyMethodDef));
+ nmethods += n;
+ global_methods[nmethods].ml_name = 0;
}
-PyMethodDef *donemethods(void)
-{
- static const PyMethodDef mzero = { 0 };
- DA_PUSH(&global_pymethods, mzero);
- return (DA(&global_pymethods));
-}
+PyMethodDef *donemethods(void) { return (global_methods); }
/*----- Exceptions --------------------------------------------------------*/
void util_pyinit(void)
{
- modname = PyString_FromString("catacomb");
INITTYPE(itemiter, root);
INITTYPE(valiter, root);
addmethods(methods);