blob: 197d99b1d1f82cd66065a68ef1dcbe93ecc83a56 [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 +00006typedef double va_double;
Guido van Rossum1d5735e1994-08-30 08:27:36 +00007
Guido van Rossum2e58ff31997-11-19 18:53:33 +00008/* Package context -- the full module name for package imports */
9char *_Py_PackageContext = NULL;
10
Guido van Rossum40b33c61997-08-02 03:07:46 +000011/* Py_InitModule4() parameters:
Guido van Rossum970a0a21995-01-09 17:47:20 +000012 - name is the module name
13 - methods is the list of top-level functions
14 - doc is the documentation string
15 - passthrough is passed as self to functions defined in the module
16 - api_version is the value of PYTHON_API_VERSION at the time the
17 module was compiled
Guido van Rossum40b33c61997-08-02 03:07:46 +000018
19 Return value is a borrowed reference to the module object; or NULL
20 if an error occurred (in Python 1.4 and before, errors were fatal).
21 Errors may still leak memory.
Guido van Rossum50620fa1995-01-07 12:43:18 +000022*/
Guido van Rossum1d5735e1994-08-30 08:27:36 +000023
Guido van Rossum970a0a21995-01-09 17:47:20 +000024static char api_version_warning[] =
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000025"Python C API version mismatch for module %.100s:\
26 This Python has API version %d, module %.100s has version %d.";
Guido van Rossum970a0a21995-01-09 17:47:20 +000027
Guido van Rossum79f25d91997-04-29 20:08:16 +000028PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000029Py_InitModule4(char *name, PyMethodDef *methods, char *doc,
30 PyObject *passthrough, int module_api_version)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000031{
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000032 PyObject *m, *d, *v, *n;
Guido van Rossum79f25d91997-04-29 20:08:16 +000033 PyMethodDef *ml;
Guido van Rossum413407f2000-08-04 14:00:14 +000034 if (!Py_IsInitialized())
35 Py_FatalError("Interpreter not initialized (version mismatch?)");
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000036 if (module_api_version != PYTHON_API_VERSION) {
37 char message[512];
38 PyOS_snprintf(message, sizeof(message),
39 api_version_warning, name,
40 PYTHON_API_VERSION, name,
41 module_api_version);
42 if (PyErr_Warn(PyExc_RuntimeWarning, message))
43 return NULL;
44 }
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000045 /* Make sure name is fully qualified.
46
47 This is a bit of a hack: when the shared library is loaded,
48 the module name is "package.module", but the module calls
49 Py_InitModule*() with just "module" for the name. The shared
50 library loader squirrels away the true name of the module in
51 _Py_PackageContext, and Py_InitModule*() will substitute this
52 (if the name actually matches).
53 */
Guido van Rossum2e58ff31997-11-19 18:53:33 +000054 if (_Py_PackageContext != NULL) {
55 char *p = strrchr(_Py_PackageContext, '.');
56 if (p != NULL && strcmp(name, p+1) == 0) {
57 name = _Py_PackageContext;
58 _Py_PackageContext = NULL;
59 }
60 }
Guido van Rossum40b33c61997-08-02 03:07:46 +000061 if ((m = PyImport_AddModule(name)) == NULL)
62 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000063 d = PyModule_GetDict(m);
Fred Drake233cc592002-08-14 20:57:56 +000064 if (methods != NULL) {
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000065 n = PyString_FromString(name);
66 if (n == NULL)
67 return NULL;
Fred Drake233cc592002-08-14 20:57:56 +000068 for (ml = methods; ml->ml_name != NULL; ml++) {
69 if ((ml->ml_flags & METH_CLASS) ||
70 (ml->ml_flags & METH_STATIC)) {
71 PyErr_SetString(PyExc_ValueError,
72 "module functions cannot set"
73 " METH_CLASS or METH_STATIC");
74 return NULL;
75 }
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000076 v = PyCFunction_NewEx(ml, passthrough, n);
Fred Drake233cc592002-08-14 20:57:56 +000077 if (v == NULL)
78 return NULL;
79 if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
80 Py_DECREF(v);
81 return NULL;
82 }
Fred Drake289898c2001-08-04 03:11:25 +000083 Py_DECREF(v);
Fred Drake289898c2001-08-04 03:11:25 +000084 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000085 }
Guido van Rossum50620fa1995-01-07 12:43:18 +000086 if (doc != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +000087 v = PyString_FromString(doc);
Fred Drake289898c2001-08-04 03:11:25 +000088 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
Just van Rossumbbfd8592002-12-15 13:45:32 +000089 Py_XDECREF(v);
Guido van Rossum40b33c61997-08-02 03:07:46 +000090 return NULL;
Fred Drake289898c2001-08-04 03:11:25 +000091 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000092 Py_DECREF(v);
Guido van Rossum50620fa1995-01-07 12:43:18 +000093 }
Guido van Rossum3f5da241990-12-20 15:06:42 +000094 return m;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000095}
96
97
Guido van Rossumbf80e541993-02-08 15:49:17 +000098/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +000099
Fred Drakeceead6d2003-01-30 15:08:25 +0000100static int
101countformat(char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000102{
103 int count = 0;
104 int level = 0;
105 while (level > 0 || *format != endchar) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000106 switch (*format) {
107 case '\0':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000108 /* Premature end */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000109 PyErr_SetString(PyExc_SystemError,
110 "unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000111 return -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000112 case '(':
113 case '[':
114 case '{':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000115 if (level == 0)
116 count++;
117 level++;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000118 break;
119 case ')':
120 case ']':
121 case '}':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000122 level--;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000123 break;
124 case '#':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000125 case '&':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000126 case ',':
127 case ':':
128 case ' ':
129 case '\t':
130 break;
131 default:
132 if (level == 0)
133 count++;
134 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000135 format++;
136 }
137 return count;
138}
139
140
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000141/* Generic function to create a value -- the inverse of getargs() */
142/* After an original idea and first implementation by Steven Miale */
143
Tim Petersdbd9ba62000-07-09 03:09:57 +0000144static PyObject *do_mktuple(char**, va_list *, int, int);
145static PyObject *do_mklist(char**, va_list *, int, int);
146static PyObject *do_mkdict(char**, va_list *, int, int);
147static PyObject *do_mkvalue(char**, va_list *);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000148
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149
Guido van Rossum79f25d91997-04-29 20:08:16 +0000150static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000151do_mkdict(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000152{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000153 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000154 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000155 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000156 if (n < 0)
157 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000158 if ((d = PyDict_New()) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000159 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000160 /* Note that we can't bail immediately on error as this will leak
161 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000162 for (i = 0; i < n; i+= 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000163 PyObject *k, *v;
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000164 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000165 k = do_mkvalue(p_format, p_va);
166 if (k == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000167 itemfailed = 1;
168 Py_INCREF(Py_None);
169 k = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000170 }
171 v = do_mkvalue(p_format, p_va);
172 if (v == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000173 itemfailed = 1;
174 Py_INCREF(Py_None);
175 v = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000176 }
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000177 err = PyDict_SetItem(d, k, v);
178 Py_DECREF(k);
179 Py_DECREF(v);
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000180 if (err < 0 || itemfailed) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000181 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000182 return NULL;
183 }
184 }
185 if (d != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000186 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000187 d = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188 PyErr_SetString(PyExc_SystemError,
189 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000190 }
191 else if (endchar)
192 ++*p_format;
193 return d;
194}
195
Guido van Rossum79f25d91997-04-29 20:08:16 +0000196static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000197do_mklist(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000198{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000199 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000200 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000201 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000202 if (n < 0)
203 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204 if ((v = PyList_New(n)) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000205 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000206 /* Note that we can't bail immediately on error as this will leak
207 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000208 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000209 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000210 if (w == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000211 itemfailed = 1;
212 Py_INCREF(Py_None);
213 w = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000214 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000215 PyList_SetItem(v, i, w);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000216 }
217 if (v != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000218 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000219 v = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000220 PyErr_SetString(PyExc_SystemError,
221 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000222 }
223 else if (endchar)
224 ++*p_format;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000225 if (itemfailed) {
226 Py_DECREF(v);
227 v = NULL;
228 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000229 return v;
230}
231
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000232#ifdef Py_USING_UNICODE
Fred Drake25d34472000-04-28 14:42:37 +0000233static int
234_ustrlen(Py_UNICODE *u)
235{
236 int i = 0;
237 Py_UNICODE *v = u;
238 while (*v != 0) { i++; v++; }
239 return i;
240}
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000241#endif
Fred Drake25d34472000-04-28 14:42:37 +0000242
Guido van Rossum79f25d91997-04-29 20:08:16 +0000243static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000244do_mktuple(char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000245{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000246 PyObject *v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000247 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000248 int itemfailed = 0;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000249 if (n < 0)
250 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000251 if ((v = PyTuple_New(n)) == NULL)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000252 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000253 /* Note that we can't bail immediately on error as this will leak
254 refcounts on any 'N' arguments. */
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000255 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000257 if (w == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000258 itemfailed = 1;
259 Py_INCREF(Py_None);
260 w = Py_None;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000261 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000262 PyTuple_SetItem(v, i, w);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000263 }
264 if (v != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000265 Py_DECREF(v);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000266 v = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000267 PyErr_SetString(PyExc_SystemError,
268 "Unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000269 }
270 else if (endchar)
271 ++*p_format;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000272 if (itemfailed) {
273 Py_DECREF(v);
274 v = NULL;
275 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000276 return v;
277}
278
Guido van Rossum79f25d91997-04-29 20:08:16 +0000279static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000280do_mkvalue(char **p_format, va_list *p_va)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000281{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000282 for (;;) {
283 switch (*(*p_format)++) {
284 case '(':
285 return do_mktuple(p_format, p_va, ')',
286 countformat(*p_format, ')'));
287
288 case '[':
289 return do_mklist(p_format, p_va, ']',
290 countformat(*p_format, ']'));
291
292 case '{':
293 return do_mkdict(p_format, p_va, '}',
294 countformat(*p_format, '}'));
295
296 case 'b':
Jack Jansenb763b9d2000-09-15 12:51:01 +0000297 case 'B':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000298 case 'h':
299 case 'i':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300 return PyInt_FromLong((long)va_arg(*p_va, int));
Jack Jansend50338f2000-07-06 12:22:00 +0000301
302 case 'H':
303 return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000304
305 case 'l':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000306 return PyInt_FromLong((long)va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000307
Jack Jansendbd65032003-04-17 22:01:10 +0000308 case 'k':
309 return PyInt_FromLong((long)va_arg(*p_va, unsigned long));
310
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000311#ifdef HAVE_LONG_LONG
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000312 case 'L':
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000313 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
Jack Jansendbd65032003-04-17 22:01:10 +0000314
315 case 'K':
316 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000317#endif
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000318#ifdef Py_USING_UNICODE
Fred Drake25d34472000-04-28 14:42:37 +0000319 case 'u':
320 {
321 PyObject *v;
322 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
323 int n;
324 if (**p_format == '#') {
325 ++*p_format;
326 n = va_arg(*p_va, int);
327 }
328 else
329 n = -1;
330 if (u == NULL) {
331 v = Py_None;
332 Py_INCREF(v);
333 }
334 else {
335 if (n < 0)
336 n = _ustrlen(u);
337 v = PyUnicode_FromUnicode(u, n);
338 }
339 return v;
340 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000341#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000342 case 'f':
343 case 'd':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000344 return PyFloat_FromDouble(
345 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000346
Fred Drakeaec79242001-03-12 21:03:26 +0000347#ifndef WITHOUT_COMPLEX
348 case 'D':
349 return PyComplex_FromCComplex(
350 *((Py_complex *)va_arg(*p_va, Py_complex *)));
351#endif /* WITHOUT_COMPLEX */
352
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000353 case 'c':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000354 {
355 char p[1];
356 p[0] = va_arg(*p_va, int);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000357 return PyString_FromStringAndSize(p, 1);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000358 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000359
360 case 's':
361 case 'z':
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000362 {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000363 PyObject *v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000364 char *str = va_arg(*p_va, char *);
365 int n;
366 if (**p_format == '#') {
367 ++*p_format;
368 n = va_arg(*p_va, int);
369 }
370 else
371 n = -1;
372 if (str == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000373 v = Py_None;
374 Py_INCREF(v);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000375 }
376 else {
Guido van Rossum582acec2000-06-28 22:07:35 +0000377 if (n < 0) {
378 size_t m = strlen(str);
379 if (m > INT_MAX) {
380 PyErr_SetString(PyExc_OverflowError,
381 "string too long for Python string");
382 return NULL;
383 }
384 n = (int)m;
385 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000386 v = PyString_FromStringAndSize(str, n);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000387 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000388 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000389 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000390
Guido van Rossumd3415001998-12-23 05:01:38 +0000391 case 'N':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000392 case 'S':
393 case 'O':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000394 if (**p_format == '&') {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000395 typedef PyObject *(*converter)(void *);
Guido van Rossumd1b93931995-01-20 16:56:02 +0000396 converter func = va_arg(*p_va, converter);
397 void *arg = va_arg(*p_va, void *);
398 ++*p_format;
399 return (*func)(arg);
400 }
401 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000402 PyObject *v;
403 v = va_arg(*p_va, PyObject *);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000404 if (v != NULL) {
Guido van Rossumd3415001998-12-23 05:01:38 +0000405 if (*(*p_format - 1) != 'N')
406 Py_INCREF(v);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000407 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000408 else if (!PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000409 /* If a NULL was passed
410 * because a call that should
411 * have constructed a value
412 * failed, that's OK, and we
413 * pass the error on; but if
414 * no error occurred it's not
415 * clear that the caller knew
416 * what she was doing. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000418 "NULL object passed to Py_BuildValue");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000419 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000420 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000421
422 case ':':
423 case ',':
424 case ' ':
425 case '\t':
426 break;
427
428 default:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000429 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000430 "bad format char passed to Py_BuildValue");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000431 return NULL;
432
433 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000434 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000435}
436
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437
Fred Drakeceead6d2003-01-30 15:08:25 +0000438PyObject *
439Py_BuildValue(char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000440{
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000441 va_list va;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000442 PyObject* retval;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000443 va_start(va, format);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000444 retval = Py_VaBuildValue(format, va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000445 va_end(va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000446 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000447}
Guido van Rossume5372401993-03-16 12:15:04 +0000448
Guido van Rossum79f25d91997-04-29 20:08:16 +0000449PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000450Py_VaBuildValue(char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000451{
452 char *f = format;
453 int n = countformat(f, '\0');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000454 va_list lva;
455
456#ifdef VA_LIST_IS_ARRAY
457 memcpy(lva, va, sizeof(va_list));
458#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000459#ifdef __va_copy
460 __va_copy(lva, va);
461#else
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000462 lva = va;
463#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000464#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000465
Guido van Rossume5372401993-03-16 12:15:04 +0000466 if (n < 0)
467 return NULL;
468 if (n == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000469 Py_INCREF(Py_None);
470 return Py_None;
Guido van Rossume5372401993-03-16 12:15:04 +0000471 }
472 if (n == 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000473 return do_mkvalue(&f, &lva);
474 return do_mktuple(&f, &lva, '\0', n);
475}
476
477
Guido van Rossum79f25d91997-04-29 20:08:16 +0000478PyObject *
479PyEval_CallFunction(PyObject *obj, char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000480{
481 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000482 PyObject *args;
483 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000484
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000485 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000486
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000488 va_end(vargs);
489
490 if (args == NULL)
491 return NULL;
492
Guido van Rossum79f25d91997-04-29 20:08:16 +0000493 res = PyEval_CallObject(obj, args);
494 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000495
496 return res;
497}
498
499
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500PyObject *
Guido van Rossumc4099e61998-08-08 20:51:26 +0000501PyEval_CallMethod(PyObject *obj, char *methodname, char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000502{
503 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000504 PyObject *meth;
505 PyObject *args;
506 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000507
Guido van Rossumc4099e61998-08-08 20:51:26 +0000508 meth = PyObject_GetAttrString(obj, methodname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000509 if (meth == NULL)
510 return NULL;
511
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000513
Guido van Rossum79f25d91997-04-29 20:08:16 +0000514 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000515 va_end(vargs);
516
517 if (args == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000518 Py_DECREF(meth);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000519 return NULL;
520 }
521
Guido van Rossum79f25d91997-04-29 20:08:16 +0000522 res = PyEval_CallObject(meth, args);
523 Py_DECREF(meth);
524 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000525
526 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000527}
Fred Drake9e285152000-09-23 03:24:27 +0000528
529int
530PyModule_AddObject(PyObject *m, char *name, PyObject *o)
531{
532 PyObject *dict;
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000533 if (!PyModule_Check(m)) {
Fred Drake83115182002-06-17 17:16:57 +0000534 PyErr_SetString(PyExc_TypeError,
535 "PyModule_AddObject() needs module as first arg");
Fred Drake9e285152000-09-23 03:24:27 +0000536 return -1;
Fred Drake83115182002-06-17 17:16:57 +0000537 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000538 if (!o) {
Martin v. Löwisf8d59d22003-10-24 20:05:32 +0000539 if (!PyErr_Occurred())
540 PyErr_SetString(PyExc_TypeError,
541 "PyModule_AddObject() needs non-NULL value");
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000542 return -1;
543 }
544
Fred Drake83115182002-06-17 17:16:57 +0000545 dict = PyModule_GetDict(m);
546 if (dict == NULL) {
547 /* Internal error -- modules must have a dict! */
548 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
549 PyModule_GetName(m));
550 return -1;
551 }
552 if (PyDict_SetItemString(dict, name, o))
553 return -1;
554 Py_DECREF(o);
555 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000556}
557
558int
559PyModule_AddIntConstant(PyObject *m, char *name, long value)
560{
561 return PyModule_AddObject(m, name, PyInt_FromLong(value));
562}
563
564int
565PyModule_AddStringConstant(PyObject *m, char *name, char *value)
566{
567 return PyModule_AddObject(m, name, PyString_FromString(value));
568}