blob: a846377ec6b7b43ad8e1de58185ee731828a6fa3 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde2001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028#ifdef Py_USING_UNICODE
29static PyObject *filterunicode(PyObject *, PyObject *);
30#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
Neal Norwitz92e212f2006-04-03 04:48:37 +000034builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Neal Norwitz92e212f2006-04-03 04:48:37 +000036 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
37 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +000038 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000039 PyObject *globals = NULL;
40 PyObject *locals = NULL;
41 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000042 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043
Neal Norwitz92e212f2006-04-03 04:48:37 +000044 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
45 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000047 return PyImport_ImportModuleLevel(name, globals, locals,
48 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000049}
50
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000051PyDoc_STRVAR(import_doc,
Neal Norwitz92e212f2006-04-03 04:48:37 +000052"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000053\n\
54Import a module. The globals are only used to determine the context;\n\
55they are not modified. The locals are currently unused. The fromlist\n\
56should be a list of names to emulate ``from name import ...'', or an\n\
57empty list to emulate ``import name''.\n\
58When importing a module from a package, note that __import__('A.B', ...)\n\
59returns package A when fromlist is empty, but its submodule B when\n\
Neal Norwitz92e212f2006-04-03 04:48:37 +000060fromlist is not empty. Level is used to determine whether to perform \n\
61absolute or relative imports. -1 is the original strategy of attempting\n\
62both absolute and relative imports, 0 is absolute, a positive number\n\
63is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000064
Guido van Rossum1ae940a1995-01-02 19:04:15 +000065
Guido van Rossum79f25d91997-04-29 20:08:16 +000066static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000067builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000068{
Guido van Rossum09df08a1998-05-22 00:51:39 +000069 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000070}
71
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000072PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000073"abs(number) -> number\n\
74\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000075Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000076
Raymond Hettinger96229b12005-03-11 06:49:40 +000077static PyObject *
78builtin_all(PyObject *self, PyObject *v)
79{
80 PyObject *it, *item;
81
82 it = PyObject_GetIter(v);
83 if (it == NULL)
84 return NULL;
85
86 while ((item = PyIter_Next(it)) != NULL) {
87 int cmp = PyObject_IsTrue(item);
88 Py_DECREF(item);
89 if (cmp < 0) {
90 Py_DECREF(it);
91 return NULL;
92 }
93 if (cmp == 0) {
94 Py_DECREF(it);
95 Py_RETURN_FALSE;
96 }
97 }
98 Py_DECREF(it);
99 if (PyErr_Occurred())
100 return NULL;
101 Py_RETURN_TRUE;
102}
103
104PyDoc_STRVAR(all_doc,
105"all(iterable) -> bool\n\
106\n\
107Return True if bool(x) is True for all values x in the iterable.");
108
109static PyObject *
110builtin_any(PyObject *self, PyObject *v)
111{
112 PyObject *it, *item;
113
114 it = PyObject_GetIter(v);
115 if (it == NULL)
116 return NULL;
117
118 while ((item = PyIter_Next(it)) != NULL) {
119 int cmp = PyObject_IsTrue(item);
120 Py_DECREF(item);
121 if (cmp < 0) {
122 Py_DECREF(it);
123 return NULL;
124 }
125 if (cmp == 1) {
126 Py_DECREF(it);
127 Py_RETURN_TRUE;
128 }
129 }
130 Py_DECREF(it);
131 if (PyErr_Occurred())
132 return NULL;
133 Py_RETURN_FALSE;
134}
135
136PyDoc_STRVAR(any_doc,
137"any(iterable) -> bool\n\
138\n\
139Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000140
Guido van Rossum79f25d91997-04-29 20:08:16 +0000141static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000142builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000143{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000144 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000145 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000146
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000147 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000148 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000149 if (alist != NULL) {
150 if (!PyTuple_Check(alist)) {
151 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000152 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000153 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000154 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000155 return NULL;
156 }
157 t = PySequence_Tuple(alist);
158 if (t == NULL)
159 return NULL;
160 alist = t;
161 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000162 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000163 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000164 PyErr_Format(PyExc_TypeError,
165 "apply() arg 3 expected dictionary, found %s",
166 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000167 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000168 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000169 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
170 finally:
171 Py_XDECREF(t);
172 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000173}
174
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000175PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000176"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000177\n\
Fred Drake7b912121999-12-23 14:16:55 +0000178Call a callable object with positional arguments taken from the tuple args,\n\
179and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000180Note that classes are callable, as are instances with a __call__() method.\n\
181\n\
182Deprecated since release 2.3. Instead, use the extended call syntax:\n\
183 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000184
185
Guido van Rossum79f25d91997-04-29 20:08:16 +0000186static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000187builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000188{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000189 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000190}
191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000192PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000193"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000194\n\
195Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000196Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000197
198
Guido van Rossum79f25d91997-04-29 20:08:16 +0000199static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000200builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000201{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000202 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000203 Py_ssize_t len; /* guess for result list size */
204 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000205
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000206 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000208
Tim Peters0e57abf2001-05-02 07:39:38 +0000209 /* Strings and tuples return a result of the same type. */
210 if (PyString_Check(seq))
211 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000212#ifdef Py_USING_UNICODE
213 if (PyUnicode_Check(seq))
214 return filterunicode(func, seq);
215#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 if (PyTuple_Check(seq))
217 return filtertuple(func, seq);
218
Georg Brandle35b6572005-07-19 22:20:20 +0000219 /* Pre-allocate argument list tuple. */
220 arg = PyTuple_New(1);
221 if (arg == NULL)
222 return NULL;
223
Tim Peters0e57abf2001-05-02 07:39:38 +0000224 /* Get iterator. */
225 it = PyObject_GetIter(seq);
226 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000227 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000228
229 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000230 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000231 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000232 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
233 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
234 goto Fail_it;
235 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000236 PyErr_Clear();
237 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000238 }
239
Tim Peters0e57abf2001-05-02 07:39:38 +0000240 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000241 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000242 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000243 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000244 result = seq;
245 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000246 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000247 result = PyList_New(len);
248 if (result == NULL)
249 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000250 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000251
Tim Peters0e57abf2001-05-02 07:39:38 +0000252 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000253 j = 0;
254 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000255 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000256 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000257
Tim Peters0e57abf2001-05-02 07:39:38 +0000258 item = PyIter_Next(it);
259 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000260 if (PyErr_Occurred())
261 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000262 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000263 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000264
Neil Schemenauer68973552003-08-14 20:37:34 +0000265 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000266 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000267 }
268 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000269 PyObject *good;
270 PyTuple_SET_ITEM(arg, 0, item);
271 good = PyObject_Call(func, arg, NULL);
272 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000273 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000274 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000275 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000276 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000277 ok = PyObject_IsTrue(good);
278 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000279 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000280 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000281 if (j < len)
282 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000283 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000284 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000285 Py_DECREF(item);
286 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000287 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000288 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000289 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000291 else
292 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000293 }
294
Guido van Rossum12d12c51993-10-26 17:58:25 +0000295
Tim Peters0e57abf2001-05-02 07:39:38 +0000296 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000297 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000298 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000299
Tim Peters3c6b1482001-05-21 08:07:05 +0000300 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000301 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000302 return result;
303
Tim Peters0e57abf2001-05-02 07:39:38 +0000304Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000305 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000306Fail_it:
307 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000308Fail_arg:
309 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000310 return NULL;
311}
312
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000313PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000314"filter(function or None, sequence) -> list, tuple, or string\n"
315"\n"
316"Return those items of sequence for which function(item) is true. If\n"
317"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000318"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000319
Guido van Rossum79f25d91997-04-29 20:08:16 +0000320static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000321builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000322{
323 long x;
324 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000325
Guido van Rossum79f25d91997-04-29 20:08:16 +0000326 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000327 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000328 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000329 PyErr_SetString(PyExc_ValueError,
330 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000331 return NULL;
332 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000333 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000335}
336
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000337PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000338"chr(i) -> character\n\
339\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000340Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000341
342
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000343#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000344static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000345builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000346{
347 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000348
349 if (!PyArg_ParseTuple(args, "l:unichr", &x))
350 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000351
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000352 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000353}
354
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000355PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000356"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000357\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000358Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000359#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000360
361
362static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000363builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000364{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000365 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000366 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000367
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000368 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000369 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000370 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000371 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000372 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000373}
374
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000375PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000376"cmp(x, y) -> integer\n\
377\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000378Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000379
380
Guido van Rossum79f25d91997-04-29 20:08:16 +0000381static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000382builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000383{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 PyObject *v, *w;
385 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000386
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000387 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000388 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000389 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000390 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000391 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000392 Py_DECREF(v);
393 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000394 return res;
395}
396
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000397PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000398"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000399\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000400Return a tuple consisting of the two numeric arguments converted to\n\
401a common type, using the same rules as used by arithmetic operations.\n\
402If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000403
Guido van Rossum79f25d91997-04-29 20:08:16 +0000404static PyObject *
Georg Brandl5240d742007-03-13 20:46:32 +0000405builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000406{
407 char *str;
408 char *filename;
409 char *startstr;
410 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000411 int dont_inherit = 0;
412 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000413 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000414 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000415 Py_ssize_t length;
Georg Brandl5240d742007-03-13 20:46:32 +0000416 static char *kwlist[] = {"source", "filename", "mode", "flags",
417 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000418
Georg Brandl5240d742007-03-13 20:46:32 +0000419 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
420 kwlist, &cmd, &filename, &startstr,
421 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000422 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000423
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000424 cf.cf_flags = supplied_flags;
425
426#ifdef Py_USING_UNICODE
427 if (PyUnicode_Check(cmd)) {
428 tmp = PyUnicode_AsUTF8String(cmd);
429 if (tmp == NULL)
430 return NULL;
431 cmd = tmp;
432 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
433 }
434#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000435 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
436 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000437 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000438 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000439 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000440 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000441 }
442
Guido van Rossum5b722181993-03-30 17:46:03 +0000443 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000444 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000445 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000446 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000447 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000448 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000449 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000450 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000451 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000452 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000453 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000454
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000455 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000456 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000457 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000458 PyErr_SetString(PyExc_ValueError,
459 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000460 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000461 }
462 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
463
Tim Peters6cd6a822001-08-17 22:11:27 +0000464 if (!dont_inherit) {
465 PyEval_MergeCompilerFlags(&cf);
466 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000467 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000468cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000469 Py_XDECREF(tmp);
470 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000471}
472
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000473PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000474"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000475\n\
476Compile the source string (a Python module, statement or expression)\n\
477into a code object that can be executed by the exec statement or eval().\n\
478The filename will be used for run-time error messages.\n\
479The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000480single (interactive) statement, or 'eval' to compile an expression.\n\
481The flags argument, if present, controls which future statements influence\n\
482the compilation of the code.\n\
483The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
484the effects of any future statements in effect in the code calling\n\
485compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000486in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000487
Guido van Rossum79f25d91997-04-29 20:08:16 +0000488static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000489builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000490{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000491 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000492
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000493 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000494 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000495 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000496}
497
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000498PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000499"dir([object]) -> list of strings\n"
500"\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000501"If called without an argument, return the names in the current scope.\n"
502"Else, return an alphabetized list of names comprising (some of) the attributes\n"
503"of the given object, and of attributes reachable from it.\n"
504"If the object supplies a method named __dir__, it will be used; otherwise\n"
505"the default dir() logic is used and returns:\n"
506" for a module object: the module's attributes.\n"
507" for a class object: its attributes, and recursively the attributes\n"
508" of its bases.\n"
Georg Brandl3bb15672007-03-13 07:23:16 +0000509" for any other object: its attributes, its class's attributes, and\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000510" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000511
Guido van Rossum79f25d91997-04-29 20:08:16 +0000512static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000513builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000514{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000515 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000516
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000517 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000518 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000519 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000520}
521
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000522PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000523"divmod(x, y) -> (div, mod)\n\
524\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000525Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000526
527
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000529builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000530{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000531 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000534 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000535
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000536 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000537 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000538 if (locals != Py_None && !PyMapping_Check(locals)) {
539 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000540 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000541 }
542 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000543 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000544 "globals must be a real dict; try eval(expr, {}, mapping)"
545 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000546 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000547 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000548 if (globals == Py_None) {
549 globals = PyEval_GetGlobals();
550 if (locals == Py_None)
551 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000552 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000553 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000554 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000555
Georg Brandl77c85e62005-09-15 10:46:13 +0000556 if (globals == NULL || locals == NULL) {
557 PyErr_SetString(PyExc_TypeError,
558 "eval must be given globals and locals "
559 "when called without a frame");
560 return NULL;
561 }
562
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
564 if (PyDict_SetItemString(globals, "__builtins__",
565 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000566 return NULL;
567 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000568
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000569 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000570 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000571 PyErr_SetString(PyExc_TypeError,
572 "code object passed to eval() may not contain free variables");
573 return NULL;
574 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000575 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000576 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000577
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000578 if (!PyString_Check(cmd) &&
579 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000580 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000581 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000582 return NULL;
583 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000584 cf.cf_flags = 0;
585
586#ifdef Py_USING_UNICODE
587 if (PyUnicode_Check(cmd)) {
588 tmp = PyUnicode_AsUTF8String(cmd);
589 if (tmp == NULL)
590 return NULL;
591 cmd = tmp;
592 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
593 }
594#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000595 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
596 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000597 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000598 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000599 while (*str == ' ' || *str == '\t')
600 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000601
Tim Peters9fa96be2001-08-17 23:04:59 +0000602 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000603 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
604 Py_XDECREF(tmp);
605 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000606}
607
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000608PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000609"eval(source[, globals[, locals]]) -> value\n\
610\n\
611Evaluate the source in the context of globals and locals.\n\
612The source may be a string representing a Python expression\n\
613or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000614The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000615defaulting to the current globals and locals.\n\
616If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000617
618
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000620builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000621{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000623 PyObject *globals = Py_None, *locals = Py_None;
624 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000625 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000626 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000627 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000628
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000629 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000632 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000633 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000634 if (locals != Py_None && !PyMapping_Check(locals)) {
635 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
636 return NULL;
637 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000638 if (globals == Py_None) {
639 globals = PyEval_GetGlobals();
640 if (locals == Py_None)
641 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000642 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000644 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000645 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
646 if (PyDict_SetItemString(globals, "__builtins__",
647 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000648 return NULL;
649 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000650
651 exists = 0;
652 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000653#if defined(PLAN9)
654 {
655 Dir *d;
656
657 if ((d = dirstat(filename))!=nil) {
658 if(d->mode & DMDIR)
659 werrstr("is a directory");
660 else
661 exists = 1;
662 free(d);
663 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000664 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000665#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000666 if (object_exists(filename)) {
667 if (isdir(filename))
668 errno = EISDIR;
669 else
670 exists = 1;
671 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000672#else /* standard Posix */
673 {
674 struct stat s;
675 if (stat(filename, &s) == 0) {
676 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000677# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000678 errno = EOS2ERR;
679# else
680 errno = EISDIR;
681# endif
682 else
683 exists = 1;
684 }
685 }
686#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000687
688 if (exists) {
689 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000690 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000691 Py_END_ALLOW_THREADS
692
693 if (fp == NULL) {
694 exists = 0;
695 }
696 }
697
698 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000699 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000700 return NULL;
701 }
Tim Peters5ba58662001-07-16 02:29:45 +0000702 cf.cf_flags = 0;
703 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000704 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000705 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000706 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000707 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000708 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000710}
711
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000712PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000713"execfile(filename[, globals[, locals]])\n\
714\n\
715Read and execute a Python script from a file.\n\
716The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000718
719
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000721builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000722{
Guido van Rossum950ff291998-06-29 13:38:57 +0000723 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000724 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000725
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000726 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000727 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000728#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000729 if (PyUnicode_Check(name)) {
730 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
731 if (name == NULL)
732 return NULL;
733 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000734#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000735
736 if (!PyString_Check(name)) {
737 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000738 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000739 return NULL;
740 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000741 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000742 if (result == NULL && dflt != NULL &&
743 PyErr_ExceptionMatches(PyExc_AttributeError))
744 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000745 PyErr_Clear();
746 Py_INCREF(dflt);
747 result = dflt;
748 }
749 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000750}
751
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000752PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000753"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000754\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000755Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
756When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000757exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000758
759
Guido van Rossum79f25d91997-04-29 20:08:16 +0000760static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000761builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000762{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000764
Guido van Rossum79f25d91997-04-29 20:08:16 +0000765 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000766 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000767 return d;
768}
769
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000770PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000771"globals() -> dictionary\n\
772\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000773Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000774
775
Guido van Rossum79f25d91997-04-29 20:08:16 +0000776static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000777builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000778{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779 PyObject *v;
780 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000782 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000783 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000784#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000785 if (PyUnicode_Check(name)) {
786 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
787 if (name == NULL)
788 return NULL;
789 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000790#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000791
792 if (!PyString_Check(name)) {
793 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000794 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000795 return NULL;
796 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000798 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000800 Py_INCREF(Py_False);
801 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000802 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000804 Py_INCREF(Py_True);
805 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000806}
807
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000808PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000809"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000810\n\
811Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000812(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000813
814
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000816builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000817{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000818 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000819}
820
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000821PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000822"id(object) -> integer\n\
823\n\
824Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000825simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000826
827
Guido van Rossum79f25d91997-04-29 20:08:16 +0000828static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000829builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000830{
831 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000832 PyObject *it; /* the iterator object */
833 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000834 } sequence;
835
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000837 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000838 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000839 register int i, j;
840
Guido van Rossum79f25d91997-04-29 20:08:16 +0000841 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000842 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843 PyErr_SetString(PyExc_TypeError,
844 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000845 return NULL;
846 }
847
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000849 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000850
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000851 if (func == Py_None && n == 1) {
852 /* map(None, S) is the same as list(S). */
853 return PySequence_List(PyTuple_GetItem(args, 1));
854 }
855
Tim Peters4e9afdc2001-05-03 23:54:49 +0000856 /* Get space for sequence descriptors. Must NULL out the iterator
857 * pointers so that jumping to Fail_2 later doesn't see trash.
858 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
860 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000861 return NULL;
862 }
863 for (i = 0; i < n; ++i) {
864 seqs[i].it = (PyObject*)NULL;
865 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000866 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000867
Tim Peters4e9afdc2001-05-03 23:54:49 +0000868 /* Do a first pass to obtain iterators for the arguments, and set len
869 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000870 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000871 len = 0;
872 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
873 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000874 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000875
Tim Peters4e9afdc2001-05-03 23:54:49 +0000876 /* Get iterator. */
877 curseq = PyTuple_GetItem(args, i+1);
878 sqp->it = PyObject_GetIter(curseq);
879 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000880 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000881 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000882 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000883 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000885 goto Fail_2;
886 }
887
Tim Peters4e9afdc2001-05-03 23:54:49 +0000888 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000889 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000890 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000891 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
892 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
893 goto Fail_2;
894 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000895 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000896 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000897 }
898 if (curlen > len)
899 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000900 }
901
Tim Peters4e9afdc2001-05-03 23:54:49 +0000902 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000904 goto Fail_2;
905
Tim Peters4e9afdc2001-05-03 23:54:49 +0000906 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000907 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000908 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000909 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000910
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000912 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000913 else if ((alist = PyTuple_New(n)) == NULL)
914 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000915
916 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000917 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918 Py_INCREF(Py_None);
919 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000920 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000921 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000922 item = PyIter_Next(sqp->it);
923 if (item)
924 ++numactive;
925 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000926 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000927 Py_XDECREF(alist);
928 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000929 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000930 Py_INCREF(Py_None);
931 item = Py_None;
932 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000933 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000934 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000935 if (alist)
936 PyTuple_SET_ITEM(alist, j, item);
937 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000938 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000939 }
940
Guido van Rossum32120311995-07-10 13:52:21 +0000941 if (!alist)
942 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000943
Tim Peters4e9afdc2001-05-03 23:54:49 +0000944 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000946 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000947 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000948
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000950 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000951 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 value = PyEval_CallObject(func, alist);
953 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000954 if (value == NULL)
955 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000956 }
957 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000958 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000959 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000960 if (status < 0)
961 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000962 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000963 else if (PyList_SetItem(result, i, value) < 0)
964 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000965 }
966
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000967 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
968 goto Fail_1;
969
Tim Peters4e9afdc2001-05-03 23:54:49 +0000970 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000971
Guido van Rossum12d12c51993-10-26 17:58:25 +0000972Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000974Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000975 result = NULL;
976Succeed:
977 assert(seqs);
978 for (i = 0; i < n; ++i)
979 Py_XDECREF(seqs[i].it);
980 PyMem_DEL(seqs);
981 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000982}
983
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000984PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000985"map(function, sequence[, sequence, ...]) -> list\n\
986\n\
987Return a list of the results of applying the function to the items of\n\
988the argument sequence(s). If more than one sequence is given, the\n\
989function is called with an argument list consisting of the corresponding\n\
990item of each sequence, substituting None for missing values when not all\n\
991sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000992the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000993
994
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000996builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000997{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 PyObject *v;
999 PyObject *name;
1000 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001001
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001002 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001003 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001005 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 Py_INCREF(Py_None);
1007 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001008}
1009
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001010PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011"setattr(object, name, value)\n\
1012\n\
1013Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001014``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001015
1016
Guido van Rossum79f25d91997-04-29 20:08:16 +00001017static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001018builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001019{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001020 PyObject *v;
1021 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001022
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001023 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001024 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001025 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001026 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001027 Py_INCREF(Py_None);
1028 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001029}
1030
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001031PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001032"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001033\n\
1034Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001035``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001036
1037
Guido van Rossum79f25d91997-04-29 20:08:16 +00001038static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001039builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001040{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001041 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001042
Guido van Rossum79f25d91997-04-29 20:08:16 +00001043 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001044 if (x == -1)
1045 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001046 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001047}
1048
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001049PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001050"hash(object) -> integer\n\
1051\n\
1052Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001053the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001054
1055
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001057builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001058{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001059 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001060 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001062 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001063 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001065 "hex() argument can't be converted to hex");
1066 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001067 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001068 res = (*nb->nb_hex)(v);
1069 if (res && !PyString_Check(res)) {
1070 PyErr_Format(PyExc_TypeError,
1071 "__hex__ returned non-string (type %.200s)",
1072 res->ob_type->tp_name);
1073 Py_DECREF(res);
1074 return NULL;
1075 }
1076 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001077}
1078
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001079PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001080"hex(number) -> string\n\
1081\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001082Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001083
1084
Tim Petersdbd9ba62000-07-09 03:09:57 +00001085static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001086
Guido van Rossum79f25d91997-04-29 20:08:16 +00001087static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001088builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001089{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001090 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001091 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092 PyObject *res;
1093 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001094 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095
1096 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001097 if (line == NULL)
1098 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100 return NULL;
1101 while (*str == ' ' || *str == '\t')
1102 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 globals = PyEval_GetGlobals();
1104 locals = PyEval_GetLocals();
1105 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1106 if (PyDict_SetItemString(globals, "__builtins__",
1107 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001108 return NULL;
1109 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001110 cf.cf_flags = 0;
1111 PyEval_MergeCompilerFlags(&cf);
1112 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001113 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001114 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001115}
1116
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001117PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001118"input([prompt]) -> value\n\
1119\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001120Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001121
1122
Guido van Rossume8811f81997-02-14 15:48:05 +00001123static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001124builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001125{
1126 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001127 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001128 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001129 if (!PyString_CheckExact(s)) {
1130 PyErr_SetString(PyExc_TypeError,
1131 "can't intern subclass of string");
1132 return NULL;
1133 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001134 Py_INCREF(s);
1135 PyString_InternInPlace(&s);
1136 return s;
1137}
1138
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001140"intern(string) -> string\n\
1141\n\
1142``Intern'' the given string. This enters the string in the (global)\n\
1143table of interned strings whose purpose is to speed up dictionary lookups.\n\
1144Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001145same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001146
1147
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001149builtin_iter(PyObject *self, PyObject *args)
1150{
1151 PyObject *v, *w = NULL;
1152
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001153 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001154 return NULL;
1155 if (w == NULL)
1156 return PyObject_GetIter(v);
1157 if (!PyCallable_Check(v)) {
1158 PyErr_SetString(PyExc_TypeError,
1159 "iter(v, w): v must be callable");
1160 return NULL;
1161 }
1162 return PyCallIter_New(v, w);
1163}
1164
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001165PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001166"iter(collection) -> iterator\n\
1167iter(callable, sentinel) -> iterator\n\
1168\n\
1169Get an iterator from an object. In the first form, the argument must\n\
1170supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001171In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001172
1173
1174static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001175builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001176{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001177 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001178
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001179 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001180 if (res < 0 && PyErr_Occurred())
1181 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001182 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001183}
1184
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001185PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186"len(object) -> integer\n\
1187\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001188Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001189
1190
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001192builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001193{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001194 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001195
Guido van Rossum79f25d91997-04-29 20:08:16 +00001196 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001197 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001198 return d;
1199}
1200
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001201PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001202"locals() -> dictionary\n\
1203\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001204Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001205
1206
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001208min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001209{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001210 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001211 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001212
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001214 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001215 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001216 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001217
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001218 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1219 keyfunc = PyDict_GetItemString(kwds, "key");
1220 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001221 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001222 "%s() got an unexpected keyword argument", name);
1223 return NULL;
1224 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001225 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001226
Tim Petersc3074532001-05-03 07:00:32 +00001227 it = PyObject_GetIter(v);
1228 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001229 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001230
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001231 maxitem = NULL; /* the result */
1232 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001233 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001234 /* get the value from the key function */
1235 if (keyfunc != NULL) {
1236 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1237 if (val == NULL)
1238 goto Fail_it_item;
1239 }
1240 /* no key function; the value is the item */
1241 else {
1242 val = item;
1243 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001244 }
Tim Petersc3074532001-05-03 07:00:32 +00001245
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001246 /* maximum value and item are unset; set them */
1247 if (maxval == NULL) {
1248 maxitem = item;
1249 maxval = val;
1250 }
1251 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001252 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001253 int cmp = PyObject_RichCompareBool(val, maxval, op);
1254 if (cmp < 0)
1255 goto Fail_it_item_and_val;
1256 else if (cmp > 0) {
1257 Py_DECREF(maxval);
1258 Py_DECREF(maxitem);
1259 maxval = val;
1260 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001261 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001262 else {
1263 Py_DECREF(item);
1264 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001265 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001266 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001267 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001268 if (PyErr_Occurred())
1269 goto Fail_it;
1270 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001271 PyErr_Format(PyExc_ValueError,
1272 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001273 assert(maxitem == NULL);
1274 }
1275 else
1276 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001277 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001278 return maxitem;
1279
1280Fail_it_item_and_val:
1281 Py_DECREF(val);
1282Fail_it_item:
1283 Py_DECREF(item);
1284Fail_it:
1285 Py_XDECREF(maxval);
1286 Py_XDECREF(maxitem);
1287 Py_DECREF(it);
1288 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001289}
1290
Guido van Rossum79f25d91997-04-29 20:08:16 +00001291static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001292builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001293{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001294 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295}
1296
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001297PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001298"min(iterable[, key=func]) -> value\n\
1299min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001300\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001301With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001302With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001303
1304
Guido van Rossum79f25d91997-04-29 20:08:16 +00001305static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001307{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001309}
1310
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001311PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001312"max(iterable[, key=func]) -> value\n\
1313max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001314\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001315With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001316With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001317
1318
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001320builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001321{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001322 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001323 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001324
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001325 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1326 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001327 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001328 "oct() argument can't be converted to oct");
1329 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001330 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001331 res = (*nb->nb_oct)(v);
1332 if (res && !PyString_Check(res)) {
1333 PyErr_Format(PyExc_TypeError,
1334 "__oct__ returned non-string (type %.200s)",
1335 res->ob_type->tp_name);
1336 Py_DECREF(res);
1337 return NULL;
1338 }
1339 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001340}
1341
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001342PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001343"oct(number) -> string\n\
1344\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001345Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001346
1347
Guido van Rossum79f25d91997-04-29 20:08:16 +00001348static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001349builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1350{
1351 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1352}
1353
1354PyDoc_STRVAR(open_doc,
1355"open(name[, mode[, buffering]]) -> file object\n\
1356\n\
1357Open a file using the file() type, returns a file object.");
1358
1359
1360static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001361builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001362{
Guido van Rossum09095f32000-03-10 23:00:52 +00001363 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001364 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001365
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001366 if (PyString_Check(obj)) {
1367 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001368 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001369 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001370 return PyInt_FromLong(ord);
1371 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001372#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001373 } else if (PyUnicode_Check(obj)) {
1374 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001375 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001376 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001377 return PyInt_FromLong(ord);
1378 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001379#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001380 } else {
1381 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001382 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001383 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001384 return NULL;
1385 }
1386
Guido van Rossumad991772001-01-12 16:03:05 +00001387 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001388 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001389 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001390 size);
1391 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001392}
1393
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001394PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001395"ord(c) -> integer\n\
1396\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001397Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001398
1399
Guido van Rossum79f25d91997-04-29 20:08:16 +00001400static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001401builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001402{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001403 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001404
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001405 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001406 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001407 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001408}
1409
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001410PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001411"pow(x, y[, z]) -> number\n\
1412\n\
1413With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001414equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001415
1416
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001417
1418/* Return number of items in range (lo, hi, step), when arguments are
1419 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1420 * & only if the true value is too large to fit in a signed long.
1421 * Arguments MUST return 1 with either PyInt_Check() or
1422 * PyLong_Check(). Return -1 when there is an error.
1423 */
1424static long
1425get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1426{
1427 /* -------------------------------------------------------------
1428 Algorithm is equal to that of get_len_of_range(), but it operates
1429 on PyObjects (which are assumed to be PyLong or PyInt objects).
1430 ---------------------------------------------------------------*/
1431 long n;
1432 PyObject *diff = NULL;
1433 PyObject *one = NULL;
1434 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1435 /* holds sub-expression evaluations */
1436
1437 /* if (lo >= hi), return length of 0. */
1438 if (PyObject_Compare(lo, hi) >= 0)
1439 return 0;
1440
1441 if ((one = PyLong_FromLong(1L)) == NULL)
1442 goto Fail;
1443
1444 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1445 goto Fail;
1446
1447 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1448 goto Fail;
1449
1450 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1451 goto Fail;
1452
1453 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1454 goto Fail;
1455
1456 n = PyLong_AsLong(tmp3);
1457 if (PyErr_Occurred()) { /* Check for Overflow */
1458 PyErr_Clear();
1459 goto Fail;
1460 }
1461
1462 Py_DECREF(tmp3);
1463 Py_DECREF(tmp2);
1464 Py_DECREF(diff);
1465 Py_DECREF(tmp1);
1466 Py_DECREF(one);
1467 return n;
1468
1469 Fail:
1470 Py_XDECREF(tmp3);
1471 Py_XDECREF(tmp2);
1472 Py_XDECREF(diff);
1473 Py_XDECREF(tmp1);
1474 Py_XDECREF(one);
1475 return -1;
1476}
1477
1478/* An extension of builtin_range() that handles the case when PyLong
1479 * arguments are given. */
1480static PyObject *
1481handle_range_longs(PyObject *self, PyObject *args)
1482{
1483 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001484 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001485 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001486
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001487 PyObject *curnum = NULL;
1488 PyObject *v = NULL;
1489 long bign;
1490 int i, n;
1491 int cmp_result;
1492
Tim Peters874e1f72003-04-13 22:13:08 +00001493 PyObject *zero = PyLong_FromLong(0);
1494
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001495 if (zero == NULL)
1496 return NULL;
1497
Tim Peters874e1f72003-04-13 22:13:08 +00001498 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1499 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001500 return NULL;
1501 }
1502
Tim Peters874e1f72003-04-13 22:13:08 +00001503 /* Figure out which way we were called, supply defaults, and be
1504 * sure to incref everything so that the decrefs at the end
1505 * are correct.
1506 */
1507 assert(ilow != NULL);
1508 if (ihigh == NULL) {
1509 /* only 1 arg -- it's the upper limit */
1510 ihigh = ilow;
1511 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001512 }
Tim Peters874e1f72003-04-13 22:13:08 +00001513 assert(ihigh != NULL);
1514 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001515
Tim Peters874e1f72003-04-13 22:13:08 +00001516 /* ihigh correct now; do ilow */
1517 if (ilow == NULL)
1518 ilow = zero;
1519 Py_INCREF(ilow);
1520
1521 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001522 if (istep == NULL) {
1523 istep = PyLong_FromLong(1L);
1524 if (istep == NULL)
1525 goto Fail;
1526 }
1527 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001528 Py_INCREF(istep);
1529 }
1530
Tim Peters874e1f72003-04-13 22:13:08 +00001531 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001532 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001533 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001534 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001535 goto Fail;
1536 }
1537
Tim Peters874e1f72003-04-13 22:13:08 +00001538 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001539 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001540 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001541 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001542 goto Fail;
1543 }
1544
1545 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001546 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001547 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001548 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001549 goto Fail;
1550 }
1551
1552 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1553 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001554 if (cmp_result == 0) {
1555 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001556 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001557 goto Fail;
1558 }
1559
1560 if (cmp_result > 0)
1561 bign = get_len_of_range_longs(ilow, ihigh, istep);
1562 else {
1563 PyObject *neg_istep = PyNumber_Negative(istep);
1564 if (neg_istep == NULL)
1565 goto Fail;
1566 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1567 Py_DECREF(neg_istep);
1568 }
1569
1570 n = (int)bign;
1571 if (bign < 0 || (long)n != bign) {
1572 PyErr_SetString(PyExc_OverflowError,
1573 "range() result has too many items");
1574 goto Fail;
1575 }
1576
1577 v = PyList_New(n);
1578 if (v == NULL)
1579 goto Fail;
1580
1581 curnum = ilow;
1582 Py_INCREF(curnum);
1583
1584 for (i = 0; i < n; i++) {
1585 PyObject *w = PyNumber_Long(curnum);
1586 PyObject *tmp_num;
1587 if (w == NULL)
1588 goto Fail;
1589
1590 PyList_SET_ITEM(v, i, w);
1591
1592 tmp_num = PyNumber_Add(curnum, istep);
1593 if (tmp_num == NULL)
1594 goto Fail;
1595
1596 Py_DECREF(curnum);
1597 curnum = tmp_num;
1598 }
Tim Peters874e1f72003-04-13 22:13:08 +00001599 Py_DECREF(ilow);
1600 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001601 Py_DECREF(istep);
1602 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001603 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001604 return v;
1605
1606 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001607 Py_DECREF(ilow);
1608 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001609 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001610 Py_DECREF(zero);
1611 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001612 Py_XDECREF(v);
1613 return NULL;
1614}
1615
Guido van Rossum124eff01999-02-23 16:11:01 +00001616/* Return number of items in range/xrange (lo, hi, step). step > 0
1617 * required. Return a value < 0 if & only if the true value is too
1618 * large to fit in a signed long.
1619 */
1620static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001621get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001622{
1623 /* -------------------------------------------------------------
1624 If lo >= hi, the range is empty.
1625 Else if n values are in the range, the last one is
1626 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1627 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1628 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1629 the RHS is non-negative and so truncation is the same as the
1630 floor. Letting M be the largest positive long, the worst case
1631 for the RHS numerator is hi=M, lo=-M-1, and then
1632 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1633 precision to compute the RHS exactly.
1634 ---------------------------------------------------------------*/
1635 long n = 0;
1636 if (lo < hi) {
1637 unsigned long uhi = (unsigned long)hi;
1638 unsigned long ulo = (unsigned long)lo;
1639 unsigned long diff = uhi - ulo - 1;
1640 n = (long)(diff / (unsigned long)step + 1);
1641 }
1642 return n;
1643}
1644
Guido van Rossum79f25d91997-04-29 20:08:16 +00001645static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001646builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001647{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001648 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001649 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001650 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001651
Guido van Rossum79f25d91997-04-29 20:08:16 +00001652 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001653
Guido van Rossum79f25d91997-04-29 20:08:16 +00001654 if (PyTuple_Size(args) <= 1) {
1655 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001656 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001657 &ihigh)) {
1658 PyErr_Clear();
1659 return handle_range_longs(self, args);
1660 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001661 }
1662 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001663 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001664 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001665 &ilow, &ihigh, &istep)) {
1666 PyErr_Clear();
1667 return handle_range_longs(self, args);
1668 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001669 }
1670 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001671 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001672 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001673 return NULL;
1674 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001675 if (istep > 0)
1676 bign = get_len_of_range(ilow, ihigh, istep);
1677 else
1678 bign = get_len_of_range(ihigh, ilow, -istep);
1679 n = (int)bign;
1680 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001681 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001682 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001683 return NULL;
1684 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686 if (v == NULL)
1687 return NULL;
1688 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001690 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001691 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001692 return NULL;
1693 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001694 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001695 ilow += istep;
1696 }
1697 return v;
1698}
1699
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001700PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001701"range([start,] stop[, step]) -> list of integers\n\
1702\n\
1703Return a list containing an arithmetic progression of integers.\n\
1704range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1705When step is given, it specifies the increment (or decrement).\n\
1706For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001707These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001708
1709
Guido van Rossum79f25d91997-04-29 20:08:16 +00001710static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001711builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001712{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001714 PyObject *fin = PySys_GetObject("stdin");
1715 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001716
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001717 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001718 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001719
1720 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001721 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001722 return NULL;
1723 }
1724 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001725 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001726 return NULL;
1727 }
1728 if (PyFile_SoftSpace(fout, 0)) {
1729 if (PyFile_WriteString(" ", fout) != 0)
1730 return NULL;
1731 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001732 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001733 && isatty(fileno(PyFile_AsFile(fin)))
1734 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001735 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001736 char *prompt;
1737 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001738 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001739 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001740 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001741 if (po == NULL)
1742 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001743 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001744 if (prompt == NULL)
1745 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001746 }
1747 else {
1748 po = NULL;
1749 prompt = "";
1750 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001751 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001752 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001753 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001754 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001755 if (!PyErr_Occurred())
1756 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001757 return NULL;
1758 }
1759 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001760 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001761 result = NULL;
1762 }
1763 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001764 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00001765 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001766 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001767 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001768 result = NULL;
1769 }
1770 else {
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00001771 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00001772 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001773 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001774 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001775 return result;
1776 }
Guido van Rossum90933611991-06-07 16:10:43 +00001777 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001778 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001779 return NULL;
1780 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001781 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001782}
1783
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001784PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001785"raw_input([prompt]) -> string\n\
1786\n\
1787Read a string from standard input. The trailing newline is stripped.\n\
1788If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1789On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001790is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001791
1792
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001794builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001795{
Tim Peters15d81ef2001-05-04 04:39:21 +00001796 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001797
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001798 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001799 return NULL;
1800 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001802
Tim Peters15d81ef2001-05-04 04:39:21 +00001803 it = PyObject_GetIter(seq);
1804 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001806 "reduce() arg 2 must support iteration");
1807 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001808 return NULL;
1809 }
1810
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001812 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001813
Tim Peters15d81ef2001-05-04 04:39:21 +00001814 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001816
1817 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 Py_DECREF(args);
1819 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001820 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001821 }
1822
Tim Peters15d81ef2001-05-04 04:39:21 +00001823 op2 = PyIter_Next(it);
1824 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001825 if (PyErr_Occurred())
1826 goto Fail;
1827 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001828 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001829
Guido van Rossum2d951851994-08-29 12:52:16 +00001830 if (result == NULL)
1831 result = op2;
1832 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 PyTuple_SetItem(args, 0, result);
1834 PyTuple_SetItem(args, 1, op2);
1835 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001836 goto Fail;
1837 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001838 }
1839
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001841
Guido van Rossum2d951851994-08-29 12:52:16 +00001842 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001843 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001844 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001845
Tim Peters15d81ef2001-05-04 04:39:21 +00001846 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001847 return result;
1848
Guido van Rossum2d951851994-08-29 12:52:16 +00001849Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001850 Py_XDECREF(args);
1851 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001852 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001853 return NULL;
1854}
1855
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001856PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001857"reduce(function, sequence[, initial]) -> value\n\
1858\n\
1859Apply a function of two arguments cumulatively to the items of a sequence,\n\
1860from left to right, so as to reduce the sequence to a single value.\n\
1861For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1862((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1863of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001864sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001865
1866
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001868builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001869{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001871}
1872
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001873PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001874"reload(module) -> module\n\
1875\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001876Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001877
1878
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001880builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001881{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001882 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001883}
1884
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001885PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001886"repr(object) -> string\n\
1887\n\
1888Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001889For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001890
1891
Guido van Rossum79f25d91997-04-29 20:08:16 +00001892static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00001893builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001894{
Georg Brandlccadf842006-03-31 18:54:53 +00001895 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001896 double f;
1897 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001898 int i;
Georg Brandlccadf842006-03-31 18:54:53 +00001899 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001900
Georg Brandlccadf842006-03-31 18:54:53 +00001901 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1902 kwlist, &number, &ndigits))
1903 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001904 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001905 i = abs(ndigits);
1906 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001907 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001908 if (ndigits < 0)
Georg Brandlccadf842006-03-31 18:54:53 +00001909 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001910 else
Georg Brandlccadf842006-03-31 18:54:53 +00001911 number *= f;
1912 if (number >= 0.0)
1913 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001914 else
Georg Brandlccadf842006-03-31 18:54:53 +00001915 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001916 if (ndigits < 0)
Georg Brandlccadf842006-03-31 18:54:53 +00001917 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001918 else
Georg Brandlccadf842006-03-31 18:54:53 +00001919 number /= f;
1920 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001921}
1922
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001923PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001924"round(number[, ndigits]) -> floating point number\n\
1925\n\
1926Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001927This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001928
Raymond Hettinger64958a12003-12-17 20:43:33 +00001929static PyObject *
1930builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1931{
1932 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1933 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001934 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001935 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001936
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001937 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001938 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1939 kwlist, &seq, &compare, &keyfunc, &reverse))
1940 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001941
1942 newlist = PySequence_List(seq);
1943 if (newlist == NULL)
1944 return NULL;
1945
1946 callable = PyObject_GetAttrString(newlist, "sort");
1947 if (callable == NULL) {
1948 Py_DECREF(newlist);
1949 return NULL;
1950 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001951
Raymond Hettinger64958a12003-12-17 20:43:33 +00001952 newargs = PyTuple_GetSlice(args, 1, 4);
1953 if (newargs == NULL) {
1954 Py_DECREF(newlist);
1955 Py_DECREF(callable);
1956 return NULL;
1957 }
1958
1959 v = PyObject_Call(callable, newargs, kwds);
1960 Py_DECREF(newargs);
1961 Py_DECREF(callable);
1962 if (v == NULL) {
1963 Py_DECREF(newlist);
1964 return NULL;
1965 }
1966 Py_DECREF(v);
1967 return newlist;
1968}
1969
1970PyDoc_STRVAR(sorted_doc,
1971"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001972
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001974builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001975{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976 PyObject *v = NULL;
1977 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001978
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001979 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001980 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001981 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001983 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001984 if (!PyErr_Occurred())
1985 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001986 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001987 }
1988 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001989 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001990 }
1991 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001993 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001995 "vars() argument must have __dict__ attribute");
1996 return NULL;
1997 }
1998 }
1999 return d;
2000}
2001
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002002PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002003"vars([object]) -> dictionary\n\
2004\n\
2005Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002006With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002007
Alex Martellia70b1912003-04-22 08:12:33 +00002008
2009static PyObject*
2010builtin_sum(PyObject *self, PyObject *args)
2011{
2012 PyObject *seq;
2013 PyObject *result = NULL;
2014 PyObject *temp, *item, *iter;
2015
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002016 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002017 return NULL;
2018
2019 iter = PyObject_GetIter(seq);
2020 if (iter == NULL)
2021 return NULL;
2022
2023 if (result == NULL) {
2024 result = PyInt_FromLong(0);
2025 if (result == NULL) {
2026 Py_DECREF(iter);
2027 return NULL;
2028 }
2029 } else {
2030 /* reject string values for 'start' parameter */
2031 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2032 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002033 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002034 Py_DECREF(iter);
2035 return NULL;
2036 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002037 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002038 }
2039
2040 for(;;) {
2041 item = PyIter_Next(iter);
2042 if (item == NULL) {
2043 /* error, or end-of-sequence */
2044 if (PyErr_Occurred()) {
2045 Py_DECREF(result);
2046 result = NULL;
2047 }
2048 break;
2049 }
Alex Martellia253e182003-10-25 23:24:14 +00002050 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002051 Py_DECREF(result);
2052 Py_DECREF(item);
2053 result = temp;
2054 if (result == NULL)
2055 break;
2056 }
2057 Py_DECREF(iter);
2058 return result;
2059}
2060
2061PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002062"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002063\n\
2064Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002065of parameter 'start' (which defaults to 0). When the sequence is\n\
2066empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002067
2068
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002069static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002070builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002071{
2072 PyObject *inst;
2073 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002074 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002075
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002076 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002077 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002078
Guido van Rossum823649d2001-03-21 18:40:58 +00002079 retval = PyObject_IsInstance(inst, cls);
2080 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002081 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002082 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002083}
2084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002085PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002086"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002087\n\
2088Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002089With a type as second argument, return whether that is the object's type.\n\
2090The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002091isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002092
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002093
2094static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002095builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002096{
2097 PyObject *derived;
2098 PyObject *cls;
2099 int retval;
2100
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002101 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002102 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002103
Guido van Rossum823649d2001-03-21 18:40:58 +00002104 retval = PyObject_IsSubclass(derived, cls);
2105 if (retval < 0)
2106 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002107 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002108}
2109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002110PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002111"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002112\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002113Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2114When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2115is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002116
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002117
Barry Warsawbd599b52000-08-03 15:45:29 +00002118static PyObject*
2119builtin_zip(PyObject *self, PyObject *args)
2120{
2121 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002122 const Py_ssize_t itemsize = PySequence_Length(args);
2123 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002124 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002125 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002126
Raymond Hettingereaef6152003-08-02 07:42:57 +00002127 if (itemsize == 0)
2128 return PyList_New(0);
2129
Barry Warsawbd599b52000-08-03 15:45:29 +00002130 /* args must be a tuple */
2131 assert(PyTuple_Check(args));
2132
Tim Peters39a86c22002-05-12 07:19:38 +00002133 /* Guess at result length: the shortest of the input lengths.
2134 If some argument refuses to say, we refuse to guess too, lest
2135 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002136 len = -1; /* unknown */
2137 for (i = 0; i < itemsize; ++i) {
2138 PyObject *item = PyTuple_GET_ITEM(args, i);
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002139 Py_ssize_t thislen = _PyObject_LengthHint(item);
Tim Peters39a86c22002-05-12 07:19:38 +00002140 if (thislen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00002141 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
2142 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
2143 return NULL;
2144 }
Tim Peters67d687a2002-04-29 21:27:32 +00002145 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00002146 len = -1;
2147 break;
2148 }
Tim Peters67d687a2002-04-29 21:27:32 +00002149 else if (len < 0 || thislen < len)
2150 len = thislen;
2151 }
2152
Tim Peters8572b4f2001-05-06 01:05:02 +00002153 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002154 if (len < 0)
2155 len = 10; /* arbitrary */
2156 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002157 return NULL;
2158
Tim Peters8572b4f2001-05-06 01:05:02 +00002159 /* obtain iterators */
2160 itlist = PyTuple_New(itemsize);
2161 if (itlist == NULL)
2162 goto Fail_ret;
2163 for (i = 0; i < itemsize; ++i) {
2164 PyObject *item = PyTuple_GET_ITEM(args, i);
2165 PyObject *it = PyObject_GetIter(item);
2166 if (it == NULL) {
2167 if (PyErr_ExceptionMatches(PyExc_TypeError))
2168 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00002169 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00002170 i+1);
2171 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002172 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002173 PyTuple_SET_ITEM(itlist, i, it);
2174 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002175
Tim Peters8572b4f2001-05-06 01:05:02 +00002176 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002177 for (i = 0; ; ++i) {
2178 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002179 PyObject *next = PyTuple_New(itemsize);
2180 if (!next)
2181 goto Fail_ret_itlist;
2182
Tim Peters67d687a2002-04-29 21:27:32 +00002183 for (j = 0; j < itemsize; j++) {
2184 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002185 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002186 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002187 if (PyErr_Occurred()) {
2188 Py_DECREF(ret);
2189 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002190 }
2191 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002192 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002193 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002194 }
Tim Peters67d687a2002-04-29 21:27:32 +00002195 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002196 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002197
Tim Peters67d687a2002-04-29 21:27:32 +00002198 if (i < len)
2199 PyList_SET_ITEM(ret, i, next);
2200 else {
2201 int status = PyList_Append(ret, next);
2202 Py_DECREF(next);
2203 ++len;
2204 if (status < 0)
2205 goto Fail_ret_itlist;
2206 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002207 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002208
Tim Peters67d687a2002-04-29 21:27:32 +00002209Done:
2210 if (ret != NULL && i < len) {
2211 /* The list is too big. */
2212 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2213 return NULL;
2214 }
2215 return ret;
2216
Tim Peters8572b4f2001-05-06 01:05:02 +00002217Fail_ret_itlist:
2218 Py_DECREF(itlist);
2219Fail_ret:
2220 Py_DECREF(ret);
2221 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002222}
2223
2224
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002225PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002226"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2227\n\
2228Return a list of tuples, where each tuple contains the i-th element\n\
2229from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002230in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002231
2232
Guido van Rossum79f25d91997-04-29 20:08:16 +00002233static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002234 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002235 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002236 {"all", builtin_all, METH_O, all_doc},
2237 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002238 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002239 {"callable", builtin_callable, METH_O, callable_doc},
2240 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2241 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2242 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
Georg Brandl5240d742007-03-13 20:46:32 +00002243 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002244 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2245 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2246 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2247 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2248 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2249 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2250 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2251 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2252 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2253 {"hash", builtin_hash, METH_O, hash_doc},
2254 {"hex", builtin_hex, METH_O, hex_doc},
2255 {"id", builtin_id, METH_O, id_doc},
2256 {"input", builtin_input, METH_VARARGS, input_doc},
2257 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2258 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2259 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2260 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2261 {"len", builtin_len, METH_O, len_doc},
2262 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2263 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002264 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2265 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002266 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002267 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002268 {"ord", builtin_ord, METH_O, ord_doc},
2269 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2270 {"range", builtin_range, METH_VARARGS, range_doc},
2271 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2272 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2273 {"reload", builtin_reload, METH_O, reload_doc},
2274 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002275 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002276 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002277 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002278 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002279#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002280 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002281#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002282 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002283 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002284 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002285};
2286
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002287PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002288"Built-in functions, exceptions, and other objects.\n\
2289\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002290Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002291
Guido van Rossum25ce5661997-08-02 03:10:38 +00002292PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002293_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002294{
Fred Drake5550de32000-06-20 04:54:19 +00002295 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002296 mod = Py_InitModule4("__builtin__", builtin_methods,
2297 builtin_doc, (PyObject *)NULL,
2298 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002299 if (mod == NULL)
2300 return NULL;
2301 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002302
Tim Peters7571a0f2003-03-23 17:52:28 +00002303#ifdef Py_TRACE_REFS
2304 /* __builtin__ exposes a number of statically allocated objects
2305 * that, before this code was added in 2.3, never showed up in
2306 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2307 * result, programs leaking references to None and False (etc)
2308 * couldn't be diagnosed by examining sys.getobjects(0).
2309 */
2310#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2311#else
2312#define ADD_TO_ALL(OBJECT) (void)0
2313#endif
2314
Tim Peters4b7625e2001-09-13 21:37:17 +00002315#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002316 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2317 return NULL; \
2318 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002319
2320 SETBUILTIN("None", Py_None);
2321 SETBUILTIN("Ellipsis", Py_Ellipsis);
2322 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002323 SETBUILTIN("False", Py_False);
2324 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002325 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002326 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002327 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002328 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002329#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002330 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002331#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002332 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002333 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002334 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002335 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002336 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002337 SETBUILTIN("property", &PyProperty_Type);
2338 SETBUILTIN("int", &PyInt_Type);
2339 SETBUILTIN("list", &PyList_Type);
2340 SETBUILTIN("long", &PyLong_Type);
2341 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002342 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002343 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002344 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002345 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2346 SETBUILTIN("str", &PyString_Type);
2347 SETBUILTIN("super", &PySuper_Type);
2348 SETBUILTIN("tuple", &PyTuple_Type);
2349 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002350 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002351#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002352 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002353#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002354 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002355 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2356 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002357 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002358 }
2359 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002360
Guido van Rossum25ce5661997-08-02 03:10:38 +00002361 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002362#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002363#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002364}
2365
Guido van Rossume77a7571993-11-03 15:01:26 +00002366/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002367
Guido van Rossum79f25d91997-04-29 20:08:16 +00002368static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002369filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002370{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002371 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002372 Py_ssize_t i, j;
2373 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374
Guido van Rossumb7b45621995-08-04 04:07:45 +00002375 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002376 if (PyTuple_CheckExact(tuple))
2377 Py_INCREF(tuple);
2378 else
2379 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002380 return tuple;
2381 }
2382
Guido van Rossum79f25d91997-04-29 20:08:16 +00002383 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002384 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002385
Guido van Rossum12d12c51993-10-26 17:58:25 +00002386 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002387 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002388 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002389
Walter Dörwald8dd19322003-02-10 17:36:40 +00002390 if (tuple->ob_type->tp_as_sequence &&
2391 tuple->ob_type->tp_as_sequence->sq_item) {
2392 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002393 if (item == NULL)
2394 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002395 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002396 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002397 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002398 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002399 if (func == Py_None) {
2400 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002401 good = item;
2402 }
2403 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002404 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002405 if (arg == NULL) {
2406 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002407 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002408 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002409 good = PyEval_CallObject(func, arg);
2410 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002411 if (good == NULL) {
2412 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002413 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002414 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002415 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002416 ok = PyObject_IsTrue(good);
2417 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002418 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002419 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002420 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002421 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002422 else
2423 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002424 }
2425
Tim Peters4324aa32001-05-28 22:30:08 +00002426 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002427 return NULL;
2428
Guido van Rossum12d12c51993-10-26 17:58:25 +00002429 return result;
2430
Guido van Rossum12d12c51993-10-26 17:58:25 +00002431Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002432 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002433 return NULL;
2434}
2435
2436
Guido van Rossume77a7571993-11-03 15:01:26 +00002437/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002438
Guido van Rossum79f25d91997-04-29 20:08:16 +00002439static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002440filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002441{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002442 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002443 Py_ssize_t i, j;
2444 Py_ssize_t len = PyString_Size(strobj);
2445 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002446
Guido van Rossum79f25d91997-04-29 20:08:16 +00002447 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002448 /* If it's a real string we can return the original,
2449 * as no character is ever false and __getitem__
2450 * does return this character. If it's a subclass
2451 * we must go through the __getitem__ loop */
2452 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002453 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002454 return strobj;
2455 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002456 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002457 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002458 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002459
Guido van Rossum12d12c51993-10-26 17:58:25 +00002460 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002461 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002462 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002463
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002464 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2465 if (item == NULL)
2466 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002467 if (func==Py_None) {
2468 ok = 1;
2469 } else {
2470 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002471 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002472 if (arg == NULL) {
2473 Py_DECREF(item);
2474 goto Fail_1;
2475 }
2476 good = PyEval_CallObject(func, arg);
2477 Py_DECREF(arg);
2478 if (good == NULL) {
2479 Py_DECREF(item);
2480 goto Fail_1;
2481 }
2482 ok = PyObject_IsTrue(good);
2483 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002484 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002485 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002486 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002487 if (!PyString_Check(item)) {
2488 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2489 " __getitem__ returned different type");
2490 Py_DECREF(item);
2491 goto Fail_1;
2492 }
2493 reslen = PyString_GET_SIZE(item);
2494 if (reslen == 1) {
2495 PyString_AS_STRING(result)[j++] =
2496 PyString_AS_STRING(item)[0];
2497 } else {
2498 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002499 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002500 if (need > outlen) {
2501 /* overallocate, to avoid reallocations */
2502 if (need<2*outlen)
2503 need = 2*outlen;
2504 if (_PyString_Resize(&result, need)) {
2505 Py_DECREF(item);
2506 return NULL;
2507 }
2508 outlen = need;
2509 }
2510 memcpy(
2511 PyString_AS_STRING(result) + j,
2512 PyString_AS_STRING(item),
2513 reslen
2514 );
2515 j += reslen;
2516 }
2517 }
Tim Peters388ed082001-04-07 20:34:48 +00002518 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002519 }
2520
Walter Dörwald903f1e02003-02-04 16:28:00 +00002521 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002522 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002523
Guido van Rossum12d12c51993-10-26 17:58:25 +00002524 return result;
2525
Guido van Rossum12d12c51993-10-26 17:58:25 +00002526Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002527 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002528 return NULL;
2529}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002530
2531#ifdef Py_USING_UNICODE
2532/* Helper for filter(): filter a Unicode object through a function */
2533
2534static PyObject *
2535filterunicode(PyObject *func, PyObject *strobj)
2536{
2537 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002538 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002539 Py_ssize_t len = PyUnicode_GetSize(strobj);
2540 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002541
2542 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002543 /* If it's a real string we can return the original,
2544 * as no character is ever false and __getitem__
2545 * does return this character. If it's a subclass
2546 * we must go through the __getitem__ loop */
2547 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002548 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002549 return strobj;
2550 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002551 }
2552 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2553 return NULL;
2554
2555 for (i = j = 0; i < len; ++i) {
2556 PyObject *item, *arg, *good;
2557 int ok;
2558
2559 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2560 if (item == NULL)
2561 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002562 if (func == Py_None) {
2563 ok = 1;
2564 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002565 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002566 if (arg == NULL) {
2567 Py_DECREF(item);
2568 goto Fail_1;
2569 }
2570 good = PyEval_CallObject(func, arg);
2571 Py_DECREF(arg);
2572 if (good == NULL) {
2573 Py_DECREF(item);
2574 goto Fail_1;
2575 }
2576 ok = PyObject_IsTrue(good);
2577 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002578 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002579 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002580 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002581 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002582 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002583 "can't filter unicode to unicode:"
2584 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002585 Py_DECREF(item);
2586 goto Fail_1;
2587 }
2588 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002589 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002590 PyUnicode_AS_UNICODE(result)[j++] =
2591 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002592 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002593 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002594 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002595 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002596 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002597 to avoid reallocations */
2598 if (need < 2 * outlen)
2599 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002600 if (PyUnicode_Resize(
2601 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002602 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002603 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002604 }
2605 outlen = need;
2606 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002607 memcpy(PyUnicode_AS_UNICODE(result) + j,
2608 PyUnicode_AS_UNICODE(item),
2609 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002610 j += reslen;
2611 }
2612 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002613 Py_DECREF(item);
2614 }
2615
Walter Dörwald903f1e02003-02-04 16:28:00 +00002616 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002617 PyUnicode_Resize(&result, j);
2618
2619 return result;
2620
2621Fail_1:
2622 Py_DECREF(result);
2623 return NULL;
2624}
2625#endif