blob: 8f25ed2e19a3de7694aa6852cb58abf9a34cfc2b [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module support implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006#define FLAG_SIZE_T 1
Guido van Rossum1d5735e1994-08-30 08:27:36 +00007typedef double va_double;
Guido van Rossum1d5735e1994-08-30 08:27:36 +00008
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00009static PyObject *va_build_value(const char *, va_list, int);
10
Guido van Rossum2e58ff31997-11-19 18:53:33 +000011/* Package context -- the full module name for package imports */
12char *_Py_PackageContext = NULL;
13
Guido van Rossum40b33c61997-08-02 03:07:46 +000014/* Py_InitModule4() parameters:
Guido van Rossum970a0a21995-01-09 17:47:20 +000015 - name is the module name
16 - methods is the list of top-level functions
17 - doc is the documentation string
18 - passthrough is passed as self to functions defined in the module
19 - api_version is the value of PYTHON_API_VERSION at the time the
20 module was compiled
Guido van Rossum40b33c61997-08-02 03:07:46 +000021
22 Return value is a borrowed reference to the module object; or NULL
23 if an error occurred (in Python 1.4 and before, errors were fatal).
24 Errors may still leak memory.
Guido van Rossum50620fa1995-01-07 12:43:18 +000025*/
Guido van Rossum1d5735e1994-08-30 08:27:36 +000026
Guido van Rossum970a0a21995-01-09 17:47:20 +000027static char api_version_warning[] =
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000028"Python C API version mismatch for module %.100s:\
29 This Python has API version %d, module %.100s has version %d.";
Guido van Rossum970a0a21995-01-09 17:47:20 +000030
Guido van Rossum79f25d91997-04-29 20:08:16 +000031PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +000032Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000033 PyObject *passthrough, int module_api_version)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000034{
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000035 PyObject *m, *d, *v, *n;
Guido van Rossum79f25d91997-04-29 20:08:16 +000036 PyMethodDef *ml;
Guido van Rossum413407f2000-08-04 14:00:14 +000037 if (!Py_IsInitialized())
38 Py_FatalError("Interpreter not initialized (version mismatch?)");
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000039 if (module_api_version != PYTHON_API_VERSION) {
40 char message[512];
41 PyOS_snprintf(message, sizeof(message),
42 api_version_warning, name,
43 PYTHON_API_VERSION, name,
44 module_api_version);
Skip Montanaro46fc3372007-08-12 11:44:53 +000045 if (PyErr_WarnEx(PyExc_RuntimeWarning, message, 1))
Marc-André Lemburge5006eb2001-07-31 13:24:44 +000046 return NULL;
47 }
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000048 /* Make sure name is fully qualified.
49
50 This is a bit of a hack: when the shared library is loaded,
51 the module name is "package.module", but the module calls
52 Py_InitModule*() with just "module" for the name. The shared
53 library loader squirrels away the true name of the module in
54 _Py_PackageContext, and Py_InitModule*() will substitute this
55 (if the name actually matches).
56 */
Guido van Rossum2e58ff31997-11-19 18:53:33 +000057 if (_Py_PackageContext != NULL) {
58 char *p = strrchr(_Py_PackageContext, '.');
59 if (p != NULL && strcmp(name, p+1) == 0) {
60 name = _Py_PackageContext;
61 _Py_PackageContext = NULL;
62 }
63 }
Guido van Rossum40b33c61997-08-02 03:07:46 +000064 if ((m = PyImport_AddModule(name)) == NULL)
65 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +000066 d = PyModule_GetDict(m);
Fred Drake233cc592002-08-14 20:57:56 +000067 if (methods != NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +000068 n = PyUnicode_FromString(name);
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000069 if (n == NULL)
70 return NULL;
Fred Drake233cc592002-08-14 20:57:56 +000071 for (ml = methods; ml->ml_name != NULL; ml++) {
72 if ((ml->ml_flags & METH_CLASS) ||
73 (ml->ml_flags & METH_STATIC)) {
74 PyErr_SetString(PyExc_ValueError,
75 "module functions cannot set"
76 " METH_CLASS or METH_STATIC");
Martin v. Löwis0b300be2006-03-01 21:33:54 +000077 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000078 return NULL;
79 }
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000080 v = PyCFunction_NewEx(ml, passthrough, n);
Martin v. Löwis0b300be2006-03-01 21:33:54 +000081 if (v == NULL) {
82 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000083 return NULL;
Martin v. Löwis0b300be2006-03-01 21:33:54 +000084 }
Fred Drake233cc592002-08-14 20:57:56 +000085 if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
86 Py_DECREF(v);
Martin v. Löwis0b300be2006-03-01 21:33:54 +000087 Py_DECREF(n);
Fred Drake233cc592002-08-14 20:57:56 +000088 return NULL;
89 }
Fred Drake289898c2001-08-04 03:11:25 +000090 Py_DECREF(v);
Fred Drake289898c2001-08-04 03:11:25 +000091 }
Neal Norwitz7bcabc62005-11-20 23:58:38 +000092 Py_DECREF(n);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000093 }
Guido van Rossum50620fa1995-01-07 12:43:18 +000094 if (doc != NULL) {
Walter Dörwald6e8fcae2007-06-12 15:23:50 +000095 v = PyUnicode_FromString(doc);
Fred Drake289898c2001-08-04 03:11:25 +000096 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
Just van Rossumbbfd8592002-12-15 13:45:32 +000097 Py_XDECREF(v);
Guido van Rossum40b33c61997-08-02 03:07:46 +000098 return NULL;
Fred Drake289898c2001-08-04 03:11:25 +000099 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000100 Py_DECREF(v);
Guido van Rossum50620fa1995-01-07 12:43:18 +0000101 }
Guido van Rossum3f5da241990-12-20 15:06:42 +0000102 return m;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000103}
104
105
Guido van Rossumbf80e541993-02-08 15:49:17 +0000106/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000107
Fred Drakeceead6d2003-01-30 15:08:25 +0000108static int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000109countformat(const char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000110{
111 int count = 0;
112 int level = 0;
113 while (level > 0 || *format != endchar) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000114 switch (*format) {
115 case '\0':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000116 /* Premature end */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000117 PyErr_SetString(PyExc_SystemError,
118 "unmatched paren in format");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000119 return -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000120 case '(':
121 case '[':
122 case '{':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000123 if (level == 0)
124 count++;
125 level++;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000126 break;
127 case ')':
128 case ']':
129 case '}':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000130 level--;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000131 break;
132 case '#':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000133 case '&':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000134 case ',':
135 case ':':
136 case ' ':
137 case '\t':
138 break;
139 default:
140 if (level == 0)
141 count++;
142 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000143 format++;
144 }
145 return count;
146}
147
148
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000149/* Generic function to create a value -- the inverse of getargs() */
150/* After an original idea and first implementation by Steven Miale */
151
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000152static PyObject *do_mktuple(const char**, va_list *, int, int, int);
153static PyObject *do_mklist(const char**, va_list *, int, int, int);
154static PyObject *do_mkdict(const char**, va_list *, int, int, int);
155static PyObject *do_mkvalue(const char**, va_list *, int);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000156
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000157
Guido van Rossum79f25d91997-04-29 20:08:16 +0000158static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000159do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000160{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000161 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000162 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000163 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000164 if (n < 0)
165 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000166 if ((d = PyDict_New()) == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000167 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000168 /* Note that we can't bail immediately on error as this will leak
169 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000170 for (i = 0; i < n; i+= 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171 PyObject *k, *v;
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000172 int err;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000173 k = do_mkvalue(p_format, p_va, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000174 if (k == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000175 itemfailed = 1;
176 Py_INCREF(Py_None);
177 k = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000178 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000179 v = do_mkvalue(p_format, p_va, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000180 if (v == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000181 itemfailed = 1;
182 Py_INCREF(Py_None);
183 v = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000184 }
Guido van Rossumdb847bd1997-11-20 20:35:45 +0000185 err = PyDict_SetItem(d, k, v);
186 Py_DECREF(k);
187 Py_DECREF(v);
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000188 if (err < 0 || itemfailed) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000189 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000190 return NULL;
191 }
192 }
193 if (d != NULL && **p_format != endchar) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000194 Py_DECREF(d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000195 d = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000196 PyErr_SetString(PyExc_SystemError,
197 "Unmatched paren in format");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000198 }
199 else if (endchar)
200 ++*p_format;
201 return d;
202}
203
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000205do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000206{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000207 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000208 int i;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000209 int itemfailed = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000210 if (n < 0)
211 return NULL;
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000212 v = PyList_New(n);
213 if (v == NULL)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000214 return NULL;
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000215 /* Note that we can't bail immediately on error as this will leak
216 refcounts on any 'N' arguments. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000217 for (i = 0; i < n; i++) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000218 PyObject *w = do_mkvalue(p_format, p_va, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000219 if (w == NULL) {
Michael W. Hudsonc849e632004-07-14 11:28:06 +0000220 itemfailed = 1;
221 Py_INCREF(Py_None);
222 w = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000223 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000224 PyList_SET_ITEM(v, i, w);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000225 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000226
227 if (itemfailed) {
228 /* do_mkvalue() should have already set an error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000229 Py_DECREF(v);
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000230 return NULL;
231 }
232 if (**p_format != endchar) {
233 Py_DECREF(v);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000234 PyErr_SetString(PyExc_SystemError,
235 "Unmatched paren in format");
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000236 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000237 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000238 if (endchar)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000239 ++*p_format;
240 return v;
241}
242
Fred Drake25d34472000-04-28 14:42:37 +0000243static int
244_ustrlen(Py_UNICODE *u)
245{
246 int i = 0;
247 Py_UNICODE *v = u;
248 while (*v != 0) { i++; v++; }
249 return i;
250}
251
Guido van Rossum79f25d91997-04-29 20:08:16 +0000252static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000253do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
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++) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000265 PyObject *w = do_mkvalue(p_format, p_va, flags);
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 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000271 PyTuple_SET_ITEM(v, i, w);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000272 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000273 if (itemfailed) {
274 /* do_mkvalue() should have already set an error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000275 Py_DECREF(v);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000276 return NULL;
277 }
278 if (**p_format != endchar) {
279 Py_DECREF(v);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000280 PyErr_SetString(PyExc_SystemError,
281 "Unmatched paren in format");
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000282 return NULL;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000283 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000284 if (endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000285 ++*p_format;
286 return v;
287}
288
Guido van Rossum79f25d91997-04-29 20:08:16 +0000289static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000290do_mkvalue(const char **p_format, va_list *p_va, int flags)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000291{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000292 for (;;) {
293 switch (*(*p_format)++) {
294 case '(':
295 return do_mktuple(p_format, p_va, ')',
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000296 countformat(*p_format, ')'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000297
298 case '[':
299 return do_mklist(p_format, p_va, ']',
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000300 countformat(*p_format, ']'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000301
302 case '{':
303 return do_mkdict(p_format, p_va, '}',
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000304 countformat(*p_format, '}'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000305
306 case 'b':
Jack Jansenb763b9d2000-09-15 12:51:01 +0000307 case 'B':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000308 case 'h':
309 case 'i':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310 return PyInt_FromLong((long)va_arg(*p_va, int));
Jack Jansend50338f2000-07-06 12:22:00 +0000311
312 case 'H':
313 return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000314
Georg Brandlf06e30a2005-11-24 15:37:42 +0000315 case 'I':
316 {
317 unsigned int n;
318 n = va_arg(*p_va, unsigned int);
Tim Peters35c3f4f2005-12-24 06:23:41 +0000319 if (n > (unsigned long)PyInt_GetMax())
Georg Brandlf06e30a2005-11-24 15:37:42 +0000320 return PyLong_FromUnsignedLong((unsigned long)n);
321 else
322 return PyInt_FromLong(n);
323 }
324
Martin v. Löwis18e16552006-02-15 17:27:45 +0000325 case 'n':
326#if SIZEOF_SIZE_T!=SIZEOF_LONG
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000327 return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000328#endif
329 /* Fall through from 'n' to 'l' if Py_ssize_t is long */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000330 case 'l':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000331 return PyInt_FromLong(va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000332
Jack Jansendbd65032003-04-17 22:01:10 +0000333 case 'k':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000334 {
335 unsigned long n;
336 n = va_arg(*p_va, unsigned long);
Tim Peters35c3f4f2005-12-24 06:23:41 +0000337 if (n > (unsigned long)PyInt_GetMax())
Georg Brandlf06e30a2005-11-24 15:37:42 +0000338 return PyLong_FromUnsignedLong(n);
339 else
340 return PyInt_FromLong(n);
341 }
Jack Jansendbd65032003-04-17 22:01:10 +0000342
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000343#ifdef HAVE_LONG_LONG
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000344 case 'L':
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000345 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
Jack Jansendbd65032003-04-17 22:01:10 +0000346
347 case 'K':
Georg Brandlf06e30a2005-11-24 15:37:42 +0000348 return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000349#endif
Fred Drake25d34472000-04-28 14:42:37 +0000350 case 'u':
351 {
352 PyObject *v;
353 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000354 Py_ssize_t n;
Fred Drake25d34472000-04-28 14:42:37 +0000355 if (**p_format == '#') {
356 ++*p_format;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000357 if (flags & FLAG_SIZE_T)
358 n = va_arg(*p_va, Py_ssize_t);
359 else
360 n = va_arg(*p_va, int);
Fred Drake25d34472000-04-28 14:42:37 +0000361 }
362 else
363 n = -1;
364 if (u == NULL) {
365 v = Py_None;
366 Py_INCREF(v);
367 }
368 else {
369 if (n < 0)
370 n = _ustrlen(u);
371 v = PyUnicode_FromUnicode(u, n);
372 }
373 return v;
374 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000375 case 'f':
376 case 'd':
Guido van Rossum79f25d91997-04-29 20:08:16 +0000377 return PyFloat_FromDouble(
378 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000379
Fred Drakeaec79242001-03-12 21:03:26 +0000380#ifndef WITHOUT_COMPLEX
381 case 'D':
382 return PyComplex_FromCComplex(
383 *((Py_complex *)va_arg(*p_va, Py_complex *)));
384#endif /* WITHOUT_COMPLEX */
385
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000386 case 'c':
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000387 {
Walter Dörwaldd0941302007-07-01 21:58:22 +0000388 char p[1];
389 p[0] = (char)va_arg(*p_va, int);
Martin v. Löwis10a60b32007-07-18 02:28:27 +0000390 return PyUnicode_FromStringAndSize(p, 1);
Walter Dörwaldd0941302007-07-01 21:58:22 +0000391 }
392 case 'C':
393 {
Walter Dörwaldbc1f8862007-06-20 11:02:38 +0000394 int i = va_arg(*p_va, int);
395 Py_UNICODE c;
396 if (i < 0 || i > PyUnicode_GetMax()) {
397#ifdef Py_UNICODE_WIDE
398 PyErr_SetString(PyExc_OverflowError,
399 "%c arg not in range(0x110000) "
400 "(wide Python build)");
401#else
402 PyErr_SetString(PyExc_OverflowError,
403 "%c arg not in range(0x10000) "
404 "(narrow Python build)");
405#endif
406 return NULL;
407 }
408 c = i;
409 return PyUnicode_FromUnicode(&c, 1);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000410 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000411
412 case 's':
413 case 'z':
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000414 {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000415 PyObject *v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000416 char *str = va_arg(*p_va, char *);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000417 Py_ssize_t n;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000418 if (**p_format == '#') {
419 ++*p_format;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000420 if (flags & FLAG_SIZE_T)
421 n = va_arg(*p_va, Py_ssize_t);
422 else
423 n = va_arg(*p_va, int);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000424 }
425 else
426 n = -1;
427 if (str == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000428 v = Py_None;
429 Py_INCREF(v);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000430 }
431 else {
Guido van Rossum582acec2000-06-28 22:07:35 +0000432 if (n < 0) {
433 size_t m = strlen(str);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000434 if (m > PY_SSIZE_T_MAX) {
Guido van Rossum582acec2000-06-28 22:07:35 +0000435 PyErr_SetString(PyExc_OverflowError,
436 "string too long for Python string");
437 return NULL;
438 }
Thomas Wouters89f507f2006-12-13 04:49:30 +0000439 n = (Py_ssize_t)m;
Guido van Rossum582acec2000-06-28 22:07:35 +0000440 }
Martin v. Löwis10a60b32007-07-18 02:28:27 +0000441 v = PyUnicode_FromStringAndSize(str, n);
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000442 }
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000443 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000444 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000445
Walter Dörwaldd2034312007-05-18 16:29:38 +0000446 case 'U':
447 {
448 PyObject *v;
449 char *str = va_arg(*p_va, char *);
450 Py_ssize_t n;
451 if (**p_format == '#') {
452 ++*p_format;
453 if (flags & FLAG_SIZE_T)
454 n = va_arg(*p_va, Py_ssize_t);
455 else
456 n = va_arg(*p_va, int);
457 }
458 else
459 n = -1;
460 if (str == NULL) {
461 v = Py_None;
462 Py_INCREF(v);
463 }
464 else {
465 if (n < 0) {
466 size_t m = strlen(str);
467 if (m > PY_SSIZE_T_MAX) {
468 PyErr_SetString(PyExc_OverflowError,
469 "string too long for Python string");
470 return NULL;
471 }
472 n = (Py_ssize_t)m;
473 }
474 v = PyUnicode_FromStringAndSize(str, n);
475 }
476 return v;
477 }
478
Walter Dörwald612344f2007-05-04 19:28:21 +0000479 case 'y':
480 {
481 PyObject *v;
482 char *str = va_arg(*p_va, char *);
483 Py_ssize_t n;
484 if (**p_format == '#') {
485 ++*p_format;
486 if (flags & FLAG_SIZE_T)
487 n = va_arg(*p_va, Py_ssize_t);
488 else
489 n = va_arg(*p_va, int);
490 }
491 else
492 n = -1;
493 if (str == NULL) {
494 v = Py_None;
495 Py_INCREF(v);
496 }
497 else {
498 if (n < 0) {
499 size_t m = strlen(str);
500 if (m > PY_SSIZE_T_MAX) {
501 PyErr_SetString(PyExc_OverflowError,
502 "string too long for Python bytes");
503 return NULL;
504 }
505 n = (Py_ssize_t)m;
506 }
507 v = PyBytes_FromStringAndSize(str, n);
508 }
509 return v;
510 }
511
Guido van Rossumd3415001998-12-23 05:01:38 +0000512 case 'N':
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000513 case 'S':
514 case 'O':
Guido van Rossumd1b93931995-01-20 16:56:02 +0000515 if (**p_format == '&') {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000516 typedef PyObject *(*converter)(void *);
Guido van Rossumd1b93931995-01-20 16:56:02 +0000517 converter func = va_arg(*p_va, converter);
518 void *arg = va_arg(*p_va, void *);
519 ++*p_format;
520 return (*func)(arg);
521 }
522 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000523 PyObject *v;
524 v = va_arg(*p_va, PyObject *);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000525 if (v != NULL) {
Guido van Rossumd3415001998-12-23 05:01:38 +0000526 if (*(*p_format - 1) != 'N')
527 Py_INCREF(v);
Guido van Rossumc38e7d41998-12-23 19:53:45 +0000528 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000529 else if (!PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530 /* If a NULL was passed
531 * because a call that should
532 * have constructed a value
533 * failed, that's OK, and we
534 * pass the error on; but if
535 * no error occurred it's not
536 * clear that the caller knew
537 * what she was doing. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000539 "NULL object passed to Py_BuildValue");
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000540 return v;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000541 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000542
543 case ':':
544 case ',':
545 case ' ':
546 case '\t':
547 break;
548
549 default:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000550 PyErr_SetString(PyExc_SystemError,
Guido van Rossum233f4b51998-07-07 22:32:19 +0000551 "bad format char passed to Py_BuildValue");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000552 return NULL;
553
554 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000555 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000556}
557
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000558
Fred Drakeceead6d2003-01-30 15:08:25 +0000559PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000560Py_BuildValue(const char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000561{
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000562 va_list va;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563 PyObject* retval;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000564 va_start(va, format);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000565 retval = va_build_value(format, va, 0);
566 va_end(va);
567 return retval;
568}
569
570PyObject *
571_Py_BuildValue_SizeT(const char *format, ...)
572{
573 va_list va;
574 PyObject* retval;
575 va_start(va, format);
576 retval = va_build_value(format, va, FLAG_SIZE_T);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000577 va_end(va);
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000578 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000579}
Guido van Rossume5372401993-03-16 12:15:04 +0000580
Guido van Rossum79f25d91997-04-29 20:08:16 +0000581PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000582Py_VaBuildValue(const char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000583{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000584 return va_build_value(format, va, 0);
585}
586
587PyObject *
588_Py_VaBuildValue_SizeT(const char *format, va_list va)
589{
590 return va_build_value(format, va, FLAG_SIZE_T);
591}
592
593static PyObject *
594va_build_value(const char *format, va_list va, int flags)
595{
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000596 const char *f = format;
Guido van Rossume5372401993-03-16 12:15:04 +0000597 int n = countformat(f, '\0');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000598 va_list lva;
599
600#ifdef VA_LIST_IS_ARRAY
601 memcpy(lva, va, sizeof(va_list));
602#else
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000603#ifdef __va_copy
604 __va_copy(lva, va);
605#else
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606 lva = va;
607#endif
Martin v. Löwis75d2d942002-07-28 10:23:27 +0000608#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000609
Guido van Rossume5372401993-03-16 12:15:04 +0000610 if (n < 0)
611 return NULL;
612 if (n == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613 Py_INCREF(Py_None);
614 return Py_None;
Guido van Rossume5372401993-03-16 12:15:04 +0000615 }
616 if (n == 1)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000617 return do_mkvalue(&f, &lva, flags);
618 return do_mktuple(&f, &lva, '\0', n, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000619}
620
621
Guido van Rossum79f25d91997-04-29 20:08:16 +0000622PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000623PyEval_CallFunction(PyObject *obj, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000624{
625 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626 PyObject *args;
627 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000628
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000629 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000632 va_end(vargs);
633
634 if (args == NULL)
635 return NULL;
636
Guido van Rossum79f25d91997-04-29 20:08:16 +0000637 res = PyEval_CallObject(obj, args);
638 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000639
640 return res;
641}
642
643
Guido van Rossum79f25d91997-04-29 20:08:16 +0000644PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000645PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000646{
647 va_list vargs;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000648 PyObject *meth;
649 PyObject *args;
650 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000651
Guido van Rossumc4099e61998-08-08 20:51:26 +0000652 meth = PyObject_GetAttrString(obj, methodname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653 if (meth == NULL)
654 return NULL;
655
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000656 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000657
Guido van Rossum79f25d91997-04-29 20:08:16 +0000658 args = Py_VaBuildValue(format, vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000659 va_end(vargs);
660
661 if (args == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000662 Py_DECREF(meth);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000663 return NULL;
664 }
665
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666 res = PyEval_CallObject(meth, args);
667 Py_DECREF(meth);
668 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000669
670 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000671}
Fred Drake9e285152000-09-23 03:24:27 +0000672
673int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000674PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
Fred Drake9e285152000-09-23 03:24:27 +0000675{
676 PyObject *dict;
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000677 if (!PyModule_Check(m)) {
Fred Drake83115182002-06-17 17:16:57 +0000678 PyErr_SetString(PyExc_TypeError,
679 "PyModule_AddObject() needs module as first arg");
Fred Drake9e285152000-09-23 03:24:27 +0000680 return -1;
Fred Drake83115182002-06-17 17:16:57 +0000681 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000682 if (!o) {
Martin v. Löwisf8d59d22003-10-24 20:05:32 +0000683 if (!PyErr_Occurred())
684 PyErr_SetString(PyExc_TypeError,
685 "PyModule_AddObject() needs non-NULL value");
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000686 return -1;
687 }
688
Fred Drake83115182002-06-17 17:16:57 +0000689 dict = PyModule_GetDict(m);
690 if (dict == NULL) {
691 /* Internal error -- modules must have a dict! */
692 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
693 PyModule_GetName(m));
694 return -1;
695 }
696 if (PyDict_SetItemString(dict, name, o))
697 return -1;
698 Py_DECREF(o);
699 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000700}
701
702int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000703PyModule_AddIntConstant(PyObject *m, const char *name, long value)
Fred Drake9e285152000-09-23 03:24:27 +0000704{
705 return PyModule_AddObject(m, name, PyInt_FromLong(value));
706}
707
708int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000709PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
Fred Drake9e285152000-09-23 03:24:27 +0000710{
Martin v. Löwis5b222132007-06-10 09:51:05 +0000711 return PyModule_AddObject(m, name, PyUnicode_FromString(value));
Fred Drake9e285152000-09-23 03:24:27 +0000712}