blob: cb6bdfd2853fd71380d613955c7dcd3f1ab7e0d6 [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 *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +000029Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030 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");
Martin v. Löwis0b300be2006-03-01 21:33:54 +000074 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000075 return NULL;
76 }
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000077 v = PyCFunction_NewEx(ml, passthrough, n);
Martin v. Löwis0b300be2006-03-01 21:33:54 +000078 if (v == NULL) {
79 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000080 return NULL;
Martin v. Löwis0b300be2006-03-01 21:33:54 +000081 }
Fred Drake233cc592002-08-14 20:57:56 +000082 if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
83 Py_DECREF(v);
Martin v. Löwis0b300be2006-03-01 21:33:54 +000084 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000085 return NULL;
86 }
Fred Drake289898c2001-08-04 03:11:25 +000087 Py_DECREF(v);
Fred Drake289898c2001-08-04 03:11:25 +000088 }
Neal Norwitz7bcabc62005-11-20 23:58:38 +000089 Py_DECREF(n);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000090 }
Guido van Rossum50620fa1995-01-07 12:43:18 +000091 if (doc != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +000092 v = PyString_FromString(doc);
Fred Drake289898c2001-08-04 03:11:25 +000093 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
Just van Rossumbbfd8592002-12-15 13:45:32 +000094 Py_XDECREF(v);
Guido van Rossum40b33c61997-08-02 03:07:46 +000095 return NULL;
Fred Drake289898c2001-08-04 03:11:25 +000096 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000097 Py_DECREF(v);
Guido van Rossum50620fa1995-01-07 12:43:18 +000098 }
Guido van Rossum3f5da241990-12-20 15:06:42 +000099 return m;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000100}
101
102
Guido van Rossumbf80e541993-02-08 15:49:17 +0000103/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000104
Fred Drakeceead6d2003-01-30 15:08:25 +0000105static int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000106countformat(const char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000107{
108 int count = 0;
109 int level = 0;
110 while (level > 0 || *format != endchar) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000111 switch (*format) {
112 case '\0':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000113 /* Premature end */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000114 PyErr_SetString(PyExc_SystemError,
115 "unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000116 return -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000117 case '(':
118 case '[':
119 case '{':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000120 if (level == 0)
121 count++;
122 level++;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000123 break;
124 case ')':
125 case ']':
126 case '}':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000127 level--;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000128 break;
129 case '#':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000130 case '&':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000131 case ',':
132 case ':':
133 case ' ':
134 case '\t':
135 break;
136 default:
137 if (level == 0)
138 count++;
139 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000140 format++;
141 }
142 return count;
143}
144
145
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000146/* Generic function to create a value -- the inverse of getargs() */
147/* After an original idea and first implementation by Steven Miale */
148
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000149static PyObject *do_mktuple(const char**, va_list *, int, int);
150static PyObject *do_mklist(const char**, va_list *, int, int);
151static PyObject *do_mkdict(const char**, va_list *, int, int);
152static PyObject *do_mkvalue(const char**, va_list *);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000153
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000154
Guido van Rossum79f25d91997-04-29 20:08:16 +0000155static PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000156do_mkdict(const char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000157{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000158 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000159 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000160 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000161 if (n < 0)
162 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000163 if ((d = PyDict_New()) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000164 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000165 /* Note that we can't bail immediately on error as this will leak
166 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000167 for (i = 0; i < n; i+= 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000168 PyObject *k, *v;
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000169 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000170 k = do_mkvalue(p_format, p_va);
171 if (k == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000172 itemfailed = 1;
173 Py_INCREF(Py_None);
174 k = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175 }
176 v = do_mkvalue(p_format, p_va);
177 if (v == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000178 itemfailed = 1;
179 Py_INCREF(Py_None);
180 v = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000181 }
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000182 err = PyDict_SetItem(d, k, v);
183 Py_DECREF(k);
184 Py_DECREF(v);
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000185 if (err < 0 || itemfailed) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000186 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000187 return NULL;
188 }
189 }
190 if (d != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000191 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000192 d = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000193 PyErr_SetString(PyExc_SystemError,
194 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000195 }
196 else if (endchar)
197 ++*p_format;
198 return d;
199}
200
Guido van Rossum79f25d91997-04-29 20:08:16 +0000201static PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000202do_mklist(const char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000203{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000205 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000206 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000207 if (n < 0)
208 return NULL;
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000209 v = PyList_New(n);
210 if (v == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000211 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000212 /* Note that we can't bail immediately on error as this will leak
213 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000214 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000215 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000216 if (w == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000217 itemfailed = 1;
218 Py_INCREF(Py_None);
219 w = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000220 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000221 PyList_SetItem(v, i, w);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000222 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000223
224 if (itemfailed) {
225 /* do_mkvalue() should have already set an error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000226 Py_DECREF(v);
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000227 return NULL;
228 }
229 if (**p_format != endchar) {
230 Py_DECREF(v);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000231 PyErr_SetString(PyExc_SystemError,
232 "Unmatched paren in format");
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000233 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000234 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000235
236 if (endchar)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000237 ++*p_format;
238 return v;
239}
240
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000241#ifdef Py_USING_UNICODE
Fred Drake25d34472000-04-28 14:42:37 +0000242static int
243_ustrlen(Py_UNICODE *u)
244{
245 int i = 0;
246 Py_UNICODE *v = u;
247 while (*v != 0) { i++; v++; }
248 return i;
249}
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000250#endif
Fred Drake25d34472000-04-28 14:42:37 +0000251
Guido van Rossum79f25d91997-04-29 20:08:16 +0000252static PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000253do_mktuple(const char **p_format, va_list *p_va, int endchar, int n)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000254{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000255 PyObject *v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000256 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000257 int itemfailed = 0;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000258 if (n < 0)
259 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260 if ((v = PyTuple_New(n)) == NULL)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000261 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000262 /* Note that we can't bail immediately on error as this will leak
263 refcounts on any 'N' arguments. */
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000264 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000265 PyObject *w = do_mkvalue(p_format, p_va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000266 if (w == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000267 itemfailed = 1;
268 Py_INCREF(Py_None);
269 w = Py_None;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000270 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271 PyTuple_SetItem(v, i, w);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000272 }
273 if (v != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000274 Py_DECREF(v);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000275 v = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000276 PyErr_SetString(PyExc_SystemError,
277 "Unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000278 }
279 else if (endchar)
280 ++*p_format;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000281 if (itemfailed) {
282 Py_DECREF(v);
283 v = NULL;
284 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000285 return v;
286}
287
Guido van Rossum79f25d91997-04-29 20:08:16 +0000288static PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000289do_mkvalue(const char **p_format, va_list *p_va)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000290{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000291 for (;;) {
292 switch (*(*p_format)++) {
293 case '(':
294 return do_mktuple(p_format, p_va, ')',
295 countformat(*p_format, ')'));
296
297 case '[':
298 return do_mklist(p_format, p_va, ']',
299 countformat(*p_format, ']'));
300
301 case '{':
302 return do_mkdict(p_format, p_va, '}',
303 countformat(*p_format, '}'));
304
305 case 'b':
Jack Jansenb763b9d2000-09-15 12:51:01 +0000306 case 'B':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000307 case 'h':
308 case 'i':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000309 return PyInt_FromLong((long)va_arg(*p_va, int));
Jack Jansend50338f2000-07-06 12:22:00 +0000310
311 case 'H':
312 return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000313
Georg Brandlf06e30a2005-11-24 15:37:42 +0000314 case 'I':
315 {
316 unsigned int n;
317 n = va_arg(*p_va, unsigned int);
Tim Peters35c3f4f2005-12-24 06:23:41 +0000318 if (n > (unsigned long)PyInt_GetMax())
Georg Brandlf06e30a2005-11-24 15:37:42 +0000319 return PyLong_FromUnsignedLong((unsigned long)n);
320 else
321 return PyInt_FromLong(n);
322 }
323
Martin v. Löwis18e16552006-02-15 17:27:45 +0000324 case 'n':
325#if SIZEOF_SIZE_T!=SIZEOF_LONG
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000326 return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000327#endif
328 /* Fall through from 'n' to 'l' if Py_ssize_t is long */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000329 case 'l':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000330 return PyInt_FromLong(va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000331
Jack Jansendbd65032003-04-17 22:01:10 +0000332 case 'k':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000333 {
334 unsigned long n;
335 n = va_arg(*p_va, unsigned long);
Tim Peters35c3f4f2005-12-24 06:23:41 +0000336 if (n > (unsigned long)PyInt_GetMax())
Georg Brandlf06e30a2005-11-24 15:37:42 +0000337 return PyLong_FromUnsignedLong(n);
338 else
339 return PyInt_FromLong(n);
340 }
Jack Jansendbd65032003-04-17 22:01:10 +0000341
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000342#ifdef HAVE_LONG_LONG
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000343 case 'L':
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000344 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
Jack Jansendbd65032003-04-17 22:01:10 +0000345
346 case 'K':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000347 return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000348#endif
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000349#ifdef Py_USING_UNICODE
Fred Drake25d34472000-04-28 14:42:37 +0000350 case 'u':
351 {
352 PyObject *v;
353 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
354 int n;
355 if (**p_format == '#') {
356 ++*p_format;
357 n = va_arg(*p_va, int);
358 }
359 else
360 n = -1;
361 if (u == NULL) {
362 v = Py_None;
363 Py_INCREF(v);
364 }
365 else {
366 if (n < 0)
367 n = _ustrlen(u);
368 v = PyUnicode_FromUnicode(u, n);
369 }
370 return v;
371 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000372#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000373 case 'f':
374 case 'd':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000375 return PyFloat_FromDouble(
376 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000377
Fred Drakeaec79242001-03-12 21:03:26 +0000378#ifndef WITHOUT_COMPLEX
379 case 'D':
380 return PyComplex_FromCComplex(
381 *((Py_complex *)va_arg(*p_va, Py_complex *)));
382#endif /* WITHOUT_COMPLEX */
383
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000384 case 'c':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000385 {
386 char p[1];
Martin v. Löwis18e16552006-02-15 17:27:45 +0000387 p[0] = (char)va_arg(*p_va, int);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000388 return PyString_FromStringAndSize(p, 1);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000389 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000390
391 case 's':
392 case 'z':
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000393 {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000394 PyObject *v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000395 char *str = va_arg(*p_va, char *);
396 int n;
397 if (**p_format == '#') {
398 ++*p_format;
399 n = va_arg(*p_va, int);
400 }
401 else
402 n = -1;
403 if (str == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000404 v = Py_None;
405 Py_INCREF(v);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000406 }
407 else {
Guido van Rossum582acec2000-06-28 22:07:35 +0000408 if (n < 0) {
409 size_t m = strlen(str);
410 if (m > INT_MAX) {
411 PyErr_SetString(PyExc_OverflowError,
412 "string too long for Python string");
413 return NULL;
414 }
415 n = (int)m;
416 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417 v = PyString_FromStringAndSize(str, n);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000418 }
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
Guido van Rossumd3415001998-12-23 05:01:38 +0000422 case 'N':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000423 case 'S':
424 case 'O':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000425 if (**p_format == '&') {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000426 typedef PyObject *(*converter)(void *);
Guido van Rossumd1b93931995-01-20 16:56:02 +0000427 converter func = va_arg(*p_va, converter);
428 void *arg = va_arg(*p_va, void *);
429 ++*p_format;
430 return (*func)(arg);
431 }
432 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000433 PyObject *v;
434 v = va_arg(*p_va, PyObject *);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000435 if (v != NULL) {
Guido van Rossumd3415001998-12-23 05:01:38 +0000436 if (*(*p_format - 1) != 'N')
437 Py_INCREF(v);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000438 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000439 else if (!PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000440 /* If a NULL was passed
441 * because a call that should
442 * have constructed a value
443 * failed, that's OK, and we
444 * pass the error on; but if
445 * no error occurred it's not
446 * clear that the caller knew
447 * what she was doing. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000448 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000449 "NULL object passed to Py_BuildValue");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000450 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000451 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000452
453 case ':':
454 case ',':
455 case ' ':
456 case '\t':
457 break;
458
459 default:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000461 "bad format char passed to Py_BuildValue");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000462 return NULL;
463
464 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000465 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000466}
467
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000468
Fred Drakeceead6d2003-01-30 15:08:25 +0000469PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000470Py_BuildValue(const char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000471{
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000472 va_list va;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000473 PyObject* retval;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000474 va_start(va, format);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475 retval = Py_VaBuildValue(format, va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000476 va_end(va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000477 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000478}
Guido van Rossume5372401993-03-16 12:15:04 +0000479
Guido van Rossum79f25d91997-04-29 20:08:16 +0000480PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000481Py_VaBuildValue(const char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000482{
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000483 const char *f = format;
Guido van Rossume5372401993-03-16 12:15:04 +0000484 int n = countformat(f, '\0');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000485 va_list lva;
486
487#ifdef VA_LIST_IS_ARRAY
488 memcpy(lva, va, sizeof(va_list));
489#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000490#ifdef __va_copy
491 __va_copy(lva, va);
492#else
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000493 lva = va;
494#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000495#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000496
Guido van Rossume5372401993-03-16 12:15:04 +0000497 if (n < 0)
498 return NULL;
499 if (n == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500 Py_INCREF(Py_None);
501 return Py_None;
Guido van Rossume5372401993-03-16 12:15:04 +0000502 }
503 if (n == 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000504 return do_mkvalue(&f, &lva);
505 return do_mktuple(&f, &lva, '\0', n);
506}
507
508
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000510PyEval_CallFunction(PyObject *obj, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000511{
512 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000513 PyObject *args;
514 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000515
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000516 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000517
Guido van Rossum79f25d91997-04-29 20:08:16 +0000518 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000519 va_end(vargs);
520
521 if (args == NULL)
522 return NULL;
523
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524 res = PyEval_CallObject(obj, args);
525 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526
527 return res;
528}
529
530
Guido van Rossum79f25d91997-04-29 20:08:16 +0000531PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000532PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533{
534 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000535 PyObject *meth;
536 PyObject *args;
537 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000538
Guido van Rossumc4099e61998-08-08 20:51:26 +0000539 meth = PyObject_GetAttrString(obj, methodname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540 if (meth == NULL)
541 return NULL;
542
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000543 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000544
Guido van Rossum79f25d91997-04-29 20:08:16 +0000545 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546 va_end(vargs);
547
548 if (args == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000549 Py_DECREF(meth);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550 return NULL;
551 }
552
Guido van Rossum79f25d91997-04-29 20:08:16 +0000553 res = PyEval_CallObject(meth, args);
554 Py_DECREF(meth);
555 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000556
557 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000558}
Fred Drake9e285152000-09-23 03:24:27 +0000559
560int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000561PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
Fred Drake9e285152000-09-23 03:24:27 +0000562{
563 PyObject *dict;
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000564 if (!PyModule_Check(m)) {
Fred Drake83115182002-06-17 17:16:57 +0000565 PyErr_SetString(PyExc_TypeError,
566 "PyModule_AddObject() needs module as first arg");
Fred Drake9e285152000-09-23 03:24:27 +0000567 return -1;
Fred Drake83115182002-06-17 17:16:57 +0000568 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000569 if (!o) {
Martin v. Löwisf8d59d22003-10-24 20:05:32 +0000570 if (!PyErr_Occurred())
571 PyErr_SetString(PyExc_TypeError,
572 "PyModule_AddObject() needs non-NULL value");
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000573 return -1;
574 }
575
Fred Drake83115182002-06-17 17:16:57 +0000576 dict = PyModule_GetDict(m);
577 if (dict == NULL) {
578 /* Internal error -- modules must have a dict! */
579 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
580 PyModule_GetName(m));
581 return -1;
582 }
583 if (PyDict_SetItemString(dict, name, o))
584 return -1;
585 Py_DECREF(o);
586 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000587}
588
589int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000590PyModule_AddIntConstant(PyObject *m, const char *name, long value)
Fred Drake9e285152000-09-23 03:24:27 +0000591{
592 return PyModule_AddObject(m, name, PyInt_FromLong(value));
593}
594
595int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000596PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
Fred Drake9e285152000-09-23 03:24:27 +0000597{
598 return PyModule_AddObject(m, name, PyString_FromString(value));
599}