blob: fed657ffc77eb61fc328557e61292dd7c18408dd [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde42001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028#ifdef Py_USING_UNICODE
29static PyObject *filterunicode(PyObject *, PyObject *);
30#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
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;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000040
Guido van Rossum79f25d91997-04-29 20:08:16 +000041 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000042 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000044 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000045}
46
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000047PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000048"__import__(name, globals, locals, fromlist) -> module\n\
49\n\
50Import a module. The globals are only used to determine the context;\n\
51they are not modified. The locals are currently unused. The fromlist\n\
52should be a list of names to emulate ``from name import ...'', or an\n\
53empty list to emulate ``import name''.\n\
54When importing a module from a package, note that __import__('A.B', ...)\n\
55returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000056fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000057
Guido van Rossum1ae940a1995-01-02 19:04:15 +000058
Guido van Rossum79f25d91997-04-29 20:08:16 +000059static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000060builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000061{
Guido van Rossum09df08a1998-05-22 00:51:39 +000062 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000063}
64
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000065PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000066"abs(number) -> number\n\
67\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000068Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000069
Raymond Hettinger96229b12005-03-11 06:49:40 +000070static PyObject *
71builtin_all(PyObject *self, PyObject *v)
72{
73 PyObject *it, *item;
74
75 it = PyObject_GetIter(v);
76 if (it == NULL)
77 return NULL;
78
79 while ((item = PyIter_Next(it)) != NULL) {
80 int cmp = PyObject_IsTrue(item);
81 Py_DECREF(item);
82 if (cmp < 0) {
83 Py_DECREF(it);
84 return NULL;
85 }
86 if (cmp == 0) {
87 Py_DECREF(it);
88 Py_RETURN_FALSE;
89 }
90 }
91 Py_DECREF(it);
92 if (PyErr_Occurred())
93 return NULL;
94 Py_RETURN_TRUE;
95}
96
97PyDoc_STRVAR(all_doc,
98"all(iterable) -> bool\n\
99\n\
100Return True if bool(x) is True for all values x in the iterable.");
101
102static PyObject *
103builtin_any(PyObject *self, PyObject *v)
104{
105 PyObject *it, *item;
106
107 it = PyObject_GetIter(v);
108 if (it == NULL)
109 return NULL;
110
111 while ((item = PyIter_Next(it)) != NULL) {
112 int cmp = PyObject_IsTrue(item);
113 Py_DECREF(item);
114 if (cmp < 0) {
115 Py_DECREF(it);
116 return NULL;
117 }
118 if (cmp == 1) {
119 Py_DECREF(it);
120 Py_RETURN_TRUE;
121 }
122 }
123 Py_DECREF(it);
124 if (PyErr_Occurred())
125 return NULL;
126 Py_RETURN_FALSE;
127}
128
129PyDoc_STRVAR(any_doc,
130"any(iterable) -> bool\n\
131\n\
132Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000133
Guido van Rossum79f25d91997-04-29 20:08:16 +0000134static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000135builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000136{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000137 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000138 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000139
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000140 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000141 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000142 if (alist != NULL) {
143 if (!PyTuple_Check(alist)) {
144 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000145 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000146 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000147 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000148 return NULL;
149 }
150 t = PySequence_Tuple(alist);
151 if (t == NULL)
152 return NULL;
153 alist = t;
154 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000155 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000156 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000157 PyErr_Format(PyExc_TypeError,
158 "apply() arg 3 expected dictionary, found %s",
159 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000160 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000161 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000162 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
163 finally:
164 Py_XDECREF(t);
165 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000166}
167
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000168PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000169"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000170\n\
Fred Drake7b912121999-12-23 14:16:55 +0000171Call a callable object with positional arguments taken from the tuple args,\n\
172and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000173Note that classes are callable, as are instances with a __call__() method.\n\
174\n\
175Deprecated since release 2.3. Instead, use the extended call syntax:\n\
176 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000177
178
Guido van Rossum79f25d91997-04-29 20:08:16 +0000179static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000180builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000181{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000182 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000183}
184
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000185PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000186"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000187\n\
188Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000189Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000190
191
Guido van Rossum79f25d91997-04-29 20:08:16 +0000192static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000193builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000194{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000195 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000196 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000197 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000198
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000199 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000200 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000201
Tim Peters0e57abf2001-05-02 07:39:38 +0000202 /* Strings and tuples return a result of the same type. */
203 if (PyString_Check(seq))
204 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000205#ifdef Py_USING_UNICODE
206 if (PyUnicode_Check(seq))
207 return filterunicode(func, seq);
208#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000209 if (PyTuple_Check(seq))
210 return filtertuple(func, seq);
211
Georg Brandle35b6572005-07-19 22:20:20 +0000212 /* Pre-allocate argument list tuple. */
213 arg = PyTuple_New(1);
214 if (arg == NULL)
215 return NULL;
216
Tim Peters0e57abf2001-05-02 07:39:38 +0000217 /* Get iterator. */
218 it = PyObject_GetIter(seq);
219 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000220 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000221
222 /* Guess a result list size. */
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000223 len = _PyObject_LengthCue(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000224 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000225 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
226 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
227 goto Fail_it;
228 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000229 PyErr_Clear();
230 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000231 }
232
Tim Peters0e57abf2001-05-02 07:39:38 +0000233 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000234 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000235 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000236 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000237 result = seq;
238 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000239 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000240 result = PyList_New(len);
241 if (result == NULL)
242 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000243 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000244
Tim Peters0e57abf2001-05-02 07:39:38 +0000245 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000246 j = 0;
247 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000248 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000249 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000250
Tim Peters0e57abf2001-05-02 07:39:38 +0000251 item = PyIter_Next(it);
252 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000253 if (PyErr_Occurred())
254 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000255 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000256 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000257
Neil Schemenauer68973552003-08-14 20:37:34 +0000258 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000259 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000260 }
261 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000262 PyObject *good;
263 PyTuple_SET_ITEM(arg, 0, item);
264 good = PyObject_Call(func, arg, NULL);
265 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000266 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000267 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000268 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000269 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000270 ok = PyObject_IsTrue(good);
271 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000272 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000273 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000274 if (j < len)
275 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000276 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000277 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000278 Py_DECREF(item);
279 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000280 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000281 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000282 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000283 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000284 else
285 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000286 }
287
Guido van Rossum12d12c51993-10-26 17:58:25 +0000288
Tim Peters0e57abf2001-05-02 07:39:38 +0000289 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000290 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000291 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000292
Tim Peters3c6b1482001-05-21 08:07:05 +0000293 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000294 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000295 return result;
296
Tim Peters0e57abf2001-05-02 07:39:38 +0000297Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000298 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000299Fail_it:
300 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000301Fail_arg:
302 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000303 return NULL;
304}
305
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000306PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000307"filter(function or None, sequence) -> list, tuple, or string\n"
308"\n"
309"Return those items of sequence for which function(item) is true. If\n"
310"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000311"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000312
Guido van Rossum79f25d91997-04-29 20:08:16 +0000313static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000314builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000315{
316 long x;
317 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000318
Guido van Rossum79f25d91997-04-29 20:08:16 +0000319 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000320 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000321 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000322 PyErr_SetString(PyExc_ValueError,
323 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000324 return NULL;
325 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000326 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000327 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000328}
329
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000330PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000331"chr(i) -> character\n\
332\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000333Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000334
335
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000336#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000337static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000338builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000339{
340 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000341
342 if (!PyArg_ParseTuple(args, "l:unichr", &x))
343 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000344
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000345 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000346}
347
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000348PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000349"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000350\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000351Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000352#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000353
354
355static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000356builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000357{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000358 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000359 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000360
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000361 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000362 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000363 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000364 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000365 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000366}
367
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000368PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000369"cmp(x, y) -> integer\n\
370\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000371Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000372
373
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000375builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000376{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000377 PyObject *v, *w;
378 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000379
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000380 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000381 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000383 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000384 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000385 Py_DECREF(v);
386 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000387 return res;
388}
389
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000390PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000391"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000392\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000393Return a tuple consisting of the two numeric arguments converted to\n\
394a common type, using the same rules as used by arithmetic operations.\n\
395If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000396
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000398builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000399{
400 char *str;
401 char *filename;
402 char *startstr;
403 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000404 int dont_inherit = 0;
405 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000406 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000407 PyObject *result, *cmd, *tmp = NULL;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000408 int length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000409
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000410 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000411 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000412 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000413
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000414 cf.cf_flags = supplied_flags;
415
416#ifdef Py_USING_UNICODE
417 if (PyUnicode_Check(cmd)) {
418 tmp = PyUnicode_AsUTF8String(cmd);
419 if (tmp == NULL)
420 return NULL;
421 cmd = tmp;
422 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
423 }
424#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000425 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
426 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000427 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000428 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000429 "compile() expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000430 return NULL;
431 }
432
Guido van Rossum5b722181993-03-30 17:46:03 +0000433 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000434 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000435 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000436 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000437 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000438 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000439 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000440 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000441 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000442 return NULL;
443 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000444
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000445 if (supplied_flags &
446 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
447 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000448 PyErr_SetString(PyExc_ValueError,
449 "compile(): unrecognised flags");
450 return NULL;
451 }
452 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
453
Tim Peters6cd6a822001-08-17 22:11:27 +0000454 if (!dont_inherit) {
455 PyEval_MergeCompilerFlags(&cf);
456 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000457 result = Py_CompileStringFlags(str, filename, start, &cf);
458 Py_XDECREF(tmp);
459 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000460}
461
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000462PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000463"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000464\n\
465Compile the source string (a Python module, statement or expression)\n\
466into a code object that can be executed by the exec statement or eval().\n\
467The filename will be used for run-time error messages.\n\
468The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000469single (interactive) statement, or 'eval' to compile an expression.\n\
470The flags argument, if present, controls which future statements influence\n\
471the compilation of the code.\n\
472The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
473the effects of any future statements in effect in the code calling\n\
474compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000475in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000476
Guido van Rossum79f25d91997-04-29 20:08:16 +0000477static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000478builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000479{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000480 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000481
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000482 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000483 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000484 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000485}
486
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000487PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000488"dir([object]) -> list of strings\n"
489"\n"
490"Return an alphabetized list of names comprising (some of) the attributes\n"
491"of the given object, and of attributes reachable from it:\n"
492"\n"
493"No argument: the names in the current scope.\n"
494"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000495"Type or class object: its attributes, and recursively the attributes of\n"
496" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000497"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000498" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000499
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000501builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000502{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000504
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000505 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000506 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000507 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000508}
509
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000510PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000511"divmod(x, y) -> (div, mod)\n\
512\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000513Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000514
515
Guido van Rossum79f25d91997-04-29 20:08:16 +0000516static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000517builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000518{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000519 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000520 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000521 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000522 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000523
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000524 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000525 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000526 if (locals != Py_None && !PyMapping_Check(locals)) {
527 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000528 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000529 }
530 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000531 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000532 "globals must be a real dict; try eval(expr, {}, mapping)"
533 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000534 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000535 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536 if (globals == Py_None) {
537 globals = PyEval_GetGlobals();
538 if (locals == Py_None)
539 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000540 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000542 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000543
Georg Brandl77c85e62005-09-15 10:46:13 +0000544 if (globals == NULL || locals == NULL) {
545 PyErr_SetString(PyExc_TypeError,
546 "eval must be given globals and locals "
547 "when called without a frame");
548 return NULL;
549 }
550
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
552 if (PyDict_SetItemString(globals, "__builtins__",
553 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000554 return NULL;
555 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000556
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000557 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000558 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000559 PyErr_SetString(PyExc_TypeError,
560 "code object passed to eval() may not contain free variables");
561 return NULL;
562 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000564 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000565
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000566 if (!PyString_Check(cmd) &&
567 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000568 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000569 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000570 return NULL;
571 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000572 cf.cf_flags = 0;
573
574#ifdef Py_USING_UNICODE
575 if (PyUnicode_Check(cmd)) {
576 tmp = PyUnicode_AsUTF8String(cmd);
577 if (tmp == NULL)
578 return NULL;
579 cmd = tmp;
580 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
581 }
582#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000583 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000584 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585 while (*str == ' ' || *str == '\t')
586 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000587
Tim Peters9fa96be2001-08-17 23:04:59 +0000588 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000589 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
590 Py_XDECREF(tmp);
591 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000592}
593
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000594PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000595"eval(source[, globals[, locals]]) -> value\n\
596\n\
597Evaluate the source in the context of globals and locals.\n\
598The source may be a string representing a Python expression\n\
599or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000600The globals must be a dictionary and locals can be any mappping,\n\
601defaulting to the current globals and locals.\n\
602If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000603
604
Guido van Rossum79f25d91997-04-29 20:08:16 +0000605static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000606builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000607{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000608 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 PyObject *globals = Py_None, *locals = Py_None;
610 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000611 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000612 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000613 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000615 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000617 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000618 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000619 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000620 if (locals != Py_None && !PyMapping_Check(locals)) {
621 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
622 return NULL;
623 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000624 if (globals == Py_None) {
625 globals = PyEval_GetGlobals();
626 if (locals == Py_None)
627 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000628 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000630 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
632 if (PyDict_SetItemString(globals, "__builtins__",
633 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000634 return NULL;
635 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000636
637 exists = 0;
638 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000639#if defined(PLAN9)
640 {
641 Dir *d;
642
643 if ((d = dirstat(filename))!=nil) {
644 if(d->mode & DMDIR)
645 werrstr("is a directory");
646 else
647 exists = 1;
648 free(d);
649 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000650 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000651#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000652 if (object_exists(filename)) {
653 if (isdir(filename))
654 errno = EISDIR;
655 else
656 exists = 1;
657 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000658#else /* standard Posix */
659 {
660 struct stat s;
661 if (stat(filename, &s) == 0) {
662 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000663# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000664 errno = EOS2ERR;
665# else
666 errno = EISDIR;
667# endif
668 else
669 exists = 1;
670 }
671 }
672#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000673
674 if (exists) {
675 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000676 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000677 Py_END_ALLOW_THREADS
678
679 if (fp == NULL) {
680 exists = 0;
681 }
682 }
683
684 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000685 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000686 return NULL;
687 }
Tim Peters5ba58662001-07-16 02:29:45 +0000688 cf.cf_flags = 0;
689 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000690 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000691 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000692 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000693 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000694 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000695 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000696}
697
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000698PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000699"execfile(filename[, globals[, locals]])\n\
700\n\
701Read and execute a Python script from a file.\n\
702The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000703globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000704
705
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000707builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000708{
Guido van Rossum950ff291998-06-29 13:38:57 +0000709 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000712 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000713 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000714#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000715 if (PyUnicode_Check(name)) {
716 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
717 if (name == NULL)
718 return NULL;
719 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000720#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000721
722 if (!PyString_Check(name)) {
723 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000724 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000725 return NULL;
726 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000727 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000728 if (result == NULL && dflt != NULL &&
729 PyErr_ExceptionMatches(PyExc_AttributeError))
730 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000731 PyErr_Clear();
732 Py_INCREF(dflt);
733 result = dflt;
734 }
735 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000736}
737
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000738PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000739"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000740\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000741Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
742When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000743exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000744
745
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000747builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000748{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000750
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 d = PyEval_GetGlobals();
752 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000753 return d;
754}
755
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000756PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000757"globals() -> dictionary\n\
758\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000759Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000760
761
Guido van Rossum79f25d91997-04-29 20:08:16 +0000762static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000763builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000764{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000765 PyObject *v;
766 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000767
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000768 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000769 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000770#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000771 if (PyUnicode_Check(name)) {
772 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
773 if (name == NULL)
774 return NULL;
775 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000776#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000777
778 if (!PyString_Check(name)) {
779 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000780 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000781 return NULL;
782 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000783 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000784 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000786 Py_INCREF(Py_False);
787 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000788 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000790 Py_INCREF(Py_True);
791 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000792}
793
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000794PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000795"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000796\n\
797Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000798(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000799
800
Guido van Rossum79f25d91997-04-29 20:08:16 +0000801static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000802builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000803{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000804 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000805}
806
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000807PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000808"id(object) -> integer\n\
809\n\
810Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000811simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000812
813
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000815builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000816{
817 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 PyObject *it; /* the iterator object */
819 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000820 } sequence;
821
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000823 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000824 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825 register int i, j;
826
Guido van Rossum79f25d91997-04-29 20:08:16 +0000827 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000828 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000829 PyErr_SetString(PyExc_TypeError,
830 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000831 return NULL;
832 }
833
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000835 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000836
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000837 if (func == Py_None && n == 1) {
838 /* map(None, S) is the same as list(S). */
839 return PySequence_List(PyTuple_GetItem(args, 1));
840 }
841
Tim Peters4e9afdc2001-05-03 23:54:49 +0000842 /* Get space for sequence descriptors. Must NULL out the iterator
843 * pointers so that jumping to Fail_2 later doesn't see trash.
844 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
846 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000847 return NULL;
848 }
849 for (i = 0; i < n; ++i) {
850 seqs[i].it = (PyObject*)NULL;
851 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000852 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000853
Tim Peters4e9afdc2001-05-03 23:54:49 +0000854 /* Do a first pass to obtain iterators for the arguments, and set len
855 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000856 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000857 len = 0;
858 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
859 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000860 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000861
Tim Peters4e9afdc2001-05-03 23:54:49 +0000862 /* Get iterator. */
863 curseq = PyTuple_GetItem(args, i+1);
864 sqp->it = PyObject_GetIter(curseq);
865 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000866 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000867 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000868 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000869 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000871 goto Fail_2;
872 }
873
Tim Peters4e9afdc2001-05-03 23:54:49 +0000874 /* Update len. */
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000875 curlen = _PyObject_LengthCue(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000876 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000877 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
878 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
879 goto Fail_2;
880 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000881 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000882 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000883 }
884 if (curlen > len)
885 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000886 }
887
Tim Peters4e9afdc2001-05-03 23:54:49 +0000888 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000890 goto Fail_2;
891
Tim Peters4e9afdc2001-05-03 23:54:49 +0000892 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000893 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000895 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000896
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000898 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000899 else if ((alist = PyTuple_New(n)) == NULL)
900 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000901
902 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000903 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904 Py_INCREF(Py_None);
905 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000906 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000907 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000908 item = PyIter_Next(sqp->it);
909 if (item)
910 ++numactive;
911 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000912 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000913 Py_XDECREF(alist);
914 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000915 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000916 Py_INCREF(Py_None);
917 item = Py_None;
918 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000919 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000920 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000921 if (alist)
922 PyTuple_SET_ITEM(alist, j, item);
923 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000924 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000925 }
926
Guido van Rossum32120311995-07-10 13:52:21 +0000927 if (!alist)
928 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000929
Tim Peters4e9afdc2001-05-03 23:54:49 +0000930 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000932 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000933 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000934
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000936 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000937 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 value = PyEval_CallObject(func, alist);
939 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000940 if (value == NULL)
941 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000942 }
943 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000944 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000945 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000946 if (status < 0)
947 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000948 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000949 else if (PyList_SetItem(result, i, value) < 0)
950 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000951 }
952
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000953 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
954 goto Fail_1;
955
Tim Peters4e9afdc2001-05-03 23:54:49 +0000956 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000957
Guido van Rossum12d12c51993-10-26 17:58:25 +0000958Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000960Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000961 result = NULL;
962Succeed:
963 assert(seqs);
964 for (i = 0; i < n; ++i)
965 Py_XDECREF(seqs[i].it);
966 PyMem_DEL(seqs);
967 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000968}
969
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000970PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000971"map(function, sequence[, sequence, ...]) -> list\n\
972\n\
973Return a list of the results of applying the function to the items of\n\
974the argument sequence(s). If more than one sequence is given, the\n\
975function is called with an argument list consisting of the corresponding\n\
976item of each sequence, substituting None for missing values when not all\n\
977sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000978the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000979
980
Guido van Rossum79f25d91997-04-29 20:08:16 +0000981static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000982builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000983{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 PyObject *v;
985 PyObject *name;
986 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000987
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000988 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000989 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000991 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 Py_INCREF(Py_None);
993 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000994}
995
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000996PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000997"setattr(object, name, value)\n\
998\n\
999Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001000``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001001
1002
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001004builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001005{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 PyObject *v;
1007 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001008
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001009 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001010 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001011 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001012 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 Py_INCREF(Py_None);
1014 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001015}
1016
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001017PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001018"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001019\n\
1020Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001021``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001022
1023
Guido van Rossum79f25d91997-04-29 20:08:16 +00001024static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001025builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001026{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001027 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001028
Guido van Rossum79f25d91997-04-29 20:08:16 +00001029 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001030 if (x == -1)
1031 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001033}
1034
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001035PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001036"hash(object) -> integer\n\
1037\n\
1038Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001039the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001040
1041
Guido van Rossum79f25d91997-04-29 20:08:16 +00001042static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001043builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001044{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001046 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001047
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001048 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001049 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001050 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001051 "hex() argument can't be converted to hex");
1052 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001053 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001054 res = (*nb->nb_hex)(v);
1055 if (res && !PyString_Check(res)) {
1056 PyErr_Format(PyExc_TypeError,
1057 "__hex__ returned non-string (type %.200s)",
1058 res->ob_type->tp_name);
1059 Py_DECREF(res);
1060 return NULL;
1061 }
1062 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001063}
1064
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001065PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001066"hex(number) -> string\n\
1067\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001068Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001069
1070
Tim Petersdbd9ba62000-07-09 03:09:57 +00001071static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001072
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001074builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001075{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001076 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001077 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001078 PyObject *res;
1079 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001080 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001081
1082 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001083 if (line == NULL)
1084 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001086 return NULL;
1087 while (*str == ' ' || *str == '\t')
1088 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001089 globals = PyEval_GetGlobals();
1090 locals = PyEval_GetLocals();
1091 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1092 if (PyDict_SetItemString(globals, "__builtins__",
1093 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001094 return NULL;
1095 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001096 cf.cf_flags = 0;
1097 PyEval_MergeCompilerFlags(&cf);
1098 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001101}
1102
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001103PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001104"input([prompt]) -> value\n\
1105\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001106Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001107
1108
Guido van Rossume8811f81997-02-14 15:48:05 +00001109static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001110builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001111{
1112 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001113 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001114 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001115 if (!PyString_CheckExact(s)) {
1116 PyErr_SetString(PyExc_TypeError,
1117 "can't intern subclass of string");
1118 return NULL;
1119 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001120 Py_INCREF(s);
1121 PyString_InternInPlace(&s);
1122 return s;
1123}
1124
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001125PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001126"intern(string) -> string\n\
1127\n\
1128``Intern'' the given string. This enters the string in the (global)\n\
1129table of interned strings whose purpose is to speed up dictionary lookups.\n\
1130Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001131same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001132
1133
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001135builtin_iter(PyObject *self, PyObject *args)
1136{
1137 PyObject *v, *w = NULL;
1138
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001139 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001140 return NULL;
1141 if (w == NULL)
1142 return PyObject_GetIter(v);
1143 if (!PyCallable_Check(v)) {
1144 PyErr_SetString(PyExc_TypeError,
1145 "iter(v, w): v must be callable");
1146 return NULL;
1147 }
1148 return PyCallIter_New(v, w);
1149}
1150
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001151PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001152"iter(collection) -> iterator\n\
1153iter(callable, sentinel) -> iterator\n\
1154\n\
1155Get an iterator from an object. In the first form, the argument must\n\
1156supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001157In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001158
1159
1160static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001161builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001162{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001163 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001164
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001165 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001166 if (res < 0 && PyErr_Occurred())
1167 return NULL;
1168 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001169}
1170
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001171PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001172"len(object) -> integer\n\
1173\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001174Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001175
1176
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001178builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001179{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001180 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182 d = PyEval_GetLocals();
1183 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001184 return d;
1185}
1186
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188"locals() -> dictionary\n\
1189\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001190Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001191
1192
Guido van Rossum79f25d91997-04-29 20:08:16 +00001193static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001194min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001195{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001196 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001197 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001198
Guido van Rossum79f25d91997-04-29 20:08:16 +00001199 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001200 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001201 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001202 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001203
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001204 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1205 keyfunc = PyDict_GetItemString(kwds, "key");
1206 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001207 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001208 "%s() got an unexpected keyword argument", name);
1209 return NULL;
1210 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001211 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001212
Tim Petersc3074532001-05-03 07:00:32 +00001213 it = PyObject_GetIter(v);
1214 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001215 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001216
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217 maxitem = NULL; /* the result */
1218 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001219 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001220 /* get the value from the key function */
1221 if (keyfunc != NULL) {
1222 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1223 if (val == NULL)
1224 goto Fail_it_item;
1225 }
1226 /* no key function; the value is the item */
1227 else {
1228 val = item;
1229 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001230 }
Tim Petersc3074532001-05-03 07:00:32 +00001231
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001232 /* maximum value and item are unset; set them */
1233 if (maxval == NULL) {
1234 maxitem = item;
1235 maxval = val;
1236 }
1237 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001238 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001239 int cmp = PyObject_RichCompareBool(val, maxval, op);
1240 if (cmp < 0)
1241 goto Fail_it_item_and_val;
1242 else if (cmp > 0) {
1243 Py_DECREF(maxval);
1244 Py_DECREF(maxitem);
1245 maxval = val;
1246 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001247 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001248 else {
1249 Py_DECREF(item);
1250 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001251 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001252 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001253 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001254 if (PyErr_Occurred())
1255 goto Fail_it;
1256 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001257 PyErr_Format(PyExc_ValueError,
1258 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001259 assert(maxitem == NULL);
1260 }
1261 else
1262 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001263 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001264 return maxitem;
1265
1266Fail_it_item_and_val:
1267 Py_DECREF(val);
1268Fail_it_item:
1269 Py_DECREF(item);
1270Fail_it:
1271 Py_XDECREF(maxval);
1272 Py_XDECREF(maxitem);
1273 Py_DECREF(it);
1274 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001275}
1276
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001278builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001279{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001280 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281}
1282
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001283PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001284"min(iterable[, key=func]) -> value\n\
1285min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001286\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001287With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001288With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001289
1290
Guido van Rossum79f25d91997-04-29 20:08:16 +00001291static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001292builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001293{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001294 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295}
1296
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001297PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001298"max(iterable[, key=func]) -> value\n\
1299max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001300\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001301With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001302With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001303
1304
Guido van Rossum79f25d91997-04-29 20:08:16 +00001305static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001306builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001307{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001308 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001309 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001310
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001311 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1312 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001313 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001314 "oct() argument can't be converted to oct");
1315 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001316 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001317 res = (*nb->nb_oct)(v);
1318 if (res && !PyString_Check(res)) {
1319 PyErr_Format(PyExc_TypeError,
1320 "__oct__ returned non-string (type %.200s)",
1321 res->ob_type->tp_name);
1322 Py_DECREF(res);
1323 return NULL;
1324 }
1325 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001326}
1327
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001328PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001329"oct(number) -> string\n\
1330\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001331Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001332
1333
Guido van Rossum79f25d91997-04-29 20:08:16 +00001334static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001335builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001336{
Guido van Rossum09095f32000-03-10 23:00:52 +00001337 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001338 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001339
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001340 if (PyString_Check(obj)) {
1341 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001342 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001343 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001344 return PyInt_FromLong(ord);
1345 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001346#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001347 } else if (PyUnicode_Check(obj)) {
1348 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001349 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001350 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001351 return PyInt_FromLong(ord);
1352 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001353#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001354 } else {
1355 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001356 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001357 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001358 return NULL;
1359 }
1360
Guido van Rossumad991772001-01-12 16:03:05 +00001361 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001362 "ord() expected a character, "
1363 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001364 size);
1365 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001366}
1367
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001368PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001369"ord(c) -> integer\n\
1370\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001371Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001372
1373
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001375builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001376{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001377 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001378
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001379 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001380 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001381 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001382}
1383
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001384PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001385"pow(x, y[, z]) -> number\n\
1386\n\
1387With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001388equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001389
1390
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001391
1392/* Return number of items in range (lo, hi, step), when arguments are
1393 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1394 * & only if the true value is too large to fit in a signed long.
1395 * Arguments MUST return 1 with either PyInt_Check() or
1396 * PyLong_Check(). Return -1 when there is an error.
1397 */
1398static long
1399get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1400{
1401 /* -------------------------------------------------------------
1402 Algorithm is equal to that of get_len_of_range(), but it operates
1403 on PyObjects (which are assumed to be PyLong or PyInt objects).
1404 ---------------------------------------------------------------*/
1405 long n;
1406 PyObject *diff = NULL;
1407 PyObject *one = NULL;
1408 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1409 /* holds sub-expression evaluations */
1410
1411 /* if (lo >= hi), return length of 0. */
1412 if (PyObject_Compare(lo, hi) >= 0)
1413 return 0;
1414
1415 if ((one = PyLong_FromLong(1L)) == NULL)
1416 goto Fail;
1417
1418 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1419 goto Fail;
1420
1421 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1422 goto Fail;
1423
1424 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1425 goto Fail;
1426
1427 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1428 goto Fail;
1429
1430 n = PyLong_AsLong(tmp3);
1431 if (PyErr_Occurred()) { /* Check for Overflow */
1432 PyErr_Clear();
1433 goto Fail;
1434 }
1435
1436 Py_DECREF(tmp3);
1437 Py_DECREF(tmp2);
1438 Py_DECREF(diff);
1439 Py_DECREF(tmp1);
1440 Py_DECREF(one);
1441 return n;
1442
1443 Fail:
1444 Py_XDECREF(tmp3);
1445 Py_XDECREF(tmp2);
1446 Py_XDECREF(diff);
1447 Py_XDECREF(tmp1);
1448 Py_XDECREF(one);
1449 return -1;
1450}
1451
1452/* An extension of builtin_range() that handles the case when PyLong
1453 * arguments are given. */
1454static PyObject *
1455handle_range_longs(PyObject *self, PyObject *args)
1456{
1457 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001458 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001459 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001460
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001461 PyObject *curnum = NULL;
1462 PyObject *v = NULL;
1463 long bign;
1464 int i, n;
1465 int cmp_result;
1466
Tim Peters874e1f72003-04-13 22:13:08 +00001467 PyObject *zero = PyLong_FromLong(0);
1468
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001469 if (zero == NULL)
1470 return NULL;
1471
Tim Peters874e1f72003-04-13 22:13:08 +00001472 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1473 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001474 return NULL;
1475 }
1476
Tim Peters874e1f72003-04-13 22:13:08 +00001477 /* Figure out which way we were called, supply defaults, and be
1478 * sure to incref everything so that the decrefs at the end
1479 * are correct.
1480 */
1481 assert(ilow != NULL);
1482 if (ihigh == NULL) {
1483 /* only 1 arg -- it's the upper limit */
1484 ihigh = ilow;
1485 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001486 }
Tim Peters874e1f72003-04-13 22:13:08 +00001487 assert(ihigh != NULL);
1488 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001489
Tim Peters874e1f72003-04-13 22:13:08 +00001490 /* ihigh correct now; do ilow */
1491 if (ilow == NULL)
1492 ilow = zero;
1493 Py_INCREF(ilow);
1494
1495 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001496 if (istep == NULL) {
1497 istep = PyLong_FromLong(1L);
1498 if (istep == NULL)
1499 goto Fail;
1500 }
1501 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001502 Py_INCREF(istep);
1503 }
1504
Tim Peters874e1f72003-04-13 22:13:08 +00001505 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001506 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001507 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001508 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001509 goto Fail;
1510 }
1511
Tim Peters874e1f72003-04-13 22:13:08 +00001512 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001513 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001514 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001515 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001516 goto Fail;
1517 }
1518
1519 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001520 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001521 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001522 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001523 goto Fail;
1524 }
1525
1526 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1527 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001528 if (cmp_result == 0) {
1529 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001530 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001531 goto Fail;
1532 }
1533
1534 if (cmp_result > 0)
1535 bign = get_len_of_range_longs(ilow, ihigh, istep);
1536 else {
1537 PyObject *neg_istep = PyNumber_Negative(istep);
1538 if (neg_istep == NULL)
1539 goto Fail;
1540 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1541 Py_DECREF(neg_istep);
1542 }
1543
1544 n = (int)bign;
1545 if (bign < 0 || (long)n != bign) {
1546 PyErr_SetString(PyExc_OverflowError,
1547 "range() result has too many items");
1548 goto Fail;
1549 }
1550
1551 v = PyList_New(n);
1552 if (v == NULL)
1553 goto Fail;
1554
1555 curnum = ilow;
1556 Py_INCREF(curnum);
1557
1558 for (i = 0; i < n; i++) {
1559 PyObject *w = PyNumber_Long(curnum);
1560 PyObject *tmp_num;
1561 if (w == NULL)
1562 goto Fail;
1563
1564 PyList_SET_ITEM(v, i, w);
1565
1566 tmp_num = PyNumber_Add(curnum, istep);
1567 if (tmp_num == NULL)
1568 goto Fail;
1569
1570 Py_DECREF(curnum);
1571 curnum = tmp_num;
1572 }
Tim Peters874e1f72003-04-13 22:13:08 +00001573 Py_DECREF(ilow);
1574 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001575 Py_DECREF(istep);
1576 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001577 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001578 return v;
1579
1580 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001581 Py_DECREF(ilow);
1582 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001583 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001584 Py_DECREF(zero);
1585 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001586 Py_XDECREF(v);
1587 return NULL;
1588}
1589
Guido van Rossum124eff01999-02-23 16:11:01 +00001590/* Return number of items in range/xrange (lo, hi, step). step > 0
1591 * required. Return a value < 0 if & only if the true value is too
1592 * large to fit in a signed long.
1593 */
1594static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001595get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001596{
1597 /* -------------------------------------------------------------
1598 If lo >= hi, the range is empty.
1599 Else if n values are in the range, the last one is
1600 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1601 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1602 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1603 the RHS is non-negative and so truncation is the same as the
1604 floor. Letting M be the largest positive long, the worst case
1605 for the RHS numerator is hi=M, lo=-M-1, and then
1606 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1607 precision to compute the RHS exactly.
1608 ---------------------------------------------------------------*/
1609 long n = 0;
1610 if (lo < hi) {
1611 unsigned long uhi = (unsigned long)hi;
1612 unsigned long ulo = (unsigned long)lo;
1613 unsigned long diff = uhi - ulo - 1;
1614 n = (long)(diff / (unsigned long)step + 1);
1615 }
1616 return n;
1617}
1618
Guido van Rossum79f25d91997-04-29 20:08:16 +00001619static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001620builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001621{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001622 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001623 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001624 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001625
Guido van Rossum79f25d91997-04-29 20:08:16 +00001626 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001627
Guido van Rossum79f25d91997-04-29 20:08:16 +00001628 if (PyTuple_Size(args) <= 1) {
1629 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001630 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001631 &ihigh)) {
1632 PyErr_Clear();
1633 return handle_range_longs(self, args);
1634 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001635 }
1636 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001637 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001638 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001639 &ilow, &ihigh, &istep)) {
1640 PyErr_Clear();
1641 return handle_range_longs(self, args);
1642 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001643 }
1644 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001645 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001646 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001647 return NULL;
1648 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001649 if (istep > 0)
1650 bign = get_len_of_range(ilow, ihigh, istep);
1651 else
1652 bign = get_len_of_range(ihigh, ilow, -istep);
1653 n = (int)bign;
1654 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001655 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001656 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001657 return NULL;
1658 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001659 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001660 if (v == NULL)
1661 return NULL;
1662 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001663 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001664 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001665 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001666 return NULL;
1667 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001668 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001669 ilow += istep;
1670 }
1671 return v;
1672}
1673
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001674PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001675"range([start,] stop[, step]) -> list of integers\n\
1676\n\
1677Return a list containing an arithmetic progression of integers.\n\
1678range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1679When step is given, it specifies the increment (or decrement).\n\
1680For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001681These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001682
1683
Guido van Rossum79f25d91997-04-29 20:08:16 +00001684static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001685builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001687 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001688 PyObject *fin = PySys_GetObject("stdin");
1689 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001690
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001691 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001692 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001693
1694 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001695 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001696 return NULL;
1697 }
1698 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001699 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001700 return NULL;
1701 }
1702 if (PyFile_SoftSpace(fout, 0)) {
1703 if (PyFile_WriteString(" ", fout) != 0)
1704 return NULL;
1705 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001706 if (PyFile_Check(fin) && PyFile_Check(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001707 && isatty(fileno(PyFile_AsFile(fin)))
1708 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001710 char *prompt;
1711 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001712 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001713 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001715 if (po == NULL)
1716 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001718 if (prompt == NULL)
1719 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001720 }
1721 else {
1722 po = NULL;
1723 prompt = "";
1724 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001725 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001726 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001727 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001728 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001729 if (!PyErr_Occurred())
1730 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001731 return NULL;
1732 }
1733 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001734 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001735 result = NULL;
1736 }
1737 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001738 size_t len = strlen(s);
1739 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001740 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001741 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001742 result = NULL;
1743 }
1744 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001745 result = PyString_FromStringAndSize(s,
1746 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001747 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001748 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001749 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001750 return result;
1751 }
Guido van Rossum90933611991-06-07 16:10:43 +00001752 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001753 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001754 return NULL;
1755 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001756 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001757}
1758
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001759PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001760"raw_input([prompt]) -> string\n\
1761\n\
1762Read a string from standard input. The trailing newline is stripped.\n\
1763If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1764On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001765is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001766
1767
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001769builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001770{
Tim Peters15d81ef2001-05-04 04:39:21 +00001771 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001772
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001773 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001774 return NULL;
1775 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001776 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001777
Tim Peters15d81ef2001-05-04 04:39:21 +00001778 it = PyObject_GetIter(seq);
1779 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001781 "reduce() arg 2 must support iteration");
1782 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001783 return NULL;
1784 }
1785
Guido van Rossum79f25d91997-04-29 20:08:16 +00001786 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001787 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001788
Tim Peters15d81ef2001-05-04 04:39:21 +00001789 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001790 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001791
1792 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793 Py_DECREF(args);
1794 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001795 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001796 }
1797
Tim Peters15d81ef2001-05-04 04:39:21 +00001798 op2 = PyIter_Next(it);
1799 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001800 if (PyErr_Occurred())
1801 goto Fail;
1802 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001803 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001804
Guido van Rossum2d951851994-08-29 12:52:16 +00001805 if (result == NULL)
1806 result = op2;
1807 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001808 PyTuple_SetItem(args, 0, result);
1809 PyTuple_SetItem(args, 1, op2);
1810 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001811 goto Fail;
1812 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001813 }
1814
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001816
Guido van Rossum2d951851994-08-29 12:52:16 +00001817 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001819 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001820
Tim Peters15d81ef2001-05-04 04:39:21 +00001821 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001822 return result;
1823
Guido van Rossum2d951851994-08-29 12:52:16 +00001824Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825 Py_XDECREF(args);
1826 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001827 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001828 return NULL;
1829}
1830
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001831PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001832"reduce(function, sequence[, initial]) -> value\n\
1833\n\
1834Apply a function of two arguments cumulatively to the items of a sequence,\n\
1835from left to right, so as to reduce the sequence to a single value.\n\
1836For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1837((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1838of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001839sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001840
1841
Guido van Rossum79f25d91997-04-29 20:08:16 +00001842static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001843builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001844{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001845 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001846}
1847
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001848PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001849"reload(module) -> module\n\
1850\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001851Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001852
1853
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001855builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001856{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001857 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001858}
1859
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001860PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001861"repr(object) -> string\n\
1862\n\
1863Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001864For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001865
1866
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001868builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001869{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001870 double x;
1871 double f;
1872 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001873 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001874
Guido van Rossum79f25d91997-04-29 20:08:16 +00001875 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001876 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001877 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001878 i = abs(ndigits);
1879 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001880 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001881 if (ndigits < 0)
1882 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001883 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001884 x *= f;
1885 if (x >= 0.0)
1886 x = floor(x + 0.5);
1887 else
1888 x = ceil(x - 0.5);
1889 if (ndigits < 0)
1890 x *= f;
1891 else
1892 x /= f;
1893 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001894}
1895
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001896PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001897"round(number[, ndigits]) -> floating point number\n\
1898\n\
1899Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001900This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001901
Raymond Hettinger64958a12003-12-17 20:43:33 +00001902static PyObject *
1903builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1904{
1905 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1906 PyObject *callable;
1907 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1908 long reverse;
1909
Armin Rigo71d7e702005-09-20 18:13:03 +00001910 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1911 kwlist, &seq, &compare, &keyfunc, &reverse))
1912 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001913
1914 newlist = PySequence_List(seq);
1915 if (newlist == NULL)
1916 return NULL;
1917
1918 callable = PyObject_GetAttrString(newlist, "sort");
1919 if (callable == NULL) {
1920 Py_DECREF(newlist);
1921 return NULL;
1922 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001923
Raymond Hettinger64958a12003-12-17 20:43:33 +00001924 newargs = PyTuple_GetSlice(args, 1, 4);
1925 if (newargs == NULL) {
1926 Py_DECREF(newlist);
1927 Py_DECREF(callable);
1928 return NULL;
1929 }
1930
1931 v = PyObject_Call(callable, newargs, kwds);
1932 Py_DECREF(newargs);
1933 Py_DECREF(callable);
1934 if (v == NULL) {
1935 Py_DECREF(newlist);
1936 return NULL;
1937 }
1938 Py_DECREF(v);
1939 return newlist;
1940}
1941
1942PyDoc_STRVAR(sorted_doc,
1943"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001944
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001946builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001947{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 PyObject *v = NULL;
1949 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001950
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001951 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001952 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001953 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001955 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 if (!PyErr_Occurred())
1957 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001958 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001959 }
1960 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001962 }
1963 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001964 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001965 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001966 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001967 "vars() argument must have __dict__ attribute");
1968 return NULL;
1969 }
1970 }
1971 return d;
1972}
1973
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001974PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001975"vars([object]) -> dictionary\n\
1976\n\
1977Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001978With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001979
Alex Martellia70b1912003-04-22 08:12:33 +00001980
1981static PyObject*
1982builtin_sum(PyObject *self, PyObject *args)
1983{
1984 PyObject *seq;
1985 PyObject *result = NULL;
1986 PyObject *temp, *item, *iter;
1987
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001988 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001989 return NULL;
1990
1991 iter = PyObject_GetIter(seq);
1992 if (iter == NULL)
1993 return NULL;
1994
1995 if (result == NULL) {
1996 result = PyInt_FromLong(0);
1997 if (result == NULL) {
1998 Py_DECREF(iter);
1999 return NULL;
2000 }
2001 } else {
2002 /* reject string values for 'start' parameter */
2003 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2004 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002005 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002006 Py_DECREF(iter);
2007 return NULL;
2008 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002009 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002010 }
2011
2012 for(;;) {
2013 item = PyIter_Next(iter);
2014 if (item == NULL) {
2015 /* error, or end-of-sequence */
2016 if (PyErr_Occurred()) {
2017 Py_DECREF(result);
2018 result = NULL;
2019 }
2020 break;
2021 }
Alex Martellia253e182003-10-25 23:24:14 +00002022 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002023 Py_DECREF(result);
2024 Py_DECREF(item);
2025 result = temp;
2026 if (result == NULL)
2027 break;
2028 }
2029 Py_DECREF(iter);
2030 return result;
2031}
2032
2033PyDoc_STRVAR(sum_doc,
2034"sum(sequence, start=0) -> value\n\
2035\n\
2036Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
2037of parameter 'start'. When the sequence is empty, returns start.");
2038
2039
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002040static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002041builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002042{
2043 PyObject *inst;
2044 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002045 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002046
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002047 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002048 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002049
Guido van Rossum823649d2001-03-21 18:40:58 +00002050 retval = PyObject_IsInstance(inst, cls);
2051 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002052 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002053 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002054}
2055
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002056PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002057"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002058\n\
2059Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002060With a type as second argument, return whether that is the object's type.\n\
2061The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002062isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002063
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002064
2065static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002066builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002067{
2068 PyObject *derived;
2069 PyObject *cls;
2070 int retval;
2071
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002072 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002073 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002074
Guido van Rossum823649d2001-03-21 18:40:58 +00002075 retval = PyObject_IsSubclass(derived, cls);
2076 if (retval < 0)
2077 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002078 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002079}
2080
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002081PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002082"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002083\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002084Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2085When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2086is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002087
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002088
Barry Warsawbd599b52000-08-03 15:45:29 +00002089static PyObject*
2090builtin_zip(PyObject *self, PyObject *args)
2091{
2092 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00002093 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002094 int i;
2095 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00002096 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002097
Raymond Hettingereaef6152003-08-02 07:42:57 +00002098 if (itemsize == 0)
2099 return PyList_New(0);
2100
Barry Warsawbd599b52000-08-03 15:45:29 +00002101 /* args must be a tuple */
2102 assert(PyTuple_Check(args));
2103
Tim Peters39a86c22002-05-12 07:19:38 +00002104 /* Guess at result length: the shortest of the input lengths.
2105 If some argument refuses to say, we refuse to guess too, lest
2106 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002107 len = -1; /* unknown */
2108 for (i = 0; i < itemsize; ++i) {
2109 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger6b27cda2005-09-24 21:23:05 +00002110 int thislen = _PyObject_LengthCue(item);
Tim Peters39a86c22002-05-12 07:19:38 +00002111 if (thislen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00002112 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
2113 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
2114 return NULL;
2115 }
Tim Peters67d687a2002-04-29 21:27:32 +00002116 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00002117 len = -1;
2118 break;
2119 }
Tim Peters67d687a2002-04-29 21:27:32 +00002120 else if (len < 0 || thislen < len)
2121 len = thislen;
2122 }
2123
Tim Peters8572b4f2001-05-06 01:05:02 +00002124 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002125 if (len < 0)
2126 len = 10; /* arbitrary */
2127 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002128 return NULL;
2129
Tim Peters8572b4f2001-05-06 01:05:02 +00002130 /* obtain iterators */
2131 itlist = PyTuple_New(itemsize);
2132 if (itlist == NULL)
2133 goto Fail_ret;
2134 for (i = 0; i < itemsize; ++i) {
2135 PyObject *item = PyTuple_GET_ITEM(args, i);
2136 PyObject *it = PyObject_GetIter(item);
2137 if (it == NULL) {
2138 if (PyErr_ExceptionMatches(PyExc_TypeError))
2139 PyErr_Format(PyExc_TypeError,
2140 "zip argument #%d must support iteration",
2141 i+1);
2142 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002143 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002144 PyTuple_SET_ITEM(itlist, i, it);
2145 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002146
Tim Peters8572b4f2001-05-06 01:05:02 +00002147 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002148 for (i = 0; ; ++i) {
2149 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002150 PyObject *next = PyTuple_New(itemsize);
2151 if (!next)
2152 goto Fail_ret_itlist;
2153
Tim Peters67d687a2002-04-29 21:27:32 +00002154 for (j = 0; j < itemsize; j++) {
2155 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002156 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002157 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002158 if (PyErr_Occurred()) {
2159 Py_DECREF(ret);
2160 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002161 }
2162 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002163 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002164 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002165 }
Tim Peters67d687a2002-04-29 21:27:32 +00002166 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002167 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002168
Tim Peters67d687a2002-04-29 21:27:32 +00002169 if (i < len)
2170 PyList_SET_ITEM(ret, i, next);
2171 else {
2172 int status = PyList_Append(ret, next);
2173 Py_DECREF(next);
2174 ++len;
2175 if (status < 0)
2176 goto Fail_ret_itlist;
2177 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002178 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002179
Tim Peters67d687a2002-04-29 21:27:32 +00002180Done:
2181 if (ret != NULL && i < len) {
2182 /* The list is too big. */
2183 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2184 return NULL;
2185 }
2186 return ret;
2187
Tim Peters8572b4f2001-05-06 01:05:02 +00002188Fail_ret_itlist:
2189 Py_DECREF(itlist);
2190Fail_ret:
2191 Py_DECREF(ret);
2192 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002193}
2194
2195
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002196PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002197"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2198\n\
2199Return a list of tuples, where each tuple contains the i-th element\n\
2200from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002201in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002202
2203
Guido van Rossum79f25d91997-04-29 20:08:16 +00002204static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002205 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2206 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002207 {"all", builtin_all, METH_O, all_doc},
2208 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002209 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002210 {"callable", builtin_callable, METH_O, callable_doc},
2211 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2212 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2213 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2214 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2215 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2216 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2217 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2218 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2219 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2220 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2221 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2222 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2223 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2224 {"hash", builtin_hash, METH_O, hash_doc},
2225 {"hex", builtin_hex, METH_O, hex_doc},
2226 {"id", builtin_id, METH_O, id_doc},
2227 {"input", builtin_input, METH_VARARGS, input_doc},
2228 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2229 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2230 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2231 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2232 {"len", builtin_len, METH_O, len_doc},
2233 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2234 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002235 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2236 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002237 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002238 {"ord", builtin_ord, METH_O, ord_doc},
2239 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2240 {"range", builtin_range, METH_VARARGS, range_doc},
2241 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2242 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2243 {"reload", builtin_reload, METH_O, reload_doc},
2244 {"repr", builtin_repr, METH_O, repr_doc},
2245 {"round", builtin_round, METH_VARARGS, round_doc},
2246 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002247 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002248 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002249#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002250 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002251#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002252 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002253 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002254 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002255};
2256
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002257PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002258"Built-in functions, exceptions, and other objects.\n\
2259\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002260Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002261
Guido van Rossum25ce5661997-08-02 03:10:38 +00002262PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002263_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002264{
Fred Drake5550de32000-06-20 04:54:19 +00002265 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002266 mod = Py_InitModule4("__builtin__", builtin_methods,
2267 builtin_doc, (PyObject *)NULL,
2268 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002269 if (mod == NULL)
2270 return NULL;
2271 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002272
Tim Peters7571a0f2003-03-23 17:52:28 +00002273#ifdef Py_TRACE_REFS
2274 /* __builtin__ exposes a number of statically allocated objects
2275 * that, before this code was added in 2.3, never showed up in
2276 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2277 * result, programs leaking references to None and False (etc)
2278 * couldn't be diagnosed by examining sys.getobjects(0).
2279 */
2280#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2281#else
2282#define ADD_TO_ALL(OBJECT) (void)0
2283#endif
2284
Tim Peters4b7625e2001-09-13 21:37:17 +00002285#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002286 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2287 return NULL; \
2288 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002289
2290 SETBUILTIN("None", Py_None);
2291 SETBUILTIN("Ellipsis", Py_Ellipsis);
2292 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002293 SETBUILTIN("False", Py_False);
2294 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002295 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002296 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002297 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002298 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002299#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002300 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002301#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002302 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002303 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002304 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002305 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002306 SETBUILTIN("property", &PyProperty_Type);
2307 SETBUILTIN("int", &PyInt_Type);
2308 SETBUILTIN("list", &PyList_Type);
2309 SETBUILTIN("long", &PyLong_Type);
2310 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002311 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002312 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002313 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002314 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2315 SETBUILTIN("str", &PyString_Type);
2316 SETBUILTIN("super", &PySuper_Type);
2317 SETBUILTIN("tuple", &PyTuple_Type);
2318 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002319 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002320
2321 /* Note that open() is just an alias of file(). */
2322 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002323 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002324#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002325 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002326#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002327 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002328 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2329 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002330 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002331 }
2332 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002333
Guido van Rossum25ce5661997-08-02 03:10:38 +00002334 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002335#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002336#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002337}
2338
Guido van Rossume77a7571993-11-03 15:01:26 +00002339/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002340
Guido van Rossum79f25d91997-04-29 20:08:16 +00002341static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002342filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002344 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002345 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002346 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347
Guido van Rossumb7b45621995-08-04 04:07:45 +00002348 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002349 if (PyTuple_CheckExact(tuple))
2350 Py_INCREF(tuple);
2351 else
2352 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002353 return tuple;
2354 }
2355
Guido van Rossum79f25d91997-04-29 20:08:16 +00002356 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002357 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002358
Guido van Rossum12d12c51993-10-26 17:58:25 +00002359 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002360 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002361 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002362
Walter Dörwald8dd19322003-02-10 17:36:40 +00002363 if (tuple->ob_type->tp_as_sequence &&
2364 tuple->ob_type->tp_as_sequence->sq_item) {
2365 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002366 if (item == NULL)
2367 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002368 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002369 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002370 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002371 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002372 if (func == Py_None) {
2373 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002374 good = item;
2375 }
2376 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002377 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002378 if (arg == NULL) {
2379 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002380 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002381 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002382 good = PyEval_CallObject(func, arg);
2383 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002384 if (good == NULL) {
2385 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002386 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002387 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002388 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002389 ok = PyObject_IsTrue(good);
2390 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002391 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002392 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002393 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002394 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002395 else
2396 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002397 }
2398
Tim Peters4324aa32001-05-28 22:30:08 +00002399 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002400 return NULL;
2401
Guido van Rossum12d12c51993-10-26 17:58:25 +00002402 return result;
2403
Guido van Rossum12d12c51993-10-26 17:58:25 +00002404Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002405 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002406 return NULL;
2407}
2408
2409
Guido van Rossume77a7571993-11-03 15:01:26 +00002410/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002411
Guido van Rossum79f25d91997-04-29 20:08:16 +00002412static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002413filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002414{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002415 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002416 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002417 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002418 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002419
Guido van Rossum79f25d91997-04-29 20:08:16 +00002420 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002421 /* If it's a real string we can return the original,
2422 * as no character is ever false and __getitem__
2423 * does return this character. If it's a subclass
2424 * we must go through the __getitem__ loop */
2425 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002426 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002427 return strobj;
2428 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002429 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002430 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002431 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002432
Guido van Rossum12d12c51993-10-26 17:58:25 +00002433 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002434 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002435 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002436
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002437 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2438 if (item == NULL)
2439 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002440 if (func==Py_None) {
2441 ok = 1;
2442 } else {
2443 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002444 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002445 if (arg == NULL) {
2446 Py_DECREF(item);
2447 goto Fail_1;
2448 }
2449 good = PyEval_CallObject(func, arg);
2450 Py_DECREF(arg);
2451 if (good == NULL) {
2452 Py_DECREF(item);
2453 goto Fail_1;
2454 }
2455 ok = PyObject_IsTrue(good);
2456 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002457 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002458 if (ok) {
2459 int reslen;
2460 if (!PyString_Check(item)) {
2461 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2462 " __getitem__ returned different type");
2463 Py_DECREF(item);
2464 goto Fail_1;
2465 }
2466 reslen = PyString_GET_SIZE(item);
2467 if (reslen == 1) {
2468 PyString_AS_STRING(result)[j++] =
2469 PyString_AS_STRING(item)[0];
2470 } else {
2471 /* do we need more space? */
2472 int need = j + reslen + len-i-1;
2473 if (need > outlen) {
2474 /* overallocate, to avoid reallocations */
2475 if (need<2*outlen)
2476 need = 2*outlen;
2477 if (_PyString_Resize(&result, need)) {
2478 Py_DECREF(item);
2479 return NULL;
2480 }
2481 outlen = need;
2482 }
2483 memcpy(
2484 PyString_AS_STRING(result) + j,
2485 PyString_AS_STRING(item),
2486 reslen
2487 );
2488 j += reslen;
2489 }
2490 }
Tim Peters388ed082001-04-07 20:34:48 +00002491 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002492 }
2493
Walter Dörwald903f1e02003-02-04 16:28:00 +00002494 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002495 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002496
Guido van Rossum12d12c51993-10-26 17:58:25 +00002497 return result;
2498
Guido van Rossum12d12c51993-10-26 17:58:25 +00002499Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002500 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002501 return NULL;
2502}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002503
2504#ifdef Py_USING_UNICODE
2505/* Helper for filter(): filter a Unicode object through a function */
2506
2507static PyObject *
2508filterunicode(PyObject *func, PyObject *strobj)
2509{
2510 PyObject *result;
2511 register int i, j;
2512 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002513 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002514
2515 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002516 /* If it's a real string we can return the original,
2517 * as no character is ever false and __getitem__
2518 * does return this character. If it's a subclass
2519 * we must go through the __getitem__ loop */
2520 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002521 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002522 return strobj;
2523 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002524 }
2525 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2526 return NULL;
2527
2528 for (i = j = 0; i < len; ++i) {
2529 PyObject *item, *arg, *good;
2530 int ok;
2531
2532 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2533 if (item == NULL)
2534 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002535 if (func == Py_None) {
2536 ok = 1;
2537 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002538 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002539 if (arg == NULL) {
2540 Py_DECREF(item);
2541 goto Fail_1;
2542 }
2543 good = PyEval_CallObject(func, arg);
2544 Py_DECREF(arg);
2545 if (good == NULL) {
2546 Py_DECREF(item);
2547 goto Fail_1;
2548 }
2549 ok = PyObject_IsTrue(good);
2550 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002551 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002552 if (ok) {
2553 int reslen;
2554 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002555 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002556 "can't filter unicode to unicode:"
2557 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002558 Py_DECREF(item);
2559 goto Fail_1;
2560 }
2561 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002562 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002563 PyUnicode_AS_UNICODE(result)[j++] =
2564 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002565 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002566 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002567 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002568 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002569 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002570 to avoid reallocations */
2571 if (need < 2 * outlen)
2572 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002573 if (PyUnicode_Resize(
2574 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002575 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002576 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002577 }
2578 outlen = need;
2579 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002580 memcpy(PyUnicode_AS_UNICODE(result) + j,
2581 PyUnicode_AS_UNICODE(item),
2582 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002583 j += reslen;
2584 }
2585 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002586 Py_DECREF(item);
2587 }
2588
Walter Dörwald903f1e02003-02-04 16:28:00 +00002589 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002590 PyUnicode_Resize(&result, j);
2591
2592 return result;
2593
2594Fail_1:
2595 Py_DECREF(result);
2596 return NULL;
2597}
2598#endif