blob: eb0818cc95cae3b7bbe68c4d0c6aa8493b2fce74 [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[] =
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000029"Python C API version mismatch for module %.100s:\
30 This Python has API version %d, module %.100s has version %d.";
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?)");
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000040 if (module_api_version != PYTHON_API_VERSION) {
41 char message[512];
42 PyOS_snprintf(message, sizeof(message),
43 api_version_warning, name,
44 PYTHON_API_VERSION, name,
45 module_api_version);
46 if (PyErr_Warn(PyExc_RuntimeWarning, message))
47 return NULL;
48 }
Guido van Rossum2e58ff31997-11-19 18:53:33 +000049 if (_Py_PackageContext != NULL) {
50 char *p = strrchr(_Py_PackageContext, '.');
51 if (p != NULL && strcmp(name, p+1) == 0) {
52 name = _Py_PackageContext;
53 _Py_PackageContext = NULL;
54 }
55 }
Guido van Rossum40b33c61997-08-02 03:07:46 +000056 if ((m = PyImport_AddModule(name)) == NULL)
57 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000058 d = PyModule_GetDict(m);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000059 for (ml = methods; ml->ml_name != NULL; ml++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +000060 v = PyCFunction_New(ml, passthrough);
Guido van Rossum40b33c61997-08-02 03:07:46 +000061 if (v == NULL)
62 return NULL;
63 if (PyDict_SetItemString(d, ml->ml_name, v) != 0)
64 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000065 Py_DECREF(v);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000066 }
Guido van Rossum50620fa1995-01-07 12:43:18 +000067 if (doc != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +000068 v = PyString_FromString(doc);
69 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0)
Guido van Rossum40b33c61997-08-02 03:07:46 +000070 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000071 Py_DECREF(v);
Guido van Rossum50620fa1995-01-07 12:43:18 +000072 }
Guido van Rossum3f5da241990-12-20 15:06:42 +000073 return m;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000074}
75
76
Guido van Rossumbf80e541993-02-08 15:49:17 +000077/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +000078
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000079static int countformat(char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +000080{
81 int count = 0;
82 int level = 0;
83 while (level > 0 || *format != endchar) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +000084 switch (*format) {
85 case '\0':
Guido van Rossumfc61adb1992-04-13 15:53:41 +000086 /* Premature end */
Guido van Rossum79f25d91997-04-29 20:08:16 +000087 PyErr_SetString(PyExc_SystemError,
88 "unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +000089 return -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000090 case '(':
91 case '[':
92 case '{':
Guido van Rossumfc61adb1992-04-13 15:53:41 +000093 if (level == 0)
94 count++;
95 level++;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000096 break;
97 case ')':
98 case ']':
99 case '}':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000100 level--;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000101 break;
102 case '#':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000103 case '&':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000104 case ',':
105 case ':':
106 case ' ':
107 case '\t':
108 break;
109 default:
110 if (level == 0)
111 count++;
112 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000113 format++;
114 }
115 return count;
116}
117
118
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000119/* Generic function to create a value -- the inverse of getargs() */
120/* After an original idea and first implementation by Steven Miale */
121
Tim Petersdbd9ba62000-07-09 03:09:57 +0000122static PyObject *do_mktuple(char**, va_list *, int, int);
123static PyObject *do_mklist(char**, va_list *, int, int);
124static PyObject *do_mkdict(char**, va_list *, int, int);
125static PyObject *do_mkvalue(char**, va_list *);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000126
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000127
Guido van Rossum79f25d91997-04-29 20:08:16 +0000128static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000129do_mkdict(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000130{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000131 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000132 int i;
133 if (n < 0)
134 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000135 if ((d = PyDict_New()) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000136 return NULL;
137 for (i = 0; i < n; i+= 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000138 PyObject *k, *v;
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000139 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000140 k = do_mkvalue(p_format, p_va);
141 if (k == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000142 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000143 return NULL;
144 }
145 v = do_mkvalue(p_format, p_va);
146 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000147 Py_DECREF(k);
148 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149 return NULL;
150 }
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000151 err = PyDict_SetItem(d, k, v);
152 Py_DECREF(k);
153 Py_DECREF(v);
154 if (err < 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000155 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000156 return NULL;
157 }
158 }
159 if (d != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000160 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000161 d = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000162 PyErr_SetString(PyExc_SystemError,
163 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000164 }
165 else if (endchar)
166 ++*p_format;
167 return d;
168}
169
Guido van Rossum79f25d91997-04-29 20:08:16 +0000170static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000171do_mklist(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000173 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000174 int i;
175 if (n < 0)
176 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000177 if ((v = PyList_New(n)) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000178 return NULL;
179 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000180 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000181 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000182 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000183 return NULL;
184 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000185 PyList_SetItem(v, i, w);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000186 }
187 if (v != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000189 v = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000190 PyErr_SetString(PyExc_SystemError,
191 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000192 }
193 else if (endchar)
194 ++*p_format;
195 return v;
196}
197
Fred Drake25d34472000-04-28 14:42:37 +0000198static int
199_ustrlen(Py_UNICODE *u)
200{
201 int i = 0;
202 Py_UNICODE *v = u;
203 while (*v != 0) { i++; v++; }
204 return i;
205}
206
Guido van Rossum79f25d91997-04-29 20:08:16 +0000207static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000208do_mktuple(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000209{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000210 PyObject *v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000211 int i;
212 if (n < 0)
213 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000214 if ((v = PyTuple_New(n)) == NULL)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000215 return NULL;
216 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000217 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000218 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000219 Py_DECREF(v);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000220 return NULL;
221 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000222 PyTuple_SetItem(v, i, w);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000223 }
224 if (v != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000225 Py_DECREF(v);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000226 v = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000227 PyErr_SetString(PyExc_SystemError,
228 "Unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000229 }
230 else if (endchar)
231 ++*p_format;
232 return v;
233}
234
Guido van Rossum79f25d91997-04-29 20:08:16 +0000235static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000236do_mkvalue(char **p_format, va_list *p_va)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000237{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000238 for (;;) {
239 switch (*(*p_format)++) {
240 case '(':
241 return do_mktuple(p_format, p_va, ')',
242 countformat(*p_format, ')'));
243
244 case '[':
245 return do_mklist(p_format, p_va, ']',
246 countformat(*p_format, ']'));
247
248 case '{':
249 return do_mkdict(p_format, p_va, '}',
250 countformat(*p_format, '}'));
251
252 case 'b':
Jack Jansenb763b9d2000-09-15 12:51:01 +0000253 case 'B':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000254 case 'h':
255 case 'i':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256 return PyInt_FromLong((long)va_arg(*p_va, int));
Jack Jansend50338f2000-07-06 12:22:00 +0000257
258 case 'H':
259 return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000260
261 case 'l':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000262 return PyInt_FromLong((long)va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000263
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000264#ifdef HAVE_LONG_LONG
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000265 case 'L':
Guido van Rossum3293b071998-08-25 16:07:15 +0000266 return PyLong_FromLongLong((LONG_LONG)va_arg(*p_va, LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000267#endif
Fred Drake25d34472000-04-28 14:42:37 +0000268 case 'u':
269 {
270 PyObject *v;
271 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
272 int n;
273 if (**p_format == '#') {
274 ++*p_format;
275 n = va_arg(*p_va, int);
276 }
277 else
278 n = -1;
279 if (u == NULL) {
280 v = Py_None;
281 Py_INCREF(v);
282 }
283 else {
284 if (n < 0)
285 n = _ustrlen(u);
286 v = PyUnicode_FromUnicode(u, n);
287 }
288 return v;
289 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000290 case 'f':
291 case 'd':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000292 return PyFloat_FromDouble(
293 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000294
Fred Drakeaec79242001-03-12 21:03:26 +0000295#ifndef WITHOUT_COMPLEX
296 case 'D':
297 return PyComplex_FromCComplex(
298 *((Py_complex *)va_arg(*p_va, Py_complex *)));
299#endif /* WITHOUT_COMPLEX */
300
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000301 case 'c':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000302 {
303 char p[1];
304 p[0] = va_arg(*p_va, int);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000305 return PyString_FromStringAndSize(p, 1);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000306 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000307
308 case 's':
309 case 'z':
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000310 {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000311 PyObject *v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000312 char *str = va_arg(*p_va, char *);
313 int n;
314 if (**p_format == '#') {
315 ++*p_format;
316 n = va_arg(*p_va, int);
317 }
318 else
319 n = -1;
320 if (str == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000321 v = Py_None;
322 Py_INCREF(v);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000323 }
324 else {
Guido van Rossum582acec2000-06-28 22:07:35 +0000325 if (n < 0) {
326 size_t m = strlen(str);
327 if (m > INT_MAX) {
328 PyErr_SetString(PyExc_OverflowError,
329 "string too long for Python string");
330 return NULL;
331 }
332 n = (int)m;
333 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334 v = PyString_FromStringAndSize(str, n);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000335 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000336 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000337 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000338
Guido van Rossumd3415001998-12-23 05:01:38 +0000339 case 'N':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000340 case 'S':
341 case 'O':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000342 if (**p_format == '&') {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000343 typedef PyObject *(*converter)(void *);
Guido van Rossumd1b93931995-01-20 16:56:02 +0000344 converter func = va_arg(*p_va, converter);
345 void *arg = va_arg(*p_va, void *);
346 ++*p_format;
347 return (*func)(arg);
348 }
349 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000350 PyObject *v;
351 v = va_arg(*p_va, PyObject *);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000352 if (v != NULL) {
Guido van Rossumd3415001998-12-23 05:01:38 +0000353 if (*(*p_format - 1) != 'N')
354 Py_INCREF(v);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000355 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000356 else if (!PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000357 /* If a NULL was passed
358 * because a call that should
359 * have constructed a value
360 * failed, that's OK, and we
361 * pass the error on; but if
362 * no error occurred it's not
363 * clear that the caller knew
364 * what she was doing. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000365 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000366 "NULL object passed to Py_BuildValue");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000367 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000368 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000369
370 case ':':
371 case ',':
372 case ' ':
373 case '\t':
374 break;
375
376 default:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000377 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000378 "bad format char passed to Py_BuildValue");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000379 return NULL;
380
381 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000382 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000383}
384
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000385
Guido van Rossum79f25d91997-04-29 20:08:16 +0000386PyObject *Py_BuildValue(char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000387{
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000388 va_list va;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000389 PyObject* retval;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000390 va_start(va, format);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000391 retval = Py_VaBuildValue(format, va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000392 va_end(va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000393 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000394}
Guido van Rossume5372401993-03-16 12:15:04 +0000395
Guido van Rossum79f25d91997-04-29 20:08:16 +0000396PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000397Py_VaBuildValue(char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000398{
399 char *f = format;
400 int n = countformat(f, '\0');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000401 va_list lva;
402
403#ifdef VA_LIST_IS_ARRAY
404 memcpy(lva, va, sizeof(va_list));
405#else
406 lva = va;
407#endif
408
Guido van Rossume5372401993-03-16 12:15:04 +0000409 if (n < 0)
410 return NULL;
411 if (n == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000412 Py_INCREF(Py_None);
413 return Py_None;
Guido van Rossume5372401993-03-16 12:15:04 +0000414 }
415 if (n == 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000416 return do_mkvalue(&f, &lva);
417 return do_mktuple(&f, &lva, '\0', n);
418}
419
420
Guido van Rossum79f25d91997-04-29 20:08:16 +0000421PyObject *
422PyEval_CallFunction(PyObject *obj, char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000423{
424 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000425 PyObject *args;
426 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000427
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000428 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000429
Guido van Rossum79f25d91997-04-29 20:08:16 +0000430 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000431 va_end(vargs);
432
433 if (args == NULL)
434 return NULL;
435
Guido van Rossum79f25d91997-04-29 20:08:16 +0000436 res = PyEval_CallObject(obj, args);
437 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000438
439 return res;
440}
441
442
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443PyObject *
Guido van Rossumc4099e61998-08-08 20:51:26 +0000444PyEval_CallMethod(PyObject *obj, char *methodname, char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000445{
446 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000447 PyObject *meth;
448 PyObject *args;
449 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000450
Guido van Rossumc4099e61998-08-08 20:51:26 +0000451 meth = PyObject_GetAttrString(obj, methodname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000452 if (meth == NULL)
453 return NULL;
454
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000455 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000456
Guido van Rossum79f25d91997-04-29 20:08:16 +0000457 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000458 va_end(vargs);
459
460 if (args == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000461 Py_DECREF(meth);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000462 return NULL;
463 }
464
Guido van Rossum79f25d91997-04-29 20:08:16 +0000465 res = PyEval_CallObject(meth, args);
466 Py_DECREF(meth);
467 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000468
469 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000470}
Fred Drake9e285152000-09-23 03:24:27 +0000471
472int
473PyModule_AddObject(PyObject *m, char *name, PyObject *o)
474{
475 PyObject *dict;
476 if (!PyModule_Check(m) || o == NULL)
477 return -1;
478 dict = PyModule_GetDict(m);
479 if (dict == NULL)
480 return -1;
481 if (PyDict_SetItemString(dict, name, o))
482 return -1;
483 Py_DECREF(o);
484 return 0;
485}
486
487int
488PyModule_AddIntConstant(PyObject *m, char *name, long value)
489{
490 return PyModule_AddObject(m, name, PyInt_FromLong(value));
491}
492
493int
494PyModule_AddStringConstant(PyObject *m, char *name, char *value)
495{
496 return PyModule_AddObject(m, name, PyString_FromString(value));
497}