1f70e43a073b36c6f6e9894c01025243a77a452d4Guido van Rossum
285a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum/* Module support implementation */
385a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum
479f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van Rossum#include "Python.h"
585a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum
65cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis#define FLAG_SIZE_T 1
71d5735e84621a7fe68d361fa0e289fa2c3310836Guido van Rossumtypedef double va_double;
81d5735e84621a7fe68d361fa0e289fa2c3310836Guido van Rossum
95cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisstatic PyObject *va_build_value(const char *, va_list, int);
105cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis
112e58ff3ef56c3bf0a7080743ec77e95ca1758b97Guido van Rossum/* Package context -- the full module name for package imports */
122e58ff3ef56c3bf0a7080743ec77e95ca1758b97Guido van Rossumchar *_Py_PackageContext = NULL;
132e58ff3ef56c3bf0a7080743ec77e95ca1758b97Guido van Rossum
1440b33c648a2d777636603356c12b644dd4c92876Guido van Rossum/* Py_InitModule4() parameters:
15970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossum   - name is the module name
16970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossum   - methods is the list of top-level functions
17970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossum   - doc is the documentation string
18970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossum   - passthrough is passed as self to functions defined in the module
19970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossum   - api_version is the value of PYTHON_API_VERSION at the time the
20970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossum     module was compiled
2140b33c648a2d777636603356c12b644dd4c92876Guido van Rossum
2240b33c648a2d777636603356c12b644dd4c92876Guido van Rossum   Return value is a borrowed reference to the module object; or NULL
2340b33c648a2d777636603356c12b644dd4c92876Guido van Rossum   if an error occurred (in Python 1.4 and before, errors were fatal).
2440b33c648a2d777636603356c12b644dd4c92876Guido van Rossum   Errors may still leak memory.
2550620fa9b8cbebb2ac085ea19fca3e14f48e7944Guido van Rossum*/
261d5735e84621a7fe68d361fa0e289fa2c3310836Guido van Rossum
27970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossumstatic char api_version_warning[] =
28e5006ebc9d0618bc500afebfa1e21b6aae2a22e3Marc-André Lemburg"Python C API version mismatch for module %.100s:\
29e5006ebc9d0618bc500afebfa1e21b6aae2a22e3Marc-André Lemburg This Python has API version %d, module %.100s has version %d.";
30970a0a20b881962a950946cbc43e1941827a1e87Guido van Rossum
3179f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van RossumPyObject *
32af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPy_InitModule4(const char *name, PyMethodDef *methods, const char *doc,
33c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou               PyObject *passthrough, int module_api_version)
3485a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum{
35c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *m, *d, *v, *n;
36c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMethodDef *ml;
3764a1e7cab1fe8f0b0b42b93bbd40e73fc983c138R. David Murray    PyInterpreterState *interp = PyThreadState_Get()->interp;
3864a1e7cab1fe8f0b0b42b93bbd40e73fc983c138R. David Murray    if (interp->modules == NULL)
3964a1e7cab1fe8f0b0b42b93bbd40e73fc983c138R. David Murray        Py_FatalError("Python import machinery not initialized");
40c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (module_api_version != PYTHON_API_VERSION) {
41c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        char message[512];
42c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyOS_snprintf(message, sizeof(message),
43c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                      api_version_warning, name,
44c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                      PYTHON_API_VERSION, name,
45c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                      module_api_version);
46c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (PyErr_Warn(PyExc_RuntimeWarning, message))
47c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return NULL;
48c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
49c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Make sure name is fully qualified.
50c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
51c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       This is a bit of a hack: when the shared library is loaded,
52c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       the module name is "package.module", but the module calls
53c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       Py_InitModule*() with just "module" for the name.  The shared
54c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       library loader squirrels away the true name of the module in
55c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       _Py_PackageContext, and Py_InitModule*() will substitute this
56c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       (if the name actually matches).
57c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    */
58c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (_Py_PackageContext != NULL) {
59c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        char *p = strrchr(_Py_PackageContext, '.');
60c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (p != NULL && strcmp(name, p+1) == 0) {
61c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            name = _Py_PackageContext;
62c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            _Py_PackageContext = NULL;
63c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
64c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
65c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((m = PyImport_AddModule(name)) == NULL)
66c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
67c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    d = PyModule_GetDict(m);
68c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (methods != NULL) {
69c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        n = PyString_FromString(name);
70c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (n == NULL)
71c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return NULL;
72c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        for (ml = methods; ml->ml_name != NULL; ml++) {
73c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if ((ml->ml_flags & METH_CLASS) ||
74c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                (ml->ml_flags & METH_STATIC)) {
75c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                PyErr_SetString(PyExc_ValueError,
76c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                "module functions cannot set"
77c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                " METH_CLASS or METH_STATIC");
78c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                Py_DECREF(n);
79c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return NULL;
80c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
81c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            v = PyCFunction_NewEx(ml, passthrough, n);
82c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (v == NULL) {
83c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                Py_DECREF(n);
84c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return NULL;
85c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
86c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
87c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                Py_DECREF(v);
88c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                Py_DECREF(n);
89c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return NULL;
90c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
91c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_DECREF(v);
92c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
93c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_DECREF(n);
94c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
95c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (doc != NULL) {
96c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        v = PyString_FromString(doc);
97c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
98c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_XDECREF(v);
99c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return NULL;
100c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
101c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_DECREF(v);
102c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
103c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return m;
10485a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum}
10585a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum
10685a5fbbdfea617f6cc8fae82c9e8c2b5c424436dGuido van Rossum
107bf80e5407ffa0fc983eb1da50ffa9330b9eada6eGuido van Rossum/* Helper for mkvalue() to scan the length of a format */
108fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum
109ceead6d9571673200848a3bc9e4e046832166e20Fred Drakestatic int
110af68c874a6803b4e90b616077a602c0593719a1dJeremy Hyltoncountformat(const char *format, int endchar)
111fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum{
112c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int count = 0;
113c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int level = 0;
114c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    while (level > 0 || *format != endchar) {
115c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        switch (*format) {
116c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '\0':
117c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            /* Premature end */
118c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyErr_SetString(PyExc_SystemError,
119c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            "unmatched paren in format");
120c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return -1;
121c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '(':
122c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '[':
123c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '{':
124c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (level == 0)
125c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                count++;
126c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            level++;
127c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            break;
128c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ')':
129c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ']':
130c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '}':
131c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            level--;
132c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            break;
133c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '#':
134c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '&':
135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ',':
136c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ':':
137c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ' ':
138c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '\t':
139c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            break;
140c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        default:
141c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (level == 0)
142c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                count++;
143c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
144c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        format++;
145c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
146c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return count;
147fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum}
148fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum
149fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum
150fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum/* Generic function to create a value -- the inverse of getargs() */
151fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum/* After an original idea and first implementation by Steven Miale */
152fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum
1535cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisstatic PyObject *do_mktuple(const char**, va_list *, int, int, int);
1545cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisstatic PyObject *do_mklist(const char**, va_list *, int, int, int);
1555cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisstatic PyObject *do_mkdict(const char**, va_list *, int, int, int);
1565cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisstatic PyObject *do_mkvalue(const char**, va_list *, int);
157fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum
1581ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
15912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchakastatic void
16012cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchakado_ignore(const char **p_format, va_list *p_va, int endchar, int n, int flags)
16112cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka{
16212cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    PyObject *v;
16312cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    int i;
16412cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    assert(PyErr_Occurred());
16512cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    v = PyTuple_New(n);
16612cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    for (i = 0; i < n; i++) {
16712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        PyObject *exception, *value, *tb, *w;
16812cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        PyErr_Fetch(&exception, &value, &tb);
16912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        w = do_mkvalue(p_format, p_va, flags);
17012cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        PyErr_Restore(exception, value, tb);
17112cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        if (w != NULL) {
17212cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            if (v != NULL) {
17312cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka                PyTuple_SET_ITEM(v, i, w);
17412cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            }
17512cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            else {
17612cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka                Py_DECREF(w);
17712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            }
17812cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        }
17912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    }
18012cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    Py_XDECREF(v);
18112cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if (**p_format != endchar) {
18212cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        PyErr_SetString(PyExc_SystemError,
18312cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka                        "Unmatched paren in format");
18412cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        return;
18512cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    }
18612cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if (endchar)
18712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        ++*p_format;
18812cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka}
18912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka
19079f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van Rossumstatic PyObject *
1915cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisdo_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
1921ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum{
193c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *d;
194c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i;
195c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (n < 0)
196c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
19712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if (n % 2) {
19812cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        PyErr_SetString(PyExc_SystemError,
19912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka                        "Bad dict format");
20012cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        do_ignore(p_format, p_va, endchar, n, flags);
201c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
20212cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    }
203c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Note that we can't bail immediately on error as this will leak
204c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       refcounts on any 'N' arguments. */
20512cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if ((d = PyDict_New()) == NULL) {
20612cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        do_ignore(p_format, p_va, endchar, n, flags);
20712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        return NULL;
20812cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    }
209c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (i = 0; i < n; i+= 2) {
210c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyObject *k, *v;
21112cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka
212c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        k = do_mkvalue(p_format, p_va, flags);
213c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (k == NULL) {
21412cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            do_ignore(p_format, p_va, endchar, n - i - 1, flags);
21512cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            Py_DECREF(d);
21612cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            return NULL;
217c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
218c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        v = do_mkvalue(p_format, p_va, flags);
21912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        if (v == NULL || PyDict_SetItem(d, k, v) < 0) {
22012cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            do_ignore(p_format, p_va, endchar, n - i - 2, flags);
22112cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            Py_DECREF(k);
22212cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            Py_XDECREF(v);
223c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_DECREF(d);
224c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return NULL;
225c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
22612cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        Py_DECREF(k);
22712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        Py_DECREF(v);
228c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
22912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if (**p_format != endchar) {
230c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_DECREF(d);
231c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_SystemError,
232c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        "Unmatched paren in format");
23312cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        return NULL;
234c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
23512cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if (endchar)
236c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ++*p_format;
237c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return d;
2381ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum}
2391ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
24079f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van Rossumstatic PyObject *
2415cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisdo_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
2421ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum{
243c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *v;
244c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i;
245c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (n < 0)
246c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
247c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Note that we can't bail immediately on error as this will leak
248c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       refcounts on any 'N' arguments. */
24912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    v = PyList_New(n);
25012cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if (v == NULL) {
25112cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        do_ignore(p_format, p_va, endchar, n, flags);
25212cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        return NULL;
25312cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    }
254c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (i = 0; i < n; i++) {
255c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyObject *w = do_mkvalue(p_format, p_va, flags);
256c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (w == NULL) {
25712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            do_ignore(p_format, p_va, endchar, n - i - 1, flags);
25812cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            Py_DECREF(v);
25912cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            return NULL;
260c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
261c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyList_SET_ITEM(v, i, w);
262c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
263c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (**p_format != endchar) {
264c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_DECREF(v);
265c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_SystemError,
266c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        "Unmatched paren in format");
267c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
268c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
269c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (endchar)
270c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ++*p_format;
271c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return v;
2721ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum}
2731ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
274339d0f720e86dc34837547c90d3003a4a68d7d46Martin v. Löwis#ifdef Py_USING_UNICODE
27525d34473c3c2429f0bf5c27e147fe57c6a718e99Fred Drakestatic int
27625d34473c3c2429f0bf5c27e147fe57c6a718e99Fred Drake_ustrlen(Py_UNICODE *u)
27725d34473c3c2429f0bf5c27e147fe57c6a718e99Fred Drake{
278c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i = 0;
279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_UNICODE *v = u;
280c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    while (*v != 0) { i++; v++; }
281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return i;
28225d34473c3c2429f0bf5c27e147fe57c6a718e99Fred Drake}
283339d0f720e86dc34837547c90d3003a4a68d7d46Martin v. Löwis#endif
28425d34473c3c2429f0bf5c27e147fe57c6a718e99Fred Drake
28579f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van Rossumstatic PyObject *
2865cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisdo_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
287fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum{
288c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *v;
289c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int i;
290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (n < 0)
291c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
292c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Note that we can't bail immediately on error as this will leak
293c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou       refcounts on any 'N' arguments. */
29412cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    if ((v = PyTuple_New(n)) == NULL) {
29512cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        do_ignore(p_format, p_va, endchar, n, flags);
29612cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka        return NULL;
29712cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka    }
298c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (i = 0; i < n; i++) {
299c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyObject *w = do_mkvalue(p_format, p_va, flags);
300c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (w == NULL) {
30112cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            do_ignore(p_format, p_va, endchar, n - i - 1, flags);
30212cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            Py_DECREF(v);
30312cf60c7fa8f49997ce4d20be3bd814d736feecaSerhiy Storchaka            return NULL;
304c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
305c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyTuple_SET_ITEM(v, i, w);
306c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
307c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (**p_format != endchar) {
308c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_DECREF(v);
309c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_SystemError,
310c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        "Unmatched paren in format");
311c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
312c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
313c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (endchar)
314c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ++*p_format;
315c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return v;
316fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum}
317fc61adb5f1b562935557a79c9e024fa1eb6e8db1Guido van Rossum
31879f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van Rossumstatic PyObject *
3195cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisdo_mkvalue(const char **p_format, va_list *p_va, int flags)
320899dcf36a04a401381fbfdcc3e355010543dc3c3Guido van Rossum{
321c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    for (;;) {
322c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        switch (*(*p_format)++) {
323c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '(':
324c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return do_mktuple(p_format, p_va, ')',
325c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              countformat(*p_format, ')'), flags);
326c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
327c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '[':
328c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return do_mklist(p_format, p_va, ']',
329c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             countformat(*p_format, ']'), flags);
330c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
331c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '{':
332c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return do_mkdict(p_format, p_va, '}',
333c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             countformat(*p_format, '}'), flags);
334c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
335c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'b':
336c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'B':
337c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'h':
338c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'i':
339c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyInt_FromLong((long)va_arg(*p_va, int));
340c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
341c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'H':
342c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
343c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
344c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'I':
345c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        {
346c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            unsigned int n;
347c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            n = va_arg(*p_va, unsigned int);
348c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (n > (unsigned long)PyInt_GetMax())
349c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return PyLong_FromUnsignedLong((unsigned long)n);
350c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            else
351c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return PyInt_FromLong(n);
352c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
353c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
354c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'n':
35518e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis#if SIZEOF_SIZE_T!=SIZEOF_LONG
356c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));
35718e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis#endif
358c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            /* Fall through from 'n' to 'l' if Py_ssize_t is long */
359c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'l':
360c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyInt_FromLong(va_arg(*p_va, long));
361c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
362c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'k':
363c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        {
364c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            unsigned long n;
365c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            n = va_arg(*p_va, unsigned long);
366c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (n > (unsigned long)PyInt_GetMax())
367c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return PyLong_FromUnsignedLong(n);
368c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            else
369c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                return PyInt_FromLong(n);
370c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
371dbd6503e97264938c8fb4ce099c64da7a475e12eJack Jansen
3723dbba6ec3a065a573216bc79b5e4d655ee0cd899Guido van Rossum#ifdef HAVE_LONG_LONG
373c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'L':
374c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
375dbd6503e97264938c8fb4ce099c64da7a475e12eJack Jansen
376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'K':
377c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
3781a8791e0b875df8e9428c2d9969f64e5967ac0b4Guido van Rossum#endif
379339d0f720e86dc34837547c90d3003a4a68d7d46Martin v. Löwis#ifdef Py_USING_UNICODE
380c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'u':
381c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        {
382c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyObject *v;
383c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
384c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_ssize_t n;
385c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (**p_format == '#') {
386c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                ++*p_format;
387c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                if (flags & FLAG_SIZE_T)
388c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    n = va_arg(*p_va, Py_ssize_t);
389c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                else
390c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    n = va_arg(*p_va, int);
391c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
392c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            else
393c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                n = -1;
394c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (u == NULL) {
395c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                v = Py_None;
396c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                Py_INCREF(v);
397c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
398c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            else {
399c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                if (n < 0)
400c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    n = _ustrlen(u);
401c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                v = PyUnicode_FromUnicode(u, n);
402c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
403c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return v;
404c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
405339d0f720e86dc34837547c90d3003a4a68d7d46Martin v. Löwis#endif
406c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'f':
407c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'd':
408c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyFloat_FromDouble(
409c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                (double)va_arg(*p_va, va_double));
4101ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
411aec79247b145e6cd5b7a769fd85ab71748d8b247Fred Drake#ifndef WITHOUT_COMPLEX
412c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'D':
413c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyComplex_FromCComplex(
414c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                *((Py_complex *)va_arg(*p_va, Py_complex *)));
415aec79247b145e6cd5b7a769fd85ab71748d8b247Fred Drake#endif /* WITHOUT_COMPLEX */
416aec79247b145e6cd5b7a769fd85ab71748d8b247Fred Drake
417c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'c':
418c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        {
419c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            char p[1];
420c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            p[0] = (char)va_arg(*p_va, int);
421c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return PyString_FromStringAndSize(p, 1);
422c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
423c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
424c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 's':
425c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'z':
426c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        {
427c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyObject *v;
428c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            char *str = va_arg(*p_va, char *);
429c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            Py_ssize_t n;
430c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (**p_format == '#') {
431c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                ++*p_format;
432c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                if (flags & FLAG_SIZE_T)
433c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    n = va_arg(*p_va, Py_ssize_t);
434c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                else
435c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    n = va_arg(*p_va, int);
436c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
437c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            else
438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                n = -1;
439c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (str == NULL) {
440c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                v = Py_None;
441c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                Py_INCREF(v);
442c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
443c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            else {
444c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                if (n < 0) {
445c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    size_t m = strlen(str);
446c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    if (m > PY_SSIZE_T_MAX) {
447c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        PyErr_SetString(PyExc_OverflowError,
448c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            "string too long for Python string");
449c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        return NULL;
450c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    }
451c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    n = (Py_ssize_t)m;
452c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                }
453c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                v = PyString_FromStringAndSize(str, n);
454c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
455c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return v;
456c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
457c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
458c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'N':
459c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'S':
460c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case 'O':
461c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (**p_format == '&') {
462c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            typedef PyObject *(*converter)(void *);
463c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            converter func = va_arg(*p_va, converter);
464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            void *arg = va_arg(*p_va, void *);
465c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            ++*p_format;
466c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return (*func)(arg);
467c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
468c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        else {
469c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyObject *v;
470c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            v = va_arg(*p_va, PyObject *);
471c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            if (v != NULL) {
472c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                if (*(*p_format - 1) != 'N')
473c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    Py_INCREF(v);
474c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            }
475c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            else if (!PyErr_Occurred())
476c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                /* If a NULL was passed
477c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 * because a call that should
478c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 * have constructed a value
479c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 * failed, that's OK, and we
480c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 * pass the error on; but if
481c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 * no error occurred it's not
482c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 * clear that the caller knew
483c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 * what she was doing. */
484c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                PyErr_SetString(PyExc_SystemError,
485c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    "NULL object passed to Py_BuildValue");
486c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return v;
487c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
488c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
489c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ':':
490c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ',':
491c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case ' ':
492c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        case '\t':
493c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            break;
494c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
495c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        default:
496c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyErr_SetString(PyExc_SystemError,
497c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                "bad format char passed to Py_BuildValue");
498c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            return NULL;
499c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        }
501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
5023cfe6faffeaddd64355d16c358894a31b72e5450Guido van Rossum}
5033cfe6faffeaddd64355d16c358894a31b72e5450Guido van Rossum
5041ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
505ceead6d9571673200848a3bc9e4e046832166e20Fred DrakePyObject *
506af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPy_BuildValue(const char *format, ...)
5073cfe6faffeaddd64355d16c358894a31b72e5450Guido van Rossum{
508c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_list va;
509c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject* retval;
510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_start(va, format);
511c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    retval = va_build_value(format, va, 0);
512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_end(va);
513c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return retval;
5145cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis}
5155cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis
5165cb6936672a1410f5502d754570bc548064f9dc4Martin v. LöwisPyObject *
5175cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis_Py_BuildValue_SizeT(const char *format, ...)
5185cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis{
519c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_list va;
520c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject* retval;
521c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_start(va, format);
522c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    retval = va_build_value(format, va, FLAG_SIZE_T);
523c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_end(va);
524c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return retval;
5253cfe6faffeaddd64355d16c358894a31b72e5450Guido van Rossum}
526e537240c252ff678d49451ee6f80fa934653a724Guido van Rossum
52779f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van RossumPyObject *
528af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPy_VaBuildValue(const char *format, va_list va)
529e537240c252ff678d49451ee6f80fa934653a724Guido van Rossum{
530c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return va_build_value(format, va, 0);
5315cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis}
5325cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis
5335cb6936672a1410f5502d754570bc548064f9dc4Martin v. LöwisPyObject *
5345cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis_Py_VaBuildValue_SizeT(const char *format, va_list va)
5355cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis{
536c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return va_build_value(format, va, FLAG_SIZE_T);
5375cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis}
5385cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis
5395cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisstatic PyObject *
5405cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwisva_build_value(const char *format, va_list va, int flags)
5415cb6936672a1410f5502d754570bc548064f9dc4Martin v. Löwis{
542c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    const char *f = format;
543c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int n = countformat(f, '\0');
544c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_list lva;
5451ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
5461ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum#ifdef VA_LIST_IS_ARRAY
547c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    memcpy(lva, va, sizeof(va_list));
5481ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum#else
54975d2d94e0f049162c6ef353a89c5703eb78eaaf6Martin v. Löwis#ifdef __va_copy
550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    __va_copy(lva, va);
55175d2d94e0f049162c6ef353a89c5703eb78eaaf6Martin v. Löwis#else
552c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    lva = va;
5531ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum#endif
55475d2d94e0f049162c6ef353a89c5703eb78eaaf6Martin v. Löwis#endif
5551ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
556c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (n < 0)
557c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
558c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (n == 0) {
559c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_INCREF(Py_None);
560c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_None;
561c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
562c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (n == 1)
563c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return do_mkvalue(&f, &lva, flags);
564c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return do_mktuple(&f, &lva, '\0', n, flags);
5651ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum}
5661ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
5671ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
56879f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van RossumPyObject *
569af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPyEval_CallFunction(PyObject *obj, const char *format, ...)
5701ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum{
571c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_list vargs;
572c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *args;
573c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *res;
5741ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
575c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_start(vargs, format);
5761ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
577c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    args = Py_VaBuildValue(format, vargs);
578c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_end(vargs);
5791ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
580c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (args == NULL)
581c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
5821ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
583c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    res = PyEval_CallObject(obj, args);
584c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_DECREF(args);
5851ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
586c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return res;
5871ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum}
5881ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
5891ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
59079f25d9a7b853a9f491a0cfe4b81eeb9e2d19569Guido van RossumPyObject *
591af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
5921ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum{
593c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_list vargs;
594c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *meth;
595c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *args;
596c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *res;
5971ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
598c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    meth = PyObject_GetAttrString(obj, methodname);
599c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (meth == NULL)
600c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
6011ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
602c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_start(vargs, format);
6031ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
604c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    args = Py_VaBuildValue(format, vargs);
605c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    va_end(vargs);
6061ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
607c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (args == NULL) {
608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_DECREF(meth);
609c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
610c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
6111ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
612c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    res = PyEval_CallObject(meth, args);
613c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_DECREF(meth);
614c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_DECREF(args);
6151ae940a5870df2f706fa884afd533847f6b0b1a8Guido van Rossum
616c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return res;
617e537240c252ff678d49451ee6f80fa934653a724Guido van Rossum}
6189e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake
6199e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drakeint
620af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPyModule_AddObject(PyObject *m, const char *name, PyObject *o)
6219e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake{
622c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *dict;
623c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyModule_Check(m)) {
624c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError,
625c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    "PyModule_AddObject() needs module as first arg");
626c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
627c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
628c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!o) {
629c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (!PyErr_Occurred())
630c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou            PyErr_SetString(PyExc_TypeError,
631c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            "PyModule_AddObject() needs non-NULL value");
632c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
633c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
634c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
635c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    dict = PyModule_GetDict(m);
636c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (dict == NULL) {
637c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        /* Internal error -- modules must have a dict! */
638c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
639c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                     PyModule_GetName(m));
640c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
641c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
642c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyDict_SetItemString(dict, name, o))
643c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
644c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_DECREF(o);
645c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
6469e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake}
6479e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake
648c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrouint
649af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPyModule_AddIntConstant(PyObject *m, const char *name, long value)
6509e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake{
651c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *o = PyInt_FromLong(value);
652c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!o)
653c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
654c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyModule_AddObject(m, name, o) == 0)
655c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
656c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_DECREF(o);
657c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
6589e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake}
6599e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake
660c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrouint
661af68c874a6803b4e90b616077a602c0593719a1dJeremy HyltonPyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
6629e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake{
663c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *o = PyString_FromString(value);
664c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!o)
665c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return -1;
666c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyModule_AddObject(m, name, o) == 0)
667c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_DECREF(o);
669c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
6709e2851566c0dd1d27d29ead8988f4cc3ae295ca1Fred Drake}
671