[Python-Dev] Adding insint() function

Vladimir Marangozov Vladimir.Marangozov@inrialpes.fr
Sat, 19 Aug 2000 05:27:20 +0200 (CEST)


Fred L. Drake, Jr. wrote:
> 
> 
> Vladimir Marangozov writes:
>  > So name it PyModule_AddConstant(module, name, constant),
>  > which fails with "can't add constant to module" err msg.
> 
>   Even better!  I expect there should be at least a couple of these;
> one for ints, one for strings.
> 

What about something like this (untested):

------------------------------------------------------------------------
int
PyModule_AddObject(PyObject *m, char *name, PyObject *o)
{
        if (!PyModule_Check(m) || o == NULL)
                return -1;
        if (PyDict_SetItemString(((PyModuleObject *)m)->md_dict, name, o))
                return -1;
        Py_DECREF(o);
        return 0;
}

#define PyModule_AddConstant(m, x) \
        PyModule_AddObject(m, #x, PyInt_FromLong(x))

#define PyModule_AddString(m, x) \  
        PyModule_AddObject(m, x, PyString_FromString(x))

------------------------------------------------------------------------
void 
initmymodule(void)
{
        int CONSTANT = 123456;
        char *STR__doc__  = "Vlad";

        PyObject *m = Py_InitModule4("mymodule"...);


 
        if (PyModule_AddString(m, STR__doc__) ||
            PyModule_AddConstant(m, CONSTANT) ||
            ... 
        {
            Py_FatalError("can't init mymodule");
        }
}           


-- 
       Vladimir MARANGOZOV          | Vladimir.Marangozov@inrialpes.fr
http://sirac.inrialpes.fr/~marangoz | tel:(+33-4)76615277 fax:76615252