blob: f6c4ebbf2f8eb84d6d09e3ca87b8a7fc00a80699 [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 Hammond26cffde42001-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 Hammond26cffde42001-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 Hammond26cffde42001-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 *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000405builtin_compile(PyObject *self, PyObject *args)
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;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000416
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000417 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000418 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000419 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000420
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000421 cf.cf_flags = supplied_flags;
422
423#ifdef Py_USING_UNICODE
424 if (PyUnicode_Check(cmd)) {
425 tmp = PyUnicode_AsUTF8String(cmd);
426 if (tmp == NULL)
427 return NULL;
428 cmd = tmp;
429 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
430 }
431#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000432 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
433 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000434 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000435 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000436 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000437 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000438 }
439
Guido van Rossum5b722181993-03-30 17:46:03 +0000440 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000441 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000442 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000443 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000444 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000445 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000446 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000447 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000448 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000449 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000450 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000451
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000452 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000453 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000454 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000455 PyErr_SetString(PyExc_ValueError,
456 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000457 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000458 }
459 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
460
Tim Peters6cd6a822001-08-17 22:11:27 +0000461 if (!dont_inherit) {
462 PyEval_MergeCompilerFlags(&cf);
463 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000464 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000465cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000466 Py_XDECREF(tmp);
467 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000468}
469
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000470PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000471"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000472\n\
473Compile the source string (a Python module, statement or expression)\n\
474into a code object that can be executed by the exec statement or eval().\n\
475The filename will be used for run-time error messages.\n\
476The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000477single (interactive) statement, or 'eval' to compile an expression.\n\
478The flags argument, if present, controls which future statements influence\n\
479the compilation of the code.\n\
480The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
481the effects of any future statements in effect in the code calling\n\
482compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000483in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000484
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000486builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000487{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000488 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000489
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000490 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000491 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000492 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000493}
494
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000495PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000496"dir([object]) -> list of strings\n"
497"\n"
498"Return an alphabetized list of names comprising (some of) the attributes\n"
499"of the given object, and of attributes reachable from it:\n"
500"\n"
501"No argument: the names in the current scope.\n"
502"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000503"Type or class object: its attributes, and recursively the attributes of\n"
504" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000505"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000506" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000507
Guido van Rossum79f25d91997-04-29 20:08:16 +0000508static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000509builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000510{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000511 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000512
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000513 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000514 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000515 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000516}
517
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000518PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000519"divmod(x, y) -> (div, mod)\n\
520\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000521Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000522
523
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000525builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000526{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000527 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000529 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000530 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000531
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000532 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000534 if (locals != Py_None && !PyMapping_Check(locals)) {
535 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000536 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000537 }
538 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000539 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000540 "globals must be a real dict; try eval(expr, {}, mapping)"
541 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000542 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000543 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 if (globals == Py_None) {
545 globals = PyEval_GetGlobals();
546 if (locals == Py_None)
547 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000548 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000549 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000550 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000551
Georg Brandl77c85e62005-09-15 10:46:13 +0000552 if (globals == NULL || locals == NULL) {
553 PyErr_SetString(PyExc_TypeError,
554 "eval must be given globals and locals "
555 "when called without a frame");
556 return NULL;
557 }
558
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
560 if (PyDict_SetItemString(globals, "__builtins__",
561 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000562 return NULL;
563 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000564
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000565 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000566 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000567 PyErr_SetString(PyExc_TypeError,
568 "code object passed to eval() may not contain free variables");
569 return NULL;
570 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000572 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000573
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000574 if (!PyString_Check(cmd) &&
575 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000576 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000577 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000578 return NULL;
579 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000580 cf.cf_flags = 0;
581
582#ifdef Py_USING_UNICODE
583 if (PyUnicode_Check(cmd)) {
584 tmp = PyUnicode_AsUTF8String(cmd);
585 if (tmp == NULL)
586 return NULL;
587 cmd = tmp;
588 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
589 }
590#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000591 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
592 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000593 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000594 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595 while (*str == ' ' || *str == '\t')
596 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000597
Tim Peters9fa96be2001-08-17 23:04:59 +0000598 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000599 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
600 Py_XDECREF(tmp);
601 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000602}
603
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000604PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000605"eval(source[, globals[, locals]]) -> value\n\
606\n\
607Evaluate the source in the context of globals and locals.\n\
608The source may be a string representing a Python expression\n\
609or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000610The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000611defaulting to the current globals and locals.\n\
612If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000613
614
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000616builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000617{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000618 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619 PyObject *globals = Py_None, *locals = Py_None;
620 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000621 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000622 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000623 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000624
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000625 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000626 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000628 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000629 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000630 if (locals != Py_None && !PyMapping_Check(locals)) {
631 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
632 return NULL;
633 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 if (globals == Py_None) {
635 globals = PyEval_GetGlobals();
636 if (locals == Py_None)
637 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000638 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000639 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000640 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
642 if (PyDict_SetItemString(globals, "__builtins__",
643 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000644 return NULL;
645 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000646
647 exists = 0;
648 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000649#if defined(PLAN9)
650 {
651 Dir *d;
652
653 if ((d = dirstat(filename))!=nil) {
654 if(d->mode & DMDIR)
655 werrstr("is a directory");
656 else
657 exists = 1;
658 free(d);
659 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000660 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000661#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000662 if (object_exists(filename)) {
663 if (isdir(filename))
664 errno = EISDIR;
665 else
666 exists = 1;
667 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000668#else /* standard Posix */
669 {
670 struct stat s;
671 if (stat(filename, &s) == 0) {
672 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000673# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000674 errno = EOS2ERR;
675# else
676 errno = EISDIR;
677# endif
678 else
679 exists = 1;
680 }
681 }
682#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000683
684 if (exists) {
685 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000686 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000687 Py_END_ALLOW_THREADS
688
689 if (fp == NULL) {
690 exists = 0;
691 }
692 }
693
694 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000695 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000696 return NULL;
697 }
Tim Peters5ba58662001-07-16 02:29:45 +0000698 cf.cf_flags = 0;
699 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000700 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000701 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000702 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000703 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000704 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000706}
707
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000708PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000709"execfile(filename[, globals[, locals]])\n\
710\n\
711Read and execute a Python script from a file.\n\
712The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000713globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000714
715
Guido van Rossum79f25d91997-04-29 20:08:16 +0000716static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000717builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000718{
Guido van Rossum950ff291998-06-29 13:38:57 +0000719 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000721
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000722 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000723 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000724#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000725 if (PyUnicode_Check(name)) {
726 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
727 if (name == NULL)
728 return NULL;
729 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000730#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000731
732 if (!PyString_Check(name)) {
733 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000734 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000735 return NULL;
736 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000737 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000738 if (result == NULL && dflt != NULL &&
739 PyErr_ExceptionMatches(PyExc_AttributeError))
740 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000741 PyErr_Clear();
742 Py_INCREF(dflt);
743 result = dflt;
744 }
745 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000746}
747
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000748PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000749"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000750\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000751Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
752When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000753exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000754
755
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000757builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000758{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000760
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000762 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000763 return d;
764}
765
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000766PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000767"globals() -> dictionary\n\
768\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000769Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000770
771
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000773builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000774{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 PyObject *v;
776 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000778 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000779 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000780#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000781 if (PyUnicode_Check(name)) {
782 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
783 if (name == NULL)
784 return NULL;
785 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000786#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000787
788 if (!PyString_Check(name)) {
789 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000790 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000791 return NULL;
792 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000794 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000796 Py_INCREF(Py_False);
797 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000798 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000800 Py_INCREF(Py_True);
801 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000802}
803
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000804PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000805"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000806\n\
807Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000808(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000809
810
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000812builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000813{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000814 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000815}
816
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000817PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000818"id(object) -> integer\n\
819\n\
820Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000821simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000822
823
Guido van Rossum79f25d91997-04-29 20:08:16 +0000824static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000825builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000826{
827 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000828 PyObject *it; /* the iterator object */
829 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000830 } sequence;
831
Guido van Rossum79f25d91997-04-29 20:08:16 +0000832 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000833 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000834 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000835 register int i, j;
836
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000838 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 PyErr_SetString(PyExc_TypeError,
840 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000841 return NULL;
842 }
843
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000845 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000846
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000847 if (func == Py_None && n == 1) {
848 /* map(None, S) is the same as list(S). */
849 return PySequence_List(PyTuple_GetItem(args, 1));
850 }
851
Tim Peters4e9afdc2001-05-03 23:54:49 +0000852 /* Get space for sequence descriptors. Must NULL out the iterator
853 * pointers so that jumping to Fail_2 later doesn't see trash.
854 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
856 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000857 return NULL;
858 }
859 for (i = 0; i < n; ++i) {
860 seqs[i].it = (PyObject*)NULL;
861 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000862 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000863
Tim Peters4e9afdc2001-05-03 23:54:49 +0000864 /* Do a first pass to obtain iterators for the arguments, and set len
865 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000866 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000867 len = 0;
868 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
869 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000870 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000871
Tim Peters4e9afdc2001-05-03 23:54:49 +0000872 /* Get iterator. */
873 curseq = PyTuple_GetItem(args, i+1);
874 sqp->it = PyObject_GetIter(curseq);
875 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000877 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000878 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000879 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000881 goto Fail_2;
882 }
883
Tim Peters4e9afdc2001-05-03 23:54:49 +0000884 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000885 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000886 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000887 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
888 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
889 goto Fail_2;
890 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000891 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000892 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000893 }
894 if (curlen > len)
895 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000896 }
897
Tim Peters4e9afdc2001-05-03 23:54:49 +0000898 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000900 goto Fail_2;
901
Tim Peters4e9afdc2001-05-03 23:54:49 +0000902 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000903 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000905 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000906
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000908 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000909 else if ((alist = PyTuple_New(n)) == NULL)
910 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000911
912 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000913 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914 Py_INCREF(Py_None);
915 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000916 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000917 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000918 item = PyIter_Next(sqp->it);
919 if (item)
920 ++numactive;
921 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000922 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000923 Py_XDECREF(alist);
924 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000925 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000926 Py_INCREF(Py_None);
927 item = Py_None;
928 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000929 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000930 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000931 if (alist)
932 PyTuple_SET_ITEM(alist, j, item);
933 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000934 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000935 }
936
Guido van Rossum32120311995-07-10 13:52:21 +0000937 if (!alist)
938 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000939
Tim Peters4e9afdc2001-05-03 23:54:49 +0000940 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000942 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000943 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000944
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000946 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000947 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 value = PyEval_CallObject(func, alist);
949 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000950 if (value == NULL)
951 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000952 }
953 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000954 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000955 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000956 if (status < 0)
957 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000958 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000959 else if (PyList_SetItem(result, i, value) < 0)
960 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000961 }
962
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000963 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
964 goto Fail_1;
965
Tim Peters4e9afdc2001-05-03 23:54:49 +0000966 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000967
Guido van Rossum12d12c51993-10-26 17:58:25 +0000968Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000970Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000971 result = NULL;
972Succeed:
973 assert(seqs);
974 for (i = 0; i < n; ++i)
975 Py_XDECREF(seqs[i].it);
976 PyMem_DEL(seqs);
977 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000978}
979
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000980PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000981"map(function, sequence[, sequence, ...]) -> list\n\
982\n\
983Return a list of the results of applying the function to the items of\n\
984the argument sequence(s). If more than one sequence is given, the\n\
985function is called with an argument list consisting of the corresponding\n\
986item of each sequence, substituting None for missing values when not all\n\
987sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000988the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000989
990
Guido van Rossum79f25d91997-04-29 20:08:16 +0000991static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000992builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000993{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 PyObject *v;
995 PyObject *name;
996 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000997
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000998 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000999 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001000 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001001 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 Py_INCREF(Py_None);
1003 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001004}
1005
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001006PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001007"setattr(object, name, value)\n\
1008\n\
1009Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001010``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011
1012
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001014builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001015{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001016 PyObject *v;
1017 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001018
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001019 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001020 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001021 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001022 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001023 Py_INCREF(Py_None);
1024 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001025}
1026
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001027PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001028"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001029\n\
1030Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001031``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001032
1033
Guido van Rossum79f25d91997-04-29 20:08:16 +00001034static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001035builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001036{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001037 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001038
Guido van Rossum79f25d91997-04-29 20:08:16 +00001039 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001040 if (x == -1)
1041 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001042 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001043}
1044
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001045PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001046"hash(object) -> integer\n\
1047\n\
1048Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001049the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001050
1051
Guido van Rossum79f25d91997-04-29 20:08:16 +00001052static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001053builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001054{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001055 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001056 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001057
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001058 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001059 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001060 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001061 "hex() argument can't be converted to hex");
1062 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001063 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001064 res = (*nb->nb_hex)(v);
1065 if (res && !PyString_Check(res)) {
1066 PyErr_Format(PyExc_TypeError,
1067 "__hex__ returned non-string (type %.200s)",
1068 res->ob_type->tp_name);
1069 Py_DECREF(res);
1070 return NULL;
1071 }
1072 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001073}
1074
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001075PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001076"hex(number) -> string\n\
1077\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001078Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001079
1080
Tim Petersdbd9ba62000-07-09 03:09:57 +00001081static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001082
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001084builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001085{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001087 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001088 PyObject *res;
1089 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001090 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001091
1092 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001093 if (line == NULL)
1094 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001095 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001096 return NULL;
1097 while (*str == ' ' || *str == '\t')
1098 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 globals = PyEval_GetGlobals();
1100 locals = PyEval_GetLocals();
1101 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1102 if (PyDict_SetItemString(globals, "__builtins__",
1103 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001104 return NULL;
1105 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001106 cf.cf_flags = 0;
1107 PyEval_MergeCompilerFlags(&cf);
1108 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001109 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001110 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001111}
1112
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001113PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001114"input([prompt]) -> value\n\
1115\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001116Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001117
1118
Guido van Rossume8811f81997-02-14 15:48:05 +00001119static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001120builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001121{
1122 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001123 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001124 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001125 if (!PyString_CheckExact(s)) {
1126 PyErr_SetString(PyExc_TypeError,
1127 "can't intern subclass of string");
1128 return NULL;
1129 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001130 Py_INCREF(s);
1131 PyString_InternInPlace(&s);
1132 return s;
1133}
1134
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001135PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001136"intern(string) -> string\n\
1137\n\
1138``Intern'' the given string. This enters the string in the (global)\n\
1139table of interned strings whose purpose is to speed up dictionary lookups.\n\
1140Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001141same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001142
1143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001145builtin_iter(PyObject *self, PyObject *args)
1146{
1147 PyObject *v, *w = NULL;
1148
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001149 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001150 return NULL;
1151 if (w == NULL)
1152 return PyObject_GetIter(v);
1153 if (!PyCallable_Check(v)) {
1154 PyErr_SetString(PyExc_TypeError,
1155 "iter(v, w): v must be callable");
1156 return NULL;
1157 }
1158 return PyCallIter_New(v, w);
1159}
1160
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001161PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001162"iter(collection) -> iterator\n\
1163iter(callable, sentinel) -> iterator\n\
1164\n\
1165Get an iterator from an object. In the first form, the argument must\n\
1166supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001168
1169
1170static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001171builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001172{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001173 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001174
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001175 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001176 if (res < 0 && PyErr_Occurred())
1177 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001178 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001179}
1180
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001181PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182"len(object) -> integer\n\
1183\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001184Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185
1186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001188builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001189{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001191
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001193 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001194 return d;
1195}
1196
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001197PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001198"locals() -> dictionary\n\
1199\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001200Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001201
1202
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001204min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001205{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001206 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001207 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001208
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001211 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001212 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001213
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001214 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1215 keyfunc = PyDict_GetItemString(kwds, "key");
1216 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001217 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001218 "%s() got an unexpected keyword argument", name);
1219 return NULL;
1220 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001221 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001222
Tim Petersc3074532001-05-03 07:00:32 +00001223 it = PyObject_GetIter(v);
1224 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001225 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001226
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001227 maxitem = NULL; /* the result */
1228 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001229 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001230 /* get the value from the key function */
1231 if (keyfunc != NULL) {
1232 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1233 if (val == NULL)
1234 goto Fail_it_item;
1235 }
1236 /* no key function; the value is the item */
1237 else {
1238 val = item;
1239 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001240 }
Tim Petersc3074532001-05-03 07:00:32 +00001241
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001242 /* maximum value and item are unset; set them */
1243 if (maxval == NULL) {
1244 maxitem = item;
1245 maxval = val;
1246 }
1247 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001248 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249 int cmp = PyObject_RichCompareBool(val, maxval, op);
1250 if (cmp < 0)
1251 goto Fail_it_item_and_val;
1252 else if (cmp > 0) {
1253 Py_DECREF(maxval);
1254 Py_DECREF(maxitem);
1255 maxval = val;
1256 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001257 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001258 else {
1259 Py_DECREF(item);
1260 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001261 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001262 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001263 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001264 if (PyErr_Occurred())
1265 goto Fail_it;
1266 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001267 PyErr_Format(PyExc_ValueError,
1268 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001269 assert(maxitem == NULL);
1270 }
1271 else
1272 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001273 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001274 return maxitem;
1275
1276Fail_it_item_and_val:
1277 Py_DECREF(val);
1278Fail_it_item:
1279 Py_DECREF(item);
1280Fail_it:
1281 Py_XDECREF(maxval);
1282 Py_XDECREF(maxitem);
1283 Py_DECREF(it);
1284 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001285}
1286
Guido van Rossum79f25d91997-04-29 20:08:16 +00001287static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001288builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001289{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001290 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001291}
1292
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001293PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001294"min(iterable[, key=func]) -> value\n\
1295min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001296\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001297With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001298With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001299
1300
Guido van Rossum79f25d91997-04-29 20:08:16 +00001301static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001302builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001303{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001305}
1306
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001307PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308"max(iterable[, key=func]) -> value\n\
1309max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001310\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001311With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001312With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001313
1314
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001316builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001317{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001319 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001320
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001321 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1322 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001323 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001324 "oct() argument can't be converted to oct");
1325 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001326 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001327 res = (*nb->nb_oct)(v);
1328 if (res && !PyString_Check(res)) {
1329 PyErr_Format(PyExc_TypeError,
1330 "__oct__ returned non-string (type %.200s)",
1331 res->ob_type->tp_name);
1332 Py_DECREF(res);
1333 return NULL;
1334 }
1335 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001336}
1337
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001338PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001339"oct(number) -> string\n\
1340\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001341Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001342
1343
Guido van Rossum79f25d91997-04-29 20:08:16 +00001344static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001345builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1346{
1347 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1348}
1349
1350PyDoc_STRVAR(open_doc,
1351"open(name[, mode[, buffering]]) -> file object\n\
1352\n\
1353Open a file using the file() type, returns a file object.");
1354
1355
1356static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001357builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001358{
Guido van Rossum09095f32000-03-10 23:00:52 +00001359 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001360 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001361
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001362 if (PyString_Check(obj)) {
1363 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001364 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001365 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001366 return PyInt_FromLong(ord);
1367 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001368#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001369 } else if (PyUnicode_Check(obj)) {
1370 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001371 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001372 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001373 return PyInt_FromLong(ord);
1374 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001375#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001376 } else {
1377 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001378 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001379 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001380 return NULL;
1381 }
1382
Guido van Rossumad991772001-01-12 16:03:05 +00001383 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001384 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001385 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001386 size);
1387 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001388}
1389
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001390PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001391"ord(c) -> integer\n\
1392\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001393Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001394
1395
Guido van Rossum79f25d91997-04-29 20:08:16 +00001396static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001397builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001398{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001399 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001400
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001401 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001402 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001403 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001404}
1405
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001406PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001407"pow(x, y[, z]) -> number\n\
1408\n\
1409With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001410equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001411
1412
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001413
1414/* Return number of items in range (lo, hi, step), when arguments are
1415 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1416 * & only if the true value is too large to fit in a signed long.
1417 * Arguments MUST return 1 with either PyInt_Check() or
1418 * PyLong_Check(). Return -1 when there is an error.
1419 */
1420static long
1421get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1422{
1423 /* -------------------------------------------------------------
1424 Algorithm is equal to that of get_len_of_range(), but it operates
1425 on PyObjects (which are assumed to be PyLong or PyInt objects).
1426 ---------------------------------------------------------------*/
1427 long n;
1428 PyObject *diff = NULL;
1429 PyObject *one = NULL;
1430 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1431 /* holds sub-expression evaluations */
1432
1433 /* if (lo >= hi), return length of 0. */
1434 if (PyObject_Compare(lo, hi) >= 0)
1435 return 0;
1436
1437 if ((one = PyLong_FromLong(1L)) == NULL)
1438 goto Fail;
1439
1440 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1441 goto Fail;
1442
1443 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1444 goto Fail;
1445
1446 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1447 goto Fail;
1448
1449 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1450 goto Fail;
1451
1452 n = PyLong_AsLong(tmp3);
1453 if (PyErr_Occurred()) { /* Check for Overflow */
1454 PyErr_Clear();
1455 goto Fail;
1456 }
1457
1458 Py_DECREF(tmp3);
1459 Py_DECREF(tmp2);
1460 Py_DECREF(diff);
1461 Py_DECREF(tmp1);
1462 Py_DECREF(one);
1463 return n;
1464
1465 Fail:
1466 Py_XDECREF(tmp3);
1467 Py_XDECREF(tmp2);
1468 Py_XDECREF(diff);
1469 Py_XDECREF(tmp1);
1470 Py_XDECREF(one);
1471 return -1;
1472}
1473
1474/* An extension of builtin_range() that handles the case when PyLong
1475 * arguments are given. */
1476static PyObject *
1477handle_range_longs(PyObject *self, PyObject *args)
1478{
1479 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001480 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001481 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001482
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001483 PyObject *curnum = NULL;
1484 PyObject *v = NULL;
1485 long bign;
1486 int i, n;
1487 int cmp_result;
1488
Tim Peters874e1f72003-04-13 22:13:08 +00001489 PyObject *zero = PyLong_FromLong(0);
1490
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001491 if (zero == NULL)
1492 return NULL;
1493
Tim Peters874e1f72003-04-13 22:13:08 +00001494 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1495 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001496 return NULL;
1497 }
1498
Tim Peters874e1f72003-04-13 22:13:08 +00001499 /* Figure out which way we were called, supply defaults, and be
1500 * sure to incref everything so that the decrefs at the end
1501 * are correct.
1502 */
1503 assert(ilow != NULL);
1504 if (ihigh == NULL) {
1505 /* only 1 arg -- it's the upper limit */
1506 ihigh = ilow;
1507 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001508 }
Tim Peters874e1f72003-04-13 22:13:08 +00001509 assert(ihigh != NULL);
1510 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001511
Tim Peters874e1f72003-04-13 22:13:08 +00001512 /* ihigh correct now; do ilow */
1513 if (ilow == NULL)
1514 ilow = zero;
1515 Py_INCREF(ilow);
1516
1517 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001518 if (istep == NULL) {
1519 istep = PyLong_FromLong(1L);
1520 if (istep == NULL)
1521 goto Fail;
1522 }
1523 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001524 Py_INCREF(istep);
1525 }
1526
Tim Peters874e1f72003-04-13 22:13:08 +00001527 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001528 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001529 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001530 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001531 goto Fail;
1532 }
1533
Tim Peters874e1f72003-04-13 22:13:08 +00001534 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001535 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001536 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001537 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001538 goto Fail;
1539 }
1540
1541 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001542 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001543 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001544 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001545 goto Fail;
1546 }
1547
1548 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1549 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001550 if (cmp_result == 0) {
1551 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001552 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001553 goto Fail;
1554 }
1555
1556 if (cmp_result > 0)
1557 bign = get_len_of_range_longs(ilow, ihigh, istep);
1558 else {
1559 PyObject *neg_istep = PyNumber_Negative(istep);
1560 if (neg_istep == NULL)
1561 goto Fail;
1562 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1563 Py_DECREF(neg_istep);
1564 }
1565
1566 n = (int)bign;
1567 if (bign < 0 || (long)n != bign) {
1568 PyErr_SetString(PyExc_OverflowError,
1569 "range() result has too many items");
1570 goto Fail;
1571 }
1572
1573 v = PyList_New(n);
1574 if (v == NULL)
1575 goto Fail;
1576
1577 curnum = ilow;
1578 Py_INCREF(curnum);
1579
1580 for (i = 0; i < n; i++) {
1581 PyObject *w = PyNumber_Long(curnum);
1582 PyObject *tmp_num;
1583 if (w == NULL)
1584 goto Fail;
1585
1586 PyList_SET_ITEM(v, i, w);
1587
1588 tmp_num = PyNumber_Add(curnum, istep);
1589 if (tmp_num == NULL)
1590 goto Fail;
1591
1592 Py_DECREF(curnum);
1593 curnum = tmp_num;
1594 }
Tim Peters874e1f72003-04-13 22:13:08 +00001595 Py_DECREF(ilow);
1596 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001597 Py_DECREF(istep);
1598 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001599 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001600 return v;
1601
1602 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001603 Py_DECREF(ilow);
1604 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001605 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001606 Py_DECREF(zero);
1607 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001608 Py_XDECREF(v);
1609 return NULL;
1610}
1611
Guido van Rossum124eff01999-02-23 16:11:01 +00001612/* Return number of items in range/xrange (lo, hi, step). step > 0
1613 * required. Return a value < 0 if & only if the true value is too
1614 * large to fit in a signed long.
1615 */
1616static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001617get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001618{
1619 /* -------------------------------------------------------------
1620 If lo >= hi, the range is empty.
1621 Else if n values are in the range, the last one is
1622 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1623 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1624 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1625 the RHS is non-negative and so truncation is the same as the
1626 floor. Letting M be the largest positive long, the worst case
1627 for the RHS numerator is hi=M, lo=-M-1, and then
1628 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1629 precision to compute the RHS exactly.
1630 ---------------------------------------------------------------*/
1631 long n = 0;
1632 if (lo < hi) {
1633 unsigned long uhi = (unsigned long)hi;
1634 unsigned long ulo = (unsigned long)lo;
1635 unsigned long diff = uhi - ulo - 1;
1636 n = (long)(diff / (unsigned long)step + 1);
1637 }
1638 return n;
1639}
1640
Guido van Rossum79f25d91997-04-29 20:08:16 +00001641static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001642builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001643{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001644 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001645 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001646 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001647
Guido van Rossum79f25d91997-04-29 20:08:16 +00001648 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001649
Guido van Rossum79f25d91997-04-29 20:08:16 +00001650 if (PyTuple_Size(args) <= 1) {
1651 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001652 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001653 &ihigh)) {
1654 PyErr_Clear();
1655 return handle_range_longs(self, args);
1656 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001657 }
1658 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001659 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001660 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001661 &ilow, &ihigh, &istep)) {
1662 PyErr_Clear();
1663 return handle_range_longs(self, args);
1664 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001665 }
1666 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001667 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001668 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001669 return NULL;
1670 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001671 if (istep > 0)
1672 bign = get_len_of_range(ilow, ihigh, istep);
1673 else
1674 bign = get_len_of_range(ihigh, ilow, -istep);
1675 n = (int)bign;
1676 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001677 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001678 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001679 return NULL;
1680 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001681 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001682 if (v == NULL)
1683 return NULL;
1684 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001687 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001688 return NULL;
1689 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001690 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001691 ilow += istep;
1692 }
1693 return v;
1694}
1695
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001696PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001697"range([start,] stop[, step]) -> list of integers\n\
1698\n\
1699Return a list containing an arithmetic progression of integers.\n\
1700range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1701When step is given, it specifies the increment (or decrement).\n\
1702For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001703These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001704
1705
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001707builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001708{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001710 PyObject *fin = PySys_GetObject("stdin");
1711 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001712
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001713 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001714 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001715
1716 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001717 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001718 return NULL;
1719 }
1720 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001721 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001722 return NULL;
1723 }
1724 if (PyFile_SoftSpace(fout, 0)) {
1725 if (PyFile_WriteString(" ", fout) != 0)
1726 return NULL;
1727 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001728 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001729 && isatty(fileno(PyFile_AsFile(fin)))
1730 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001731 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001732 char *prompt;
1733 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001734 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001735 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001736 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001737 if (po == NULL)
1738 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001739 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001740 if (prompt == NULL)
1741 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001742 }
1743 else {
1744 po = NULL;
1745 prompt = "";
1746 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001747 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001748 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001749 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001750 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001751 if (!PyErr_Occurred())
1752 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001753 return NULL;
1754 }
1755 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001756 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001757 result = NULL;
1758 }
1759 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001760 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00001761 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001762 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001763 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001764 result = NULL;
1765 }
1766 else {
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00001767 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00001768 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001769 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001770 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001771 return result;
1772 }
Guido van Rossum90933611991-06-07 16:10:43 +00001773 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001774 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001775 return NULL;
1776 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001777 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001778}
1779
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001780PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001781"raw_input([prompt]) -> string\n\
1782\n\
1783Read a string from standard input. The trailing newline is stripped.\n\
1784If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1785On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001786is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001787
1788
Guido van Rossum79f25d91997-04-29 20:08:16 +00001789static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001790builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001791{
Tim Peters15d81ef2001-05-04 04:39:21 +00001792 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001793
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001794 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001795 return NULL;
1796 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001797 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001798
Tim Peters15d81ef2001-05-04 04:39:21 +00001799 it = PyObject_GetIter(seq);
1800 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001802 "reduce() arg 2 must support iteration");
1803 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001804 return NULL;
1805 }
1806
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001808 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001809
Tim Peters15d81ef2001-05-04 04:39:21 +00001810 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001812
1813 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 Py_DECREF(args);
1815 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001816 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001817 }
1818
Tim Peters15d81ef2001-05-04 04:39:21 +00001819 op2 = PyIter_Next(it);
1820 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001821 if (PyErr_Occurred())
1822 goto Fail;
1823 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001824 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001825
Guido van Rossum2d951851994-08-29 12:52:16 +00001826 if (result == NULL)
1827 result = op2;
1828 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 PyTuple_SetItem(args, 0, result);
1830 PyTuple_SetItem(args, 1, op2);
1831 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001832 goto Fail;
1833 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001834 }
1835
Guido van Rossum79f25d91997-04-29 20:08:16 +00001836 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001837
Guido van Rossum2d951851994-08-29 12:52:16 +00001838 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001839 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001840 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001841
Tim Peters15d81ef2001-05-04 04:39:21 +00001842 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001843 return result;
1844
Guido van Rossum2d951851994-08-29 12:52:16 +00001845Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001846 Py_XDECREF(args);
1847 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001848 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001849 return NULL;
1850}
1851
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001852PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001853"reduce(function, sequence[, initial]) -> value\n\
1854\n\
1855Apply a function of two arguments cumulatively to the items of a sequence,\n\
1856from left to right, so as to reduce the sequence to a single value.\n\
1857For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1858((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1859of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001860sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001861
1862
Guido van Rossum79f25d91997-04-29 20:08:16 +00001863static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001864builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001865{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001866 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001867}
1868
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001869PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001870"reload(module) -> module\n\
1871\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001872Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001873
1874
Guido van Rossum79f25d91997-04-29 20:08:16 +00001875static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001876builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001877{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001878 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001879}
1880
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001881PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001882"repr(object) -> string\n\
1883\n\
1884Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001885For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001886
1887
Guido van Rossum79f25d91997-04-29 20:08:16 +00001888static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00001889builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001890{
Georg Brandlccadf842006-03-31 18:54:53 +00001891 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001892 double f;
1893 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001894 int i;
Georg Brandlccadf842006-03-31 18:54:53 +00001895 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001896
Georg Brandlccadf842006-03-31 18:54:53 +00001897 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1898 kwlist, &number, &ndigits))
1899 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001900 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001901 i = abs(ndigits);
1902 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001903 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001904 if (ndigits < 0)
Georg Brandlccadf842006-03-31 18:54:53 +00001905 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001906 else
Georg Brandlccadf842006-03-31 18:54:53 +00001907 number *= f;
1908 if (number >= 0.0)
1909 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001910 else
Georg Brandlccadf842006-03-31 18:54:53 +00001911 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001912 if (ndigits < 0)
Georg Brandlccadf842006-03-31 18:54:53 +00001913 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001914 else
Georg Brandlccadf842006-03-31 18:54:53 +00001915 number /= f;
1916 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001917}
1918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001919PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001920"round(number[, ndigits]) -> floating point number\n\
1921\n\
1922Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001923This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001924
Raymond Hettinger64958a12003-12-17 20:43:33 +00001925static PyObject *
1926builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1927{
1928 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1929 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001930 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001931 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001932
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001933 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001934 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1935 kwlist, &seq, &compare, &keyfunc, &reverse))
1936 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001937
1938 newlist = PySequence_List(seq);
1939 if (newlist == NULL)
1940 return NULL;
1941
1942 callable = PyObject_GetAttrString(newlist, "sort");
1943 if (callable == NULL) {
1944 Py_DECREF(newlist);
1945 return NULL;
1946 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001947
Raymond Hettinger64958a12003-12-17 20:43:33 +00001948 newargs = PyTuple_GetSlice(args, 1, 4);
1949 if (newargs == NULL) {
1950 Py_DECREF(newlist);
1951 Py_DECREF(callable);
1952 return NULL;
1953 }
1954
1955 v = PyObject_Call(callable, newargs, kwds);
1956 Py_DECREF(newargs);
1957 Py_DECREF(callable);
1958 if (v == NULL) {
1959 Py_DECREF(newlist);
1960 return NULL;
1961 }
1962 Py_DECREF(v);
1963 return newlist;
1964}
1965
1966PyDoc_STRVAR(sorted_doc,
1967"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001968
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001970builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001971{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972 PyObject *v = NULL;
1973 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001974
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001975 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001976 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001977 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001978 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001979 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001980 if (!PyErr_Occurred())
1981 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001982 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001983 }
1984 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001986 }
1987 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001988 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001989 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001991 "vars() argument must have __dict__ attribute");
1992 return NULL;
1993 }
1994 }
1995 return d;
1996}
1997
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001998PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001999"vars([object]) -> dictionary\n\
2000\n\
2001Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002002With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002003
Alex Martellia70b1912003-04-22 08:12:33 +00002004
2005static PyObject*
2006builtin_sum(PyObject *self, PyObject *args)
2007{
2008 PyObject *seq;
2009 PyObject *result = NULL;
2010 PyObject *temp, *item, *iter;
2011
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002012 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002013 return NULL;
2014
2015 iter = PyObject_GetIter(seq);
2016 if (iter == NULL)
2017 return NULL;
2018
2019 if (result == NULL) {
2020 result = PyInt_FromLong(0);
2021 if (result == NULL) {
2022 Py_DECREF(iter);
2023 return NULL;
2024 }
2025 } else {
2026 /* reject string values for 'start' parameter */
2027 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2028 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002029 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002030 Py_DECREF(iter);
2031 return NULL;
2032 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002033 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002034 }
2035
2036 for(;;) {
2037 item = PyIter_Next(iter);
2038 if (item == NULL) {
2039 /* error, or end-of-sequence */
2040 if (PyErr_Occurred()) {
2041 Py_DECREF(result);
2042 result = NULL;
2043 }
2044 break;
2045 }
Alex Martellia253e182003-10-25 23:24:14 +00002046 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002047 Py_DECREF(result);
2048 Py_DECREF(item);
2049 result = temp;
2050 if (result == NULL)
2051 break;
2052 }
2053 Py_DECREF(iter);
2054 return result;
2055}
2056
2057PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002058"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002059\n\
2060Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002061of parameter 'start' (which defaults to 0). When the sequence is\n\
2062empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002063
2064
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002065static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002066builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002067{
2068 PyObject *inst;
2069 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002070 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002071
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002072 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002073 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002074
Guido van Rossum823649d2001-03-21 18:40:58 +00002075 retval = PyObject_IsInstance(inst, cls);
2076 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002077 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002078 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002079}
2080
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002081PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002082"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002083\n\
2084Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002085With a type as second argument, return whether that is the object's type.\n\
2086The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002087isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002088
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002089
2090static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002091builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002092{
2093 PyObject *derived;
2094 PyObject *cls;
2095 int retval;
2096
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002097 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002098 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002099
Guido van Rossum823649d2001-03-21 18:40:58 +00002100 retval = PyObject_IsSubclass(derived, cls);
2101 if (retval < 0)
2102 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002103 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002104}
2105
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002106PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002107"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002108\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002109Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2110When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2111is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002112
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002113
Barry Warsawbd599b52000-08-03 15:45:29 +00002114static PyObject*
2115builtin_zip(PyObject *self, PyObject *args)
2116{
2117 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002118 const Py_ssize_t itemsize = PySequence_Length(args);
2119 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002120 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002121 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002122
Raymond Hettingereaef6152003-08-02 07:42:57 +00002123 if (itemsize == 0)
2124 return PyList_New(0);
2125
Barry Warsawbd599b52000-08-03 15:45:29 +00002126 /* args must be a tuple */
2127 assert(PyTuple_Check(args));
2128
Tim Peters39a86c22002-05-12 07:19:38 +00002129 /* Guess at result length: the shortest of the input lengths.
2130 If some argument refuses to say, we refuse to guess too, lest
2131 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002132 len = -1; /* unknown */
2133 for (i = 0; i < itemsize; ++i) {
2134 PyObject *item = PyTuple_GET_ITEM(args, i);
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002135 Py_ssize_t thislen = _PyObject_LengthHint(item);
Tim Peters39a86c22002-05-12 07:19:38 +00002136 if (thislen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00002137 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
2138 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
2139 return NULL;
2140 }
Tim Peters67d687a2002-04-29 21:27:32 +00002141 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00002142 len = -1;
2143 break;
2144 }
Tim Peters67d687a2002-04-29 21:27:32 +00002145 else if (len < 0 || thislen < len)
2146 len = thislen;
2147 }
2148
Tim Peters8572b4f2001-05-06 01:05:02 +00002149 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002150 if (len < 0)
2151 len = 10; /* arbitrary */
2152 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002153 return NULL;
2154
Tim Peters8572b4f2001-05-06 01:05:02 +00002155 /* obtain iterators */
2156 itlist = PyTuple_New(itemsize);
2157 if (itlist == NULL)
2158 goto Fail_ret;
2159 for (i = 0; i < itemsize; ++i) {
2160 PyObject *item = PyTuple_GET_ITEM(args, i);
2161 PyObject *it = PyObject_GetIter(item);
2162 if (it == NULL) {
2163 if (PyErr_ExceptionMatches(PyExc_TypeError))
2164 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00002165 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00002166 i+1);
2167 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002168 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002169 PyTuple_SET_ITEM(itlist, i, it);
2170 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002171
Tim Peters8572b4f2001-05-06 01:05:02 +00002172 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002173 for (i = 0; ; ++i) {
2174 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002175 PyObject *next = PyTuple_New(itemsize);
2176 if (!next)
2177 goto Fail_ret_itlist;
2178
Tim Peters67d687a2002-04-29 21:27:32 +00002179 for (j = 0; j < itemsize; j++) {
2180 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002181 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002182 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002183 if (PyErr_Occurred()) {
2184 Py_DECREF(ret);
2185 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002186 }
2187 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002188 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002189 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002190 }
Tim Peters67d687a2002-04-29 21:27:32 +00002191 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002192 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002193
Tim Peters67d687a2002-04-29 21:27:32 +00002194 if (i < len)
2195 PyList_SET_ITEM(ret, i, next);
2196 else {
2197 int status = PyList_Append(ret, next);
2198 Py_DECREF(next);
2199 ++len;
2200 if (status < 0)
2201 goto Fail_ret_itlist;
2202 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002203 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002204
Tim Peters67d687a2002-04-29 21:27:32 +00002205Done:
2206 if (ret != NULL && i < len) {
2207 /* The list is too big. */
2208 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2209 return NULL;
2210 }
2211 return ret;
2212
Tim Peters8572b4f2001-05-06 01:05:02 +00002213Fail_ret_itlist:
2214 Py_DECREF(itlist);
2215Fail_ret:
2216 Py_DECREF(ret);
2217 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002218}
2219
2220
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002221PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002222"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2223\n\
2224Return a list of tuples, where each tuple contains the i-th element\n\
2225from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002226in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002227
2228
Guido van Rossum79f25d91997-04-29 20:08:16 +00002229static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002230 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002231 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002232 {"all", builtin_all, METH_O, all_doc},
2233 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002234 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002235 {"callable", builtin_callable, METH_O, callable_doc},
2236 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2237 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2238 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2239 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2240 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2241 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2242 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2243 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2244 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2245 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2246 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2247 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2248 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2249 {"hash", builtin_hash, METH_O, hash_doc},
2250 {"hex", builtin_hex, METH_O, hex_doc},
2251 {"id", builtin_id, METH_O, id_doc},
2252 {"input", builtin_input, METH_VARARGS, input_doc},
2253 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2254 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2255 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2256 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2257 {"len", builtin_len, METH_O, len_doc},
2258 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2259 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002260 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2261 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002262 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002263 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002264 {"ord", builtin_ord, METH_O, ord_doc},
2265 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2266 {"range", builtin_range, METH_VARARGS, range_doc},
2267 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2268 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2269 {"reload", builtin_reload, METH_O, reload_doc},
2270 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002271 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002272 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002273 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002274 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002275#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002276 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002277#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002278 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002279 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002280 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002281};
2282
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002283PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002284"Built-in functions, exceptions, and other objects.\n\
2285\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002286Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002287
Guido van Rossum25ce5661997-08-02 03:10:38 +00002288PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002289_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002290{
Fred Drake5550de32000-06-20 04:54:19 +00002291 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002292 mod = Py_InitModule4("__builtin__", builtin_methods,
2293 builtin_doc, (PyObject *)NULL,
2294 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002295 if (mod == NULL)
2296 return NULL;
2297 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002298
Tim Peters7571a0f2003-03-23 17:52:28 +00002299#ifdef Py_TRACE_REFS
2300 /* __builtin__ exposes a number of statically allocated objects
2301 * that, before this code was added in 2.3, never showed up in
2302 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2303 * result, programs leaking references to None and False (etc)
2304 * couldn't be diagnosed by examining sys.getobjects(0).
2305 */
2306#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2307#else
2308#define ADD_TO_ALL(OBJECT) (void)0
2309#endif
2310
Tim Peters4b7625e2001-09-13 21:37:17 +00002311#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002312 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2313 return NULL; \
2314 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002315
2316 SETBUILTIN("None", Py_None);
2317 SETBUILTIN("Ellipsis", Py_Ellipsis);
2318 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002319 SETBUILTIN("False", Py_False);
2320 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002321 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002322 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002323 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002324 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002325#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002326 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002327#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002328 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002329 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002330 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002331 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002332 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002333 SETBUILTIN("property", &PyProperty_Type);
2334 SETBUILTIN("int", &PyInt_Type);
2335 SETBUILTIN("list", &PyList_Type);
2336 SETBUILTIN("long", &PyLong_Type);
2337 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002338 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002339 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002340 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002341 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2342 SETBUILTIN("str", &PyString_Type);
2343 SETBUILTIN("super", &PySuper_Type);
2344 SETBUILTIN("tuple", &PyTuple_Type);
2345 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002346 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002347#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002348 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002349#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002350 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002351 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2352 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002353 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002354 }
2355 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002356
Guido van Rossum25ce5661997-08-02 03:10:38 +00002357 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002358#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002359#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002360}
2361
Guido van Rossume77a7571993-11-03 15:01:26 +00002362/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002363
Guido van Rossum79f25d91997-04-29 20:08:16 +00002364static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002365filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002366{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002367 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002368 Py_ssize_t i, j;
2369 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002370
Guido van Rossumb7b45621995-08-04 04:07:45 +00002371 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002372 if (PyTuple_CheckExact(tuple))
2373 Py_INCREF(tuple);
2374 else
2375 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002376 return tuple;
2377 }
2378
Guido van Rossum79f25d91997-04-29 20:08:16 +00002379 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002380 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381
Guido van Rossum12d12c51993-10-26 17:58:25 +00002382 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002383 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002384 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002385
Walter Dörwald8dd19322003-02-10 17:36:40 +00002386 if (tuple->ob_type->tp_as_sequence &&
2387 tuple->ob_type->tp_as_sequence->sq_item) {
2388 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002389 if (item == NULL)
2390 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002391 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002392 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002393 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002394 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002395 if (func == Py_None) {
2396 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002397 good = item;
2398 }
2399 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002400 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002401 if (arg == NULL) {
2402 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002403 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002404 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002405 good = PyEval_CallObject(func, arg);
2406 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002407 if (good == NULL) {
2408 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002409 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002410 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002411 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002412 ok = PyObject_IsTrue(good);
2413 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002414 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002415 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002416 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002417 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002418 else
2419 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002420 }
2421
Tim Peters4324aa32001-05-28 22:30:08 +00002422 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002423 return NULL;
2424
Guido van Rossum12d12c51993-10-26 17:58:25 +00002425 return result;
2426
Guido van Rossum12d12c51993-10-26 17:58:25 +00002427Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002428 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002429 return NULL;
2430}
2431
2432
Guido van Rossume77a7571993-11-03 15:01:26 +00002433/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002434
Guido van Rossum79f25d91997-04-29 20:08:16 +00002435static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002436filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002437{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002438 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002439 Py_ssize_t i, j;
2440 Py_ssize_t len = PyString_Size(strobj);
2441 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002442
Guido van Rossum79f25d91997-04-29 20:08:16 +00002443 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002444 /* If it's a real string we can return the original,
2445 * as no character is ever false and __getitem__
2446 * does return this character. If it's a subclass
2447 * we must go through the __getitem__ loop */
2448 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002449 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002450 return strobj;
2451 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002452 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002453 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002454 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002455
Guido van Rossum12d12c51993-10-26 17:58:25 +00002456 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002457 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002458 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002459
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002460 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2461 if (item == NULL)
2462 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002463 if (func==Py_None) {
2464 ok = 1;
2465 } else {
2466 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002467 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002468 if (arg == NULL) {
2469 Py_DECREF(item);
2470 goto Fail_1;
2471 }
2472 good = PyEval_CallObject(func, arg);
2473 Py_DECREF(arg);
2474 if (good == NULL) {
2475 Py_DECREF(item);
2476 goto Fail_1;
2477 }
2478 ok = PyObject_IsTrue(good);
2479 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002480 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002481 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002482 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002483 if (!PyString_Check(item)) {
2484 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2485 " __getitem__ returned different type");
2486 Py_DECREF(item);
2487 goto Fail_1;
2488 }
2489 reslen = PyString_GET_SIZE(item);
2490 if (reslen == 1) {
2491 PyString_AS_STRING(result)[j++] =
2492 PyString_AS_STRING(item)[0];
2493 } else {
2494 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002495 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002496 if (need > outlen) {
2497 /* overallocate, to avoid reallocations */
2498 if (need<2*outlen)
2499 need = 2*outlen;
2500 if (_PyString_Resize(&result, need)) {
2501 Py_DECREF(item);
2502 return NULL;
2503 }
2504 outlen = need;
2505 }
2506 memcpy(
2507 PyString_AS_STRING(result) + j,
2508 PyString_AS_STRING(item),
2509 reslen
2510 );
2511 j += reslen;
2512 }
2513 }
Tim Peters388ed082001-04-07 20:34:48 +00002514 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002515 }
2516
Walter Dörwald903f1e02003-02-04 16:28:00 +00002517 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002518 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002519
Guido van Rossum12d12c51993-10-26 17:58:25 +00002520 return result;
2521
Guido van Rossum12d12c51993-10-26 17:58:25 +00002522Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002523 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002524 return NULL;
2525}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002526
2527#ifdef Py_USING_UNICODE
2528/* Helper for filter(): filter a Unicode object through a function */
2529
2530static PyObject *
2531filterunicode(PyObject *func, PyObject *strobj)
2532{
2533 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002534 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002535 Py_ssize_t len = PyUnicode_GetSize(strobj);
2536 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002537
2538 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002539 /* If it's a real string we can return the original,
2540 * as no character is ever false and __getitem__
2541 * does return this character. If it's a subclass
2542 * we must go through the __getitem__ loop */
2543 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002544 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002545 return strobj;
2546 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002547 }
2548 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2549 return NULL;
2550
2551 for (i = j = 0; i < len; ++i) {
2552 PyObject *item, *arg, *good;
2553 int ok;
2554
2555 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2556 if (item == NULL)
2557 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002558 if (func == Py_None) {
2559 ok = 1;
2560 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002561 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002562 if (arg == NULL) {
2563 Py_DECREF(item);
2564 goto Fail_1;
2565 }
2566 good = PyEval_CallObject(func, arg);
2567 Py_DECREF(arg);
2568 if (good == NULL) {
2569 Py_DECREF(item);
2570 goto Fail_1;
2571 }
2572 ok = PyObject_IsTrue(good);
2573 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002574 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002575 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002576 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002577 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002578 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002579 "can't filter unicode to unicode:"
2580 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002581 Py_DECREF(item);
2582 goto Fail_1;
2583 }
2584 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002585 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002586 PyUnicode_AS_UNICODE(result)[j++] =
2587 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002588 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002589 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002590 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002591 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002592 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002593 to avoid reallocations */
2594 if (need < 2 * outlen)
2595 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002596 if (PyUnicode_Resize(
2597 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002598 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002599 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002600 }
2601 outlen = need;
2602 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002603 memcpy(PyUnicode_AS_UNICODE(result) + j,
2604 PyUnicode_AS_UNICODE(item),
2605 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002606 j += reslen;
2607 }
2608 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002609 Py_DECREF(item);
2610 }
2611
Walter Dörwald903f1e02003-02-04 16:28:00 +00002612 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002613 PyUnicode_Resize(&result, j);
2614
2615 return result;
2616
2617Fail_1:
2618 Py_DECREF(result);
2619 return NULL;
2620}
2621#endif