blob: a68e10bc4184d3e15f9a4f3e8af667494e6ac3e1 [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
Guido van Rossum79f25d91997-04-29 20:08:16 +000066static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000067do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000068{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000069 PyObject *d;
70 int i;
71 int itemfailed = 0;
72 if (n < 0)
73 return NULL;
74 if ((d = PyDict_New()) == NULL)
75 return NULL;
76 /* Note that we can't bail immediately on error as this will leak
77 refcounts on any 'N' arguments. */
78 for (i = 0; i < n; i+= 2) {
79 PyObject *k, *v;
80 int err;
81 k = do_mkvalue(p_format, p_va, flags);
82 if (k == NULL) {
83 itemfailed = 1;
84 Py_INCREF(Py_None);
85 k = Py_None;
86 }
87 v = do_mkvalue(p_format, p_va, flags);
88 if (v == NULL) {
89 itemfailed = 1;
90 Py_INCREF(Py_None);
91 v = Py_None;
92 }
93 err = PyDict_SetItem(d, k, v);
94 Py_DECREF(k);
95 Py_DECREF(v);
96 if (err < 0 || itemfailed) {
97 Py_DECREF(d);
98 return NULL;
99 }
100 }
101 if (d != NULL && **p_format != endchar) {
102 Py_DECREF(d);
103 d = NULL;
104 PyErr_SetString(PyExc_SystemError,
105 "Unmatched paren in format");
106 }
107 else if (endchar)
108 ++*p_format;
109 return d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000110}
111
Guido van Rossum79f25d91997-04-29 20:08:16 +0000112static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000113do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000114{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000115 PyObject *v;
116 int i;
117 int itemfailed = 0;
118 if (n < 0)
119 return NULL;
120 v = PyList_New(n);
121 if (v == NULL)
122 return NULL;
123 /* Note that we can't bail immediately on error as this will leak
124 refcounts on any 'N' arguments. */
125 for (i = 0; i < n; i++) {
126 PyObject *w = do_mkvalue(p_format, p_va, flags);
127 if (w == NULL) {
128 itemfailed = 1;
129 Py_INCREF(Py_None);
130 w = Py_None;
131 }
132 PyList_SET_ITEM(v, i, w);
133 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000135 if (itemfailed) {
136 /* do_mkvalue() should have already set an error */
137 Py_DECREF(v);
138 return NULL;
139 }
140 if (**p_format != endchar) {
141 Py_DECREF(v);
142 PyErr_SetString(PyExc_SystemError,
143 "Unmatched paren in format");
144 return NULL;
145 }
146 if (endchar)
147 ++*p_format;
148 return v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149}
150
Fred Drake25d34472000-04-28 14:42:37 +0000151static int
152_ustrlen(Py_UNICODE *u)
153{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 int i = 0;
155 Py_UNICODE *v = u;
156 while (*v != 0) { i++; v++; }
157 return i;
Fred Drake25d34472000-04-28 14:42:37 +0000158}
159
Guido van Rossum79f25d91997-04-29 20:08:16 +0000160static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000161do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000162{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000163 PyObject *v;
164 int i;
165 int itemfailed = 0;
166 if (n < 0)
167 return NULL;
168 if ((v = PyTuple_New(n)) == NULL)
169 return NULL;
170 /* Note that we can't bail immediately on error as this will leak
171 refcounts on any 'N' arguments. */
172 for (i = 0; i < n; i++) {
173 PyObject *w = do_mkvalue(p_format, p_va, flags);
174 if (w == NULL) {
175 itemfailed = 1;
176 Py_INCREF(Py_None);
177 w = Py_None;
178 }
179 PyTuple_SET_ITEM(v, i, w);
180 }
181 if (itemfailed) {
182 /* do_mkvalue() should have already set an error */
183 Py_DECREF(v);
184 return NULL;
185 }
186 if (**p_format != endchar) {
187 Py_DECREF(v);
188 PyErr_SetString(PyExc_SystemError,
189 "Unmatched paren in format");
190 return NULL;
191 }
192 if (endchar)
193 ++*p_format;
194 return v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000195}
196
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000198do_mkvalue(const char **p_format, va_list *p_va, int flags)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 for (;;) {
201 switch (*(*p_format)++) {
202 case '(':
203 return do_mktuple(p_format, p_va, ')',
204 countformat(*p_format, ')'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 case '[':
207 return do_mklist(p_format, p_va, ']',
208 countformat(*p_format, ']'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 case '{':
211 return do_mkdict(p_format, p_va, '}',
212 countformat(*p_format, '}'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000214 case 'b':
215 case 'B':
216 case 'h':
217 case 'i':
218 return PyLong_FromLong((long)va_arg(*p_va, int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000220 case 'H':
221 return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
222
223 case 'I':
224 {
225 unsigned int n;
226 n = va_arg(*p_va, unsigned int);
227 return PyLong_FromUnsignedLong(n);
228 }
229
230 case 'n':
Martin v. Löwis18e16552006-02-15 17:27:45 +0000231#if SIZEOF_SIZE_T!=SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000233#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000234 /* Fall through from 'n' to 'l' if Py_ssize_t is long */
235 case 'l':
236 return PyLong_FromLong(va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000237
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 case 'k':
239 {
240 unsigned long n;
241 n = va_arg(*p_va, unsigned long);
242 return PyLong_FromUnsignedLong(n);
243 }
Jack Jansendbd65032003-04-17 22:01:10 +0000244
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000245#ifdef HAVE_LONG_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000246 case 'L':
247 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
Jack Jansendbd65032003-04-17 22:01:10 +0000248
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000249 case 'K':
250 return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000251#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 case 'u':
253 {
254 PyObject *v;
255 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
256 Py_ssize_t n;
257 if (**p_format == '#') {
258 ++*p_format;
259 if (flags & FLAG_SIZE_T)
260 n = va_arg(*p_va, Py_ssize_t);
261 else
262 n = va_arg(*p_va, int);
263 }
264 else
265 n = -1;
266 if (u == NULL) {
267 v = Py_None;
268 Py_INCREF(v);
269 }
270 else {
271 if (n < 0)
272 n = _ustrlen(u);
273 v = PyUnicode_FromUnicode(u, n);
274 }
275 return v;
276 }
277 case 'f':
278 case 'd':
279 return PyFloat_FromDouble(
280 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000282 case 'D':
283 return PyComplex_FromCComplex(
284 *((Py_complex *)va_arg(*p_va, Py_complex *)));
Fred Drakeaec79242001-03-12 21:03:26 +0000285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000286 case 'c':
287 {
288 char p[1];
289 p[0] = (char)va_arg(*p_va, int);
290 return PyBytes_FromStringAndSize(p, 1);
291 }
292 case 'C':
293 {
294 int i = va_arg(*p_va, int);
295 if (i < 0 || i > PyUnicode_GetMax()) {
296 PyErr_SetString(PyExc_OverflowError,
297 "%c arg not in range(0x110000)");
298 return NULL;
299 }
300 return PyUnicode_FromOrdinal(i);
301 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000303 case 's':
304 case 'z':
305 {
306 PyObject *v;
307 char *str = va_arg(*p_va, char *);
308 Py_ssize_t n;
309 if (**p_format == '#') {
310 ++*p_format;
311 if (flags & FLAG_SIZE_T)
312 n = va_arg(*p_va, Py_ssize_t);
313 else
314 n = va_arg(*p_va, int);
315 }
316 else
317 n = -1;
318 if (str == NULL) {
319 v = Py_None;
320 Py_INCREF(v);
321 }
322 else {
323 if (n < 0) {
324 size_t m = strlen(str);
325 if (m > PY_SSIZE_T_MAX) {
326 PyErr_SetString(PyExc_OverflowError,
327 "string too long for Python string");
328 return NULL;
329 }
330 n = (Py_ssize_t)m;
331 }
332 v = PyUnicode_FromStringAndSize(str, n);
333 }
334 return v;
335 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000336
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 case 'U':
338 {
339 PyObject *v;
340 char *str = va_arg(*p_va, char *);
341 Py_ssize_t n;
342 if (**p_format == '#') {
343 ++*p_format;
344 if (flags & FLAG_SIZE_T)
345 n = va_arg(*p_va, Py_ssize_t);
346 else
347 n = va_arg(*p_va, int);
348 }
349 else
350 n = -1;
351 if (str == NULL) {
352 v = Py_None;
353 Py_INCREF(v);
354 }
355 else {
356 if (n < 0) {
357 size_t m = strlen(str);
358 if (m > PY_SSIZE_T_MAX) {
359 PyErr_SetString(PyExc_OverflowError,
360 "string too long for Python string");
361 return NULL;
362 }
363 n = (Py_ssize_t)m;
364 }
365 v = PyUnicode_FromStringAndSize(str, n);
366 }
367 return v;
368 }
Walter Dörwaldd2034312007-05-18 16:29:38 +0000369
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 case 'y':
371 {
372 PyObject *v;
373 char *str = va_arg(*p_va, char *);
374 Py_ssize_t n;
375 if (**p_format == '#') {
376 ++*p_format;
377 if (flags & FLAG_SIZE_T)
378 n = va_arg(*p_va, Py_ssize_t);
379 else
380 n = va_arg(*p_va, int);
381 }
382 else
383 n = -1;
384 if (str == NULL) {
385 v = Py_None;
386 Py_INCREF(v);
387 }
388 else {
389 if (n < 0) {
390 size_t m = strlen(str);
391 if (m > PY_SSIZE_T_MAX) {
392 PyErr_SetString(PyExc_OverflowError,
393 "string too long for Python bytes");
394 return NULL;
395 }
396 n = (Py_ssize_t)m;
397 }
398 v = PyBytes_FromStringAndSize(str, n);
399 }
400 return v;
401 }
Walter Dörwald612344f2007-05-04 19:28:21 +0000402
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 case 'N':
404 case 'S':
405 case 'O':
406 if (**p_format == '&') {
407 typedef PyObject *(*converter)(void *);
408 converter func = va_arg(*p_va, converter);
409 void *arg = va_arg(*p_va, void *);
410 ++*p_format;
411 return (*func)(arg);
412 }
413 else {
414 PyObject *v;
415 v = va_arg(*p_va, PyObject *);
416 if (v != NULL) {
417 if (*(*p_format - 1) != 'N')
418 Py_INCREF(v);
419 }
420 else if (!PyErr_Occurred())
421 /* If a NULL was passed
422 * because a call that should
423 * have constructed a value
424 * failed, that's OK, and we
425 * pass the error on; but if
426 * no error occurred it's not
427 * clear that the caller knew
428 * what she was doing. */
429 PyErr_SetString(PyExc_SystemError,
430 "NULL object passed to Py_BuildValue");
431 return v;
432 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000433
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000434 case ':':
435 case ',':
436 case ' ':
437 case '\t':
438 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000440 default:
441 PyErr_SetString(PyExc_SystemError,
442 "bad format char passed to Py_BuildValue");
443 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 }
446 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000447}
448
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000449
Fred Drakeceead6d2003-01-30 15:08:25 +0000450PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000451Py_BuildValue(const char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000452{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000453 va_list va;
454 PyObject* retval;
455 va_start(va, format);
456 retval = va_build_value(format, va, 0);
457 va_end(va);
458 return retval;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000459}
460
461PyObject *
462_Py_BuildValue_SizeT(const char *format, ...)
463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000464 va_list va;
465 PyObject* retval;
466 va_start(va, format);
467 retval = va_build_value(format, va, FLAG_SIZE_T);
468 va_end(va);
469 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000470}
Guido van Rossume5372401993-03-16 12:15:04 +0000471
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000473Py_VaBuildValue(const char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000474{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000475 return va_build_value(format, va, 0);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000476}
477
478PyObject *
479_Py_VaBuildValue_SizeT(const char *format, va_list va)
480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 return va_build_value(format, va, FLAG_SIZE_T);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000482}
483
484static PyObject *
485va_build_value(const char *format, va_list va, int flags)
486{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000487 const char *f = format;
488 int n = countformat(f, '\0');
489 va_list lva;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000490
491#ifdef VA_LIST_IS_ARRAY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000492 memcpy(lva, va, sizeof(va_list));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000493#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000494#ifdef __va_copy
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000495 __va_copy(lva, va);
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000496#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 lva = va;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000498#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000499#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 if (n < 0)
502 return NULL;
503 if (n == 0) {
504 Py_INCREF(Py_None);
505 return Py_None;
506 }
507 if (n == 1)
508 return do_mkvalue(&f, &lva, flags);
509 return do_mktuple(&f, &lva, '\0', n, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000510}
511
512
Guido van Rossum79f25d91997-04-29 20:08:16 +0000513PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000514PyEval_CallFunction(PyObject *obj, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000515{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 va_list vargs;
517 PyObject *args;
518 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000521
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 args = Py_VaBuildValue(format, vargs);
523 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 if (args == NULL)
526 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 res = PyEval_CallObject(obj, args);
529 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000532}
533
534
Guido van Rossum79f25d91997-04-29 20:08:16 +0000535PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000536PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000537{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 va_list vargs;
539 PyObject *meth;
540 PyObject *args;
541 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000543 meth = PyObject_GetAttrString(obj, methodname);
544 if (meth == NULL)
545 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000549 args = Py_VaBuildValue(format, vargs);
550 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000551
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000552 if (args == NULL) {
553 Py_DECREF(meth);
554 return NULL;
555 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 res = PyEval_CallObject(meth, args);
558 Py_DECREF(meth);
559 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000562}
Fred Drake9e285152000-09-23 03:24:27 +0000563
564int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000565PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
Fred Drake9e285152000-09-23 03:24:27 +0000566{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 PyObject *dict;
568 if (!PyModule_Check(m)) {
569 PyErr_SetString(PyExc_TypeError,
570 "PyModule_AddObject() needs module as first arg");
571 return -1;
572 }
573 if (!o) {
574 if (!PyErr_Occurred())
575 PyErr_SetString(PyExc_TypeError,
576 "PyModule_AddObject() needs non-NULL value");
577 return -1;
578 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 dict = PyModule_GetDict(m);
581 if (dict == NULL) {
582 /* Internal error -- modules must have a dict! */
583 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
584 PyModule_GetName(m));
585 return -1;
586 }
587 if (PyDict_SetItemString(dict, name, o))
588 return -1;
589 Py_DECREF(o);
590 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000591}
592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000594PyModule_AddIntConstant(PyObject *m, const char *name, long value)
Fred Drake9e285152000-09-23 03:24:27 +0000595{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 PyObject *o = PyLong_FromLong(value);
597 if (!o)
598 return -1;
599 if (PyModule_AddObject(m, name, o) == 0)
600 return 0;
601 Py_DECREF(o);
602 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000603}
604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000606PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
Fred Drake9e285152000-09-23 03:24:27 +0000607{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 PyObject *o = PyUnicode_FromString(value);
609 if (!o)
610 return -1;
611 if (PyModule_AddObject(m, name, o) == 0)
612 return 0;
613 Py_DECREF(o);
614 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000615}