blob: 8b92c872ad88ec3de20668ce646152223e671450 [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 Wouters49fd7fa2006-04-21 10:40:58 +000034builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000036 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
37 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +000038 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000039 PyObject *globals = NULL;
40 PyObject *locals = NULL;
41 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000042 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000044 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
45 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000047 return PyImport_ImportModuleLevel(name, globals, locals,
48 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000049}
50
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000051PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000052"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000053\n\
54Import a module. The globals are only used to determine the context;\n\
55they are not modified. The locals are currently unused. The fromlist\n\
56should be a list of names to emulate ``from name import ...'', or an\n\
57empty list to emulate ``import name''.\n\
58When importing a module from a package, note that __import__('A.B', ...)\n\
59returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000060fromlist is not empty. Level is used to determine whether to perform \n\
61absolute or relative imports. -1 is the original strategy of attempting\n\
62both absolute and relative imports, 0 is absolute, a positive number\n\
63is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000064
Guido van Rossum1ae940a1995-01-02 19:04:15 +000065
Guido van Rossum79f25d91997-04-29 20:08:16 +000066static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000067builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000068{
Guido van Rossum09df08a1998-05-22 00:51:39 +000069 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000070}
71
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000072PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000073"abs(number) -> number\n\
74\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000075Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000076
Raymond Hettinger96229b12005-03-11 06:49:40 +000077static PyObject *
78builtin_all(PyObject *self, PyObject *v)
79{
80 PyObject *it, *item;
81
82 it = PyObject_GetIter(v);
83 if (it == NULL)
84 return NULL;
85
86 while ((item = PyIter_Next(it)) != NULL) {
87 int cmp = PyObject_IsTrue(item);
88 Py_DECREF(item);
89 if (cmp < 0) {
90 Py_DECREF(it);
91 return NULL;
92 }
93 if (cmp == 0) {
94 Py_DECREF(it);
95 Py_RETURN_FALSE;
96 }
97 }
98 Py_DECREF(it);
99 if (PyErr_Occurred())
100 return NULL;
101 Py_RETURN_TRUE;
102}
103
104PyDoc_STRVAR(all_doc,
105"all(iterable) -> bool\n\
106\n\
107Return True if bool(x) is True for all values x in the iterable.");
108
109static PyObject *
110builtin_any(PyObject *self, PyObject *v)
111{
112 PyObject *it, *item;
113
114 it = PyObject_GetIter(v);
115 if (it == NULL)
116 return NULL;
117
118 while ((item = PyIter_Next(it)) != NULL) {
119 int cmp = PyObject_IsTrue(item);
120 Py_DECREF(item);
121 if (cmp < 0) {
122 Py_DECREF(it);
123 return NULL;
124 }
125 if (cmp == 1) {
126 Py_DECREF(it);
127 Py_RETURN_TRUE;
128 }
129 }
130 Py_DECREF(it);
131 if (PyErr_Occurred())
132 return NULL;
133 Py_RETURN_FALSE;
134}
135
136PyDoc_STRVAR(any_doc,
137"any(iterable) -> bool\n\
138\n\
139Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000140
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000141
Guido van Rossum79f25d91997-04-29 20:08:16 +0000142static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000143builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000144{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000145 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000146}
147
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000148PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000149"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000150\n\
151Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000152Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000153
154
Guido van Rossum79f25d91997-04-29 20:08:16 +0000155static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000156builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000157{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000158 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000159 Py_ssize_t len; /* guess for result list size */
160 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000161
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000162 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000163 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000164
Tim Peters0e57abf2001-05-02 07:39:38 +0000165 /* Strings and tuples return a result of the same type. */
166 if (PyString_Check(seq))
167 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000168#ifdef Py_USING_UNICODE
169 if (PyUnicode_Check(seq))
170 return filterunicode(func, seq);
171#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000172 if (PyTuple_Check(seq))
173 return filtertuple(func, seq);
174
Georg Brandle35b6572005-07-19 22:20:20 +0000175 /* Pre-allocate argument list tuple. */
176 arg = PyTuple_New(1);
177 if (arg == NULL)
178 return NULL;
179
Tim Peters0e57abf2001-05-02 07:39:38 +0000180 /* Get iterator. */
181 it = PyObject_GetIter(seq);
182 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000183 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000184
185 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000186 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000187 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000188 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
189 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
190 goto Fail_it;
191 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000192 PyErr_Clear();
193 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000194 }
195
Tim Peters0e57abf2001-05-02 07:39:38 +0000196 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000198 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000199 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000200 result = seq;
201 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000202 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000203 result = PyList_New(len);
204 if (result == NULL)
205 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000206 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207
Tim Peters0e57abf2001-05-02 07:39:38 +0000208 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000209 j = 0;
210 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000211 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000212 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000213
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 item = PyIter_Next(it);
215 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000216 if (PyErr_Occurred())
217 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000219 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000220
Neil Schemenauer68973552003-08-14 20:37:34 +0000221 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000222 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000223 }
224 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000225 PyObject *good;
226 PyTuple_SET_ITEM(arg, 0, item);
227 good = PyObject_Call(func, arg, NULL);
228 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000229 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000230 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000231 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000232 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000233 ok = PyObject_IsTrue(good);
234 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000235 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000236 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000237 if (j < len)
238 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000239 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000240 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000241 Py_DECREF(item);
242 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000243 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000244 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000245 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000247 else
248 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000249 }
250
Guido van Rossum12d12c51993-10-26 17:58:25 +0000251
Tim Peters0e57abf2001-05-02 07:39:38 +0000252 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000253 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000254 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000255
Tim Peters3c6b1482001-05-21 08:07:05 +0000256 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000257 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000258 return result;
259
Tim Peters0e57abf2001-05-02 07:39:38 +0000260Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000262Fail_it:
263 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000264Fail_arg:
265 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266 return NULL;
267}
268
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000270"filter(function or None, sequence) -> list, tuple, or string\n"
271"\n"
272"Return those items of sequence for which function(item) is true. If\n"
273"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000274"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000275
Guido van Rossum79f25d91997-04-29 20:08:16 +0000276static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000277builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000278{
279 long x;
280 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281
Guido van Rossum79f25d91997-04-29 20:08:16 +0000282 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000283 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000284 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000285 PyErr_SetString(PyExc_ValueError,
286 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000287 return NULL;
288 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000289 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000290 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000291}
292
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000293PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000294"chr(i) -> character\n\
295\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000296Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000297
298
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000299#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000301builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000302{
303 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000304
305 if (!PyArg_ParseTuple(args, "l:unichr", &x))
306 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000307
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000308 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000309}
310
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000311PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000312"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000313\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000314Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000315#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000316
317
318static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000319builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000320{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000321 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000322 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000323
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000324 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000325 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000326 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000327 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000328 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000329}
330
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000331PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000332"cmp(x, y) -> integer\n\
333\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000334Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000335
Guido van Rossum79f25d91997-04-29 20:08:16 +0000336static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000337builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000338{
339 char *str;
340 char *filename;
341 char *startstr;
342 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000343 int dont_inherit = 0;
344 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000345 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000346 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000347 Py_ssize_t length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000348
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000349 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000350 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000351 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000352
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000353 cf.cf_flags = supplied_flags;
354
355#ifdef Py_USING_UNICODE
356 if (PyUnicode_Check(cmd)) {
357 tmp = PyUnicode_AsUTF8String(cmd);
358 if (tmp == NULL)
359 return NULL;
360 cmd = tmp;
361 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
362 }
363#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000364 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
365 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000366 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000367 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000368 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000369 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000370 }
371
Guido van Rossum5b722181993-03-30 17:46:03 +0000372 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000373 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000374 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000375 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000376 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000377 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000378 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000380 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000381 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000382 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000383
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000384 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000385 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000386 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000387 PyErr_SetString(PyExc_ValueError,
388 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000389 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000390 }
391 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
392
Tim Peters6cd6a822001-08-17 22:11:27 +0000393 if (!dont_inherit) {
394 PyEval_MergeCompilerFlags(&cf);
395 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000396 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000397cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000398 Py_XDECREF(tmp);
399 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000400}
401
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000402PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000403"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000404\n\
405Compile the source string (a Python module, statement or expression)\n\
406into a code object that can be executed by the exec statement or eval().\n\
407The filename will be used for run-time error messages.\n\
408The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000409single (interactive) statement, or 'eval' to compile an expression.\n\
410The flags argument, if present, controls which future statements influence\n\
411the compilation of the code.\n\
412The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
413the effects of any future statements in effect in the code calling\n\
414compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000415in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000416
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000418builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000419{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000420 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000421
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000422 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000423 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000424 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000425}
426
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000427PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000428"dir([object]) -> list of strings\n"
429"\n"
430"Return an alphabetized list of names comprising (some of) the attributes\n"
431"of the given object, and of attributes reachable from it:\n"
432"\n"
433"No argument: the names in the current scope.\n"
434"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000435"Type or class object: its attributes, and recursively the attributes of\n"
436" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000437"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000438" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000439
Guido van Rossum79f25d91997-04-29 20:08:16 +0000440static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000441builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000442{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000444
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000445 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000446 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000447 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000448}
449
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000450PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000451"divmod(x, y) -> (div, mod)\n\
452\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000453Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000454
455
Guido van Rossum79f25d91997-04-29 20:08:16 +0000456static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000457builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000458{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000459 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000461 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000462 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000463
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000464 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000465 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000466 if (locals != Py_None && !PyMapping_Check(locals)) {
467 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000468 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000469 }
470 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000471 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000472 "globals must be a real dict; try eval(expr, {}, mapping)"
473 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000474 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000475 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000476 if (globals == Py_None) {
477 globals = PyEval_GetGlobals();
478 if (locals == Py_None)
479 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000480 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000481 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000482 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000483
Georg Brandl77c85e62005-09-15 10:46:13 +0000484 if (globals == NULL || locals == NULL) {
485 PyErr_SetString(PyExc_TypeError,
486 "eval must be given globals and locals "
487 "when called without a frame");
488 return NULL;
489 }
490
Guido van Rossum79f25d91997-04-29 20:08:16 +0000491 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
492 if (PyDict_SetItemString(globals, "__builtins__",
493 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000494 return NULL;
495 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000496
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000497 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000498 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000499 PyErr_SetString(PyExc_TypeError,
500 "code object passed to eval() may not contain free variables");
501 return NULL;
502 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000504 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000505
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000506 if (!PyString_Check(cmd) &&
507 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000508 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000509 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000510 return NULL;
511 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000512 cf.cf_flags = 0;
513
514#ifdef Py_USING_UNICODE
515 if (PyUnicode_Check(cmd)) {
516 tmp = PyUnicode_AsUTF8String(cmd);
517 if (tmp == NULL)
518 return NULL;
519 cmd = tmp;
520 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
521 }
522#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000523 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
524 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000525 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000526 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527 while (*str == ' ' || *str == '\t')
528 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000529
Tim Peters9fa96be2001-08-17 23:04:59 +0000530 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000531 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
532 Py_XDECREF(tmp);
533 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000534}
535
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000536PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000537"eval(source[, globals[, locals]]) -> value\n\
538\n\
539Evaluate the source in the context of globals and locals.\n\
540The source may be a string representing a Python expression\n\
541or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000542The globals must be a dictionary and locals can be any mappping,\n\
543defaulting to the current globals and locals.\n\
544If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000545
546
Guido van Rossum79f25d91997-04-29 20:08:16 +0000547static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000548builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000549{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 PyObject *globals = Py_None, *locals = Py_None;
552 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000553 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000554 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000555 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000556
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000557 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000558 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000560 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000561 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000562 if (locals != Py_None && !PyMapping_Check(locals)) {
563 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
564 return NULL;
565 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000566 if (globals == Py_None) {
567 globals = PyEval_GetGlobals();
568 if (locals == Py_None)
569 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000570 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000572 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000573 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
574 if (PyDict_SetItemString(globals, "__builtins__",
575 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000576 return NULL;
577 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000578
579 exists = 0;
580 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000581#if defined(PLAN9)
582 {
583 Dir *d;
584
585 if ((d = dirstat(filename))!=nil) {
586 if(d->mode & DMDIR)
587 werrstr("is a directory");
588 else
589 exists = 1;
590 free(d);
591 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000592 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000593#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000594 if (object_exists(filename)) {
595 if (isdir(filename))
596 errno = EISDIR;
597 else
598 exists = 1;
599 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000600#else /* standard Posix */
601 {
602 struct stat s;
603 if (stat(filename, &s) == 0) {
604 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000605# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000606 errno = EOS2ERR;
607# else
608 errno = EISDIR;
609# endif
610 else
611 exists = 1;
612 }
613 }
614#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000615
616 if (exists) {
617 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000618 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000619 Py_END_ALLOW_THREADS
620
621 if (fp == NULL) {
622 exists = 0;
623 }
624 }
625
626 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000627 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000628 return NULL;
629 }
Tim Peters5ba58662001-07-16 02:29:45 +0000630 cf.cf_flags = 0;
631 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000632 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000633 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000634 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000635 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000636 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000637 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000638}
639
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000640PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000641"execfile(filename[, globals[, locals]])\n\
642\n\
643Read and execute a Python script from a file.\n\
644The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000645globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000646
647
Guido van Rossum79f25d91997-04-29 20:08:16 +0000648static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000649builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000650{
Guido van Rossum950ff291998-06-29 13:38:57 +0000651 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000652 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000654 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000655 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000656#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000657 if (PyUnicode_Check(name)) {
658 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
659 if (name == NULL)
660 return NULL;
661 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000662#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000663
664 if (!PyString_Check(name)) {
665 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000666 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000667 return NULL;
668 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000669 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000670 if (result == NULL && dflt != NULL &&
671 PyErr_ExceptionMatches(PyExc_AttributeError))
672 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000673 PyErr_Clear();
674 Py_INCREF(dflt);
675 result = dflt;
676 }
677 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000678}
679
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000680PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000681"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000682\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000683Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
684When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000685exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000686
687
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000689builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000690{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000691 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000692
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693 d = PyEval_GetGlobals();
694 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000695 return d;
696}
697
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000698PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000699"globals() -> dictionary\n\
700\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000701Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000702
703
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000705builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000706{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000707 PyObject *v;
708 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000710 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000711 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000712#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000713 if (PyUnicode_Check(name)) {
714 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
715 if (name == NULL)
716 return NULL;
717 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000718#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000719
720 if (!PyString_Check(name)) {
721 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000722 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000723 return NULL;
724 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000726 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000728 Py_INCREF(Py_False);
729 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000730 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000732 Py_INCREF(Py_True);
733 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000734}
735
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000736PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000737"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000738\n\
739Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000740(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000741
742
Guido van Rossum79f25d91997-04-29 20:08:16 +0000743static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000744builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000745{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000746 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000747}
748
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000749PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000750"id(object) -> integer\n\
751\n\
752Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000753simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000754
755
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000757builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000758{
759 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000760 PyObject *it; /* the iterator object */
761 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000762 } sequence;
763
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000765 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000766 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000767 register int i, j;
768
Guido van Rossum79f25d91997-04-29 20:08:16 +0000769 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000771 PyErr_SetString(PyExc_TypeError,
772 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000773 return NULL;
774 }
775
Guido van Rossum79f25d91997-04-29 20:08:16 +0000776 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000778
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000779 if (func == Py_None && n == 1) {
780 /* map(None, S) is the same as list(S). */
781 return PySequence_List(PyTuple_GetItem(args, 1));
782 }
783
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 /* Get space for sequence descriptors. Must NULL out the iterator
785 * pointers so that jumping to Fail_2 later doesn't see trash.
786 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
788 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000789 return NULL;
790 }
791 for (i = 0; i < n; ++i) {
792 seqs[i].it = (PyObject*)NULL;
793 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000794 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000795
Tim Peters4e9afdc2001-05-03 23:54:49 +0000796 /* Do a first pass to obtain iterators for the arguments, and set len
797 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000798 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000799 len = 0;
800 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
801 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000802 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000803
Tim Peters4e9afdc2001-05-03 23:54:49 +0000804 /* Get iterator. */
805 curseq = PyTuple_GetItem(args, i+1);
806 sqp->it = PyObject_GetIter(curseq);
807 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000808 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000809 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000810 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000811 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000813 goto Fail_2;
814 }
815
Tim Peters4e9afdc2001-05-03 23:54:49 +0000816 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000817 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000818 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000819 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
820 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
821 goto Fail_2;
822 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000823 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000824 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000825 }
826 if (curlen > len)
827 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000828 }
829
Tim Peters4e9afdc2001-05-03 23:54:49 +0000830 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000831 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000832 goto Fail_2;
833
Tim Peters4e9afdc2001-05-03 23:54:49 +0000834 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000835 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000837 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000838
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000840 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000841 else if ((alist = PyTuple_New(n)) == NULL)
842 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000843
844 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000845 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 Py_INCREF(Py_None);
847 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000848 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000849 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000850 item = PyIter_Next(sqp->it);
851 if (item)
852 ++numactive;
853 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000854 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000855 Py_XDECREF(alist);
856 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000857 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000858 Py_INCREF(Py_None);
859 item = Py_None;
860 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000861 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000862 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000863 if (alist)
864 PyTuple_SET_ITEM(alist, j, item);
865 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000866 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000867 }
868
Guido van Rossum32120311995-07-10 13:52:21 +0000869 if (!alist)
870 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000871
Tim Peters4e9afdc2001-05-03 23:54:49 +0000872 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000874 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000875 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000876
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000878 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000879 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 value = PyEval_CallObject(func, alist);
881 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000882 if (value == NULL)
883 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000884 }
885 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000886 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000887 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000888 if (status < 0)
889 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000890 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000891 else if (PyList_SetItem(result, i, value) < 0)
892 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000893 }
894
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000895 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
896 goto Fail_1;
897
Tim Peters4e9afdc2001-05-03 23:54:49 +0000898 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000899
Guido van Rossum12d12c51993-10-26 17:58:25 +0000900Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000902Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000903 result = NULL;
904Succeed:
905 assert(seqs);
906 for (i = 0; i < n; ++i)
907 Py_XDECREF(seqs[i].it);
908 PyMem_DEL(seqs);
909 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000910}
911
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000912PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000913"map(function, sequence[, sequence, ...]) -> list\n\
914\n\
915Return a list of the results of applying the function to the items of\n\
916the argument sequence(s). If more than one sequence is given, the\n\
917function is called with an argument list consisting of the corresponding\n\
918item of each sequence, substituting None for missing values when not all\n\
919sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000924builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000925{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 PyObject *v;
927 PyObject *name;
928 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000929
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000930 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000931 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000933 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 Py_INCREF(Py_None);
935 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000936}
937
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000938PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000939"setattr(object, name, value)\n\
940\n\
941Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000942``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000943
944
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000946builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000947{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 PyObject *v;
949 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000950
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000951 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000952 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000954 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 Py_INCREF(Py_None);
956 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000957}
958
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000959PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000960"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000961\n\
962Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000963``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000964
965
Guido van Rossum79f25d91997-04-29 20:08:16 +0000966static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000967builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000968{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000969 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000970
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000972 if (x == -1)
973 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000974 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000975}
976
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000977PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000978"hash(object) -> integer\n\
979\n\
980Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000981the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000982
983
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000985builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000986{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +0000988 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000989
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000990 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000991 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000993 "hex() argument can't be converted to hex");
994 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000995 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +0000996 res = (*nb->nb_hex)(v);
997 if (res && !PyString_Check(res)) {
998 PyErr_Format(PyExc_TypeError,
999 "__hex__ returned non-string (type %.200s)",
1000 res->ob_type->tp_name);
1001 Py_DECREF(res);
1002 return NULL;
1003 }
1004 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001005}
1006
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001007PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001008"hex(number) -> string\n\
1009\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001010Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011
1012
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001014builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001015{
1016 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001017 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001018 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001019 if (!PyString_CheckExact(s)) {
1020 PyErr_SetString(PyExc_TypeError,
1021 "can't intern subclass of string");
1022 return NULL;
1023 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001024 Py_INCREF(s);
1025 PyString_InternInPlace(&s);
1026 return s;
1027}
1028
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030"intern(string) -> string\n\
1031\n\
1032``Intern'' the given string. This enters the string in the (global)\n\
1033table of interned strings whose purpose is to speed up dictionary lookups.\n\
1034Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001035same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001036
1037
Guido van Rossum79f25d91997-04-29 20:08:16 +00001038static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001039builtin_iter(PyObject *self, PyObject *args)
1040{
1041 PyObject *v, *w = NULL;
1042
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001043 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001044 return NULL;
1045 if (w == NULL)
1046 return PyObject_GetIter(v);
1047 if (!PyCallable_Check(v)) {
1048 PyErr_SetString(PyExc_TypeError,
1049 "iter(v, w): v must be callable");
1050 return NULL;
1051 }
1052 return PyCallIter_New(v, w);
1053}
1054
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001055PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001056"iter(collection) -> iterator\n\
1057iter(callable, sentinel) -> iterator\n\
1058\n\
1059Get an iterator from an object. In the first form, the argument must\n\
1060supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001061In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001062
1063
1064static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001065builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001066{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001067 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001068
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001069 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001070 if (res < 0 && PyErr_Occurred())
1071 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001072 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001073}
1074
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001075PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001076"len(object) -> integer\n\
1077\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001078Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001079
1080
Guido van Rossum79f25d91997-04-29 20:08:16 +00001081static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001082builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001083{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001085
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086 d = PyEval_GetLocals();
1087 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001088 return d;
1089}
1090
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001091PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001092"locals() -> dictionary\n\
1093\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001094Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001095
1096
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001098min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001099{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001100 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001101 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001102
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001104 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001105 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001106 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001107
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001108 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1109 keyfunc = PyDict_GetItemString(kwds, "key");
1110 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001111 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001112 "%s() got an unexpected keyword argument", name);
1113 return NULL;
1114 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001115 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001116
Tim Petersc3074532001-05-03 07:00:32 +00001117 it = PyObject_GetIter(v);
1118 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001119 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001120
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001121 maxitem = NULL; /* the result */
1122 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001123 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001124 /* get the value from the key function */
1125 if (keyfunc != NULL) {
1126 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1127 if (val == NULL)
1128 goto Fail_it_item;
1129 }
1130 /* no key function; the value is the item */
1131 else {
1132 val = item;
1133 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001134 }
Tim Petersc3074532001-05-03 07:00:32 +00001135
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001136 /* maximum value and item are unset; set them */
1137 if (maxval == NULL) {
1138 maxitem = item;
1139 maxval = val;
1140 }
1141 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001142 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001143 int cmp = PyObject_RichCompareBool(val, maxval, op);
1144 if (cmp < 0)
1145 goto Fail_it_item_and_val;
1146 else if (cmp > 0) {
1147 Py_DECREF(maxval);
1148 Py_DECREF(maxitem);
1149 maxval = val;
1150 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001151 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001152 else {
1153 Py_DECREF(item);
1154 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001155 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001156 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001157 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001158 if (PyErr_Occurred())
1159 goto Fail_it;
1160 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001161 PyErr_Format(PyExc_ValueError,
1162 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001163 assert(maxitem == NULL);
1164 }
1165 else
1166 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001167 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001168 return maxitem;
1169
1170Fail_it_item_and_val:
1171 Py_DECREF(val);
1172Fail_it_item:
1173 Py_DECREF(item);
1174Fail_it:
1175 Py_XDECREF(maxval);
1176 Py_XDECREF(maxitem);
1177 Py_DECREF(it);
1178 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001179}
1180
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001182builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001183{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001184 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001185}
1186
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001188"min(iterable[, key=func]) -> value\n\
1189min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001190\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001191With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193
1194
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001196builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001197{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001198 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001199}
1200
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001201PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001202"max(iterable[, key=func]) -> value\n\
1203max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001204\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001205With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001206With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001207
1208
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001210builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001211{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001212 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001213 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001214
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001215 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1216 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001217 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001218 "oct() argument can't be converted to oct");
1219 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001220 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001221 res = (*nb->nb_oct)(v);
1222 if (res && !PyString_Check(res)) {
1223 PyErr_Format(PyExc_TypeError,
1224 "__oct__ returned non-string (type %.200s)",
1225 res->ob_type->tp_name);
1226 Py_DECREF(res);
1227 return NULL;
1228 }
1229 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001230}
1231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001232PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001233"oct(number) -> string\n\
1234\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001235Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001236
1237
Guido van Rossum79f25d91997-04-29 20:08:16 +00001238static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001239builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1240{
1241 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1242}
1243
1244PyDoc_STRVAR(open_doc,
1245"open(name[, mode[, buffering]]) -> file object\n\
1246\n\
1247Open a file using the file() type, returns a file object.");
1248
1249
1250static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001251builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001252{
Guido van Rossum09095f32000-03-10 23:00:52 +00001253 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001254 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001255
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001256 if (PyString_Check(obj)) {
1257 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001258 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001259 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001260 return PyInt_FromLong(ord);
1261 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001262#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001263 } else if (PyUnicode_Check(obj)) {
1264 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001265 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001266 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001267 return PyInt_FromLong(ord);
1268 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001269#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001270 } else {
1271 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001272 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001273 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001274 return NULL;
1275 }
1276
Guido van Rossumad991772001-01-12 16:03:05 +00001277 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001278 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001279 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001280 size);
1281 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001282}
1283
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001284PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001285"ord(c) -> integer\n\
1286\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001287Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001288
1289
Guido van Rossum79f25d91997-04-29 20:08:16 +00001290static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001291builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001292{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001293 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001294
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001295 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001296 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001297 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001298}
1299
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001300PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001301"pow(x, y[, z]) -> number\n\
1302\n\
1303With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001304equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001305
1306
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001307
1308/* Return number of items in range (lo, hi, step), when arguments are
1309 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1310 * & only if the true value is too large to fit in a signed long.
1311 * Arguments MUST return 1 with either PyInt_Check() or
1312 * PyLong_Check(). Return -1 when there is an error.
1313 */
1314static long
1315get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1316{
1317 /* -------------------------------------------------------------
1318 Algorithm is equal to that of get_len_of_range(), but it operates
1319 on PyObjects (which are assumed to be PyLong or PyInt objects).
1320 ---------------------------------------------------------------*/
1321 long n;
1322 PyObject *diff = NULL;
1323 PyObject *one = NULL;
1324 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1325 /* holds sub-expression evaluations */
1326
1327 /* if (lo >= hi), return length of 0. */
1328 if (PyObject_Compare(lo, hi) >= 0)
1329 return 0;
1330
1331 if ((one = PyLong_FromLong(1L)) == NULL)
1332 goto Fail;
1333
1334 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1335 goto Fail;
1336
1337 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1338 goto Fail;
1339
1340 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1341 goto Fail;
1342
1343 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1344 goto Fail;
1345
1346 n = PyLong_AsLong(tmp3);
1347 if (PyErr_Occurred()) { /* Check for Overflow */
1348 PyErr_Clear();
1349 goto Fail;
1350 }
1351
1352 Py_DECREF(tmp3);
1353 Py_DECREF(tmp2);
1354 Py_DECREF(diff);
1355 Py_DECREF(tmp1);
1356 Py_DECREF(one);
1357 return n;
1358
1359 Fail:
1360 Py_XDECREF(tmp3);
1361 Py_XDECREF(tmp2);
1362 Py_XDECREF(diff);
1363 Py_XDECREF(tmp1);
1364 Py_XDECREF(one);
1365 return -1;
1366}
1367
1368/* An extension of builtin_range() that handles the case when PyLong
1369 * arguments are given. */
1370static PyObject *
1371handle_range_longs(PyObject *self, PyObject *args)
1372{
1373 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001374 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001375 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001376
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001377 PyObject *curnum = NULL;
1378 PyObject *v = NULL;
1379 long bign;
1380 int i, n;
1381 int cmp_result;
1382
Tim Peters874e1f72003-04-13 22:13:08 +00001383 PyObject *zero = PyLong_FromLong(0);
1384
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001385 if (zero == NULL)
1386 return NULL;
1387
Tim Peters874e1f72003-04-13 22:13:08 +00001388 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1389 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001390 return NULL;
1391 }
1392
Tim Peters874e1f72003-04-13 22:13:08 +00001393 /* Figure out which way we were called, supply defaults, and be
1394 * sure to incref everything so that the decrefs at the end
1395 * are correct.
1396 */
1397 assert(ilow != NULL);
1398 if (ihigh == NULL) {
1399 /* only 1 arg -- it's the upper limit */
1400 ihigh = ilow;
1401 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001402 }
Tim Peters874e1f72003-04-13 22:13:08 +00001403 assert(ihigh != NULL);
1404 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001405
Tim Peters874e1f72003-04-13 22:13:08 +00001406 /* ihigh correct now; do ilow */
1407 if (ilow == NULL)
1408 ilow = zero;
1409 Py_INCREF(ilow);
1410
1411 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001412 if (istep == NULL) {
1413 istep = PyLong_FromLong(1L);
1414 if (istep == NULL)
1415 goto Fail;
1416 }
1417 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001418 Py_INCREF(istep);
1419 }
1420
Tim Peters874e1f72003-04-13 22:13:08 +00001421 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001422 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001423 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001424 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001425 goto Fail;
1426 }
1427
Tim Peters874e1f72003-04-13 22:13:08 +00001428 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001429 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001430 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001431 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001432 goto Fail;
1433 }
1434
1435 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001436 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001437 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001438 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001439 goto Fail;
1440 }
1441
1442 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1443 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001444 if (cmp_result == 0) {
1445 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001446 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001447 goto Fail;
1448 }
1449
1450 if (cmp_result > 0)
1451 bign = get_len_of_range_longs(ilow, ihigh, istep);
1452 else {
1453 PyObject *neg_istep = PyNumber_Negative(istep);
1454 if (neg_istep == NULL)
1455 goto Fail;
1456 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1457 Py_DECREF(neg_istep);
1458 }
1459
1460 n = (int)bign;
1461 if (bign < 0 || (long)n != bign) {
1462 PyErr_SetString(PyExc_OverflowError,
1463 "range() result has too many items");
1464 goto Fail;
1465 }
1466
1467 v = PyList_New(n);
1468 if (v == NULL)
1469 goto Fail;
1470
1471 curnum = ilow;
1472 Py_INCREF(curnum);
1473
1474 for (i = 0; i < n; i++) {
1475 PyObject *w = PyNumber_Long(curnum);
1476 PyObject *tmp_num;
1477 if (w == NULL)
1478 goto Fail;
1479
1480 PyList_SET_ITEM(v, i, w);
1481
1482 tmp_num = PyNumber_Add(curnum, istep);
1483 if (tmp_num == NULL)
1484 goto Fail;
1485
1486 Py_DECREF(curnum);
1487 curnum = tmp_num;
1488 }
Tim Peters874e1f72003-04-13 22:13:08 +00001489 Py_DECREF(ilow);
1490 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001491 Py_DECREF(istep);
1492 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001493 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001494 return v;
1495
1496 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001497 Py_DECREF(ilow);
1498 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001499 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001500 Py_DECREF(zero);
1501 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001502 Py_XDECREF(v);
1503 return NULL;
1504}
1505
Guido van Rossum124eff01999-02-23 16:11:01 +00001506/* Return number of items in range/xrange (lo, hi, step). step > 0
1507 * required. Return a value < 0 if & only if the true value is too
1508 * large to fit in a signed long.
1509 */
1510static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001511get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001512{
1513 /* -------------------------------------------------------------
1514 If lo >= hi, the range is empty.
1515 Else if n values are in the range, the last one is
1516 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1517 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1518 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1519 the RHS is non-negative and so truncation is the same as the
1520 floor. Letting M be the largest positive long, the worst case
1521 for the RHS numerator is hi=M, lo=-M-1, and then
1522 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1523 precision to compute the RHS exactly.
1524 ---------------------------------------------------------------*/
1525 long n = 0;
1526 if (lo < hi) {
1527 unsigned long uhi = (unsigned long)hi;
1528 unsigned long ulo = (unsigned long)lo;
1529 unsigned long diff = uhi - ulo - 1;
1530 n = (long)(diff / (unsigned long)step + 1);
1531 }
1532 return n;
1533}
1534
Guido van Rossum79f25d91997-04-29 20:08:16 +00001535static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001536builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001537{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001538 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001539 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001540 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001541
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001543
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 if (PyTuple_Size(args) <= 1) {
1545 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001546 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001547 &ihigh)) {
1548 PyErr_Clear();
1549 return handle_range_longs(self, args);
1550 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001551 }
1552 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001553 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001554 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001555 &ilow, &ihigh, &istep)) {
1556 PyErr_Clear();
1557 return handle_range_longs(self, args);
1558 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001559 }
1560 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001561 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001562 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001563 return NULL;
1564 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001565 if (istep > 0)
1566 bign = get_len_of_range(ilow, ihigh, istep);
1567 else
1568 bign = get_len_of_range(ihigh, ilow, -istep);
1569 n = (int)bign;
1570 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001571 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001572 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001573 return NULL;
1574 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001575 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001576 if (v == NULL)
1577 return NULL;
1578 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001579 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001580 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001581 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001582 return NULL;
1583 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001584 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001585 ilow += istep;
1586 }
1587 return v;
1588}
1589
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001590PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001591"range([start,] stop[, step]) -> list of integers\n\
1592\n\
1593Return a list containing an arithmetic progression of integers.\n\
1594range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1595When step is given, it specifies the increment (or decrement).\n\
1596For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001597These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001598
1599
Guido van Rossum79f25d91997-04-29 20:08:16 +00001600static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001601builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001602{
Tim Peters15d81ef2001-05-04 04:39:21 +00001603 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001604
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001605 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001606 return NULL;
1607 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001608 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001609
Tim Peters15d81ef2001-05-04 04:39:21 +00001610 it = PyObject_GetIter(seq);
1611 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001612 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001613 "reduce() arg 2 must support iteration");
1614 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001615 return NULL;
1616 }
1617
Guido van Rossum79f25d91997-04-29 20:08:16 +00001618 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001619 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001620
Tim Peters15d81ef2001-05-04 04:39:21 +00001621 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001622 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001623
1624 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625 Py_DECREF(args);
1626 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001627 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001628 }
1629
Tim Peters15d81ef2001-05-04 04:39:21 +00001630 op2 = PyIter_Next(it);
1631 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001632 if (PyErr_Occurred())
1633 goto Fail;
1634 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001635 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001636
Guido van Rossum2d951851994-08-29 12:52:16 +00001637 if (result == NULL)
1638 result = op2;
1639 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001640 PyTuple_SetItem(args, 0, result);
1641 PyTuple_SetItem(args, 1, op2);
1642 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001643 goto Fail;
1644 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001645 }
1646
Guido van Rossum79f25d91997-04-29 20:08:16 +00001647 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001648
Guido van Rossum2d951851994-08-29 12:52:16 +00001649 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001650 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001651 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001652
Tim Peters15d81ef2001-05-04 04:39:21 +00001653 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001654 return result;
1655
Guido van Rossum2d951851994-08-29 12:52:16 +00001656Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 Py_XDECREF(args);
1658 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001659 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001660 return NULL;
1661}
1662
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001663PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001664"reduce(function, sequence[, initial]) -> value\n\
1665\n\
1666Apply a function of two arguments cumulatively to the items of a sequence,\n\
1667from left to right, so as to reduce the sequence to a single value.\n\
1668For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1669((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1670of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001671sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001672
1673
Guido van Rossum79f25d91997-04-29 20:08:16 +00001674static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001675builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001676{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001677 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001678}
1679
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001680PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001681"reload(module) -> module\n\
1682\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001683Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001684
1685
Guido van Rossum79f25d91997-04-29 20:08:16 +00001686static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001687builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001688{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001690}
1691
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001692PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001693"repr(object) -> string\n\
1694\n\
1695Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001696For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001697
1698
Guido van Rossum79f25d91997-04-29 20:08:16 +00001699static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001700builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001701{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001702 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001703 double f;
1704 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001705 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001706 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001707
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001708 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1709 kwlist, &number, &ndigits))
1710 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001711 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001712 i = abs(ndigits);
1713 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001714 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001715 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001716 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001717 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001718 number *= f;
1719 if (number >= 0.0)
1720 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001721 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001722 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001723 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001724 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001725 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001726 number /= f;
1727 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001728}
1729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001730PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001731"round(number[, ndigits]) -> floating point number\n\
1732\n\
1733Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001734This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001735
Raymond Hettinger64958a12003-12-17 20:43:33 +00001736static PyObject *
1737builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1738{
1739 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1740 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001741 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001742 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001743
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001744 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001745 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1746 kwlist, &seq, &compare, &keyfunc, &reverse))
1747 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001748
1749 newlist = PySequence_List(seq);
1750 if (newlist == NULL)
1751 return NULL;
1752
1753 callable = PyObject_GetAttrString(newlist, "sort");
1754 if (callable == NULL) {
1755 Py_DECREF(newlist);
1756 return NULL;
1757 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001758
Raymond Hettinger64958a12003-12-17 20:43:33 +00001759 newargs = PyTuple_GetSlice(args, 1, 4);
1760 if (newargs == NULL) {
1761 Py_DECREF(newlist);
1762 Py_DECREF(callable);
1763 return NULL;
1764 }
1765
1766 v = PyObject_Call(callable, newargs, kwds);
1767 Py_DECREF(newargs);
1768 Py_DECREF(callable);
1769 if (v == NULL) {
1770 Py_DECREF(newlist);
1771 return NULL;
1772 }
1773 Py_DECREF(v);
1774 return newlist;
1775}
1776
1777PyDoc_STRVAR(sorted_doc,
1778"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001779
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001781builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001782{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001783 PyObject *v = NULL;
1784 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001785
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001786 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001787 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001788 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001789 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001790 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001791 if (!PyErr_Occurred())
1792 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001793 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001794 }
1795 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001797 }
1798 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001799 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001800 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001802 "vars() argument must have __dict__ attribute");
1803 return NULL;
1804 }
1805 }
1806 return d;
1807}
1808
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001809PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001810"vars([object]) -> dictionary\n\
1811\n\
1812Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001813With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001814
Alex Martellia70b1912003-04-22 08:12:33 +00001815
1816static PyObject*
1817builtin_sum(PyObject *self, PyObject *args)
1818{
1819 PyObject *seq;
1820 PyObject *result = NULL;
1821 PyObject *temp, *item, *iter;
1822
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001823 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001824 return NULL;
1825
1826 iter = PyObject_GetIter(seq);
1827 if (iter == NULL)
1828 return NULL;
1829
1830 if (result == NULL) {
1831 result = PyInt_FromLong(0);
1832 if (result == NULL) {
1833 Py_DECREF(iter);
1834 return NULL;
1835 }
1836 } else {
1837 /* reject string values for 'start' parameter */
1838 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1839 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001840 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001841 Py_DECREF(iter);
1842 return NULL;
1843 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001844 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001845 }
1846
1847 for(;;) {
1848 item = PyIter_Next(iter);
1849 if (item == NULL) {
1850 /* error, or end-of-sequence */
1851 if (PyErr_Occurred()) {
1852 Py_DECREF(result);
1853 result = NULL;
1854 }
1855 break;
1856 }
Alex Martellia253e182003-10-25 23:24:14 +00001857 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001858 Py_DECREF(result);
1859 Py_DECREF(item);
1860 result = temp;
1861 if (result == NULL)
1862 break;
1863 }
1864 Py_DECREF(iter);
1865 return result;
1866}
1867
1868PyDoc_STRVAR(sum_doc,
1869"sum(sequence, start=0) -> value\n\
1870\n\
1871Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1872of parameter 'start'. When the sequence is empty, returns start.");
1873
1874
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001875static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001876builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001877{
1878 PyObject *inst;
1879 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001880 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001881
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001882 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001883 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001884
Guido van Rossum823649d2001-03-21 18:40:58 +00001885 retval = PyObject_IsInstance(inst, cls);
1886 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001887 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001888 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001889}
1890
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001891PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001892"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001893\n\
1894Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001895With a type as second argument, return whether that is the object's type.\n\
1896The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001897isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001898
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001899
1900static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001901builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001902{
1903 PyObject *derived;
1904 PyObject *cls;
1905 int retval;
1906
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001907 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001908 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001909
Guido van Rossum823649d2001-03-21 18:40:58 +00001910 retval = PyObject_IsSubclass(derived, cls);
1911 if (retval < 0)
1912 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001913 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001914}
1915
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001916PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001917"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001918\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001919Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1920When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1921is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001922
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001923
Barry Warsawbd599b52000-08-03 15:45:29 +00001924static PyObject*
1925builtin_zip(PyObject *self, PyObject *args)
1926{
1927 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001928 const Py_ssize_t itemsize = PySequence_Length(args);
1929 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00001930 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001931 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001932
Raymond Hettingereaef6152003-08-02 07:42:57 +00001933 if (itemsize == 0)
1934 return PyList_New(0);
1935
Barry Warsawbd599b52000-08-03 15:45:29 +00001936 /* args must be a tuple */
1937 assert(PyTuple_Check(args));
1938
Tim Peters39a86c22002-05-12 07:19:38 +00001939 /* Guess at result length: the shortest of the input lengths.
1940 If some argument refuses to say, we refuse to guess too, lest
1941 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001942 len = -1; /* unknown */
1943 for (i = 0; i < itemsize; ++i) {
1944 PyObject *item = PyTuple_GET_ITEM(args, i);
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001945 Py_ssize_t thislen = _PyObject_LengthHint(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001946 if (thislen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001947 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1948 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1949 return NULL;
1950 }
Tim Peters67d687a2002-04-29 21:27:32 +00001951 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001952 len = -1;
1953 break;
1954 }
Tim Peters67d687a2002-04-29 21:27:32 +00001955 else if (len < 0 || thislen < len)
1956 len = thislen;
1957 }
1958
Tim Peters8572b4f2001-05-06 01:05:02 +00001959 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001960 if (len < 0)
1961 len = 10; /* arbitrary */
1962 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001963 return NULL;
1964
Tim Peters8572b4f2001-05-06 01:05:02 +00001965 /* obtain iterators */
1966 itlist = PyTuple_New(itemsize);
1967 if (itlist == NULL)
1968 goto Fail_ret;
1969 for (i = 0; i < itemsize; ++i) {
1970 PyObject *item = PyTuple_GET_ITEM(args, i);
1971 PyObject *it = PyObject_GetIter(item);
1972 if (it == NULL) {
1973 if (PyErr_ExceptionMatches(PyExc_TypeError))
1974 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00001975 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00001976 i+1);
1977 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001978 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001979 PyTuple_SET_ITEM(itlist, i, it);
1980 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001981
Tim Peters8572b4f2001-05-06 01:05:02 +00001982 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001983 for (i = 0; ; ++i) {
1984 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001985 PyObject *next = PyTuple_New(itemsize);
1986 if (!next)
1987 goto Fail_ret_itlist;
1988
Tim Peters67d687a2002-04-29 21:27:32 +00001989 for (j = 0; j < itemsize; j++) {
1990 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001991 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001992 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001993 if (PyErr_Occurred()) {
1994 Py_DECREF(ret);
1995 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001996 }
1997 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001998 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001999 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002000 }
Tim Peters67d687a2002-04-29 21:27:32 +00002001 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002002 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002003
Tim Peters67d687a2002-04-29 21:27:32 +00002004 if (i < len)
2005 PyList_SET_ITEM(ret, i, next);
2006 else {
2007 int status = PyList_Append(ret, next);
2008 Py_DECREF(next);
2009 ++len;
2010 if (status < 0)
2011 goto Fail_ret_itlist;
2012 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002013 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002014
Tim Peters67d687a2002-04-29 21:27:32 +00002015Done:
2016 if (ret != NULL && i < len) {
2017 /* The list is too big. */
2018 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2019 return NULL;
2020 }
2021 return ret;
2022
Tim Peters8572b4f2001-05-06 01:05:02 +00002023Fail_ret_itlist:
2024 Py_DECREF(itlist);
2025Fail_ret:
2026 Py_DECREF(ret);
2027 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002028}
2029
2030
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002031PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002032"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2033\n\
2034Return a list of tuples, where each tuple contains the i-th element\n\
2035from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002036in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002037
2038
Guido van Rossum79f25d91997-04-29 20:08:16 +00002039static PyMethodDef builtin_methods[] = {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002040 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002041 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002042 {"all", builtin_all, METH_O, all_doc},
2043 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002044 {"callable", builtin_callable, METH_O, callable_doc},
2045 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2046 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002047 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2048 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2049 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2050 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2051 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2052 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2053 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2054 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2055 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2056 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2057 {"hash", builtin_hash, METH_O, hash_doc},
2058 {"hex", builtin_hex, METH_O, hex_doc},
2059 {"id", builtin_id, METH_O, id_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002060 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2061 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2062 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2063 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2064 {"len", builtin_len, METH_O, len_doc},
2065 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2066 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002067 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2068 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002069 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002070 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002071 {"ord", builtin_ord, METH_O, ord_doc},
2072 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2073 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002074 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2075 {"reload", builtin_reload, METH_O, reload_doc},
2076 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002077 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002078 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002079 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002080 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002081#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002082 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002083#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002084 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002085 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002086 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002087};
2088
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002089PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002090"Built-in functions, exceptions, and other objects.\n\
2091\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002092Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002093
Guido van Rossum25ce5661997-08-02 03:10:38 +00002094PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002095_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002096{
Fred Drake5550de32000-06-20 04:54:19 +00002097 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002098 mod = Py_InitModule4("__builtin__", builtin_methods,
2099 builtin_doc, (PyObject *)NULL,
2100 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002101 if (mod == NULL)
2102 return NULL;
2103 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002104
Tim Peters7571a0f2003-03-23 17:52:28 +00002105#ifdef Py_TRACE_REFS
2106 /* __builtin__ exposes a number of statically allocated objects
2107 * that, before this code was added in 2.3, never showed up in
2108 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2109 * result, programs leaking references to None and False (etc)
2110 * couldn't be diagnosed by examining sys.getobjects(0).
2111 */
2112#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2113#else
2114#define ADD_TO_ALL(OBJECT) (void)0
2115#endif
2116
Tim Peters4b7625e2001-09-13 21:37:17 +00002117#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002118 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2119 return NULL; \
2120 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002121
2122 SETBUILTIN("None", Py_None);
2123 SETBUILTIN("Ellipsis", Py_Ellipsis);
2124 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002125 SETBUILTIN("False", Py_False);
2126 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002127 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002128 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002129 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002130 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002131 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002132#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002133 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002134#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002135 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002136 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002137 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002138 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002139 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002140 SETBUILTIN("property", &PyProperty_Type);
2141 SETBUILTIN("int", &PyInt_Type);
2142 SETBUILTIN("list", &PyList_Type);
2143 SETBUILTIN("long", &PyLong_Type);
2144 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002145 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002146 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002147 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002148 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2149 SETBUILTIN("str", &PyString_Type);
2150 SETBUILTIN("super", &PySuper_Type);
2151 SETBUILTIN("tuple", &PyTuple_Type);
2152 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002153 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002154#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002155 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002156#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002157 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002158 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2159 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002160 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002161 }
2162 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002163
Guido van Rossum25ce5661997-08-02 03:10:38 +00002164 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002165#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002166#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002167}
2168
Guido van Rossume77a7571993-11-03 15:01:26 +00002169/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002170
Guido van Rossum79f25d91997-04-29 20:08:16 +00002171static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002172filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002173{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002174 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002175 Py_ssize_t i, j;
2176 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002177
Guido van Rossumb7b45621995-08-04 04:07:45 +00002178 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002179 if (PyTuple_CheckExact(tuple))
2180 Py_INCREF(tuple);
2181 else
2182 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002183 return tuple;
2184 }
2185
Guido van Rossum79f25d91997-04-29 20:08:16 +00002186 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002187 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002188
Guido van Rossum12d12c51993-10-26 17:58:25 +00002189 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002190 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002191 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002192
Walter Dörwald8dd19322003-02-10 17:36:40 +00002193 if (tuple->ob_type->tp_as_sequence &&
2194 tuple->ob_type->tp_as_sequence->sq_item) {
2195 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002196 if (item == NULL)
2197 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002198 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002199 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002200 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002201 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002202 if (func == Py_None) {
2203 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002204 good = item;
2205 }
2206 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002207 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002208 if (arg == NULL) {
2209 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002210 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002211 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002212 good = PyEval_CallObject(func, arg);
2213 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002214 if (good == NULL) {
2215 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002216 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002217 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002218 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002219 ok = PyObject_IsTrue(good);
2220 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002221 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002222 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002223 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002224 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002225 else
2226 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002227 }
2228
Tim Peters4324aa32001-05-28 22:30:08 +00002229 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002230 return NULL;
2231
Guido van Rossum12d12c51993-10-26 17:58:25 +00002232 return result;
2233
Guido van Rossum12d12c51993-10-26 17:58:25 +00002234Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002235 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002236 return NULL;
2237}
2238
2239
Guido van Rossume77a7571993-11-03 15:01:26 +00002240/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002241
Guido van Rossum79f25d91997-04-29 20:08:16 +00002242static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002243filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002244{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002245 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002246 Py_ssize_t i, j;
2247 Py_ssize_t len = PyString_Size(strobj);
2248 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002249
Guido van Rossum79f25d91997-04-29 20:08:16 +00002250 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002251 /* If it's a real string we can return the original,
2252 * as no character is ever false and __getitem__
2253 * does return this character. If it's a subclass
2254 * we must go through the __getitem__ loop */
2255 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002256 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002257 return strobj;
2258 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002259 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002260 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002261 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002262
Guido van Rossum12d12c51993-10-26 17:58:25 +00002263 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002264 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002265 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002266
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002267 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2268 if (item == NULL)
2269 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002270 if (func==Py_None) {
2271 ok = 1;
2272 } else {
2273 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002274 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002275 if (arg == NULL) {
2276 Py_DECREF(item);
2277 goto Fail_1;
2278 }
2279 good = PyEval_CallObject(func, arg);
2280 Py_DECREF(arg);
2281 if (good == NULL) {
2282 Py_DECREF(item);
2283 goto Fail_1;
2284 }
2285 ok = PyObject_IsTrue(good);
2286 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002287 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002288 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002289 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002290 if (!PyString_Check(item)) {
2291 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2292 " __getitem__ returned different type");
2293 Py_DECREF(item);
2294 goto Fail_1;
2295 }
2296 reslen = PyString_GET_SIZE(item);
2297 if (reslen == 1) {
2298 PyString_AS_STRING(result)[j++] =
2299 PyString_AS_STRING(item)[0];
2300 } else {
2301 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002302 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002303 if (need > outlen) {
2304 /* overallocate, to avoid reallocations */
2305 if (need<2*outlen)
2306 need = 2*outlen;
2307 if (_PyString_Resize(&result, need)) {
2308 Py_DECREF(item);
2309 return NULL;
2310 }
2311 outlen = need;
2312 }
2313 memcpy(
2314 PyString_AS_STRING(result) + j,
2315 PyString_AS_STRING(item),
2316 reslen
2317 );
2318 j += reslen;
2319 }
2320 }
Tim Peters388ed082001-04-07 20:34:48 +00002321 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002322 }
2323
Walter Dörwald903f1e02003-02-04 16:28:00 +00002324 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002325 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002326
Guido van Rossum12d12c51993-10-26 17:58:25 +00002327 return result;
2328
Guido van Rossum12d12c51993-10-26 17:58:25 +00002329Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002330 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002331 return NULL;
2332}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002333
2334#ifdef Py_USING_UNICODE
2335/* Helper for filter(): filter a Unicode object through a function */
2336
2337static PyObject *
2338filterunicode(PyObject *func, PyObject *strobj)
2339{
2340 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002341 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002342 Py_ssize_t len = PyUnicode_GetSize(strobj);
2343 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002344
2345 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002346 /* If it's a real string we can return the original,
2347 * as no character is ever false and __getitem__
2348 * does return this character. If it's a subclass
2349 * we must go through the __getitem__ loop */
2350 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002351 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002352 return strobj;
2353 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002354 }
2355 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2356 return NULL;
2357
2358 for (i = j = 0; i < len; ++i) {
2359 PyObject *item, *arg, *good;
2360 int ok;
2361
2362 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2363 if (item == NULL)
2364 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002365 if (func == Py_None) {
2366 ok = 1;
2367 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002368 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002369 if (arg == NULL) {
2370 Py_DECREF(item);
2371 goto Fail_1;
2372 }
2373 good = PyEval_CallObject(func, arg);
2374 Py_DECREF(arg);
2375 if (good == NULL) {
2376 Py_DECREF(item);
2377 goto Fail_1;
2378 }
2379 ok = PyObject_IsTrue(good);
2380 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002381 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002382 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002383 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002384 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002385 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002386 "can't filter unicode to unicode:"
2387 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002388 Py_DECREF(item);
2389 goto Fail_1;
2390 }
2391 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002392 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002393 PyUnicode_AS_UNICODE(result)[j++] =
2394 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002395 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002396 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002397 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002398 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002399 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002400 to avoid reallocations */
2401 if (need < 2 * outlen)
2402 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002403 if (PyUnicode_Resize(
2404 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002405 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002406 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002407 }
2408 outlen = need;
2409 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002410 memcpy(PyUnicode_AS_UNICODE(result) + j,
2411 PyUnicode_AS_UNICODE(item),
2412 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002413 j += reslen;
2414 }
2415 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002416 Py_DECREF(item);
2417 }
2418
Walter Dörwald903f1e02003-02-04 16:28:00 +00002419 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002420 PyUnicode_Resize(&result, j);
2421
2422 return result;
2423
2424Fail_1:
2425 Py_DECREF(result);
2426 return NULL;
2427}
2428#endif