blob: b675c26f2c5906eb50921b97ea89001835250b95 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde2001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028#ifdef Py_USING_UNICODE
29static PyObject *filterunicode(PyObject *, PyObject *);
30#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000034builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 PyObject *globals = NULL;
38 PyObject *locals = NULL;
39 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000040 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041
Thomas Woutersf7f438b2006-02-28 16:09:29 +000042 if (!PyArg_ParseTuple(args, "s|OOOi:__import__",
43 &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000045 return PyImport_ImportModuleLevel(name, globals, locals,
46 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000047}
48
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000049PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000050"__import__(name, globals, locals, fromlist) -> module\n\
51\n\
52Import a module. The globals are only used to determine the context;\n\
53they are not modified. The locals are currently unused. The fromlist\n\
54should be a list of names to emulate ``from name import ...'', or an\n\
55empty list to emulate ``import name''.\n\
56When importing a module from a package, note that __import__('A.B', ...)\n\
57returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000058fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000059
Guido van Rossum1ae940a1995-01-02 19:04:15 +000060
Guido van Rossum79f25d91997-04-29 20:08:16 +000061static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000062builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000063{
Guido van Rossum09df08a1998-05-22 00:51:39 +000064 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000065}
66
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000067PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000068"abs(number) -> number\n\
69\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000070Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000071
Raymond Hettinger96229b12005-03-11 06:49:40 +000072static PyObject *
73builtin_all(PyObject *self, PyObject *v)
74{
75 PyObject *it, *item;
76
77 it = PyObject_GetIter(v);
78 if (it == NULL)
79 return NULL;
80
81 while ((item = PyIter_Next(it)) != NULL) {
82 int cmp = PyObject_IsTrue(item);
83 Py_DECREF(item);
84 if (cmp < 0) {
85 Py_DECREF(it);
86 return NULL;
87 }
88 if (cmp == 0) {
89 Py_DECREF(it);
90 Py_RETURN_FALSE;
91 }
92 }
93 Py_DECREF(it);
94 if (PyErr_Occurred())
95 return NULL;
96 Py_RETURN_TRUE;
97}
98
99PyDoc_STRVAR(all_doc,
100"all(iterable) -> bool\n\
101\n\
102Return True if bool(x) is True for all values x in the iterable.");
103
104static PyObject *
105builtin_any(PyObject *self, PyObject *v)
106{
107 PyObject *it, *item;
108
109 it = PyObject_GetIter(v);
110 if (it == NULL)
111 return NULL;
112
113 while ((item = PyIter_Next(it)) != NULL) {
114 int cmp = PyObject_IsTrue(item);
115 Py_DECREF(item);
116 if (cmp < 0) {
117 Py_DECREF(it);
118 return NULL;
119 }
120 if (cmp == 1) {
121 Py_DECREF(it);
122 Py_RETURN_TRUE;
123 }
124 }
125 Py_DECREF(it);
126 if (PyErr_Occurred())
127 return NULL;
128 Py_RETURN_FALSE;
129}
130
131PyDoc_STRVAR(any_doc,
132"any(iterable) -> bool\n\
133\n\
134Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000135
Guido van Rossum79f25d91997-04-29 20:08:16 +0000136static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000137builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000138{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000139 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000140 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000141
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000142 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000143 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000144 if (alist != NULL) {
145 if (!PyTuple_Check(alist)) {
146 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000147 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000148 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000149 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000150 return NULL;
151 }
152 t = PySequence_Tuple(alist);
153 if (t == NULL)
154 return NULL;
155 alist = t;
156 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000157 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000158 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000159 PyErr_Format(PyExc_TypeError,
160 "apply() arg 3 expected dictionary, found %s",
161 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000162 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000163 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000164 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
165 finally:
166 Py_XDECREF(t);
167 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000168}
169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000170PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000171"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000172\n\
Fred Drake7b912121999-12-23 14:16:55 +0000173Call a callable object with positional arguments taken from the tuple args,\n\
174and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000175Note that classes are callable, as are instances with a __call__() method.\n\
176\n\
177Deprecated since release 2.3. Instead, use the extended call syntax:\n\
178 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000179
180
Guido van Rossum79f25d91997-04-29 20:08:16 +0000181static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000182builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000183{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000184 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000185}
186
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000187PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000188"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000189\n\
190Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000191Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000192
193
Guido van Rossum79f25d91997-04-29 20:08:16 +0000194static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000195builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000196{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000197 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000198 Py_ssize_t len; /* guess for result list size */
199 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000200
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000201 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000202 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000203
Tim Peters0e57abf2001-05-02 07:39:38 +0000204 /* Strings and tuples return a result of the same type. */
205 if (PyString_Check(seq))
206 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000207#ifdef Py_USING_UNICODE
208 if (PyUnicode_Check(seq))
209 return filterunicode(func, seq);
210#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000211 if (PyTuple_Check(seq))
212 return filtertuple(func, seq);
213
Georg Brandle35b6572005-07-19 22:20:20 +0000214 /* Pre-allocate argument list tuple. */
215 arg = PyTuple_New(1);
216 if (arg == NULL)
217 return NULL;
218
Tim Peters0e57abf2001-05-02 07:39:38 +0000219 /* Get iterator. */
220 it = PyObject_GetIter(seq);
221 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000222 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000223
224 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000225 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000226 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000227 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
228 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
229 goto Fail_it;
230 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000231 PyErr_Clear();
232 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000233 }
234
Tim Peters0e57abf2001-05-02 07:39:38 +0000235 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000236 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000237 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000238 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000239 result = seq;
240 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000241 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000242 result = PyList_New(len);
243 if (result == NULL)
244 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000245 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246
Tim Peters0e57abf2001-05-02 07:39:38 +0000247 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000248 j = 0;
249 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000250 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000251 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000252
Tim Peters0e57abf2001-05-02 07:39:38 +0000253 item = PyIter_Next(it);
254 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000255 if (PyErr_Occurred())
256 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000257 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000258 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000259
Neil Schemenauer68973552003-08-14 20:37:34 +0000260 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000261 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000262 }
263 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000264 PyObject *good;
265 PyTuple_SET_ITEM(arg, 0, item);
266 good = PyObject_Call(func, arg, NULL);
267 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000268 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000269 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000270 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000271 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000272 ok = PyObject_IsTrue(good);
273 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000274 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000275 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000276 if (j < len)
277 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000278 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000279 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000280 Py_DECREF(item);
281 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000282 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000283 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000284 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000285 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000286 else
287 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000288 }
289
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290
Tim Peters0e57abf2001-05-02 07:39:38 +0000291 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000292 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000293 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000294
Tim Peters3c6b1482001-05-21 08:07:05 +0000295 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000296 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000297 return result;
298
Tim Peters0e57abf2001-05-02 07:39:38 +0000299Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000301Fail_it:
302 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000303Fail_arg:
304 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000305 return NULL;
306}
307
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000308PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000309"filter(function or None, sequence) -> list, tuple, or string\n"
310"\n"
311"Return those items of sequence for which function(item) is true. If\n"
312"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000313"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000314
Guido van Rossum79f25d91997-04-29 20:08:16 +0000315static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000316builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000317{
318 long x;
319 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000320
Guido van Rossum79f25d91997-04-29 20:08:16 +0000321 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000322 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000323 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000324 PyErr_SetString(PyExc_ValueError,
325 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000326 return NULL;
327 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000328 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000329 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000330}
331
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000332PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000333"chr(i) -> character\n\
334\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000335Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000336
337
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000338#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000339static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000340builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000341{
342 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000343
344 if (!PyArg_ParseTuple(args, "l:unichr", &x))
345 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000346
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000347 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000348}
349
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000350PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000351"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000352\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000353Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000354#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000355
356
357static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000358builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000359{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000361 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000362
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000363 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000364 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000365 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000366 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000367 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000368}
369
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000370PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000371"cmp(x, y) -> integer\n\
372\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000373Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000374
375
Guido van Rossum79f25d91997-04-29 20:08:16 +0000376static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000377builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000378{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 PyObject *v, *w;
380 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000381
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000382 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000383 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000385 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000386 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000387 Py_DECREF(v);
388 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000389 return res;
390}
391
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000392PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000393"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000394\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000395Return a tuple consisting of the two numeric arguments converted to\n\
396a common type, using the same rules as used by arithmetic operations.\n\
397If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000398
Guido van Rossum79f25d91997-04-29 20:08:16 +0000399static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000400builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000401{
402 char *str;
403 char *filename;
404 char *startstr;
405 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000406 int dont_inherit = 0;
407 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000408 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000409 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000410 Py_ssize_t length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000411
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000412 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000413 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000414 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000415
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000416 cf.cf_flags = supplied_flags;
417
418#ifdef Py_USING_UNICODE
419 if (PyUnicode_Check(cmd)) {
420 tmp = PyUnicode_AsUTF8String(cmd);
421 if (tmp == NULL)
422 return NULL;
423 cmd = tmp;
424 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
425 }
426#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000427 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
428 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000429 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000430 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000431 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000432 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000433 }
434
Guido van Rossum5b722181993-03-30 17:46:03 +0000435 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000436 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000437 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000438 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000439 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000440 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000441 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000442 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000443 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000444 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000445 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000446
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000447 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000448 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000449 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000450 PyErr_SetString(PyExc_ValueError,
451 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000452 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000453 }
454 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
455
Tim Peters6cd6a822001-08-17 22:11:27 +0000456 if (!dont_inherit) {
457 PyEval_MergeCompilerFlags(&cf);
458 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000459 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000460cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000461 Py_XDECREF(tmp);
462 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000463}
464
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000465PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000466"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000467\n\
468Compile the source string (a Python module, statement or expression)\n\
469into a code object that can be executed by the exec statement or eval().\n\
470The filename will be used for run-time error messages.\n\
471The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000472single (interactive) statement, or 'eval' to compile an expression.\n\
473The flags argument, if present, controls which future statements influence\n\
474the compilation of the code.\n\
475The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
476the effects of any future statements in effect in the code calling\n\
477compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000478in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000479
Guido van Rossum79f25d91997-04-29 20:08:16 +0000480static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000481builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000482{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000483 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000484
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000485 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000486 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000487 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000488}
489
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000490PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000491"dir([object]) -> list of strings\n"
492"\n"
493"Return an alphabetized list of names comprising (some of) the attributes\n"
494"of the given object, and of attributes reachable from it:\n"
495"\n"
496"No argument: the names in the current scope.\n"
497"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000498"Type or class object: its attributes, and recursively the attributes of\n"
499" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000500"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000501" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000502
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000504builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000505{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000506 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000507
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000508 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000509 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000510 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000511}
512
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000513PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000514"divmod(x, y) -> (div, mod)\n\
515\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000516Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000517
518
Guido van Rossum79f25d91997-04-29 20:08:16 +0000519static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000520builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000521{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000522 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000523 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000524 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000525 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000526
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000527 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000529 if (locals != Py_None && !PyMapping_Check(locals)) {
530 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000531 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000532 }
533 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000534 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000535 "globals must be a real dict; try eval(expr, {}, mapping)"
536 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000537 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000538 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 if (globals == Py_None) {
540 globals = PyEval_GetGlobals();
541 if (locals == Py_None)
542 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000543 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000545 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000546
Georg Brandl77c85e62005-09-15 10:46:13 +0000547 if (globals == NULL || locals == NULL) {
548 PyErr_SetString(PyExc_TypeError,
549 "eval must be given globals and locals "
550 "when called without a frame");
551 return NULL;
552 }
553
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
555 if (PyDict_SetItemString(globals, "__builtins__",
556 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000557 return NULL;
558 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000559
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000560 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000561 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000562 PyErr_SetString(PyExc_TypeError,
563 "code object passed to eval() may not contain free variables");
564 return NULL;
565 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000566 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000567 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000568
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000569 if (!PyString_Check(cmd) &&
570 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000572 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000573 return NULL;
574 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000575 cf.cf_flags = 0;
576
577#ifdef Py_USING_UNICODE
578 if (PyUnicode_Check(cmd)) {
579 tmp = PyUnicode_AsUTF8String(cmd);
580 if (tmp == NULL)
581 return NULL;
582 cmd = tmp;
583 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
584 }
585#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000586 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
587 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000588 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000589 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590 while (*str == ' ' || *str == '\t')
591 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000592
Tim Peters9fa96be2001-08-17 23:04:59 +0000593 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000594 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
595 Py_XDECREF(tmp);
596 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000597}
598
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000599PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000600"eval(source[, globals[, locals]]) -> value\n\
601\n\
602Evaluate the source in the context of globals and locals.\n\
603The source may be a string representing a Python expression\n\
604or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000605The globals must be a dictionary and locals can be any mappping,\n\
606defaulting to the current globals and locals.\n\
607If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000608
609
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000611builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000612{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000613 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614 PyObject *globals = Py_None, *locals = Py_None;
615 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000616 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000617 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000618 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000619
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000620 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000622 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000623 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000624 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000625 if (locals != Py_None && !PyMapping_Check(locals)) {
626 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
627 return NULL;
628 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 if (globals == Py_None) {
630 globals = PyEval_GetGlobals();
631 if (locals == Py_None)
632 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000633 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000635 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
637 if (PyDict_SetItemString(globals, "__builtins__",
638 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000639 return NULL;
640 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000641
642 exists = 0;
643 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000644#if defined(PLAN9)
645 {
646 Dir *d;
647
648 if ((d = dirstat(filename))!=nil) {
649 if(d->mode & DMDIR)
650 werrstr("is a directory");
651 else
652 exists = 1;
653 free(d);
654 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000655 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000656#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000657 if (object_exists(filename)) {
658 if (isdir(filename))
659 errno = EISDIR;
660 else
661 exists = 1;
662 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000663#else /* standard Posix */
664 {
665 struct stat s;
666 if (stat(filename, &s) == 0) {
667 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000668# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000669 errno = EOS2ERR;
670# else
671 errno = EISDIR;
672# endif
673 else
674 exists = 1;
675 }
676 }
677#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000678
679 if (exists) {
680 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000681 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000682 Py_END_ALLOW_THREADS
683
684 if (fp == NULL) {
685 exists = 0;
686 }
687 }
688
689 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000690 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000691 return NULL;
692 }
Tim Peters5ba58662001-07-16 02:29:45 +0000693 cf.cf_flags = 0;
694 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000695 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000696 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000697 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000698 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000699 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000700 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000701}
702
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000703PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000704"execfile(filename[, globals[, locals]])\n\
705\n\
706Read and execute a Python script from a file.\n\
707The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000708globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000709
710
Guido van Rossum79f25d91997-04-29 20:08:16 +0000711static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000712builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000713{
Guido van Rossum950ff291998-06-29 13:38:57 +0000714 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000715 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000716
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000717 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000718 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000719#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000720 if (PyUnicode_Check(name)) {
721 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
722 if (name == NULL)
723 return NULL;
724 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000725#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000726
727 if (!PyString_Check(name)) {
728 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000729 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000730 return NULL;
731 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000732 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000733 if (result == NULL && dflt != NULL &&
734 PyErr_ExceptionMatches(PyExc_AttributeError))
735 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000736 PyErr_Clear();
737 Py_INCREF(dflt);
738 result = dflt;
739 }
740 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000741}
742
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000743PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000744"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000745\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000746Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
747When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000748exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000749
750
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000752builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000753{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000755
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 d = PyEval_GetGlobals();
757 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000758 return d;
759}
760
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000761PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000762"globals() -> dictionary\n\
763\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000764Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000765
766
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000768builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000769{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyObject *v;
771 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000772
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000773 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000774 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000775#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000776 if (PyUnicode_Check(name)) {
777 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
778 if (name == NULL)
779 return NULL;
780 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000781#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000782
783 if (!PyString_Check(name)) {
784 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000785 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000786 return NULL;
787 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000789 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000790 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000791 Py_INCREF(Py_False);
792 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000793 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000794 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000795 Py_INCREF(Py_True);
796 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000797}
798
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000799PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000800"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000801\n\
802Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000803(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000804
805
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000807builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000808{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000809 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000810}
811
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000812PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000813"id(object) -> integer\n\
814\n\
815Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000816simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000817
818
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000820builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000821{
822 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 PyObject *it; /* the iterator object */
824 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825 } sequence;
826
Guido van Rossum79f25d91997-04-29 20:08:16 +0000827 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000828 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000829 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000830 register int i, j;
831
Guido van Rossum79f25d91997-04-29 20:08:16 +0000832 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000833 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834 PyErr_SetString(PyExc_TypeError,
835 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000836 return NULL;
837 }
838
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000840 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000841
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000842 if (func == Py_None && n == 1) {
843 /* map(None, S) is the same as list(S). */
844 return PySequence_List(PyTuple_GetItem(args, 1));
845 }
846
Tim Peters4e9afdc2001-05-03 23:54:49 +0000847 /* Get space for sequence descriptors. Must NULL out the iterator
848 * pointers so that jumping to Fail_2 later doesn't see trash.
849 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
851 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000852 return NULL;
853 }
854 for (i = 0; i < n; ++i) {
855 seqs[i].it = (PyObject*)NULL;
856 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000857 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000858
Tim Peters4e9afdc2001-05-03 23:54:49 +0000859 /* Do a first pass to obtain iterators for the arguments, and set len
860 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000861 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000862 len = 0;
863 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
864 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000865 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000866
Tim Peters4e9afdc2001-05-03 23:54:49 +0000867 /* Get iterator. */
868 curseq = PyTuple_GetItem(args, i+1);
869 sqp->it = PyObject_GetIter(curseq);
870 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000871 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000872 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000873 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000874 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000875 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876 goto Fail_2;
877 }
878
Tim Peters4e9afdc2001-05-03 23:54:49 +0000879 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000880 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000881 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000882 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
883 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
884 goto Fail_2;
885 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000886 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000887 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000888 }
889 if (curlen > len)
890 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000891 }
892
Tim Peters4e9afdc2001-05-03 23:54:49 +0000893 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000895 goto Fail_2;
896
Tim Peters4e9afdc2001-05-03 23:54:49 +0000897 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000898 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000900 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000901
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000903 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000904 else if ((alist = PyTuple_New(n)) == NULL)
905 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000906
907 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000908 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 Py_INCREF(Py_None);
910 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000911 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000912 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000913 item = PyIter_Next(sqp->it);
914 if (item)
915 ++numactive;
916 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000917 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000918 Py_XDECREF(alist);
919 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000920 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000921 Py_INCREF(Py_None);
922 item = Py_None;
923 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000924 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000925 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000926 if (alist)
927 PyTuple_SET_ITEM(alist, j, item);
928 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000929 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000930 }
931
Guido van Rossum32120311995-07-10 13:52:21 +0000932 if (!alist)
933 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000934
Tim Peters4e9afdc2001-05-03 23:54:49 +0000935 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000937 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000938 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000939
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000941 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000942 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 value = PyEval_CallObject(func, alist);
944 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000945 if (value == NULL)
946 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000947 }
948 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000949 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000950 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000951 if (status < 0)
952 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000953 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000954 else if (PyList_SetItem(result, i, value) < 0)
955 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000956 }
957
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000958 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
959 goto Fail_1;
960
Tim Peters4e9afdc2001-05-03 23:54:49 +0000961 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000962
Guido van Rossum12d12c51993-10-26 17:58:25 +0000963Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000965Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000966 result = NULL;
967Succeed:
968 assert(seqs);
969 for (i = 0; i < n; ++i)
970 Py_XDECREF(seqs[i].it);
971 PyMem_DEL(seqs);
972 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000973}
974
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976"map(function, sequence[, sequence, ...]) -> list\n\
977\n\
978Return a list of the results of applying the function to the items of\n\
979the argument sequence(s). If more than one sequence is given, the\n\
980function is called with an argument list consisting of the corresponding\n\
981item of each sequence, substituting None for missing values when not all\n\
982sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000983the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000984
985
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000987builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000988{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000989 PyObject *v;
990 PyObject *name;
991 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000992
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000993 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000994 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000996 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000997 Py_INCREF(Py_None);
998 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000999}
1000
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001001PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001002"setattr(object, name, value)\n\
1003\n\
1004Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001005``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001006
1007
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001009builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001010{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001011 PyObject *v;
1012 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001013
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001014 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001015 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001016 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001017 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001018 Py_INCREF(Py_None);
1019 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001020}
1021
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001022PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001023"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001024\n\
1025Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001026``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001027
1028
Guido van Rossum79f25d91997-04-29 20:08:16 +00001029static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001030builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001031{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001032 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001033
Guido van Rossum79f25d91997-04-29 20:08:16 +00001034 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001035 if (x == -1)
1036 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001038}
1039
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001040PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001041"hash(object) -> integer\n\
1042\n\
1043Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001044the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001045
1046
Guido van Rossum79f25d91997-04-29 20:08:16 +00001047static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001048builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001049{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001050 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001051 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001052
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001053 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001054 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001055 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001056 "hex() argument can't be converted to hex");
1057 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001058 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001059 res = (*nb->nb_hex)(v);
1060 if (res && !PyString_Check(res)) {
1061 PyErr_Format(PyExc_TypeError,
1062 "__hex__ returned non-string (type %.200s)",
1063 res->ob_type->tp_name);
1064 Py_DECREF(res);
1065 return NULL;
1066 }
1067 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001068}
1069
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001070PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001071"hex(number) -> string\n\
1072\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001073Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001074
1075
Tim Petersdbd9ba62000-07-09 03:09:57 +00001076static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001077
Guido van Rossum79f25d91997-04-29 20:08:16 +00001078static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001079builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001080{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001081 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001082 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083 PyObject *res;
1084 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001085 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001086
1087 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001088 if (line == NULL)
1089 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001090 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001091 return NULL;
1092 while (*str == ' ' || *str == '\t')
1093 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094 globals = PyEval_GetGlobals();
1095 locals = PyEval_GetLocals();
1096 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1097 if (PyDict_SetItemString(globals, "__builtins__",
1098 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001099 return NULL;
1100 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001101 cf.cf_flags = 0;
1102 PyEval_MergeCompilerFlags(&cf);
1103 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001104 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001105 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001106}
1107
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001108PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001109"input([prompt]) -> value\n\
1110\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001111Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001112
1113
Guido van Rossume8811f81997-02-14 15:48:05 +00001114static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001115builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001116{
1117 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001118 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001119 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001120 if (!PyString_CheckExact(s)) {
1121 PyErr_SetString(PyExc_TypeError,
1122 "can't intern subclass of string");
1123 return NULL;
1124 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001125 Py_INCREF(s);
1126 PyString_InternInPlace(&s);
1127 return s;
1128}
1129
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001130PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001131"intern(string) -> string\n\
1132\n\
1133``Intern'' the given string. This enters the string in the (global)\n\
1134table of interned strings whose purpose is to speed up dictionary lookups.\n\
1135Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001136same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001137
1138
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001140builtin_iter(PyObject *self, PyObject *args)
1141{
1142 PyObject *v, *w = NULL;
1143
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001144 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001145 return NULL;
1146 if (w == NULL)
1147 return PyObject_GetIter(v);
1148 if (!PyCallable_Check(v)) {
1149 PyErr_SetString(PyExc_TypeError,
1150 "iter(v, w): v must be callable");
1151 return NULL;
1152 }
1153 return PyCallIter_New(v, w);
1154}
1155
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001156PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001157"iter(collection) -> iterator\n\
1158iter(callable, sentinel) -> iterator\n\
1159\n\
1160Get an iterator from an object. In the first form, the argument must\n\
1161supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001162In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001163
1164
1165static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001166builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001167{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001168 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001169
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001170 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001171 if (res < 0 && PyErr_Occurred())
1172 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001173 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001174}
1175
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001176PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001177"len(object) -> integer\n\
1178\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001179Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001180
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001183builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001184{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187 d = PyEval_GetLocals();
1188 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001189 return d;
1190}
1191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193"locals() -> dictionary\n\
1194\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001195Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001196
1197
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001199min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001200{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001201 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001202 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001203
Guido van Rossum79f25d91997-04-29 20:08:16 +00001204 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001205 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001206 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001207 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001208
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001209 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1210 keyfunc = PyDict_GetItemString(kwds, "key");
1211 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001212 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001213 "%s() got an unexpected keyword argument", name);
1214 return NULL;
1215 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001216 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217
Tim Petersc3074532001-05-03 07:00:32 +00001218 it = PyObject_GetIter(v);
1219 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001220 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001221
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001222 maxitem = NULL; /* the result */
1223 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001224 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001225 /* get the value from the key function */
1226 if (keyfunc != NULL) {
1227 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1228 if (val == NULL)
1229 goto Fail_it_item;
1230 }
1231 /* no key function; the value is the item */
1232 else {
1233 val = item;
1234 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001235 }
Tim Petersc3074532001-05-03 07:00:32 +00001236
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001237 /* maximum value and item are unset; set them */
1238 if (maxval == NULL) {
1239 maxitem = item;
1240 maxval = val;
1241 }
1242 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001243 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001244 int cmp = PyObject_RichCompareBool(val, maxval, op);
1245 if (cmp < 0)
1246 goto Fail_it_item_and_val;
1247 else if (cmp > 0) {
1248 Py_DECREF(maxval);
1249 Py_DECREF(maxitem);
1250 maxval = val;
1251 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001252 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001253 else {
1254 Py_DECREF(item);
1255 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001256 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001257 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001258 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001259 if (PyErr_Occurred())
1260 goto Fail_it;
1261 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001262 PyErr_Format(PyExc_ValueError,
1263 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001264 assert(maxitem == NULL);
1265 }
1266 else
1267 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001268 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001269 return maxitem;
1270
1271Fail_it_item_and_val:
1272 Py_DECREF(val);
1273Fail_it_item:
1274 Py_DECREF(item);
1275Fail_it:
1276 Py_XDECREF(maxval);
1277 Py_XDECREF(maxitem);
1278 Py_DECREF(it);
1279 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001280}
1281
Guido van Rossum79f25d91997-04-29 20:08:16 +00001282static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001283builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001284{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001285 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001286}
1287
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001288PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001289"min(iterable[, key=func]) -> value\n\
1290min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001291\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001292With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001293With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001294
1295
Guido van Rossum79f25d91997-04-29 20:08:16 +00001296static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001297builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001298{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001299 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300}
1301
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001302PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001303"max(iterable[, key=func]) -> value\n\
1304max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001305\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001307With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001308
1309
Guido van Rossum79f25d91997-04-29 20:08:16 +00001310static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001311builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001312{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001313 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001314 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001315
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001316 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1317 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001319 "oct() argument can't be converted to oct");
1320 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001321 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001322 res = (*nb->nb_oct)(v);
1323 if (res && !PyString_Check(res)) {
1324 PyErr_Format(PyExc_TypeError,
1325 "__oct__ returned non-string (type %.200s)",
1326 res->ob_type->tp_name);
1327 Py_DECREF(res);
1328 return NULL;
1329 }
1330 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001331}
1332
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001333PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001334"oct(number) -> string\n\
1335\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001336Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001337
1338
Guido van Rossum79f25d91997-04-29 20:08:16 +00001339static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001340builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001341{
Guido van Rossum09095f32000-03-10 23:00:52 +00001342 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001343 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001345 if (PyString_Check(obj)) {
1346 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001347 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001348 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001349 return PyInt_FromLong(ord);
1350 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001351#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001352 } else if (PyUnicode_Check(obj)) {
1353 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001354 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001355 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001356 return PyInt_FromLong(ord);
1357 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001358#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001359 } else {
1360 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001361 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001362 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001363 return NULL;
1364 }
1365
Guido van Rossumad991772001-01-12 16:03:05 +00001366 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001367 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001368 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001369 size);
1370 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001371}
1372
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001373PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001374"ord(c) -> integer\n\
1375\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001376Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001377
1378
Guido van Rossum79f25d91997-04-29 20:08:16 +00001379static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001380builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001381{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001382 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001383
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001384 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001385 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001386 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001387}
1388
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001389PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001390"pow(x, y[, z]) -> number\n\
1391\n\
1392With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001393equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001394
1395
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001396
1397/* Return number of items in range (lo, hi, step), when arguments are
1398 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1399 * & only if the true value is too large to fit in a signed long.
1400 * Arguments MUST return 1 with either PyInt_Check() or
1401 * PyLong_Check(). Return -1 when there is an error.
1402 */
1403static long
1404get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1405{
1406 /* -------------------------------------------------------------
1407 Algorithm is equal to that of get_len_of_range(), but it operates
1408 on PyObjects (which are assumed to be PyLong or PyInt objects).
1409 ---------------------------------------------------------------*/
1410 long n;
1411 PyObject *diff = NULL;
1412 PyObject *one = NULL;
1413 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1414 /* holds sub-expression evaluations */
1415
1416 /* if (lo >= hi), return length of 0. */
1417 if (PyObject_Compare(lo, hi) >= 0)
1418 return 0;
1419
1420 if ((one = PyLong_FromLong(1L)) == NULL)
1421 goto Fail;
1422
1423 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1424 goto Fail;
1425
1426 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1427 goto Fail;
1428
1429 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1430 goto Fail;
1431
1432 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1433 goto Fail;
1434
1435 n = PyLong_AsLong(tmp3);
1436 if (PyErr_Occurred()) { /* Check for Overflow */
1437 PyErr_Clear();
1438 goto Fail;
1439 }
1440
1441 Py_DECREF(tmp3);
1442 Py_DECREF(tmp2);
1443 Py_DECREF(diff);
1444 Py_DECREF(tmp1);
1445 Py_DECREF(one);
1446 return n;
1447
1448 Fail:
1449 Py_XDECREF(tmp3);
1450 Py_XDECREF(tmp2);
1451 Py_XDECREF(diff);
1452 Py_XDECREF(tmp1);
1453 Py_XDECREF(one);
1454 return -1;
1455}
1456
1457/* An extension of builtin_range() that handles the case when PyLong
1458 * arguments are given. */
1459static PyObject *
1460handle_range_longs(PyObject *self, PyObject *args)
1461{
1462 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001463 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001464 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001465
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001466 PyObject *curnum = NULL;
1467 PyObject *v = NULL;
1468 long bign;
1469 int i, n;
1470 int cmp_result;
1471
Tim Peters874e1f72003-04-13 22:13:08 +00001472 PyObject *zero = PyLong_FromLong(0);
1473
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001474 if (zero == NULL)
1475 return NULL;
1476
Tim Peters874e1f72003-04-13 22:13:08 +00001477 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1478 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001479 return NULL;
1480 }
1481
Tim Peters874e1f72003-04-13 22:13:08 +00001482 /* Figure out which way we were called, supply defaults, and be
1483 * sure to incref everything so that the decrefs at the end
1484 * are correct.
1485 */
1486 assert(ilow != NULL);
1487 if (ihigh == NULL) {
1488 /* only 1 arg -- it's the upper limit */
1489 ihigh = ilow;
1490 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001491 }
Tim Peters874e1f72003-04-13 22:13:08 +00001492 assert(ihigh != NULL);
1493 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001494
Tim Peters874e1f72003-04-13 22:13:08 +00001495 /* ihigh correct now; do ilow */
1496 if (ilow == NULL)
1497 ilow = zero;
1498 Py_INCREF(ilow);
1499
1500 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001501 if (istep == NULL) {
1502 istep = PyLong_FromLong(1L);
1503 if (istep == NULL)
1504 goto Fail;
1505 }
1506 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001507 Py_INCREF(istep);
1508 }
1509
Tim Peters874e1f72003-04-13 22:13:08 +00001510 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001511 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001512 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001513 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001514 goto Fail;
1515 }
1516
Tim Peters874e1f72003-04-13 22:13:08 +00001517 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001518 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001519 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001520 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001521 goto Fail;
1522 }
1523
1524 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001525 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001526 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001527 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001528 goto Fail;
1529 }
1530
1531 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1532 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001533 if (cmp_result == 0) {
1534 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001535 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001536 goto Fail;
1537 }
1538
1539 if (cmp_result > 0)
1540 bign = get_len_of_range_longs(ilow, ihigh, istep);
1541 else {
1542 PyObject *neg_istep = PyNumber_Negative(istep);
1543 if (neg_istep == NULL)
1544 goto Fail;
1545 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1546 Py_DECREF(neg_istep);
1547 }
1548
1549 n = (int)bign;
1550 if (bign < 0 || (long)n != bign) {
1551 PyErr_SetString(PyExc_OverflowError,
1552 "range() result has too many items");
1553 goto Fail;
1554 }
1555
1556 v = PyList_New(n);
1557 if (v == NULL)
1558 goto Fail;
1559
1560 curnum = ilow;
1561 Py_INCREF(curnum);
1562
1563 for (i = 0; i < n; i++) {
1564 PyObject *w = PyNumber_Long(curnum);
1565 PyObject *tmp_num;
1566 if (w == NULL)
1567 goto Fail;
1568
1569 PyList_SET_ITEM(v, i, w);
1570
1571 tmp_num = PyNumber_Add(curnum, istep);
1572 if (tmp_num == NULL)
1573 goto Fail;
1574
1575 Py_DECREF(curnum);
1576 curnum = tmp_num;
1577 }
Tim Peters874e1f72003-04-13 22:13:08 +00001578 Py_DECREF(ilow);
1579 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001580 Py_DECREF(istep);
1581 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001582 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001583 return v;
1584
1585 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001586 Py_DECREF(ilow);
1587 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001588 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001589 Py_DECREF(zero);
1590 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001591 Py_XDECREF(v);
1592 return NULL;
1593}
1594
Guido van Rossum124eff01999-02-23 16:11:01 +00001595/* Return number of items in range/xrange (lo, hi, step). step > 0
1596 * required. Return a value < 0 if & only if the true value is too
1597 * large to fit in a signed long.
1598 */
1599static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001600get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001601{
1602 /* -------------------------------------------------------------
1603 If lo >= hi, the range is empty.
1604 Else if n values are in the range, the last one is
1605 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1606 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1607 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1608 the RHS is non-negative and so truncation is the same as the
1609 floor. Letting M be the largest positive long, the worst case
1610 for the RHS numerator is hi=M, lo=-M-1, and then
1611 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1612 precision to compute the RHS exactly.
1613 ---------------------------------------------------------------*/
1614 long n = 0;
1615 if (lo < hi) {
1616 unsigned long uhi = (unsigned long)hi;
1617 unsigned long ulo = (unsigned long)lo;
1618 unsigned long diff = uhi - ulo - 1;
1619 n = (long)(diff / (unsigned long)step + 1);
1620 }
1621 return n;
1622}
1623
Guido van Rossum79f25d91997-04-29 20:08:16 +00001624static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001625builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001626{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001627 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001628 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001629 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001630
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001632
Guido van Rossum79f25d91997-04-29 20:08:16 +00001633 if (PyTuple_Size(args) <= 1) {
1634 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001635 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001636 &ihigh)) {
1637 PyErr_Clear();
1638 return handle_range_longs(self, args);
1639 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001640 }
1641 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001642 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001643 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001644 &ilow, &ihigh, &istep)) {
1645 PyErr_Clear();
1646 return handle_range_longs(self, args);
1647 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001648 }
1649 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001650 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001651 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001652 return NULL;
1653 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001654 if (istep > 0)
1655 bign = get_len_of_range(ilow, ihigh, istep);
1656 else
1657 bign = get_len_of_range(ihigh, ilow, -istep);
1658 n = (int)bign;
1659 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001660 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001661 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001662 return NULL;
1663 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001664 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001665 if (v == NULL)
1666 return NULL;
1667 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001668 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001669 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001670 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001671 return NULL;
1672 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001673 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001674 ilow += istep;
1675 }
1676 return v;
1677}
1678
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001679PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001680"range([start,] stop[, step]) -> list of integers\n\
1681\n\
1682Return a list containing an arithmetic progression of integers.\n\
1683range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1684When step is given, it specifies the increment (or decrement).\n\
1685For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001686These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001687
1688
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001690builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001691{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001692 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001693 PyObject *fin = PySys_GetObject("stdin");
1694 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001695
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001696 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001697 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001698
1699 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001700 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001701 return NULL;
1702 }
1703 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001704 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001705 return NULL;
1706 }
1707 if (PyFile_SoftSpace(fout, 0)) {
1708 if (PyFile_WriteString(" ", fout) != 0)
1709 return NULL;
1710 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001711 if (PyFile_Check(fin) && PyFile_Check(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001712 && isatty(fileno(PyFile_AsFile(fin)))
1713 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001715 char *prompt;
1716 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001718 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001719 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001720 if (po == NULL)
1721 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001722 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001723 if (prompt == NULL)
1724 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001725 }
1726 else {
1727 po = NULL;
1728 prompt = "";
1729 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001730 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001731 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001732 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001733 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001734 if (!PyErr_Occurred())
1735 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001736 return NULL;
1737 }
1738 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001739 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001740 result = NULL;
1741 }
1742 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001743 size_t len = strlen(s);
1744 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001745 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001746 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001747 result = NULL;
1748 }
1749 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001750 result = PyString_FromStringAndSize(s,
1751 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001752 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001753 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001754 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001755 return result;
1756 }
Guido van Rossum90933611991-06-07 16:10:43 +00001757 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001758 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001759 return NULL;
1760 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001761 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001762}
1763
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001764PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001765"raw_input([prompt]) -> string\n\
1766\n\
1767Read a string from standard input. The trailing newline is stripped.\n\
1768If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1769On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001770is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001771
1772
Guido van Rossum79f25d91997-04-29 20:08:16 +00001773static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001774builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001775{
Tim Peters15d81ef2001-05-04 04:39:21 +00001776 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001777
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001778 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001779 return NULL;
1780 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001781 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001782
Tim Peters15d81ef2001-05-04 04:39:21 +00001783 it = PyObject_GetIter(seq);
1784 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001786 "reduce() arg 2 must support iteration");
1787 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001788 return NULL;
1789 }
1790
Guido van Rossum79f25d91997-04-29 20:08:16 +00001791 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001792 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001793
Tim Peters15d81ef2001-05-04 04:39:21 +00001794 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001795 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001796
1797 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 Py_DECREF(args);
1799 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001800 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001801 }
1802
Tim Peters15d81ef2001-05-04 04:39:21 +00001803 op2 = PyIter_Next(it);
1804 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001805 if (PyErr_Occurred())
1806 goto Fail;
1807 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001808 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001809
Guido van Rossum2d951851994-08-29 12:52:16 +00001810 if (result == NULL)
1811 result = op2;
1812 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813 PyTuple_SetItem(args, 0, result);
1814 PyTuple_SetItem(args, 1, op2);
1815 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001816 goto Fail;
1817 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001818 }
1819
Guido van Rossum79f25d91997-04-29 20:08:16 +00001820 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001821
Guido van Rossum2d951851994-08-29 12:52:16 +00001822 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001824 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001825
Tim Peters15d81ef2001-05-04 04:39:21 +00001826 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001827 return result;
1828
Guido van Rossum2d951851994-08-29 12:52:16 +00001829Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830 Py_XDECREF(args);
1831 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001832 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001833 return NULL;
1834}
1835
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001836PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001837"reduce(function, sequence[, initial]) -> value\n\
1838\n\
1839Apply a function of two arguments cumulatively to the items of a sequence,\n\
1840from left to right, so as to reduce the sequence to a single value.\n\
1841For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1842((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1843of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001844sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001845
1846
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001848builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001849{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001850 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001851}
1852
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001853PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001854"reload(module) -> module\n\
1855\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001856Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001857
1858
Guido van Rossum79f25d91997-04-29 20:08:16 +00001859static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001860builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001861{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001862 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001863}
1864
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001865PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001866"repr(object) -> string\n\
1867\n\
1868Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001869For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001870
1871
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00001873builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001874{
Georg Brandlccadf842006-03-31 18:54:53 +00001875 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001876 double f;
1877 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001878 int i;
Georg Brandlccadf842006-03-31 18:54:53 +00001879 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001880
Georg Brandlccadf842006-03-31 18:54:53 +00001881 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1882 kwlist, &number, &ndigits))
1883 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001884 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001885 i = abs(ndigits);
1886 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001887 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001888 if (ndigits < 0)
Georg Brandlccadf842006-03-31 18:54:53 +00001889 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001890 else
Georg Brandlccadf842006-03-31 18:54:53 +00001891 number *= f;
1892 if (number >= 0.0)
1893 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001894 else
Georg Brandlccadf842006-03-31 18:54:53 +00001895 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001896 if (ndigits < 0)
Georg Brandlccadf842006-03-31 18:54:53 +00001897 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001898 else
Georg Brandlccadf842006-03-31 18:54:53 +00001899 number /= f;
1900 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001901}
1902
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001903PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001904"round(number[, ndigits]) -> floating point number\n\
1905\n\
1906Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001907This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001908
Raymond Hettinger64958a12003-12-17 20:43:33 +00001909static PyObject *
1910builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1911{
1912 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1913 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001914 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001915 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001916
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001917 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001918 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1919 kwlist, &seq, &compare, &keyfunc, &reverse))
1920 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001921
1922 newlist = PySequence_List(seq);
1923 if (newlist == NULL)
1924 return NULL;
1925
1926 callable = PyObject_GetAttrString(newlist, "sort");
1927 if (callable == NULL) {
1928 Py_DECREF(newlist);
1929 return NULL;
1930 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001931
Raymond Hettinger64958a12003-12-17 20:43:33 +00001932 newargs = PyTuple_GetSlice(args, 1, 4);
1933 if (newargs == NULL) {
1934 Py_DECREF(newlist);
1935 Py_DECREF(callable);
1936 return NULL;
1937 }
1938
1939 v = PyObject_Call(callable, newargs, kwds);
1940 Py_DECREF(newargs);
1941 Py_DECREF(callable);
1942 if (v == NULL) {
1943 Py_DECREF(newlist);
1944 return NULL;
1945 }
1946 Py_DECREF(v);
1947 return newlist;
1948}
1949
1950PyDoc_STRVAR(sorted_doc,
1951"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001952
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001954builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001955{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 PyObject *v = NULL;
1957 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001958
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001959 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001960 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001961 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001962 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001963 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001964 if (!PyErr_Occurred())
1965 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001966 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001967 }
1968 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001970 }
1971 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001973 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001975 "vars() argument must have __dict__ attribute");
1976 return NULL;
1977 }
1978 }
1979 return d;
1980}
1981
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001982PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001983"vars([object]) -> dictionary\n\
1984\n\
1985Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001986With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001987
Alex Martellia70b1912003-04-22 08:12:33 +00001988
1989static PyObject*
1990builtin_sum(PyObject *self, PyObject *args)
1991{
1992 PyObject *seq;
1993 PyObject *result = NULL;
1994 PyObject *temp, *item, *iter;
1995
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001996 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001997 return NULL;
1998
1999 iter = PyObject_GetIter(seq);
2000 if (iter == NULL)
2001 return NULL;
2002
2003 if (result == NULL) {
2004 result = PyInt_FromLong(0);
2005 if (result == NULL) {
2006 Py_DECREF(iter);
2007 return NULL;
2008 }
2009 } else {
2010 /* reject string values for 'start' parameter */
2011 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2012 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002013 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002014 Py_DECREF(iter);
2015 return NULL;
2016 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002017 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002018 }
2019
2020 for(;;) {
2021 item = PyIter_Next(iter);
2022 if (item == NULL) {
2023 /* error, or end-of-sequence */
2024 if (PyErr_Occurred()) {
2025 Py_DECREF(result);
2026 result = NULL;
2027 }
2028 break;
2029 }
Alex Martellia253e182003-10-25 23:24:14 +00002030 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002031 Py_DECREF(result);
2032 Py_DECREF(item);
2033 result = temp;
2034 if (result == NULL)
2035 break;
2036 }
2037 Py_DECREF(iter);
2038 return result;
2039}
2040
2041PyDoc_STRVAR(sum_doc,
2042"sum(sequence, start=0) -> value\n\
2043\n\
2044Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
2045of parameter 'start'. When the sequence is empty, returns start.");
2046
2047
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002048static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002049builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002050{
2051 PyObject *inst;
2052 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002053 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002054
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002055 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002056 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002057
Guido van Rossum823649d2001-03-21 18:40:58 +00002058 retval = PyObject_IsInstance(inst, cls);
2059 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002060 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002061 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002062}
2063
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002064PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002065"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002066\n\
2067Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002068With a type as second argument, return whether that is the object's type.\n\
2069The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002070isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002071
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002072
2073static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002074builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002075{
2076 PyObject *derived;
2077 PyObject *cls;
2078 int retval;
2079
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002080 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002081 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002082
Guido van Rossum823649d2001-03-21 18:40:58 +00002083 retval = PyObject_IsSubclass(derived, cls);
2084 if (retval < 0)
2085 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002086 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002087}
2088
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002089PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002090"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002091\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002092Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2093When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2094is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002095
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002096
Barry Warsawbd599b52000-08-03 15:45:29 +00002097static PyObject*
2098builtin_zip(PyObject *self, PyObject *args)
2099{
2100 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002101 const Py_ssize_t itemsize = PySequence_Length(args);
2102 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002103 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002104 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002105
Raymond Hettingereaef6152003-08-02 07:42:57 +00002106 if (itemsize == 0)
2107 return PyList_New(0);
2108
Barry Warsawbd599b52000-08-03 15:45:29 +00002109 /* args must be a tuple */
2110 assert(PyTuple_Check(args));
2111
Tim Peters39a86c22002-05-12 07:19:38 +00002112 /* Guess at result length: the shortest of the input lengths.
2113 If some argument refuses to say, we refuse to guess too, lest
2114 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002115 len = -1; /* unknown */
2116 for (i = 0; i < itemsize; ++i) {
2117 PyObject *item = PyTuple_GET_ITEM(args, i);
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002118 Py_ssize_t thislen = _PyObject_LengthHint(item);
Tim Peters39a86c22002-05-12 07:19:38 +00002119 if (thislen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00002120 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
2121 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
2122 return NULL;
2123 }
Tim Peters67d687a2002-04-29 21:27:32 +00002124 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00002125 len = -1;
2126 break;
2127 }
Tim Peters67d687a2002-04-29 21:27:32 +00002128 else if (len < 0 || thislen < len)
2129 len = thislen;
2130 }
2131
Tim Peters8572b4f2001-05-06 01:05:02 +00002132 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002133 if (len < 0)
2134 len = 10; /* arbitrary */
2135 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002136 return NULL;
2137
Tim Peters8572b4f2001-05-06 01:05:02 +00002138 /* obtain iterators */
2139 itlist = PyTuple_New(itemsize);
2140 if (itlist == NULL)
2141 goto Fail_ret;
2142 for (i = 0; i < itemsize; ++i) {
2143 PyObject *item = PyTuple_GET_ITEM(args, i);
2144 PyObject *it = PyObject_GetIter(item);
2145 if (it == NULL) {
2146 if (PyErr_ExceptionMatches(PyExc_TypeError))
2147 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00002148 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00002149 i+1);
2150 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002151 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002152 PyTuple_SET_ITEM(itlist, i, it);
2153 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002154
Tim Peters8572b4f2001-05-06 01:05:02 +00002155 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002156 for (i = 0; ; ++i) {
2157 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002158 PyObject *next = PyTuple_New(itemsize);
2159 if (!next)
2160 goto Fail_ret_itlist;
2161
Tim Peters67d687a2002-04-29 21:27:32 +00002162 for (j = 0; j < itemsize; j++) {
2163 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002164 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002165 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002166 if (PyErr_Occurred()) {
2167 Py_DECREF(ret);
2168 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002169 }
2170 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002171 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002172 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002173 }
Tim Peters67d687a2002-04-29 21:27:32 +00002174 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002175 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002176
Tim Peters67d687a2002-04-29 21:27:32 +00002177 if (i < len)
2178 PyList_SET_ITEM(ret, i, next);
2179 else {
2180 int status = PyList_Append(ret, next);
2181 Py_DECREF(next);
2182 ++len;
2183 if (status < 0)
2184 goto Fail_ret_itlist;
2185 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002186 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002187
Tim Peters67d687a2002-04-29 21:27:32 +00002188Done:
2189 if (ret != NULL && i < len) {
2190 /* The list is too big. */
2191 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2192 return NULL;
2193 }
2194 return ret;
2195
Tim Peters8572b4f2001-05-06 01:05:02 +00002196Fail_ret_itlist:
2197 Py_DECREF(itlist);
2198Fail_ret:
2199 Py_DECREF(ret);
2200 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002201}
2202
2203
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002204PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002205"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2206\n\
2207Return a list of tuples, where each tuple contains the i-th element\n\
2208from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002209in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002210
2211
Guido van Rossum79f25d91997-04-29 20:08:16 +00002212static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002213 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2214 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002215 {"all", builtin_all, METH_O, all_doc},
2216 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002217 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002218 {"callable", builtin_callable, METH_O, callable_doc},
2219 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2220 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2221 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2222 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2223 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2224 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2225 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2226 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2227 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2228 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2229 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2230 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2231 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2232 {"hash", builtin_hash, METH_O, hash_doc},
2233 {"hex", builtin_hex, METH_O, hex_doc},
2234 {"id", builtin_id, METH_O, id_doc},
2235 {"input", builtin_input, METH_VARARGS, input_doc},
2236 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2237 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2238 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2239 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2240 {"len", builtin_len, METH_O, len_doc},
2241 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2242 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002243 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2244 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002245 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002246 {"ord", builtin_ord, METH_O, ord_doc},
2247 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2248 {"range", builtin_range, METH_VARARGS, range_doc},
2249 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2250 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2251 {"reload", builtin_reload, METH_O, reload_doc},
2252 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002253 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002254 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002255 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002256 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002257#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002258 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002259#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002260 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002261 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002262 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002263};
2264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002265PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002266"Built-in functions, exceptions, and other objects.\n\
2267\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002268Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002269
Guido van Rossum25ce5661997-08-02 03:10:38 +00002270PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002271_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002272{
Fred Drake5550de32000-06-20 04:54:19 +00002273 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002274 mod = Py_InitModule4("__builtin__", builtin_methods,
2275 builtin_doc, (PyObject *)NULL,
2276 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002277 if (mod == NULL)
2278 return NULL;
2279 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002280
Tim Peters7571a0f2003-03-23 17:52:28 +00002281#ifdef Py_TRACE_REFS
2282 /* __builtin__ exposes a number of statically allocated objects
2283 * that, before this code was added in 2.3, never showed up in
2284 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2285 * result, programs leaking references to None and False (etc)
2286 * couldn't be diagnosed by examining sys.getobjects(0).
2287 */
2288#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2289#else
2290#define ADD_TO_ALL(OBJECT) (void)0
2291#endif
2292
Tim Peters4b7625e2001-09-13 21:37:17 +00002293#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002294 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2295 return NULL; \
2296 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002297
2298 SETBUILTIN("None", Py_None);
2299 SETBUILTIN("Ellipsis", Py_Ellipsis);
2300 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002301 SETBUILTIN("False", Py_False);
2302 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002303 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002304 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002305 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002306 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002307#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002308 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002309#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002310 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002311 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002312 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002313 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002314 SETBUILTIN("property", &PyProperty_Type);
2315 SETBUILTIN("int", &PyInt_Type);
2316 SETBUILTIN("list", &PyList_Type);
2317 SETBUILTIN("long", &PyLong_Type);
2318 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002319 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002320 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002321 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002322 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2323 SETBUILTIN("str", &PyString_Type);
2324 SETBUILTIN("super", &PySuper_Type);
2325 SETBUILTIN("tuple", &PyTuple_Type);
2326 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002327 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002328
2329 /* Note that open() is just an alias of file(). */
2330 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002331 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002332#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002333 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002334#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002335 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002336 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2337 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002338 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002339 }
2340 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002341
Guido van Rossum25ce5661997-08-02 03:10:38 +00002342 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002343#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002344#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002345}
2346
Guido van Rossume77a7571993-11-03 15:01:26 +00002347/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002350filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002352 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002353 Py_ssize_t i, j;
2354 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossumb7b45621995-08-04 04:07:45 +00002356 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002357 if (PyTuple_CheckExact(tuple))
2358 Py_INCREF(tuple);
2359 else
2360 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002361 return tuple;
2362 }
2363
Guido van Rossum79f25d91997-04-29 20:08:16 +00002364 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002365 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002366
Guido van Rossum12d12c51993-10-26 17:58:25 +00002367 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002368 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002369 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002370
Walter Dörwald8dd19322003-02-10 17:36:40 +00002371 if (tuple->ob_type->tp_as_sequence &&
2372 tuple->ob_type->tp_as_sequence->sq_item) {
2373 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002374 if (item == NULL)
2375 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002376 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002377 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002378 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002379 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002380 if (func == Py_None) {
2381 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002382 good = item;
2383 }
2384 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002385 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002386 if (arg == NULL) {
2387 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002388 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002389 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002390 good = PyEval_CallObject(func, arg);
2391 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002392 if (good == NULL) {
2393 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002394 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002395 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002396 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002397 ok = PyObject_IsTrue(good);
2398 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002399 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002400 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002401 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002402 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002403 else
2404 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002405 }
2406
Tim Peters4324aa32001-05-28 22:30:08 +00002407 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002408 return NULL;
2409
Guido van Rossum12d12c51993-10-26 17:58:25 +00002410 return result;
2411
Guido van Rossum12d12c51993-10-26 17:58:25 +00002412Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002413 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002414 return NULL;
2415}
2416
2417
Guido van Rossume77a7571993-11-03 15:01:26 +00002418/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002419
Guido van Rossum79f25d91997-04-29 20:08:16 +00002420static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002421filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002422{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002423 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002424 Py_ssize_t i, j;
2425 Py_ssize_t len = PyString_Size(strobj);
2426 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002427
Guido van Rossum79f25d91997-04-29 20:08:16 +00002428 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002429 /* If it's a real string we can return the original,
2430 * as no character is ever false and __getitem__
2431 * does return this character. If it's a subclass
2432 * we must go through the __getitem__ loop */
2433 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002434 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002435 return strobj;
2436 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002437 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002438 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002439 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002440
Guido van Rossum12d12c51993-10-26 17:58:25 +00002441 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002442 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002443 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002444
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002445 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2446 if (item == NULL)
2447 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002448 if (func==Py_None) {
2449 ok = 1;
2450 } else {
2451 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002452 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002453 if (arg == NULL) {
2454 Py_DECREF(item);
2455 goto Fail_1;
2456 }
2457 good = PyEval_CallObject(func, arg);
2458 Py_DECREF(arg);
2459 if (good == NULL) {
2460 Py_DECREF(item);
2461 goto Fail_1;
2462 }
2463 ok = PyObject_IsTrue(good);
2464 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002465 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002466 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002467 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002468 if (!PyString_Check(item)) {
2469 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2470 " __getitem__ returned different type");
2471 Py_DECREF(item);
2472 goto Fail_1;
2473 }
2474 reslen = PyString_GET_SIZE(item);
2475 if (reslen == 1) {
2476 PyString_AS_STRING(result)[j++] =
2477 PyString_AS_STRING(item)[0];
2478 } else {
2479 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002480 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002481 if (need > outlen) {
2482 /* overallocate, to avoid reallocations */
2483 if (need<2*outlen)
2484 need = 2*outlen;
2485 if (_PyString_Resize(&result, need)) {
2486 Py_DECREF(item);
2487 return NULL;
2488 }
2489 outlen = need;
2490 }
2491 memcpy(
2492 PyString_AS_STRING(result) + j,
2493 PyString_AS_STRING(item),
2494 reslen
2495 );
2496 j += reslen;
2497 }
2498 }
Tim Peters388ed082001-04-07 20:34:48 +00002499 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002500 }
2501
Walter Dörwald903f1e02003-02-04 16:28:00 +00002502 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002503 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002504
Guido van Rossum12d12c51993-10-26 17:58:25 +00002505 return result;
2506
Guido van Rossum12d12c51993-10-26 17:58:25 +00002507Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002508 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002509 return NULL;
2510}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002511
2512#ifdef Py_USING_UNICODE
2513/* Helper for filter(): filter a Unicode object through a function */
2514
2515static PyObject *
2516filterunicode(PyObject *func, PyObject *strobj)
2517{
2518 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002519 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002520 Py_ssize_t len = PyUnicode_GetSize(strobj);
2521 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002522
2523 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002524 /* If it's a real string we can return the original,
2525 * as no character is ever false and __getitem__
2526 * does return this character. If it's a subclass
2527 * we must go through the __getitem__ loop */
2528 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002529 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002530 return strobj;
2531 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002532 }
2533 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2534 return NULL;
2535
2536 for (i = j = 0; i < len; ++i) {
2537 PyObject *item, *arg, *good;
2538 int ok;
2539
2540 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2541 if (item == NULL)
2542 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002543 if (func == Py_None) {
2544 ok = 1;
2545 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002546 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002547 if (arg == NULL) {
2548 Py_DECREF(item);
2549 goto Fail_1;
2550 }
2551 good = PyEval_CallObject(func, arg);
2552 Py_DECREF(arg);
2553 if (good == NULL) {
2554 Py_DECREF(item);
2555 goto Fail_1;
2556 }
2557 ok = PyObject_IsTrue(good);
2558 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002559 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002560 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002561 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002562 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002563 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002564 "can't filter unicode to unicode:"
2565 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002566 Py_DECREF(item);
2567 goto Fail_1;
2568 }
2569 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002570 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002571 PyUnicode_AS_UNICODE(result)[j++] =
2572 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002573 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002574 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002575 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002576 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002577 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002578 to avoid reallocations */
2579 if (need < 2 * outlen)
2580 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002581 if (PyUnicode_Resize(
2582 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002583 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002584 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002585 }
2586 outlen = need;
2587 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002588 memcpy(PyUnicode_AS_UNICODE(result) + j,
2589 PyUnicode_AS_UNICODE(item),
2590 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002591 j += reslen;
2592 }
2593 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002594 Py_DECREF(item);
2595 }
2596
Walter Dörwald903f1e02003-02-04 16:28:00 +00002597 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002598 PyUnicode_Resize(&result, j);
2599
2600 return result;
2601
2602Fail_1:
2603 Py_DECREF(result);
2604 return NULL;
2605}
2606#endif