blob: eef79c460fab19833097656d96f099c04f8ab16c [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 */
Serhiy Storchakab57d9ea2016-11-21 10:25:54 +020012const char *_Py_PackageContext = NULL;
Guido van Rossum2e58ff31997-11-19 18:53:33 +000013
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
Victor Stinnere9aae2d2016-12-09 00:24:47 +010016static Py_ssize_t
Victor Stinnerb551b6c2016-12-09 00:27:22 +010017countformat(const char *format, char endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +000018{
Victor Stinnere9aae2d2016-12-09 00:24:47 +010019 Py_ssize_t count = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000020 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 '{':
Victor Stinnere9aae2d2016-12-09 00:24:47 +010031 if (level == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000032 count++;
Victor Stinnere9aae2d2016-12-09 00:24:47 +010033 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000034 level++;
35 break;
36 case ')':
37 case ']':
38 case '}':
39 level--;
40 break;
41 case '#':
42 case '&':
43 case ',':
44 case ':':
45 case ' ':
46 case '\t':
47 break;
48 default:
Victor Stinnere9aae2d2016-12-09 00:24:47 +010049 if (level == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000050 count++;
Victor Stinnere9aae2d2016-12-09 00:24:47 +010051 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000052 }
53 format++;
54 }
55 return count;
Guido van Rossumfc61adb1992-04-13 15:53:41 +000056}
57
58
Guido van Rossumfc61adb1992-04-13 15:53:41 +000059/* Generic function to create a value -- the inverse of getargs() */
60/* After an original idea and first implementation by Steven Miale */
61
Victor Stinnerb551b6c2016-12-09 00:27:22 +010062static PyObject *do_mktuple(const char**, va_list *, char, Py_ssize_t, int);
63static PyObject *do_mklist(const char**, va_list *, char, Py_ssize_t, int);
64static PyObject *do_mkdict(const char**, va_list *, char, Py_ssize_t, int);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000065static PyObject *do_mkvalue(const char**, va_list *, int);
Guido van Rossumfc61adb1992-04-13 15:53:41 +000066
Guido van Rossum1ae940a1995-01-02 19:04:15 +000067
Serhiy Storchaka13e602e2016-05-20 22:31:14 +030068static void
Victor Stinnerb551b6c2016-12-09 00:27:22 +010069do_ignore(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags)
Serhiy Storchaka13e602e2016-05-20 22:31:14 +030070{
71 PyObject *v;
Victor Stinnere9aae2d2016-12-09 00:24:47 +010072 Py_ssize_t i;
Serhiy Storchaka13e602e2016-05-20 22:31:14 +030073 assert(PyErr_Occurred());
74 v = PyTuple_New(n);
75 for (i = 0; i < n; i++) {
76 PyObject *exception, *value, *tb, *w;
77
78 PyErr_Fetch(&exception, &value, &tb);
79 w = do_mkvalue(p_format, p_va, flags);
80 PyErr_Restore(exception, value, tb);
81 if (w != NULL) {
82 if (v != NULL) {
83 PyTuple_SET_ITEM(v, i, w);
84 }
85 else {
86 Py_DECREF(w);
87 }
88 }
89 }
90 Py_XDECREF(v);
91 if (**p_format != endchar) {
92 PyErr_SetString(PyExc_SystemError,
93 "Unmatched paren in format");
94 return;
95 }
Victor Stinnere9aae2d2016-12-09 00:24:47 +010096 if (endchar) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +030097 ++*p_format;
Victor Stinnere9aae2d2016-12-09 00:24:47 +010098 }
Serhiy Storchaka13e602e2016-05-20 22:31:14 +030099}
100
Guido van Rossum79f25d91997-04-29 20:08:16 +0000101static PyObject *
Victor Stinnerb551b6c2016-12-09 00:27:22 +0100102do_mkdict(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000103{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000104 PyObject *d;
Victor Stinnere9aae2d2016-12-09 00:24:47 +0100105 Py_ssize_t i;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000106 if (n < 0)
107 return NULL;
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300108 if (n % 2) {
109 PyErr_SetString(PyExc_SystemError,
110 "Bad dict format");
111 do_ignore(p_format, p_va, endchar, n, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000112 return NULL;
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300113 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000114 /* Note that we can't bail immediately on error as this will leak
115 refcounts on any 'N' arguments. */
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300116 if ((d = PyDict_New()) == NULL) {
117 do_ignore(p_format, p_va, endchar, n, flags);
118 return NULL;
119 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000120 for (i = 0; i < n; i+= 2) {
121 PyObject *k, *v;
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300122
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000123 k = do_mkvalue(p_format, p_va, flags);
124 if (k == NULL) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300125 do_ignore(p_format, p_va, endchar, n - i - 1, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000126 Py_DECREF(d);
127 return NULL;
128 }
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300129 v = do_mkvalue(p_format, p_va, flags);
130 if (v == NULL || PyDict_SetItem(d, k, v) < 0) {
131 do_ignore(p_format, p_va, endchar, n - i - 2, flags);
132 Py_DECREF(k);
133 Py_XDECREF(v);
134 Py_DECREF(d);
135 return NULL;
136 }
137 Py_DECREF(k);
138 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000139 }
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300140 if (**p_format != endchar) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 Py_DECREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000142 PyErr_SetString(PyExc_SystemError,
143 "Unmatched paren in format");
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300144 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000145 }
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300146 if (endchar)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 ++*p_format;
148 return d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149}
150
Guido van Rossum79f25d91997-04-29 20:08:16 +0000151static PyObject *
Victor Stinnerb551b6c2016-12-09 00:27:22 +0100152do_mklist(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000153{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 PyObject *v;
Victor Stinnere9aae2d2016-12-09 00:24:47 +0100155 Py_ssize_t i;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 if (n < 0)
157 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000158 /* Note that we can't bail immediately on error as this will leak
159 refcounts on any 'N' arguments. */
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300160 v = PyList_New(n);
161 if (v == NULL) {
162 do_ignore(p_format, p_va, endchar, n, flags);
163 return NULL;
164 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 for (i = 0; i < n; i++) {
166 PyObject *w = do_mkvalue(p_format, p_va, flags);
167 if (w == NULL) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300168 do_ignore(p_format, p_va, endchar, n - i - 1, flags);
169 Py_DECREF(v);
170 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 }
172 PyList_SET_ITEM(v, i, w);
173 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000174 if (**p_format != endchar) {
175 Py_DECREF(v);
176 PyErr_SetString(PyExc_SystemError,
177 "Unmatched paren in format");
178 return NULL;
179 }
180 if (endchar)
181 ++*p_format;
182 return v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000183}
184
Guido van Rossum79f25d91997-04-29 20:08:16 +0000185static PyObject *
Victor Stinnerb551b6c2016-12-09 00:27:22 +0100186do_mktuple(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000188 PyObject *v;
Victor Stinnere9aae2d2016-12-09 00:24:47 +0100189 Py_ssize_t i;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000190 if (n < 0)
191 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000192 /* Note that we can't bail immediately on error as this will leak
193 refcounts on any 'N' arguments. */
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300194 if ((v = PyTuple_New(n)) == NULL) {
195 do_ignore(p_format, p_va, endchar, n, flags);
196 return NULL;
197 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000198 for (i = 0; i < n; i++) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300199 PyObject *w = do_mkvalue(p_format, p_va, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 if (w == NULL) {
Serhiy Storchaka13e602e2016-05-20 22:31:14 +0300201 do_ignore(p_format, p_va, endchar, n - i - 1, flags);
202 Py_DECREF(v);
203 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000204 }
205 PyTuple_SET_ITEM(v, i, w);
206 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 if (**p_format != endchar) {
208 Py_DECREF(v);
209 PyErr_SetString(PyExc_SystemError,
210 "Unmatched paren in format");
211 return NULL;
212 }
213 if (endchar)
214 ++*p_format;
215 return v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000216}
217
Guido van Rossum79f25d91997-04-29 20:08:16 +0000218static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000219do_mkvalue(const char **p_format, va_list *p_va, int flags)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000220{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000221 for (;;) {
222 switch (*(*p_format)++) {
223 case '(':
224 return do_mktuple(p_format, p_va, ')',
225 countformat(*p_format, ')'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000227 case '[':
228 return do_mklist(p_format, p_va, ']',
229 countformat(*p_format, ']'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000230
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000231 case '{':
232 return do_mkdict(p_format, p_va, '}',
233 countformat(*p_format, '}'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000234
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000235 case 'b':
236 case 'B':
237 case 'h':
238 case 'i':
239 return PyLong_FromLong((long)va_arg(*p_va, int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 case 'H':
242 return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
243
244 case 'I':
245 {
246 unsigned int n;
247 n = va_arg(*p_va, unsigned int);
248 return PyLong_FromUnsignedLong(n);
249 }
250
251 case 'n':
Martin v. Löwis18e16552006-02-15 17:27:45 +0000252#if SIZEOF_SIZE_T!=SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000254#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 /* Fall through from 'n' to 'l' if Py_ssize_t is long */
256 case 'l':
257 return PyLong_FromLong(va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000259 case 'k':
260 {
261 unsigned long n;
262 n = va_arg(*p_va, unsigned long);
263 return PyLong_FromUnsignedLong(n);
264 }
Jack Jansendbd65032003-04-17 22:01:10 +0000265
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 case 'L':
Benjamin Petersonaf580df2016-09-06 10:46:49 -0700267 return PyLong_FromLongLong((long long)va_arg(*p_va, long long));
Jack Jansendbd65032003-04-17 22:01:10 +0000268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000269 case 'K':
Benjamin Petersonaf580df2016-09-06 10:46:49 -0700270 return PyLong_FromUnsignedLongLong((long long)va_arg(*p_va, unsigned long long));
Benjamin Petersoned4aa832016-09-05 17:44:18 -0700271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000272 case 'u':
273 {
274 PyObject *v;
275 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
276 Py_ssize_t n;
277 if (**p_format == '#') {
278 ++*p_format;
279 if (flags & FLAG_SIZE_T)
280 n = va_arg(*p_va, Py_ssize_t);
281 else
282 n = va_arg(*p_va, int);
283 }
284 else
285 n = -1;
286 if (u == NULL) {
287 v = Py_None;
288 Py_INCREF(v);
289 }
290 else {
291 if (n < 0)
Serhiy Storchaka460bd0d2016-11-20 12:16:46 +0200292 n = wcslen(u);
293 v = PyUnicode_FromWideChar(u, n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000294 }
295 return v;
296 }
297 case 'f':
298 case 'd':
299 return PyFloat_FromDouble(
300 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000301
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000302 case 'D':
303 return PyComplex_FromCComplex(
304 *((Py_complex *)va_arg(*p_va, Py_complex *)));
Fred Drakeaec79242001-03-12 21:03:26 +0000305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000306 case 'c':
307 {
308 char p[1];
309 p[0] = (char)va_arg(*p_va, int);
310 return PyBytes_FromStringAndSize(p, 1);
311 }
312 case 'C':
313 {
314 int i = va_arg(*p_va, int);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000315 return PyUnicode_FromOrdinal(i);
316 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000318 case 's':
319 case 'z':
Victor Stinner7eeb5b52010-06-07 19:57:46 +0000320 case 'U': /* XXX deprecated alias */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 {
322 PyObject *v;
Serhiy Storchakaef1585e2015-12-25 20:01:53 +0200323 const char *str = va_arg(*p_va, const char *);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 Py_ssize_t n;
325 if (**p_format == '#') {
326 ++*p_format;
327 if (flags & FLAG_SIZE_T)
328 n = va_arg(*p_va, Py_ssize_t);
329 else
330 n = va_arg(*p_va, int);
331 }
332 else
333 n = -1;
334 if (str == NULL) {
335 v = Py_None;
336 Py_INCREF(v);
337 }
338 else {
339 if (n < 0) {
340 size_t m = strlen(str);
341 if (m > PY_SSIZE_T_MAX) {
342 PyErr_SetString(PyExc_OverflowError,
343 "string too long for Python string");
344 return NULL;
345 }
346 n = (Py_ssize_t)m;
347 }
348 v = PyUnicode_FromStringAndSize(str, n);
349 }
350 return v;
351 }
Walter Dörwaldd2034312007-05-18 16:29:38 +0000352
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000353 case 'y':
354 {
355 PyObject *v;
Serhiy Storchakaef1585e2015-12-25 20:01:53 +0200356 const char *str = va_arg(*p_va, const char *);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 Py_ssize_t n;
358 if (**p_format == '#') {
359 ++*p_format;
360 if (flags & FLAG_SIZE_T)
361 n = va_arg(*p_va, Py_ssize_t);
362 else
363 n = va_arg(*p_va, int);
364 }
365 else
366 n = -1;
367 if (str == NULL) {
368 v = Py_None;
369 Py_INCREF(v);
370 }
371 else {
372 if (n < 0) {
373 size_t m = strlen(str);
374 if (m > PY_SSIZE_T_MAX) {
375 PyErr_SetString(PyExc_OverflowError,
376 "string too long for Python bytes");
377 return NULL;
378 }
379 n = (Py_ssize_t)m;
380 }
381 v = PyBytes_FromStringAndSize(str, n);
382 }
383 return v;
384 }
Walter Dörwald612344f2007-05-04 19:28:21 +0000385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 case 'N':
387 case 'S':
388 case 'O':
389 if (**p_format == '&') {
390 typedef PyObject *(*converter)(void *);
391 converter func = va_arg(*p_va, converter);
392 void *arg = va_arg(*p_va, void *);
393 ++*p_format;
394 return (*func)(arg);
395 }
396 else {
397 PyObject *v;
398 v = va_arg(*p_va, PyObject *);
399 if (v != NULL) {
400 if (*(*p_format - 1) != 'N')
401 Py_INCREF(v);
402 }
403 else if (!PyErr_Occurred())
404 /* If a NULL was passed
405 * because a call that should
406 * have constructed a value
407 * failed, that's OK, and we
408 * pass the error on; but if
409 * no error occurred it's not
410 * clear that the caller knew
411 * what she was doing. */
412 PyErr_SetString(PyExc_SystemError,
413 "NULL object passed to Py_BuildValue");
414 return v;
415 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 case ':':
418 case ',':
419 case ' ':
420 case '\t':
421 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000423 default:
424 PyErr_SetString(PyExc_SystemError,
425 "bad format char passed to Py_BuildValue");
426 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000427
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428 }
429 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000430}
431
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000432
Fred Drakeceead6d2003-01-30 15:08:25 +0000433PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000434Py_BuildValue(const char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000435{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 va_list va;
437 PyObject* retval;
438 va_start(va, format);
439 retval = va_build_value(format, va, 0);
440 va_end(va);
441 return retval;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000442}
443
444PyObject *
445_Py_BuildValue_SizeT(const char *format, ...)
446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000447 va_list va;
448 PyObject* retval;
449 va_start(va, format);
450 retval = va_build_value(format, va, FLAG_SIZE_T);
451 va_end(va);
452 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000453}
Guido van Rossume5372401993-03-16 12:15:04 +0000454
Guido van Rossum79f25d91997-04-29 20:08:16 +0000455PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000456Py_VaBuildValue(const char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000458 return va_build_value(format, va, 0);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000459}
460
461PyObject *
462_Py_VaBuildValue_SizeT(const char *format, va_list va)
463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000464 return va_build_value(format, va, FLAG_SIZE_T);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000465}
466
467static PyObject *
468va_build_value(const char *format, va_list va, int flags)
469{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000470 const char *f = format;
Victor Stinnere9aae2d2016-12-09 00:24:47 +0100471 Py_ssize_t n = countformat(f, '\0');
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 va_list lva;
Christian Heimes2f2fee12016-09-21 11:37:27 +0200473 PyObject *retval;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000474
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000475 if (n < 0)
476 return NULL;
477 if (n == 0) {
478 Py_INCREF(Py_None);
479 return Py_None;
480 }
Christian Heimes2f2fee12016-09-21 11:37:27 +0200481 va_copy(lva, va);
482 if (n == 1) {
483 retval = do_mkvalue(&f, &lva, flags);
484 } else {
485 retval = do_mktuple(&f, &lva, '\0', n, flags);
486 }
487 va_end(lva);
488 return retval;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000489}
490
491
Guido van Rossum79f25d91997-04-29 20:08:16 +0000492PyObject *
Victor Stinner2d0eb652016-12-06 16:27:24 +0100493PyEval_CallFunction(PyObject *callable, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000494{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000495 va_list vargs;
496 PyObject *args;
497 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000498
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000499 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 args = Py_VaBuildValue(format, vargs);
502 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 if (args == NULL)
505 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000506
Victor Stinner2d0eb652016-12-06 16:27:24 +0100507 res = PyEval_CallObject(callable, args);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000510 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000511}
512
513
Guido van Rossum79f25d91997-04-29 20:08:16 +0000514PyObject *
Victor Stinner2d0eb652016-12-06 16:27:24 +0100515PyEval_CallMethod(PyObject *obj, const char *name, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000516{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000517 va_list vargs;
518 PyObject *meth;
519 PyObject *args;
520 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000521
Victor Stinner2d0eb652016-12-06 16:27:24 +0100522 meth = PyObject_GetAttrString(obj, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 if (meth == NULL)
524 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 args = Py_VaBuildValue(format, vargs);
529 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 if (args == NULL) {
532 Py_DECREF(meth);
533 return NULL;
534 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 res = PyEval_CallObject(meth, args);
537 Py_DECREF(meth);
538 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000540 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000541}
Fred Drake9e285152000-09-23 03:24:27 +0000542
543int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000544PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
Fred Drake9e285152000-09-23 03:24:27 +0000545{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000546 PyObject *dict;
547 if (!PyModule_Check(m)) {
548 PyErr_SetString(PyExc_TypeError,
549 "PyModule_AddObject() needs module as first arg");
550 return -1;
551 }
552 if (!o) {
553 if (!PyErr_Occurred())
554 PyErr_SetString(PyExc_TypeError,
555 "PyModule_AddObject() needs non-NULL value");
556 return -1;
557 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000558
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000559 dict = PyModule_GetDict(m);
560 if (dict == NULL) {
561 /* Internal error -- modules must have a dict! */
562 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
563 PyModule_GetName(m));
564 return -1;
565 }
566 if (PyDict_SetItemString(dict, name, o))
567 return -1;
568 Py_DECREF(o);
569 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000570}
571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000573PyModule_AddIntConstant(PyObject *m, const char *name, long value)
Fred Drake9e285152000-09-23 03:24:27 +0000574{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 PyObject *o = PyLong_FromLong(value);
576 if (!o)
577 return -1;
578 if (PyModule_AddObject(m, name, o) == 0)
579 return 0;
580 Py_DECREF(o);
581 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000582}
583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000585PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
Fred Drake9e285152000-09-23 03:24:27 +0000586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 PyObject *o = PyUnicode_FromString(value);
588 if (!o)
589 return -1;
590 if (PyModule_AddObject(m, name, o) == 0)
591 return 0;
592 Py_DECREF(o);
593 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000594}