blob: dd7454cf9f4a303715c77b05c844b2e06a5bdfdf [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
Martin v. Löwis5cb69362006-04-14 09:08:42 +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
Martin v. Löwis5cb69362006-04-14 09:08:42 +00009static PyObject *va_build_value(const char *, va_list, int);
10#ifdef HAVE_DECLSPEC_DLL
11PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...);
12#endif
13
Guido van Rossum2e58ff31997-11-19 18:53:33 +000014/* Package context -- the full module name for package imports */
15char *_Py_PackageContext = NULL;
16
Guido van Rossum40b33c61997-08-02 03:07:46 +000017/* Py_InitModule4() parameters:
Guido van Rossum970a0a21995-01-09 17:47:20 +000018 - name is the module name
19 - methods is the list of top-level functions
20 - doc is the documentation string
21 - passthrough is passed as self to functions defined in the module
22 - api_version is the value of PYTHON_API_VERSION at the time the
23 module was compiled
Guido van Rossum40b33c61997-08-02 03:07:46 +000024
25 Return value is a borrowed reference to the module object; or NULL
26 if an error occurred (in Python 1.4 and before, errors were fatal).
27 Errors may still leak memory.
Guido van Rossum50620fa1995-01-07 12:43:18 +000028*/
Guido van Rossum1d5735e1994-08-30 08:27:36 +000029
Guido van Rossum970a0a21995-01-09 17:47:20 +000030static char api_version_warning[] =
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000031"Python C API version mismatch for module %.100s:\
32 This Python has API version %d, module %.100s has version %d.";
Guido van Rossum970a0a21995-01-09 17:47:20 +000033
Guido van Rossum79f25d91997-04-29 20:08:16 +000034PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +000035Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000036 PyObject *passthrough, int module_api_version)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037{
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000038 PyObject *m, *d, *v, *n;
Guido van Rossum79f25d91997-04-29 20:08:16 +000039 PyMethodDef *ml;
Guido van Rossum413407f2000-08-04 14:00:14 +000040 if (!Py_IsInitialized())
41 Py_FatalError("Interpreter not initialized (version mismatch?)");
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000042 if (module_api_version != PYTHON_API_VERSION) {
43 char message[512];
44 PyOS_snprintf(message, sizeof(message),
45 api_version_warning, name,
46 PYTHON_API_VERSION, name,
47 module_api_version);
48 if (PyErr_Warn(PyExc_RuntimeWarning, message))
49 return NULL;
50 }
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000051 /* Make sure name is fully qualified.
52
53 This is a bit of a hack: when the shared library is loaded,
54 the module name is "package.module", but the module calls
55 Py_InitModule*() with just "module" for the name. The shared
56 library loader squirrels away the true name of the module in
57 _Py_PackageContext, and Py_InitModule*() will substitute this
58 (if the name actually matches).
59 */
Guido van Rossum2e58ff31997-11-19 18:53:33 +000060 if (_Py_PackageContext != NULL) {
61 char *p = strrchr(_Py_PackageContext, '.');
62 if (p != NULL && strcmp(name, p+1) == 0) {
63 name = _Py_PackageContext;
64 _Py_PackageContext = NULL;
65 }
66 }
Guido van Rossum40b33c61997-08-02 03:07:46 +000067 if ((m = PyImport_AddModule(name)) == NULL)
68 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000069 d = PyModule_GetDict(m);
Fred Drake233cc592002-08-14 20:57:56 +000070 if (methods != NULL) {
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000071 n = PyString_FromString(name);
72 if (n == NULL)
73 return NULL;
Fred Drake233cc592002-08-14 20:57:56 +000074 for (ml = methods; ml->ml_name != NULL; ml++) {
75 if ((ml->ml_flags & METH_CLASS) ||
76 (ml->ml_flags & METH_STATIC)) {
77 PyErr_SetString(PyExc_ValueError,
78 "module functions cannot set"
79 " METH_CLASS or METH_STATIC");
Martin v. Löwis0b300be2006-03-01 21:33:54 +000080 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000081 return NULL;
82 }
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000083 v = PyCFunction_NewEx(ml, passthrough, n);
Martin v. Löwis0b300be2006-03-01 21:33:54 +000084 if (v == NULL) {
85 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000086 return NULL;
Martin v. Löwis0b300be2006-03-01 21:33:54 +000087 }
Fred Drake233cc592002-08-14 20:57:56 +000088 if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
89 Py_DECREF(v);
Martin v. Löwis0b300be2006-03-01 21:33:54 +000090 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000091 return NULL;
92 }
Fred Drake289898c2001-08-04 03:11:25 +000093 Py_DECREF(v);
Fred Drake289898c2001-08-04 03:11:25 +000094 }
Neal Norwitz7bcabc62005-11-20 23:58:38 +000095 Py_DECREF(n);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000096 }
Guido van Rossum50620fa1995-01-07 12:43:18 +000097 if (doc != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +000098 v = PyString_FromString(doc);
Fred Drake289898c2001-08-04 03:11:25 +000099 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
Just van Rossumbbfd8592002-12-15 13:45:32 +0000100 Py_XDECREF(v);
Guido van Rossum40b33c61997-08-02 03:07:46 +0000101 return NULL;
Fred Drake289898c2001-08-04 03:11:25 +0000102 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000103 Py_DECREF(v);
Guido van Rossum50620fa1995-01-07 12:43:18 +0000104 }
Guido van Rossum3f5da241990-12-20 15:06:42 +0000105 return m;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000106}
107
108
Guido van Rossumbf80e541993-02-08 15:49:17 +0000109/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000110
Fred Drakeceead6d2003-01-30 15:08:25 +0000111static int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000112countformat(const char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000113{
114 int count = 0;
115 int level = 0;
116 while (level > 0 || *format != endchar) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000117 switch (*format) {
118 case '\0':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000119 /* Premature end */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000120 PyErr_SetString(PyExc_SystemError,
121 "unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000122 return -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000123 case '(':
124 case '[':
125 case '{':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000126 if (level == 0)
127 count++;
128 level++;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000129 break;
130 case ')':
131 case ']':
132 case '}':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000133 level--;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000134 break;
135 case '#':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000136 case '&':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000137 case ',':
138 case ':':
139 case ' ':
140 case '\t':
141 break;
142 default:
143 if (level == 0)
144 count++;
145 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000146 format++;
147 }
148 return count;
149}
150
151
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000152/* Generic function to create a value -- the inverse of getargs() */
153/* After an original idea and first implementation by Steven Miale */
154
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000155static PyObject *do_mktuple(const char**, va_list *, int, int, int);
156static PyObject *do_mklist(const char**, va_list *, int, int, int);
157static PyObject *do_mkdict(const char**, va_list *, int, int, int);
158static PyObject *do_mkvalue(const char**, va_list *, int);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000159
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000160
Guido van Rossum79f25d91997-04-29 20:08:16 +0000161static PyObject *
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000162do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000163{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000164 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000165 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000166 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000167 if (n < 0)
168 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000169 if ((d = PyDict_New()) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000170 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000171 /* Note that we can't bail immediately on error as this will leak
172 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000173 for (i = 0; i < n; i+= 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000174 PyObject *k, *v;
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000175 int err;
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000176 k = do_mkvalue(p_format, p_va, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000177 if (k == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000178 itemfailed = 1;
179 Py_INCREF(Py_None);
180 k = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000181 }
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000182 v = do_mkvalue(p_format, p_va, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000183 if (v == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000184 itemfailed = 1;
185 Py_INCREF(Py_None);
186 v = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000187 }
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000188 err = PyDict_SetItem(d, k, v);
189 Py_DECREF(k);
190 Py_DECREF(v);
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000191 if (err < 0 || itemfailed) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000192 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000193 return NULL;
194 }
195 }
196 if (d != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000198 d = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000199 PyErr_SetString(PyExc_SystemError,
200 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000201 }
202 else if (endchar)
203 ++*p_format;
204 return d;
205}
206
Guido van Rossum79f25d91997-04-29 20:08:16 +0000207static PyObject *
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000208do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000209{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000210 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000211 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000212 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000213 if (n < 0)
214 return NULL;
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000215 v = PyList_New(n);
216 if (v == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000217 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000218 /* Note that we can't bail immediately on error as this will leak
219 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000220 for (i = 0; i < n; i++) {
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000221 PyObject *w = do_mkvalue(p_format, p_va, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000222 if (w == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000223 itemfailed = 1;
224 Py_INCREF(Py_None);
225 w = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000226 }
Neal Norwitz4fe4ed22006-03-16 08:20:19 +0000227 PyList_SET_ITEM(v, i, w);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000228 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000229
230 if (itemfailed) {
231 /* do_mkvalue() should have already set an error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000232 Py_DECREF(v);
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000233 return NULL;
234 }
235 if (**p_format != endchar) {
236 Py_DECREF(v);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000237 PyErr_SetString(PyExc_SystemError,
238 "Unmatched paren in format");
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000239 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000240 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000241 if (endchar)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000242 ++*p_format;
243 return v;
244}
245
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000246#ifdef Py_USING_UNICODE
Fred Drake25d34472000-04-28 14:42:37 +0000247static int
248_ustrlen(Py_UNICODE *u)
249{
250 int i = 0;
251 Py_UNICODE *v = u;
252 while (*v != 0) { i++; v++; }
253 return i;
254}
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000255#endif
Fred Drake25d34472000-04-28 14:42:37 +0000256
Guido van Rossum79f25d91997-04-29 20:08:16 +0000257static PyObject *
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000258do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000259{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260 PyObject *v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000261 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000262 int itemfailed = 0;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000263 if (n < 0)
264 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000265 if ((v = PyTuple_New(n)) == NULL)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000266 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000267 /* Note that we can't bail immediately on error as this will leak
268 refcounts on any 'N' arguments. */
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000269 for (i = 0; i < n; i++) {
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000270 PyObject *w = do_mkvalue(p_format, p_va, flags);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000271 if (w == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000272 itemfailed = 1;
273 Py_INCREF(Py_None);
274 w = Py_None;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000275 }
Neal Norwitz4fe4ed22006-03-16 08:20:19 +0000276 PyTuple_SET_ITEM(v, i, w);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000277 }
Neal Norwitz4fe4ed22006-03-16 08:20:19 +0000278 if (itemfailed) {
279 /* do_mkvalue() should have already set an error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000280 Py_DECREF(v);
Neal Norwitz4fe4ed22006-03-16 08:20:19 +0000281 return NULL;
282 }
283 if (**p_format != endchar) {
284 Py_DECREF(v);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000285 PyErr_SetString(PyExc_SystemError,
286 "Unmatched paren in format");
Neal Norwitz4fe4ed22006-03-16 08:20:19 +0000287 return NULL;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000288 }
Neal Norwitz4fe4ed22006-03-16 08:20:19 +0000289 if (endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000290 ++*p_format;
291 return v;
292}
293
Guido van Rossum79f25d91997-04-29 20:08:16 +0000294static PyObject *
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000295do_mkvalue(const char **p_format, va_list *p_va, int flags)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000296{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000297 for (;;) {
298 switch (*(*p_format)++) {
299 case '(':
300 return do_mktuple(p_format, p_va, ')',
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000301 countformat(*p_format, ')'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000302
303 case '[':
304 return do_mklist(p_format, p_va, ']',
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000305 countformat(*p_format, ']'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000306
307 case '{':
308 return do_mkdict(p_format, p_va, '}',
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000309 countformat(*p_format, '}'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000310
311 case 'b':
Jack Jansenb763b9d2000-09-15 12:51:01 +0000312 case 'B':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000313 case 'h':
314 case 'i':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000315 return PyInt_FromLong((long)va_arg(*p_va, int));
Jack Jansend50338f2000-07-06 12:22:00 +0000316
317 case 'H':
318 return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000319
Georg Brandlf06e30a2005-11-24 15:37:42 +0000320 case 'I':
321 {
322 unsigned int n;
323 n = va_arg(*p_va, unsigned int);
Tim Peters35c3f4f2005-12-24 06:23:41 +0000324 if (n > (unsigned long)PyInt_GetMax())
Georg Brandlf06e30a2005-11-24 15:37:42 +0000325 return PyLong_FromUnsignedLong((unsigned long)n);
326 else
327 return PyInt_FromLong(n);
328 }
329
Martin v. Löwis18e16552006-02-15 17:27:45 +0000330 case 'n':
331#if SIZEOF_SIZE_T!=SIZEOF_LONG
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000332 return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000333#endif
334 /* Fall through from 'n' to 'l' if Py_ssize_t is long */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000335 case 'l':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000336 return PyInt_FromLong(va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000337
Jack Jansendbd65032003-04-17 22:01:10 +0000338 case 'k':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000339 {
340 unsigned long n;
341 n = va_arg(*p_va, unsigned long);
Tim Peters35c3f4f2005-12-24 06:23:41 +0000342 if (n > (unsigned long)PyInt_GetMax())
Georg Brandlf06e30a2005-11-24 15:37:42 +0000343 return PyLong_FromUnsignedLong(n);
344 else
345 return PyInt_FromLong(n);
346 }
Jack Jansendbd65032003-04-17 22:01:10 +0000347
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000348#ifdef HAVE_LONG_LONG
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000349 case 'L':
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000350 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
Jack Jansendbd65032003-04-17 22:01:10 +0000351
352 case 'K':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000353 return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000354#endif
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000355#ifdef Py_USING_UNICODE
Fred Drake25d34472000-04-28 14:42:37 +0000356 case 'u':
357 {
358 PyObject *v;
359 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000360 Py_ssize_t n;
Fred Drake25d34472000-04-28 14:42:37 +0000361 if (**p_format == '#') {
362 ++*p_format;
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000363 if (flags & FLAG_SIZE_T)
364 n = va_arg(*p_va, Py_ssize_t);
365 else
366 n = va_arg(*p_va, int);
Fred Drake25d34472000-04-28 14:42:37 +0000367 }
368 else
369 n = -1;
370 if (u == NULL) {
371 v = Py_None;
372 Py_INCREF(v);
373 }
374 else {
375 if (n < 0)
376 n = _ustrlen(u);
377 v = PyUnicode_FromUnicode(u, n);
378 }
379 return v;
380 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000381#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000382 case 'f':
383 case 'd':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 return PyFloat_FromDouble(
385 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000386
Fred Drakeaec79242001-03-12 21:03:26 +0000387#ifndef WITHOUT_COMPLEX
388 case 'D':
389 return PyComplex_FromCComplex(
390 *((Py_complex *)va_arg(*p_va, Py_complex *)));
391#endif /* WITHOUT_COMPLEX */
392
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000393 case 'c':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000394 {
395 char p[1];
Martin v. Löwis18e16552006-02-15 17:27:45 +0000396 p[0] = (char)va_arg(*p_va, int);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397 return PyString_FromStringAndSize(p, 1);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000398 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000399
400 case 's':
401 case 'z':
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000402 {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000403 PyObject *v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000404 char *str = va_arg(*p_va, char *);
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000405 Py_ssize_t n;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000406 if (**p_format == '#') {
407 ++*p_format;
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000408 if (flags & FLAG_SIZE_T)
409 n = va_arg(*p_va, Py_ssize_t);
410 else
411 n = va_arg(*p_va, int);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000412 }
413 else
414 n = -1;
415 if (str == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000416 v = Py_None;
417 Py_INCREF(v);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000418 }
419 else {
Guido van Rossum582acec2000-06-28 22:07:35 +0000420 if (n < 0) {
421 size_t m = strlen(str);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +0000422 if (m > PY_SSIZE_T_MAX) {
Guido van Rossum582acec2000-06-28 22:07:35 +0000423 PyErr_SetString(PyExc_OverflowError,
424 "string too long for Python string");
425 return NULL;
426 }
427 n = (int)m;
428 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000429 v = PyString_FromStringAndSize(str, n);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000430 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000431 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000432 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000433
Guido van Rossumd3415001998-12-23 05:01:38 +0000434 case 'N':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000435 case 'S':
436 case 'O':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000437 if (**p_format == '&') {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000438 typedef PyObject *(*converter)(void *);
Guido van Rossumd1b93931995-01-20 16:56:02 +0000439 converter func = va_arg(*p_va, converter);
440 void *arg = va_arg(*p_va, void *);
441 ++*p_format;
442 return (*func)(arg);
443 }
444 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445 PyObject *v;
446 v = va_arg(*p_va, PyObject *);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000447 if (v != NULL) {
Guido van Rossumd3415001998-12-23 05:01:38 +0000448 if (*(*p_format - 1) != 'N')
449 Py_INCREF(v);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000450 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000451 else if (!PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000452 /* If a NULL was passed
453 * because a call that should
454 * have constructed a value
455 * failed, that's OK, and we
456 * pass the error on; but if
457 * no error occurred it's not
458 * clear that the caller knew
459 * what she was doing. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000461 "NULL object passed to Py_BuildValue");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000462 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000463 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464
465 case ':':
466 case ',':
467 case ' ':
468 case '\t':
469 break;
470
471 default:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000473 "bad format char passed to Py_BuildValue");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000474 return NULL;
475
476 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000477 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000478}
479
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000480
Fred Drakeceead6d2003-01-30 15:08:25 +0000481PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000482Py_BuildValue(const char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000483{
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000484 va_list va;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485 PyObject* retval;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000486 va_start(va, format);
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000487 retval = va_build_value(format, va, 0);
488 va_end(va);
489 return retval;
490}
491
492PyObject *
493_Py_BuildValue_SizeT(const char *format, ...)
494{
495 va_list va;
496 PyObject* retval;
497 va_start(va, format);
498 retval = va_build_value(format, va, FLAG_SIZE_T);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000499 va_end(va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000500 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000501}
Guido van Rossume5372401993-03-16 12:15:04 +0000502
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000504Py_VaBuildValue(const char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000505{
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000506 return va_build_value(format, va, 0);
507}
508
509PyObject *
510_Py_VaBuildValue_SizeT(const char *format, va_list va)
511{
512 return va_build_value(format, va, FLAG_SIZE_T);
513}
514
515static PyObject *
516va_build_value(const char *format, va_list va, int flags)
517{
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000518 const char *f = format;
Guido van Rossume5372401993-03-16 12:15:04 +0000519 int n = countformat(f, '\0');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000520 va_list lva;
521
522#ifdef VA_LIST_IS_ARRAY
523 memcpy(lva, va, sizeof(va_list));
524#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000525#ifdef __va_copy
526 __va_copy(lva, va);
527#else
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528 lva = va;
529#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000530#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531
Guido van Rossume5372401993-03-16 12:15:04 +0000532 if (n < 0)
533 return NULL;
534 if (n == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000535 Py_INCREF(Py_None);
536 return Py_None;
Guido van Rossume5372401993-03-16 12:15:04 +0000537 }
538 if (n == 1)
Martin v. Löwis5cb69362006-04-14 09:08:42 +0000539 return do_mkvalue(&f, &lva, flags);
540 return do_mktuple(&f, &lva, '\0', n, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541}
542
543
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000545PyEval_CallFunction(PyObject *obj, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546{
547 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548 PyObject *args;
549 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000551 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000552
Guido van Rossum79f25d91997-04-29 20:08:16 +0000553 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000554 va_end(vargs);
555
556 if (args == NULL)
557 return NULL;
558
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559 res = PyEval_CallObject(obj, args);
560 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561
562 return res;
563}
564
565
Guido van Rossum79f25d91997-04-29 20:08:16 +0000566PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000567PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000568{
569 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000570 PyObject *meth;
571 PyObject *args;
572 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573
Guido van Rossumc4099e61998-08-08 20:51:26 +0000574 meth = PyObject_GetAttrString(obj, methodname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575 if (meth == NULL)
576 return NULL;
577
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000578 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000579
Guido van Rossum79f25d91997-04-29 20:08:16 +0000580 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000581 va_end(vargs);
582
583 if (args == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584 Py_DECREF(meth);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585 return NULL;
586 }
587
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 res = PyEval_CallObject(meth, args);
589 Py_DECREF(meth);
590 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000591
592 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000593}
Fred Drake9e285152000-09-23 03:24:27 +0000594
595int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000596PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
Fred Drake9e285152000-09-23 03:24:27 +0000597{
598 PyObject *dict;
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000599 if (!PyModule_Check(m)) {
Fred Drake83115182002-06-17 17:16:57 +0000600 PyErr_SetString(PyExc_TypeError,
601 "PyModule_AddObject() needs module as first arg");
Fred Drake9e285152000-09-23 03:24:27 +0000602 return -1;
Fred Drake83115182002-06-17 17:16:57 +0000603 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000604 if (!o) {
Martin v. Löwisf8d59d22003-10-24 20:05:32 +0000605 if (!PyErr_Occurred())
606 PyErr_SetString(PyExc_TypeError,
607 "PyModule_AddObject() needs non-NULL value");
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000608 return -1;
609 }
610
Fred Drake83115182002-06-17 17:16:57 +0000611 dict = PyModule_GetDict(m);
612 if (dict == NULL) {
613 /* Internal error -- modules must have a dict! */
614 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
615 PyModule_GetName(m));
616 return -1;
617 }
618 if (PyDict_SetItemString(dict, name, o))
619 return -1;
620 Py_DECREF(o);
621 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000622}
623
624int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000625PyModule_AddIntConstant(PyObject *m, const char *name, long value)
Fred Drake9e285152000-09-23 03:24:27 +0000626{
627 return PyModule_AddObject(m, name, PyInt_FromLong(value));
628}
629
630int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000631PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
Fred Drake9e285152000-09-23 03:24:27 +0000632{
633 return PyModule_AddObject(m, name, PyString_FromString(value));
634}