blob: ef36d108f5b7085021f6932c837bbacbea3a6fc3 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module support implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Guido van Rossum1d5735e1994-08-30 08:27:36 +00006#ifdef MPW /* MPW pushes 'extended' for float and double types with varargs */
7typedef extended va_double;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00008#else
Guido van Rossum1d5735e1994-08-30 08:27:36 +00009typedef double va_double;
10#endif
11
Guido van Rossum2e58ff31997-11-19 18:53:33 +000012/* Package context -- the full module name for package imports */
13char *_Py_PackageContext = NULL;
14
Guido van Rossum40b33c61997-08-02 03:07:46 +000015/* Py_InitModule4() parameters:
Guido van Rossum970a0a21995-01-09 17:47:20 +000016 - name is the module name
17 - methods is the list of top-level functions
18 - doc is the documentation string
19 - passthrough is passed as self to functions defined in the module
20 - api_version is the value of PYTHON_API_VERSION at the time the
21 module was compiled
Guido van Rossum40b33c61997-08-02 03:07:46 +000022
23 Return value is a borrowed reference to the module object; or NULL
24 if an error occurred (in Python 1.4 and before, errors were fatal).
25 Errors may still leak memory.
Guido van Rossum50620fa1995-01-07 12:43:18 +000026*/
Guido van Rossum1d5735e1994-08-30 08:27:36 +000027
Guido van Rossum970a0a21995-01-09 17:47:20 +000028static char api_version_warning[] =
29"WARNING: Python C API version mismatch for module %s:\n\
Sjoerd Mullender996e6dc1996-01-23 16:07:29 +000030 This Python has API version %d, module %s has version %d.\n";
Guido van Rossum970a0a21995-01-09 17:47:20 +000031
Guido van Rossum79f25d91997-04-29 20:08:16 +000032PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000033Py_InitModule4(char *name, PyMethodDef *methods, char *doc,
34 PyObject *passthrough, int module_api_version)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035{
Guido van Rossum79f25d91997-04-29 20:08:16 +000036 PyObject *m, *d, *v;
37 PyMethodDef *ml;
Guido van Rossum413407f2000-08-04 14:00:14 +000038 if (!Py_IsInitialized())
39 Py_FatalError("Interpreter not initialized (version mismatch?)");
Guido van Rossum970a0a21995-01-09 17:47:20 +000040 if (module_api_version != PYTHON_API_VERSION)
41 fprintf(stderr, api_version_warning,
42 name, PYTHON_API_VERSION, name, module_api_version);
Guido van Rossum2e58ff31997-11-19 18:53:33 +000043 if (_Py_PackageContext != NULL) {
44 char *p = strrchr(_Py_PackageContext, '.');
45 if (p != NULL && strcmp(name, p+1) == 0) {
46 name = _Py_PackageContext;
47 _Py_PackageContext = NULL;
48 }
49 }
Guido van Rossum40b33c61997-08-02 03:07:46 +000050 if ((m = PyImport_AddModule(name)) == NULL)
51 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000052 d = PyModule_GetDict(m);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000053 for (ml = methods; ml->ml_name != NULL; ml++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +000054 v = PyCFunction_New(ml, passthrough);
Guido van Rossum40b33c61997-08-02 03:07:46 +000055 if (v == NULL)
56 return NULL;
57 if (PyDict_SetItemString(d, ml->ml_name, v) != 0)
58 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000059 Py_DECREF(v);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000060 }
Guido van Rossum50620fa1995-01-07 12:43:18 +000061 if (doc != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +000062 v = PyString_FromString(doc);
63 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0)
Guido van Rossum40b33c61997-08-02 03:07:46 +000064 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000065 Py_DECREF(v);
Guido van Rossum50620fa1995-01-07 12:43:18 +000066 }
Guido van Rossum3f5da241990-12-20 15:06:42 +000067 return m;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000068}
69
70
Guido van Rossumbf80e541993-02-08 15:49:17 +000071/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +000072
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000073static int countformat(char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +000074{
75 int count = 0;
76 int level = 0;
77 while (level > 0 || *format != endchar) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +000078 switch (*format) {
79 case '\0':
Guido van Rossumfc61adb1992-04-13 15:53:41 +000080 /* Premature end */
Guido van Rossum79f25d91997-04-29 20:08:16 +000081 PyErr_SetString(PyExc_SystemError,
82 "unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +000083 return -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000084 case '(':
85 case '[':
86 case '{':
Guido van Rossumfc61adb1992-04-13 15:53:41 +000087 if (level == 0)
88 count++;
89 level++;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000090 break;
91 case ')':
92 case ']':
93 case '}':
Guido van Rossumfc61adb1992-04-13 15:53:41 +000094 level--;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000095 break;
96 case '#':
Guido van Rossumd1b93931995-01-20 16:56:02 +000097 case '&':
Guido van Rossum1ae940a1995-01-02 19:04:15 +000098 case ',':
99 case ':':
100 case ' ':
101 case '\t':
102 break;
103 default:
104 if (level == 0)
105 count++;
106 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000107 format++;
108 }
109 return count;
110}
111
112
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000113/* Generic function to create a value -- the inverse of getargs() */
114/* After an original idea and first implementation by Steven Miale */
115
Tim Petersdbd9ba62000-07-09 03:09:57 +0000116static PyObject *do_mktuple(char**, va_list *, int, int);
117static PyObject *do_mklist(char**, va_list *, int, int);
118static PyObject *do_mkdict(char**, va_list *, int, int);
119static PyObject *do_mkvalue(char**, va_list *);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000120
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000121
Guido van Rossum79f25d91997-04-29 20:08:16 +0000122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000123do_mkdict(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000124{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000125 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000126 int i;
127 if (n < 0)
128 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000129 if ((d = PyDict_New()) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000130 return NULL;
131 for (i = 0; i < n; i+= 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000132 PyObject *k, *v;
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000133 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000134 k = do_mkvalue(p_format, p_va);
135 if (k == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000136 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000137 return NULL;
138 }
139 v = do_mkvalue(p_format, p_va);
140 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000141 Py_DECREF(k);
142 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000143 return NULL;
144 }
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000145 err = PyDict_SetItem(d, k, v);
146 Py_DECREF(k);
147 Py_DECREF(v);
148 if (err < 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000149 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000150 return NULL;
151 }
152 }
153 if (d != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000154 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000155 d = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000156 PyErr_SetString(PyExc_SystemError,
157 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000158 }
159 else if (endchar)
160 ++*p_format;
161 return d;
162}
163
Guido van Rossum79f25d91997-04-29 20:08:16 +0000164static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000165do_mklist(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000166{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000167 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000168 int i;
169 if (n < 0)
170 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171 if ((v = PyList_New(n)) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172 return NULL;
173 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000174 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000176 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000177 return NULL;
178 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000179 PyList_SetItem(v, i, w);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000180 }
181 if (v != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000182 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000183 v = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000184 PyErr_SetString(PyExc_SystemError,
185 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000186 }
187 else if (endchar)
188 ++*p_format;
189 return v;
190}
191
Fred Drake25d34472000-04-28 14:42:37 +0000192static int
193_ustrlen(Py_UNICODE *u)
194{
195 int i = 0;
196 Py_UNICODE *v = u;
197 while (*v != 0) { i++; v++; }
198 return i;
199}
200
Guido van Rossum79f25d91997-04-29 20:08:16 +0000201static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000202do_mktuple(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000203{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204 PyObject *v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000205 int i;
206 if (n < 0)
207 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000208 if ((v = PyTuple_New(n)) == NULL)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000209 return NULL;
210 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000211 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000212 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000213 Py_DECREF(v);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000214 return NULL;
215 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000216 PyTuple_SetItem(v, i, w);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000217 }
218 if (v != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000219 Py_DECREF(v);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000220 v = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000221 PyErr_SetString(PyExc_SystemError,
222 "Unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000223 }
224 else if (endchar)
225 ++*p_format;
226 return v;
227}
228
Guido van Rossum79f25d91997-04-29 20:08:16 +0000229static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000230do_mkvalue(char **p_format, va_list *p_va)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000231{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000232 for (;;) {
233 switch (*(*p_format)++) {
234 case '(':
235 return do_mktuple(p_format, p_va, ')',
236 countformat(*p_format, ')'));
237
238 case '[':
239 return do_mklist(p_format, p_va, ']',
240 countformat(*p_format, ']'));
241
242 case '{':
243 return do_mkdict(p_format, p_va, '}',
244 countformat(*p_format, '}'));
245
246 case 'b':
Jack Jansenb763b9d2000-09-15 12:51:01 +0000247 case 'B':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000248 case 'h':
249 case 'i':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000250 return PyInt_FromLong((long)va_arg(*p_va, int));
Jack Jansend50338f2000-07-06 12:22:00 +0000251
252 case 'H':
253 return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000254
255 case 'l':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256 return PyInt_FromLong((long)va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000257
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000258#ifdef HAVE_LONG_LONG
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000259 case 'L':
Guido van Rossum3293b071998-08-25 16:07:15 +0000260 return PyLong_FromLongLong((LONG_LONG)va_arg(*p_va, LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000261#endif
Fred Drake25d34472000-04-28 14:42:37 +0000262 case 'u':
263 {
264 PyObject *v;
265 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
266 int n;
267 if (**p_format == '#') {
268 ++*p_format;
269 n = va_arg(*p_va, int);
270 }
271 else
272 n = -1;
273 if (u == NULL) {
274 v = Py_None;
275 Py_INCREF(v);
276 }
277 else {
278 if (n < 0)
279 n = _ustrlen(u);
280 v = PyUnicode_FromUnicode(u, n);
281 }
282 return v;
283 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000284 case 'f':
285 case 'd':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000286 return PyFloat_FromDouble(
287 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000288
289 case 'c':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000290 {
291 char p[1];
292 p[0] = va_arg(*p_va, int);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000293 return PyString_FromStringAndSize(p, 1);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000294 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000295
296 case 's':
297 case 'z':
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000298 {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000299 PyObject *v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000300 char *str = va_arg(*p_va, char *);
301 int n;
302 if (**p_format == '#') {
303 ++*p_format;
304 n = va_arg(*p_va, int);
305 }
306 else
307 n = -1;
308 if (str == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000309 v = Py_None;
310 Py_INCREF(v);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000311 }
312 else {
Guido van Rossum582acec2000-06-28 22:07:35 +0000313 if (n < 0) {
314 size_t m = strlen(str);
315 if (m > INT_MAX) {
316 PyErr_SetString(PyExc_OverflowError,
317 "string too long for Python string");
318 return NULL;
319 }
320 n = (int)m;
321 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000322 v = PyString_FromStringAndSize(str, n);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000323 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000324 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000325 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000326
Guido van Rossumd3415001998-12-23 05:01:38 +0000327 case 'N':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000328 case 'S':
329 case 'O':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000330 if (**p_format == '&') {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000331 typedef PyObject *(*converter)(void *);
Guido van Rossumd1b93931995-01-20 16:56:02 +0000332 converter func = va_arg(*p_va, converter);
333 void *arg = va_arg(*p_va, void *);
334 ++*p_format;
335 return (*func)(arg);
336 }
337 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000338 PyObject *v;
339 v = va_arg(*p_va, PyObject *);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000340 if (v != NULL) {
Guido van Rossumd3415001998-12-23 05:01:38 +0000341 if (*(*p_format - 1) != 'N')
342 Py_INCREF(v);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000343 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000344 else if (!PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000345 /* If a NULL was passed
346 * because a call that should
347 * have constructed a value
348 * failed, that's OK, and we
349 * pass the error on; but if
350 * no error occurred it's not
351 * clear that the caller knew
352 * what she was doing. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000353 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000354 "NULL object passed to Py_BuildValue");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000355 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000356 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000357
358 case ':':
359 case ',':
360 case ' ':
361 case '\t':
362 break;
363
364 default:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000365 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000366 "bad format char passed to Py_BuildValue");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000367 return NULL;
368
369 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000370 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000371}
372
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000373
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374PyObject *Py_BuildValue(char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000375{
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000376 va_list va;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000377 PyObject* retval;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000378 va_start(va, format);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 retval = Py_VaBuildValue(format, va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000380 va_end(va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000381 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000382}
Guido van Rossume5372401993-03-16 12:15:04 +0000383
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000385Py_VaBuildValue(char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000386{
387 char *f = format;
388 int n = countformat(f, '\0');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000389 va_list lva;
390
391#ifdef VA_LIST_IS_ARRAY
392 memcpy(lva, va, sizeof(va_list));
393#else
394 lva = va;
395#endif
396
Guido van Rossume5372401993-03-16 12:15:04 +0000397 if (n < 0)
398 return NULL;
399 if (n == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000400 Py_INCREF(Py_None);
401 return Py_None;
Guido van Rossume5372401993-03-16 12:15:04 +0000402 }
403 if (n == 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000404 return do_mkvalue(&f, &lva);
405 return do_mktuple(&f, &lva, '\0', n);
406}
407
408
Guido van Rossum79f25d91997-04-29 20:08:16 +0000409PyObject *
410PyEval_CallFunction(PyObject *obj, char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000411{
412 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000413 PyObject *args;
414 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000415
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000416 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000417
Guido van Rossum79f25d91997-04-29 20:08:16 +0000418 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419 va_end(vargs);
420
421 if (args == NULL)
422 return NULL;
423
Guido van Rossum79f25d91997-04-29 20:08:16 +0000424 res = PyEval_CallObject(obj, args);
425 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000426
427 return res;
428}
429
430
Guido van Rossum79f25d91997-04-29 20:08:16 +0000431PyObject *
Guido van Rossumc4099e61998-08-08 20:51:26 +0000432PyEval_CallMethod(PyObject *obj, char *methodname, char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000433{
434 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000435 PyObject *meth;
436 PyObject *args;
437 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000438
Guido van Rossumc4099e61998-08-08 20:51:26 +0000439 meth = PyObject_GetAttrString(obj, methodname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000440 if (meth == NULL)
441 return NULL;
442
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000443 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000444
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000446 va_end(vargs);
447
448 if (args == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000449 Py_DECREF(meth);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000450 return NULL;
451 }
452
Guido van Rossum79f25d91997-04-29 20:08:16 +0000453 res = PyEval_CallObject(meth, args);
454 Py_DECREF(meth);
455 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000456
457 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000458}
Fred Drake9e285152000-09-23 03:24:27 +0000459
460int
461PyModule_AddObject(PyObject *m, char *name, PyObject *o)
462{
463 PyObject *dict;
464 if (!PyModule_Check(m) || o == NULL)
465 return -1;
466 dict = PyModule_GetDict(m);
467 if (dict == NULL)
468 return -1;
469 if (PyDict_SetItemString(dict, name, o))
470 return -1;
471 Py_DECREF(o);
472 return 0;
473}
474
475int
476PyModule_AddIntConstant(PyObject *m, char *name, long value)
477{
478 return PyModule_AddObject(m, name, PyInt_FromLong(value));
479}
480
481int
482PyModule_AddStringConstant(PyObject *m, char *name, char *value)
483{
484 return PyModule_AddObject(m, name, PyString_FromString(value));
485}