blob: aabee8fa59daffbde06014287d2c1ac4f3e984e3 [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
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006#define FLAG_SIZE_T 1
Guido van Rossum1d5735e1994-08-30 08:27:36 +00007typedef double va_double;
Guido van Rossum1d5735e1994-08-30 08:27:36 +00008
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00009static PyObject *va_build_value(const char *, va_list, int);
10
Guido van Rossum2e58ff31997-11-19 18:53:33 +000011/* Package context -- the full module name for package imports */
12char *_Py_PackageContext = NULL;
13
Guido van Rossumbf80e541993-02-08 15:49:17 +000014/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +000015
Fred Drakeceead6d2003-01-30 15:08:25 +000016static int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +000017countformat(const char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +000018{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000019 int count = 0;
20 int level = 0;
21 while (level > 0 || *format != endchar) {
22 switch (*format) {
23 case '\0':
24 /* Premature end */
25 PyErr_SetString(PyExc_SystemError,
26 "unmatched paren in format");
27 return -1;
28 case '(':
29 case '[':
30 case '{':
31 if (level == 0)
32 count++;
33 level++;
34 break;
35 case ')':
36 case ']':
37 case '}':
38 level--;
39 break;
40 case '#':
41 case '&':
42 case ',':
43 case ':':
44 case ' ':
45 case '\t':
46 break;
47 default:
48 if (level == 0)
49 count++;
50 }
51 format++;
52 }
53 return count;
Guido van Rossumfc61adb1992-04-13 15:53:41 +000054}
55
56
Guido van Rossumfc61adb1992-04-13 15:53:41 +000057/* Generic function to create a value -- the inverse of getargs() */
58/* After an original idea and first implementation by Steven Miale */
59
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000060static PyObject *do_mktuple(const char**, va_list *, int, int, int);
61static PyObject *do_mklist(const char**, va_list *, int, int, int);
62static PyObject *do_mkdict(const char**, va_list *, int, int, int);
63static PyObject *do_mkvalue(const char**, va_list *, int);
Guido van Rossumfc61adb1992-04-13 15:53:41 +000064
Guido van Rossum1ae940a1995-01-02 19:04:15 +000065
Serhiy Storchaka13e602e2016-05-20 22:31:14 +030066static void
67do_ignore(const char **p_format, va_list *p_va, int endchar, int n, int flags)
68{
69 PyObject *v;
70 int i;
71 assert(PyErr_Occurred());
72 v = PyTuple_New(n);
73 for (i = 0; i < n; i++) {
74 PyObject *exception, *value, *tb, *w;
75
76 PyErr_Fetch(&exception, &value, &tb);
77 w = do_mkvalue(p_format, p_va, flags);
78 PyErr_Restore(exception, value, tb);
79 if (w != NULL) {
80 if (v != NULL) {
81 PyTuple_SET_ITEM(v, i, w);
82 }
83 else {
84 Py_DECREF(w);
85 }
86 }
87 }
88 Py_XDECREF(v);
89 if (**p_format != endchar) {
90 PyErr_SetString(PyExc_SystemError,
91 "Unmatched paren in format");
92 return;
93 }
94 if (endchar)
95 ++*p_format;
96}
97
Guido van Rossum79f25d91997-04-29 20:08:16 +000098static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000099do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000100{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 PyObject *d;
102 int i;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000103 if (n < 0)
104 return NULL;
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300105 if (n % 2) {
106 PyErr_SetString(PyExc_SystemError,
107 "Bad dict format");
108 do_ignore(p_format, p_va, endchar, n, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000109 return NULL;
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300110 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000111 /* Note that we can't bail immediately on error as this will leak
112 refcounts on any 'N' arguments. */
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300113 if ((d = PyDict_New()) == NULL) {
114 do_ignore(p_format, p_va, endchar, n, flags);
115 return NULL;
116 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000117 for (i = 0; i < n; i+= 2) {
118 PyObject *k, *v;
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000120 k = do_mkvalue(p_format, p_va, flags);
121 if (k == NULL) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300122 do_ignore(p_format, p_va, endchar, n - i - 1, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000123 Py_DECREF(d);
124 return NULL;
125 }
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300126 v = do_mkvalue(p_format, p_va, flags);
127 if (v == NULL || PyDict_SetItem(d, k, v) < 0) {
128 do_ignore(p_format, p_va, endchar, n - i - 2, flags);
129 Py_DECREF(k);
130 Py_XDECREF(v);
131 Py_DECREF(d);
132 return NULL;
133 }
134 Py_DECREF(k);
135 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000136 }
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300137 if (**p_format != endchar) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000138 Py_DECREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000139 PyErr_SetString(PyExc_SystemError,
140 "Unmatched paren in format");
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300141 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000142 }
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300143 if (endchar)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000144 ++*p_format;
145 return d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000146}
147
Guido van Rossum79f25d91997-04-29 20:08:16 +0000148static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000149do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000151 PyObject *v;
152 int i;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000153 if (n < 0)
154 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000155 /* Note that we can't bail immediately on error as this will leak
156 refcounts on any 'N' arguments. */
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300157 v = PyList_New(n);
158 if (v == NULL) {
159 do_ignore(p_format, p_va, endchar, n, flags);
160 return NULL;
161 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 for (i = 0; i < n; i++) {
163 PyObject *w = do_mkvalue(p_format, p_va, flags);
164 if (w == NULL) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300165 do_ignore(p_format, p_va, endchar, n - i - 1, flags);
166 Py_DECREF(v);
167 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000168 }
169 PyList_SET_ITEM(v, i, w);
170 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 if (**p_format != endchar) {
172 Py_DECREF(v);
173 PyErr_SetString(PyExc_SystemError,
174 "Unmatched paren in format");
175 return NULL;
176 }
177 if (endchar)
178 ++*p_format;
179 return v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000180}
181
Guido van Rossum79f25d91997-04-29 20:08:16 +0000182static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000183do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 PyObject *v;
186 int i;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 if (n < 0)
188 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 /* Note that we can't bail immediately on error as this will leak
190 refcounts on any 'N' arguments. */
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300191 if ((v = PyTuple_New(n)) == NULL) {
192 do_ignore(p_format, p_va, endchar, n, flags);
193 return NULL;
194 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 for (i = 0; i < n; i++) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300196 PyObject *w = do_mkvalue(p_format, p_va, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000197 if (w == NULL) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300198 do_ignore(p_format, p_va, endchar, n - i - 1, flags);
199 Py_DECREF(v);
200 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000201 }
202 PyTuple_SET_ITEM(v, i, w);
203 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000204 if (**p_format != endchar) {
205 Py_DECREF(v);
206 PyErr_SetString(PyExc_SystemError,
207 "Unmatched paren in format");
208 return NULL;
209 }
210 if (endchar)
211 ++*p_format;
212 return v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000213}
214
Guido van Rossum79f25d91997-04-29 20:08:16 +0000215static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000216do_mkvalue(const char **p_format, va_list *p_va, int flags)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000217{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000218 for (;;) {
219 switch (*(*p_format)++) {
220 case '(':
221 return do_mktuple(p_format, p_va, ')',
222 countformat(*p_format, ')'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000223
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000224 case '[':
225 return do_mklist(p_format, p_va, ']',
226 countformat(*p_format, ']'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000228 case '{':
229 return do_mkdict(p_format, p_va, '}',
230 countformat(*p_format, '}'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 case 'b':
233 case 'B':
234 case 'h':
235 case 'i':
236 return PyLong_FromLong((long)va_arg(*p_va, int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000237
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 case 'H':
239 return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
240
241 case 'I':
242 {
243 unsigned int n;
244 n = va_arg(*p_va, unsigned int);
245 return PyLong_FromUnsignedLong(n);
246 }
247
248 case 'n':
Martin v. Löwis18e16552006-02-15 17:27:45 +0000249#if SIZEOF_SIZE_T!=SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000251#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 /* Fall through from 'n' to 'l' if Py_ssize_t is long */
253 case 'l':
254 return PyLong_FromLong(va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000255
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000256 case 'k':
257 {
258 unsigned long n;
259 n = va_arg(*p_va, unsigned long);
260 return PyLong_FromUnsignedLong(n);
261 }
Jack Jansendbd65032003-04-17 22:01:10 +0000262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000263 case 'L':
Benjamin Petersonaf580df2016-09-06 10:46:49 -0700264 return PyLong_FromLongLong((long long)va_arg(*p_va, long long));
Jack Jansendbd65032003-04-17 22:01:10 +0000265
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 case 'K':
Benjamin Petersonaf580df2016-09-06 10:46:49 -0700267 return PyLong_FromUnsignedLongLong((long long)va_arg(*p_va, unsigned long long));
Benjamin Petersoned4aa832016-09-05 17:44:18 -0700268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000269 case 'u':
270 {
271 PyObject *v;
272 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
273 Py_ssize_t n;
274 if (**p_format == '#') {
275 ++*p_format;
276 if (flags & FLAG_SIZE_T)
277 n = va_arg(*p_va, Py_ssize_t);
278 else
279 n = va_arg(*p_va, int);
280 }
281 else
282 n = -1;
283 if (u == NULL) {
284 v = Py_None;
285 Py_INCREF(v);
286 }
287 else {
288 if (n < 0)
Victor Stinnerd9c563e2011-09-29 04:01:43 +0200289 n = Py_UNICODE_strlen(u);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000290 v = PyUnicode_FromUnicode(u, n);
291 }
292 return v;
293 }
294 case 'f':
295 case 'd':
296 return PyFloat_FromDouble(
297 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000299 case 'D':
300 return PyComplex_FromCComplex(
301 *((Py_complex *)va_arg(*p_va, Py_complex *)));
Fred Drakeaec79242001-03-12 21:03:26 +0000302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000303 case 'c':
304 {
305 char p[1];
306 p[0] = (char)va_arg(*p_va, int);
307 return PyBytes_FromStringAndSize(p, 1);
308 }
309 case 'C':
310 {
311 int i = va_arg(*p_va, int);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000312 return PyUnicode_FromOrdinal(i);
313 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000315 case 's':
316 case 'z':
Victor Stinner7eeb5b52010-06-07 19:57:46 +0000317 case 'U': /* XXX deprecated alias */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000318 {
319 PyObject *v;
Serhiy Storchakaef1585e2015-12-25 20:01:53 +0200320 const char *str = va_arg(*p_va, const char *);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 Py_ssize_t n;
322 if (**p_format == '#') {
323 ++*p_format;
324 if (flags & FLAG_SIZE_T)
325 n = va_arg(*p_va, Py_ssize_t);
326 else
327 n = va_arg(*p_va, int);
328 }
329 else
330 n = -1;
331 if (str == NULL) {
332 v = Py_None;
333 Py_INCREF(v);
334 }
335 else {
336 if (n < 0) {
337 size_t m = strlen(str);
338 if (m > PY_SSIZE_T_MAX) {
339 PyErr_SetString(PyExc_OverflowError,
340 "string too long for Python string");
341 return NULL;
342 }
343 n = (Py_ssize_t)m;
344 }
345 v = PyUnicode_FromStringAndSize(str, n);
346 }
347 return v;
348 }
Walter Dörwaldd2034312007-05-18 16:29:38 +0000349
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000350 case 'y':
351 {
352 PyObject *v;
Serhiy Storchakaef1585e2015-12-25 20:01:53 +0200353 const char *str = va_arg(*p_va, const char *);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 Py_ssize_t n;
355 if (**p_format == '#') {
356 ++*p_format;
357 if (flags & FLAG_SIZE_T)
358 n = va_arg(*p_va, Py_ssize_t);
359 else
360 n = va_arg(*p_va, int);
361 }
362 else
363 n = -1;
364 if (str == NULL) {
365 v = Py_None;
366 Py_INCREF(v);
367 }
368 else {
369 if (n < 0) {
370 size_t m = strlen(str);
371 if (m > PY_SSIZE_T_MAX) {
372 PyErr_SetString(PyExc_OverflowError,
373 "string too long for Python bytes");
374 return NULL;
375 }
376 n = (Py_ssize_t)m;
377 }
378 v = PyBytes_FromStringAndSize(str, n);
379 }
380 return v;
381 }
Walter Dörwald612344f2007-05-04 19:28:21 +0000382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 case 'N':
384 case 'S':
385 case 'O':
386 if (**p_format == '&') {
387 typedef PyObject *(*converter)(void *);
388 converter func = va_arg(*p_va, converter);
389 void *arg = va_arg(*p_va, void *);
390 ++*p_format;
391 return (*func)(arg);
392 }
393 else {
394 PyObject *v;
395 v = va_arg(*p_va, PyObject *);
396 if (v != NULL) {
397 if (*(*p_format - 1) != 'N')
398 Py_INCREF(v);
399 }
400 else if (!PyErr_Occurred())
401 /* If a NULL was passed
402 * because a call that should
403 * have constructed a value
404 * failed, that's OK, and we
405 * pass the error on; but if
406 * no error occurred it's not
407 * clear that the caller knew
408 * what she was doing. */
409 PyErr_SetString(PyExc_SystemError,
410 "NULL object passed to Py_BuildValue");
411 return v;
412 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000414 case ':':
415 case ',':
416 case ' ':
417 case '\t':
418 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 default:
421 PyErr_SetString(PyExc_SystemError,
422 "bad format char passed to Py_BuildValue");
423 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000424
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000425 }
426 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000427}
428
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000429
Fred Drakeceead6d2003-01-30 15:08:25 +0000430PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000431Py_BuildValue(const char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000432{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000433 va_list va;
434 PyObject* retval;
435 va_start(va, format);
436 retval = va_build_value(format, va, 0);
437 va_end(va);
438 return retval;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000439}
440
441PyObject *
442_Py_BuildValue_SizeT(const char *format, ...)
443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000444 va_list va;
445 PyObject* retval;
446 va_start(va, format);
447 retval = va_build_value(format, va, FLAG_SIZE_T);
448 va_end(va);
449 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000450}
Guido van Rossume5372401993-03-16 12:15:04 +0000451
Guido van Rossum79f25d91997-04-29 20:08:16 +0000452PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000453Py_VaBuildValue(const char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000455 return va_build_value(format, va, 0);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000456}
457
458PyObject *
459_Py_VaBuildValue_SizeT(const char *format, va_list va)
460{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000461 return va_build_value(format, va, FLAG_SIZE_T);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000462}
463
464static PyObject *
465va_build_value(const char *format, va_list va, int flags)
466{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000467 const char *f = format;
468 int n = countformat(f, '\0');
469 va_list lva;
Christian Heimes2f2fee12016-09-21 11:37:27 +0200470 PyObject *retval;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 if (n < 0)
473 return NULL;
474 if (n == 0) {
475 Py_INCREF(Py_None);
476 return Py_None;
477 }
Christian Heimes2f2fee12016-09-21 11:37:27 +0200478 va_copy(lva, va);
479 if (n == 1) {
480 retval = do_mkvalue(&f, &lva, flags);
481 } else {
482 retval = do_mktuple(&f, &lva, '\0', n, flags);
483 }
484 va_end(lva);
485 return retval;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000486}
487
488
Guido van Rossum79f25d91997-04-29 20:08:16 +0000489PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000490PyEval_CallFunction(PyObject *obj, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000491{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000492 va_list vargs;
493 PyObject *args;
494 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000495
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000496 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 args = Py_VaBuildValue(format, vargs);
499 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 if (args == NULL)
502 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 res = PyEval_CallObject(obj, args);
505 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000508}
509
510
Guido van Rossum79f25d91997-04-29 20:08:16 +0000511PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000512PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 va_list vargs;
515 PyObject *meth;
516 PyObject *args;
517 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000518
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000519 meth = PyObject_GetAttrString(obj, methodname);
520 if (meth == NULL)
521 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 args = Py_VaBuildValue(format, vargs);
526 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 if (args == NULL) {
529 Py_DECREF(meth);
530 return NULL;
531 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 res = PyEval_CallObject(meth, args);
534 Py_DECREF(meth);
535 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000536
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000537 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000538}
Fred Drake9e285152000-09-23 03:24:27 +0000539
540int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000541PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
Fred Drake9e285152000-09-23 03:24:27 +0000542{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000543 PyObject *dict;
544 if (!PyModule_Check(m)) {
545 PyErr_SetString(PyExc_TypeError,
546 "PyModule_AddObject() needs module as first arg");
547 return -1;
548 }
549 if (!o) {
550 if (!PyErr_Occurred())
551 PyErr_SetString(PyExc_TypeError,
552 "PyModule_AddObject() needs non-NULL value");
553 return -1;
554 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 dict = PyModule_GetDict(m);
557 if (dict == NULL) {
558 /* Internal error -- modules must have a dict! */
559 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
560 PyModule_GetName(m));
561 return -1;
562 }
563 if (PyDict_SetItemString(dict, name, o))
564 return -1;
565 Py_DECREF(o);
566 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000567}
568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000570PyModule_AddIntConstant(PyObject *m, const char *name, long value)
Fred Drake9e285152000-09-23 03:24:27 +0000571{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 PyObject *o = PyLong_FromLong(value);
573 if (!o)
574 return -1;
575 if (PyModule_AddObject(m, name, o) == 0)
576 return 0;
577 Py_DECREF(o);
578 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000579}
580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000582PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
Fred Drake9e285152000-09-23 03:24:27 +0000583{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 PyObject *o = PyUnicode_FromString(value);
585 if (!o)
586 return -1;
587 if (PyModule_AddObject(m, name, o) == 0)
588 return 0;
589 Py_DECREF(o);
590 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000591}