blob: 5d877449004aebf1f8ad239cc5c97021eb83115e [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde2001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028#ifdef Py_USING_UNICODE
29static PyObject *filterunicode(PyObject *, PyObject *);
30#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
Thomas 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\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000406into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000407The 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"
Georg Brandle32b4222007-03-10 22:13:27 +0000430"If called without an argument, return the names in the current scope.\n"
431"Else, return an alphabetized list of names comprising (some of) the attributes\n"
432"of the given object, and of attributes reachable from it.\n"
433"If the object supplies a method named __dir__, it will be used; otherwise\n"
434"the default dir() logic is used and returns:\n"
435" for a module object: the module's attributes.\n"
436" for a class object: its attributes, and recursively the attributes\n"
437" of its bases.\n"
438" for an other object: its attributes, its class's attributes, and\n"
439" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000440
Guido van Rossum79f25d91997-04-29 20:08:16 +0000441static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000442builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000443{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000444 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000445
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000446 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000447 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000448 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000449}
450
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000451PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000452"divmod(x, y) -> (div, mod)\n\
453\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000454Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000455
456
Guido van Rossum79f25d91997-04-29 20:08:16 +0000457static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000458builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000459{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000460 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000461 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000462 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000463 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000464
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000465 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000466 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000467 if (locals != Py_None && !PyMapping_Check(locals)) {
468 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000469 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000470 }
471 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000472 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000473 "globals must be a real dict; try eval(expr, {}, mapping)"
474 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000475 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000476 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000477 if (globals == Py_None) {
478 globals = PyEval_GetGlobals();
479 if (locals == Py_None)
480 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000481 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000482 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000483 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000484
Georg Brandl77c85e62005-09-15 10:46:13 +0000485 if (globals == NULL || locals == NULL) {
486 PyErr_SetString(PyExc_TypeError,
487 "eval must be given globals and locals "
488 "when called without a frame");
489 return NULL;
490 }
491
Guido van Rossum79f25d91997-04-29 20:08:16 +0000492 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
493 if (PyDict_SetItemString(globals, "__builtins__",
494 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000495 return NULL;
496 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000497
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000498 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000499 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000500 PyErr_SetString(PyExc_TypeError,
501 "code object passed to eval() may not contain free variables");
502 return NULL;
503 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000504 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000505 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000506
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000507 if (!PyString_Check(cmd) &&
508 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000510 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000511 return NULL;
512 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000513 cf.cf_flags = 0;
514
515#ifdef Py_USING_UNICODE
516 if (PyUnicode_Check(cmd)) {
517 tmp = PyUnicode_AsUTF8String(cmd);
518 if (tmp == NULL)
519 return NULL;
520 cmd = tmp;
521 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
522 }
523#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000524 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
525 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000527 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528 while (*str == ' ' || *str == '\t')
529 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000530
Tim Peters9fa96be2001-08-17 23:04:59 +0000531 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000532 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
533 Py_XDECREF(tmp);
534 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000535}
536
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000537PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000538"eval(source[, globals[, locals]]) -> value\n\
539\n\
540Evaluate the source in the context of globals and locals.\n\
541The source may be a string representing a Python expression\n\
542or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000543The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000544defaulting to the current globals and locals.\n\
545If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000546
Georg Brandl7cae87c2006-09-06 06:51:57 +0000547static PyObject *
548builtin_exec(PyObject *self, PyObject *args)
549{
550 PyObject *v;
551 PyObject *prog, *globals = Py_None, *locals = Py_None;
552 int plain = 0;
553
554 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
555 return NULL;
556
557 if (globals == Py_None) {
558 globals = PyEval_GetGlobals();
559 if (locals == Py_None) {
560 locals = PyEval_GetLocals();
561 plain = 1;
562 }
563 if (!globals || !locals) {
564 PyErr_SetString(PyExc_SystemError,
565 "globals and locals cannot be NULL");
566 return NULL;
567 }
568 }
569 else if (locals == Py_None)
570 locals = globals;
571 if (!PyString_Check(prog) &&
572 !PyUnicode_Check(prog) &&
573 !PyCode_Check(prog) &&
574 !PyFile_Check(prog)) {
575 PyErr_Format(PyExc_TypeError,
576 "exec() arg 1 must be a string, file, or code "
577 "object, not %.100s", prog->ob_type->tp_name);
578 return NULL;
579 }
580 if (!PyDict_Check(globals)) {
581 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
582 globals->ob_type->tp_name);
583 return NULL;
584 }
585 if (!PyMapping_Check(locals)) {
586 PyErr_Format(PyExc_TypeError,
587 "arg 3 must be a mapping or None, not %.100s",
588 locals->ob_type->tp_name);
589 return NULL;
590 }
591 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
592 if (PyDict_SetItemString(globals, "__builtins__",
593 PyEval_GetBuiltins()) != 0)
594 return NULL;
595 }
596
597 if (PyCode_Check(prog)) {
598 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
599 PyErr_SetString(PyExc_TypeError,
600 "code object passed to exec() may not "
601 "contain free variables");
602 return NULL;
603 }
604 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
605 }
606 else if (PyFile_Check(prog)) {
607 FILE *fp = PyFile_AsFile(prog);
608 char *name = PyString_AsString(PyFile_Name(prog));
609 PyCompilerFlags cf;
610 cf.cf_flags = 0;
611 if (PyEval_MergeCompilerFlags(&cf))
612 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
613 locals, &cf);
614 else
615 v = PyRun_File(fp, name, Py_file_input, globals,
616 locals);
617 }
618 else {
619 PyObject *tmp = NULL;
620 char *str;
621 PyCompilerFlags cf;
622 cf.cf_flags = 0;
623#ifdef Py_USING_UNICODE
624 if (PyUnicode_Check(prog)) {
625 tmp = PyUnicode_AsUTF8String(prog);
626 if (tmp == NULL)
627 return NULL;
628 prog = tmp;
629 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
630 }
631#endif
632 if (PyString_AsStringAndSize(prog, &str, NULL))
633 return NULL;
634 if (PyEval_MergeCompilerFlags(&cf))
635 v = PyRun_StringFlags(str, Py_file_input, globals,
636 locals, &cf);
637 else
638 v = PyRun_String(str, Py_file_input, globals, locals);
639 Py_XDECREF(tmp);
640 }
641 if (v == NULL)
642 return NULL;
643 Py_DECREF(v);
644 Py_RETURN_NONE;
645}
646
647PyDoc_STRVAR(exec_doc,
648"exec(object[, globals[, locals]])\n\
649\n\
650Read and execute code from a object, which can be a string, a code\n\
651object or a file object.\n\
652The globals and locals are dictionaries, defaulting to the current\n\
653globals and locals. If only globals is given, locals defaults to it.");
654
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000655
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000657builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000658{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000659 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660 PyObject *globals = Py_None, *locals = Py_None;
661 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000662 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000663 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000664 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000665
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000666 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000667 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000669 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000670 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000671 if (locals != Py_None && !PyMapping_Check(locals)) {
672 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
673 return NULL;
674 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000675 if (globals == Py_None) {
676 globals = PyEval_GetGlobals();
677 if (locals == Py_None)
678 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000679 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000680 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000681 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
683 if (PyDict_SetItemString(globals, "__builtins__",
684 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000685 return NULL;
686 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000687
688 exists = 0;
689 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000690#if defined(PLAN9)
691 {
692 Dir *d;
693
694 if ((d = dirstat(filename))!=nil) {
695 if(d->mode & DMDIR)
696 werrstr("is a directory");
697 else
698 exists = 1;
699 free(d);
700 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000701 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000702#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000703 if (object_exists(filename)) {
704 if (isdir(filename))
705 errno = EISDIR;
706 else
707 exists = 1;
708 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000709#else /* standard Posix */
710 {
711 struct stat s;
712 if (stat(filename, &s) == 0) {
713 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000714# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000715 errno = EOS2ERR;
716# else
717 errno = EISDIR;
718# endif
719 else
720 exists = 1;
721 }
722 }
723#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000724
725 if (exists) {
726 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000727 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000728 Py_END_ALLOW_THREADS
729
730 if (fp == NULL) {
731 exists = 0;
732 }
733 }
734
735 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000736 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000737 return NULL;
738 }
Tim Peters5ba58662001-07-16 02:29:45 +0000739 cf.cf_flags = 0;
740 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000741 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000742 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000743 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000744 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000745 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000747}
748
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000749PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000750"execfile(filename[, globals[, locals]])\n\
751\n\
752Read and execute a Python script from a file.\n\
753The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000754globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000755
756
Guido van Rossum79f25d91997-04-29 20:08:16 +0000757static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000758builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000759{
Guido van Rossum950ff291998-06-29 13:38:57 +0000760 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000763 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000764 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000765#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000766 if (PyUnicode_Check(name)) {
767 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
768 if (name == NULL)
769 return NULL;
770 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000771#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000772
773 if (!PyString_Check(name)) {
774 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000775 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000776 return NULL;
777 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000778 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000779 if (result == NULL && dflt != NULL &&
780 PyErr_ExceptionMatches(PyExc_AttributeError))
781 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000782 PyErr_Clear();
783 Py_INCREF(dflt);
784 result = dflt;
785 }
786 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000787}
788
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000789PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000790"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000791\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000792Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
793When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000794exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000795
796
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000798builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000799{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000801
Guido van Rossum79f25d91997-04-29 20:08:16 +0000802 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000803 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000804 return d;
805}
806
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000807PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000808"globals() -> dictionary\n\
809\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000810Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000811
812
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000814builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000815{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 PyObject *v;
817 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000818
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000819 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000820 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000821#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000822 if (PyUnicode_Check(name)) {
823 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
824 if (name == NULL)
825 return NULL;
826 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000827#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000828
829 if (!PyString_Check(name)) {
830 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000831 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000832 return NULL;
833 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000835 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000837 Py_INCREF(Py_False);
838 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000839 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000841 Py_INCREF(Py_True);
842 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000843}
844
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000845PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000846"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000847\n\
848Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000849(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000850
851
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000853builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000854{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000855 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000856}
857
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000858PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000859"id(object) -> integer\n\
860\n\
861Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000862simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000863
864
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000866builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000867{
868 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000869 PyObject *it; /* the iterator object */
870 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000871 } sequence;
872
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000874 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000875 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876 register int i, j;
877
Guido van Rossum79f25d91997-04-29 20:08:16 +0000878 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000879 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 PyErr_SetString(PyExc_TypeError,
881 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000882 return NULL;
883 }
884
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000887
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000888 if (func == Py_None && n == 1) {
889 /* map(None, S) is the same as list(S). */
890 return PySequence_List(PyTuple_GetItem(args, 1));
891 }
892
Tim Peters4e9afdc2001-05-03 23:54:49 +0000893 /* Get space for sequence descriptors. Must NULL out the iterator
894 * pointers so that jumping to Fail_2 later doesn't see trash.
895 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
897 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000898 return NULL;
899 }
900 for (i = 0; i < n; ++i) {
901 seqs[i].it = (PyObject*)NULL;
902 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000903 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000904
Tim Peters4e9afdc2001-05-03 23:54:49 +0000905 /* Do a first pass to obtain iterators for the arguments, and set len
906 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000907 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000908 len = 0;
909 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
910 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000911 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000912
Tim Peters4e9afdc2001-05-03 23:54:49 +0000913 /* Get iterator. */
914 curseq = PyTuple_GetItem(args, i+1);
915 sqp->it = PyObject_GetIter(curseq);
916 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000917 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000918 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000919 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000920 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000922 goto Fail_2;
923 }
924
Tim Peters4e9afdc2001-05-03 23:54:49 +0000925 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000926 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000927 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000928 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
929 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
930 goto Fail_2;
931 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000932 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000933 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000934 }
935 if (curlen > len)
936 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000937 }
938
Tim Peters4e9afdc2001-05-03 23:54:49 +0000939 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000941 goto Fail_2;
942
Tim Peters4e9afdc2001-05-03 23:54:49 +0000943 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000944 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000946 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000949 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000950 else if ((alist = PyTuple_New(n)) == NULL)
951 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000952
953 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000954 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 Py_INCREF(Py_None);
956 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000957 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000958 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000959 item = PyIter_Next(sqp->it);
960 if (item)
961 ++numactive;
962 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000963 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000964 Py_XDECREF(alist);
965 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000966 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000967 Py_INCREF(Py_None);
968 item = Py_None;
969 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000970 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000971 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000972 if (alist)
973 PyTuple_SET_ITEM(alist, j, item);
974 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000975 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976 }
977
Guido van Rossum32120311995-07-10 13:52:21 +0000978 if (!alist)
979 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000980
Tim Peters4e9afdc2001-05-03 23:54:49 +0000981 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000983 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000984 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000985
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000987 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000988 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000989 value = PyEval_CallObject(func, alist);
990 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000991 if (value == NULL)
992 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000993 }
994 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000995 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000996 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000997 if (status < 0)
998 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000999 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001000 else if (PyList_SetItem(result, i, value) < 0)
1001 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001002 }
1003
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001004 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1005 goto Fail_1;
1006
Tim Peters4e9afdc2001-05-03 23:54:49 +00001007 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001008
Guido van Rossum12d12c51993-10-26 17:58:25 +00001009Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001010 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001011Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001012 result = NULL;
1013Succeed:
1014 assert(seqs);
1015 for (i = 0; i < n; ++i)
1016 Py_XDECREF(seqs[i].it);
1017 PyMem_DEL(seqs);
1018 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001019}
1020
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001021PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001022"map(function, sequence[, sequence, ...]) -> list\n\
1023\n\
1024Return a list of the results of applying the function to the items of\n\
1025the argument sequence(s). If more than one sequence is given, the\n\
1026function is called with an argument list consisting of the corresponding\n\
1027item of each sequence, substituting None for missing values when not all\n\
1028sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030
1031
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001033builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001034{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001035 PyObject *v;
1036 PyObject *name;
1037 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001038
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001039 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001040 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001042 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001043 Py_INCREF(Py_None);
1044 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001045}
1046
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001047PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001048"setattr(object, name, value)\n\
1049\n\
1050Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001051``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001052
1053
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001055builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001056{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057 PyObject *v;
1058 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001059
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001060 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001061 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001062 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001063 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064 Py_INCREF(Py_None);
1065 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001066}
1067
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001068PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001069"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001070\n\
1071Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001072``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073
1074
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001076builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001077{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001078 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001079
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001081 if (x == -1)
1082 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001084}
1085
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001086PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001087"hash(object) -> integer\n\
1088\n\
1089Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001090the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091
1092
Guido van Rossum79f25d91997-04-29 20:08:16 +00001093static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001094builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001095{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001097 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001098
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001099 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001100 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001101 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001102 "hex() argument can't be converted to hex");
1103 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001104 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001105 res = (*nb->nb_hex)(v);
1106 if (res && !PyString_Check(res)) {
1107 PyErr_Format(PyExc_TypeError,
1108 "__hex__ returned non-string (type %.200s)",
1109 res->ob_type->tp_name);
1110 Py_DECREF(res);
1111 return NULL;
1112 }
1113 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001114}
1115
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001116PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001117"hex(number) -> string\n\
1118\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001119Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001123builtin_iter(PyObject *self, PyObject *args)
1124{
1125 PyObject *v, *w = NULL;
1126
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001127 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001128 return NULL;
1129 if (w == NULL)
1130 return PyObject_GetIter(v);
1131 if (!PyCallable_Check(v)) {
1132 PyErr_SetString(PyExc_TypeError,
1133 "iter(v, w): v must be callable");
1134 return NULL;
1135 }
1136 return PyCallIter_New(v, w);
1137}
1138
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001140"iter(collection) -> iterator\n\
1141iter(callable, sentinel) -> iterator\n\
1142\n\
1143Get an iterator from an object. In the first form, the argument must\n\
1144supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001145In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001146
1147
1148static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001149builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001150{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001151 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001152
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001153 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001154 if (res < 0 && PyErr_Occurred())
1155 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001156 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001157}
1158
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001159PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001160"len(object) -> integer\n\
1161\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001162Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001163
1164
Guido van Rossum79f25d91997-04-29 20:08:16 +00001165static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001166builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001167{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001171 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001172 return d;
1173}
1174
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001175PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001176"locals() -> dictionary\n\
1177\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001178Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179
1180
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001182min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001183{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001184 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001185 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001188 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001189 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001190 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001191
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001192 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1193 keyfunc = PyDict_GetItemString(kwds, "key");
1194 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001195 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001196 "%s() got an unexpected keyword argument", name);
1197 return NULL;
1198 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001199 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001200
Tim Petersc3074532001-05-03 07:00:32 +00001201 it = PyObject_GetIter(v);
1202 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001203 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001204
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001205 maxitem = NULL; /* the result */
1206 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001207 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001208 /* get the value from the key function */
1209 if (keyfunc != NULL) {
1210 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1211 if (val == NULL)
1212 goto Fail_it_item;
1213 }
1214 /* no key function; the value is the item */
1215 else {
1216 val = item;
1217 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001218 }
Tim Petersc3074532001-05-03 07:00:32 +00001219
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001220 /* maximum value and item are unset; set them */
1221 if (maxval == NULL) {
1222 maxitem = item;
1223 maxval = val;
1224 }
1225 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001226 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001227 int cmp = PyObject_RichCompareBool(val, maxval, op);
1228 if (cmp < 0)
1229 goto Fail_it_item_and_val;
1230 else if (cmp > 0) {
1231 Py_DECREF(maxval);
1232 Py_DECREF(maxitem);
1233 maxval = val;
1234 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001235 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001236 else {
1237 Py_DECREF(item);
1238 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001239 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001240 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001241 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001242 if (PyErr_Occurred())
1243 goto Fail_it;
1244 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001245 PyErr_Format(PyExc_ValueError,
1246 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001247 assert(maxitem == NULL);
1248 }
1249 else
1250 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001251 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001252 return maxitem;
1253
1254Fail_it_item_and_val:
1255 Py_DECREF(val);
1256Fail_it_item:
1257 Py_DECREF(item);
1258Fail_it:
1259 Py_XDECREF(maxval);
1260 Py_XDECREF(maxitem);
1261 Py_DECREF(it);
1262 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001263}
1264
Guido van Rossum79f25d91997-04-29 20:08:16 +00001265static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001266builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001267{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001268 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001269}
1270
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001271PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001272"min(iterable[, key=func]) -> value\n\
1273min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001274\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001275With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001276With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001277
1278
Guido van Rossum79f25d91997-04-29 20:08:16 +00001279static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001280builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001282 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001283}
1284
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001285PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001286"max(iterable[, key=func]) -> value\n\
1287max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001288\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001289With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001290With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001291
1292
Guido van Rossum79f25d91997-04-29 20:08:16 +00001293static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001294builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001295{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001296 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001297 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001298
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001299 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1300 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001301 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001302 "oct() argument can't be converted to oct");
1303 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001304 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001305 res = (*nb->nb_oct)(v);
1306 if (res && !PyString_Check(res)) {
1307 PyErr_Format(PyExc_TypeError,
1308 "__oct__ returned non-string (type %.200s)",
1309 res->ob_type->tp_name);
1310 Py_DECREF(res);
1311 return NULL;
1312 }
1313 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001314}
1315
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001316PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001317"oct(number) -> string\n\
1318\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001319Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001320
1321
Guido van Rossum79f25d91997-04-29 20:08:16 +00001322static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001323builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1324{
1325 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1326}
1327
1328PyDoc_STRVAR(open_doc,
1329"open(name[, mode[, buffering]]) -> file object\n\
1330\n\
1331Open a file using the file() type, returns a file object.");
1332
1333
1334static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001335builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001336{
Guido van Rossum09095f32000-03-10 23:00:52 +00001337 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001338 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001339
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001340 if (PyString_Check(obj)) {
1341 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001342 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001343 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001344 return PyInt_FromLong(ord);
1345 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001346#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001347 } else if (PyUnicode_Check(obj)) {
1348 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001349 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001350 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001351 return PyInt_FromLong(ord);
1352 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001353#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001354 } else {
1355 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001356 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001357 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001358 return NULL;
1359 }
1360
Guido van Rossumad991772001-01-12 16:03:05 +00001361 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001362 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001363 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001364 size);
1365 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001366}
1367
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001368PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001369"ord(c) -> integer\n\
1370\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001371Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001372
1373
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001375builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001376{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001377 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001378
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001379 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001380 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001381 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001382}
1383
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001384PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001385"pow(x, y[, z]) -> number\n\
1386\n\
1387With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001388equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001389
1390
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001391
Guido van Rossum34343512006-11-30 22:13:52 +00001392static PyObject *
1393builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1394{
1395 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001396 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001397 PyObject *sep = NULL, *end = NULL, *file = NULL;
1398 int i, err;
1399
Georg Brandl257d3d92007-02-26 10:35:10 +00001400 if (dummy_args == NULL) {
1401 if (!(dummy_args = PyTuple_New(0)))
1402 return NULL;
1403 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001404 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001405 kwlist, &sep, &end, &file))
1406 return NULL;
1407 if (file == NULL || file == Py_None)
1408 file = PySys_GetObject("stdout");
1409
Georg Brandl16f3e032006-11-30 22:46:03 +00001410 if (sep && sep != Py_None && !PyString_Check(sep) &&
1411 !PyUnicode_Check(sep)) {
1412 PyErr_Format(PyExc_TypeError,
1413 "sep must be None, str or unicode, not %.200s",
1414 sep->ob_type->tp_name);
1415 return NULL;
1416 }
1417 if (end && end != Py_None && !PyString_Check(end) &&
1418 !PyUnicode_Check(end)) {
1419 PyErr_Format(PyExc_TypeError,
1420 "end must be None, str or unicode, not %.200s",
1421 end->ob_type->tp_name);
1422 return NULL;
1423 }
Guido van Rossum34343512006-11-30 22:13:52 +00001424
1425 for (i = 0; i < PyTuple_Size(args); i++) {
1426 if (i > 0) {
1427 if (sep == NULL || sep == Py_None)
1428 err = PyFile_WriteString(" ", file);
1429 else
1430 err = PyFile_WriteObject(sep, file,
1431 Py_PRINT_RAW);
1432 if (err)
1433 return NULL;
1434 }
1435 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1436 Py_PRINT_RAW);
1437 if (err)
1438 return NULL;
1439 }
1440
1441 if (end == NULL || end == Py_None)
1442 err = PyFile_WriteString("\n", file);
1443 else
1444 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1445 if (err)
1446 return NULL;
1447
1448 Py_RETURN_NONE;
1449}
1450
1451PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001452"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001453\n\
1454Prints the values to a stream, or to sys.stdout by default.\n\
1455Optional keyword arguments:\n\
1456file: a file-like object (stream); defaults to the current sys.stdout.\n\
1457sep: string inserted between values, default a space.\n\
1458end: string appended after the last value, default a newline.");
1459
1460
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001461/* Return number of items in range (lo, hi, step), when arguments are
1462 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1463 * & only if the true value is too large to fit in a signed long.
1464 * Arguments MUST return 1 with either PyInt_Check() or
1465 * PyLong_Check(). Return -1 when there is an error.
1466 */
1467static long
1468get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1469{
1470 /* -------------------------------------------------------------
1471 Algorithm is equal to that of get_len_of_range(), but it operates
1472 on PyObjects (which are assumed to be PyLong or PyInt objects).
1473 ---------------------------------------------------------------*/
1474 long n;
1475 PyObject *diff = NULL;
1476 PyObject *one = NULL;
1477 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1478 /* holds sub-expression evaluations */
1479
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001480 /* If (lo >= hi), return length of 0 (or error). */
1481 n = PyObject_RichCompareBool(lo, hi, Py_LT);
1482 if (n <= 0)
1483 return n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001484
1485 if ((one = PyLong_FromLong(1L)) == NULL)
1486 goto Fail;
1487
1488 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1489 goto Fail;
1490
1491 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1492 goto Fail;
1493
1494 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1495 goto Fail;
1496
1497 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1498 goto Fail;
1499
1500 n = PyLong_AsLong(tmp3);
1501 if (PyErr_Occurred()) { /* Check for Overflow */
1502 PyErr_Clear();
1503 goto Fail;
1504 }
1505
1506 Py_DECREF(tmp3);
1507 Py_DECREF(tmp2);
1508 Py_DECREF(diff);
1509 Py_DECREF(tmp1);
1510 Py_DECREF(one);
1511 return n;
1512
1513 Fail:
1514 Py_XDECREF(tmp3);
1515 Py_XDECREF(tmp2);
1516 Py_XDECREF(diff);
1517 Py_XDECREF(tmp1);
1518 Py_XDECREF(one);
1519 return -1;
1520}
1521
1522/* An extension of builtin_range() that handles the case when PyLong
1523 * arguments are given. */
1524static PyObject *
1525handle_range_longs(PyObject *self, PyObject *args)
1526{
1527 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001528 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001529 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001530
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001531 PyObject *curnum = NULL;
1532 PyObject *v = NULL;
1533 long bign;
1534 int i, n;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001535 int step_pos;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001536
Tim Peters874e1f72003-04-13 22:13:08 +00001537 PyObject *zero = PyLong_FromLong(0);
1538
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001539 if (zero == NULL)
1540 return NULL;
1541
Tim Peters874e1f72003-04-13 22:13:08 +00001542 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1543 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001544 return NULL;
1545 }
1546
Tim Peters874e1f72003-04-13 22:13:08 +00001547 /* Figure out which way we were called, supply defaults, and be
1548 * sure to incref everything so that the decrefs at the end
1549 * are correct.
1550 */
1551 assert(ilow != NULL);
1552 if (ihigh == NULL) {
1553 /* only 1 arg -- it's the upper limit */
1554 ihigh = ilow;
1555 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001556 }
Tim Peters874e1f72003-04-13 22:13:08 +00001557 assert(ihigh != NULL);
1558 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001559
Tim Peters874e1f72003-04-13 22:13:08 +00001560 /* ihigh correct now; do ilow */
1561 if (ilow == NULL)
1562 ilow = zero;
1563 Py_INCREF(ilow);
1564
1565 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001566 if (istep == NULL) {
1567 istep = PyLong_FromLong(1L);
1568 if (istep == NULL)
1569 goto Fail;
1570 }
1571 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001572 Py_INCREF(istep);
1573 }
1574
Tim Peters874e1f72003-04-13 22:13:08 +00001575 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001576 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001577 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001578 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001579 goto Fail;
1580 }
1581
Tim Peters874e1f72003-04-13 22:13:08 +00001582 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001583 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001584 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001585 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001586 goto Fail;
1587 }
1588
1589 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001590 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001591 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001592 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001593 goto Fail;
1594 }
1595
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001596 step_pos = PyObject_RichCompareBool(istep, zero, Py_GT);
1597 if (step_pos < 0)
Tim Peters874e1f72003-04-13 22:13:08 +00001598 goto Fail;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001599 if (step_pos)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001600 bign = get_len_of_range_longs(ilow, ihigh, istep);
1601 else {
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001602 int step_zero = PyObject_RichCompareBool(istep, zero, Py_EQ);
Guido van Rossum93a66922006-08-24 02:10:21 +00001603 PyObject *neg_istep;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001604 if (step_zero < 0)
1605 goto Fail;
1606 if (step_zero) {
1607 PyErr_SetString(PyExc_ValueError,
1608 "range() step argument must not be zero");
1609 goto Fail;
1610 }
Guido van Rossum93a66922006-08-24 02:10:21 +00001611 neg_istep = PyNumber_Negative(istep);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001612 if (neg_istep == NULL)
1613 goto Fail;
1614 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1615 Py_DECREF(neg_istep);
1616 }
1617
1618 n = (int)bign;
1619 if (bign < 0 || (long)n != bign) {
1620 PyErr_SetString(PyExc_OverflowError,
1621 "range() result has too many items");
1622 goto Fail;
1623 }
1624
1625 v = PyList_New(n);
1626 if (v == NULL)
1627 goto Fail;
1628
1629 curnum = ilow;
1630 Py_INCREF(curnum);
1631
1632 for (i = 0; i < n; i++) {
1633 PyObject *w = PyNumber_Long(curnum);
1634 PyObject *tmp_num;
1635 if (w == NULL)
1636 goto Fail;
1637
1638 PyList_SET_ITEM(v, i, w);
1639
1640 tmp_num = PyNumber_Add(curnum, istep);
1641 if (tmp_num == NULL)
1642 goto Fail;
1643
1644 Py_DECREF(curnum);
1645 curnum = tmp_num;
1646 }
Tim Peters874e1f72003-04-13 22:13:08 +00001647 Py_DECREF(ilow);
1648 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001649 Py_DECREF(istep);
1650 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001651 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001652 return v;
1653
1654 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001655 Py_DECREF(ilow);
1656 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001657 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001658 Py_DECREF(zero);
1659 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001660 Py_XDECREF(v);
1661 return NULL;
1662}
1663
Guido van Rossum124eff01999-02-23 16:11:01 +00001664/* Return number of items in range/xrange (lo, hi, step). step > 0
1665 * required. Return a value < 0 if & only if the true value is too
1666 * large to fit in a signed long.
1667 */
1668static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001669get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001670{
1671 /* -------------------------------------------------------------
1672 If lo >= hi, the range is empty.
1673 Else if n values are in the range, the last one is
1674 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1675 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1676 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1677 the RHS is non-negative and so truncation is the same as the
1678 floor. Letting M be the largest positive long, the worst case
1679 for the RHS numerator is hi=M, lo=-M-1, and then
1680 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1681 precision to compute the RHS exactly.
1682 ---------------------------------------------------------------*/
1683 long n = 0;
1684 if (lo < hi) {
1685 unsigned long uhi = (unsigned long)hi;
1686 unsigned long ulo = (unsigned long)lo;
1687 unsigned long diff = uhi - ulo - 1;
1688 n = (long)(diff / (unsigned long)step + 1);
1689 }
1690 return n;
1691}
1692
Guido van Rossum79f25d91997-04-29 20:08:16 +00001693static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001694builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001695{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001696 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001697 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001698 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001699
Guido van Rossum79f25d91997-04-29 20:08:16 +00001700 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001701
Guido van Rossum79f25d91997-04-29 20:08:16 +00001702 if (PyTuple_Size(args) <= 1) {
1703 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001704 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001705 &ihigh)) {
1706 PyErr_Clear();
1707 return handle_range_longs(self, args);
1708 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001709 }
1710 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001712 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001713 &ilow, &ihigh, &istep)) {
1714 PyErr_Clear();
1715 return handle_range_longs(self, args);
1716 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001717 }
1718 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001719 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001720 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001721 return NULL;
1722 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001723 if (istep > 0)
1724 bign = get_len_of_range(ilow, ihigh, istep);
1725 else
1726 bign = get_len_of_range(ihigh, ilow, -istep);
1727 n = (int)bign;
1728 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001729 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001730 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001731 return NULL;
1732 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001733 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001734 if (v == NULL)
1735 return NULL;
1736 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001737 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001738 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001739 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001740 return NULL;
1741 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001742 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001743 ilow += istep;
1744 }
1745 return v;
1746}
1747
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001748PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001749"range([start,] stop[, step]) -> list of integers\n\
1750\n\
1751Return a list containing an arithmetic progression of integers.\n\
1752range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1753When step is given, it specifies the increment (or decrement).\n\
1754For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001755These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001756
Guido van Rossuma88a0332007-02-26 16:59:55 +00001757static PyObject *
1758builtin_input(PyObject *self, PyObject *args)
1759{
1760 PyObject *v = NULL;
1761 PyObject *fin = PySys_GetObject("stdin");
1762 PyObject *fout = PySys_GetObject("stdout");
1763
1764 if (!PyArg_UnpackTuple(args, "input", 0, 1, &v))
1765 return NULL;
1766
1767 if (fin == NULL) {
1768 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdin");
1769 return NULL;
1770 }
1771 if (fout == NULL) {
1772 PyErr_SetString(PyExc_RuntimeError, "input: lost sys.stdout");
1773 return NULL;
1774 }
1775 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
1776 && isatty(fileno(PyFile_AsFile(fin)))
1777 && isatty(fileno(PyFile_AsFile(fout)))) {
1778 PyObject *po;
1779 char *prompt;
1780 char *s;
1781 PyObject *result;
1782 if (v != NULL) {
1783 po = PyObject_Str(v);
1784 if (po == NULL)
1785 return NULL;
1786 prompt = PyString_AsString(po);
1787 if (prompt == NULL)
1788 return NULL;
1789 }
1790 else {
1791 po = NULL;
1792 prompt = "";
1793 }
1794 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
1795 prompt);
1796 Py_XDECREF(po);
1797 if (s == NULL) {
1798 if (!PyErr_Occurred())
1799 PyErr_SetNone(PyExc_KeyboardInterrupt);
1800 return NULL;
1801 }
1802 if (*s == '\0') {
1803 PyErr_SetNone(PyExc_EOFError);
1804 result = NULL;
1805 }
1806 else { /* strip trailing '\n' */
1807 size_t len = strlen(s);
1808 if (len > PY_SSIZE_T_MAX) {
1809 PyErr_SetString(PyExc_OverflowError,
1810 "input: input too long");
1811 result = NULL;
1812 }
1813 else {
1814 result = PyString_FromStringAndSize(s, len-1);
1815 }
1816 }
1817 PyMem_FREE(s);
1818 return result;
1819 }
1820 if (v != NULL) {
1821 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
1822 return NULL;
1823 }
1824 return PyFile_GetLine(fin, -1);
1825}
1826
1827PyDoc_STRVAR(input_doc,
1828"input([prompt]) -> string\n\
1829\n\
1830Read a string from standard input. The trailing newline is stripped.\n\
1831If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1832On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1833is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001834
Guido van Rossum79f25d91997-04-29 20:08:16 +00001835static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001836builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001837{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001839}
1840
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001841PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001842"reload(module) -> module\n\
1843\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001844Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001845
1846
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001848builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001849{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001850 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001851}
1852
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001853PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001854"repr(object) -> string\n\
1855\n\
1856Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001857For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001858
1859
Guido van Rossum79f25d91997-04-29 20:08:16 +00001860static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001861builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001862{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001863 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001864 double f;
1865 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001866 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001867 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001868
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001869 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1870 kwlist, &number, &ndigits))
1871 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001872 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001873 i = abs(ndigits);
1874 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001875 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001876 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001877 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001878 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001879 number *= f;
1880 if (number >= 0.0)
1881 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001882 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001883 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001884 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001885 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001886 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001887 number /= f;
1888 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001889}
1890
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001891PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001892"round(number[, ndigits]) -> floating point number\n\
1893\n\
1894Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001895This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001896
Raymond Hettinger64958a12003-12-17 20:43:33 +00001897static PyObject *
1898builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1899{
1900 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1901 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001902 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001903 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001904
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001905 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001906 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1907 kwlist, &seq, &compare, &keyfunc, &reverse))
1908 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001909
1910 newlist = PySequence_List(seq);
1911 if (newlist == NULL)
1912 return NULL;
1913
1914 callable = PyObject_GetAttrString(newlist, "sort");
1915 if (callable == NULL) {
1916 Py_DECREF(newlist);
1917 return NULL;
1918 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001919
Raymond Hettinger64958a12003-12-17 20:43:33 +00001920 newargs = PyTuple_GetSlice(args, 1, 4);
1921 if (newargs == NULL) {
1922 Py_DECREF(newlist);
1923 Py_DECREF(callable);
1924 return NULL;
1925 }
1926
1927 v = PyObject_Call(callable, newargs, kwds);
1928 Py_DECREF(newargs);
1929 Py_DECREF(callable);
1930 if (v == NULL) {
1931 Py_DECREF(newlist);
1932 return NULL;
1933 }
1934 Py_DECREF(v);
1935 return newlist;
1936}
1937
1938PyDoc_STRVAR(sorted_doc,
1939"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001940
Guido van Rossum79f25d91997-04-29 20:08:16 +00001941static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001942builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001943{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001944 PyObject *v = NULL;
1945 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001946
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001947 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001948 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001949 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001950 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001951 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001952 if (!PyErr_Occurred())
1953 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001954 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001955 }
1956 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001957 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001958 }
1959 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001960 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001961 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001962 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001963 "vars() argument must have __dict__ attribute");
1964 return NULL;
1965 }
1966 }
1967 return d;
1968}
1969
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001970PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001971"vars([object]) -> dictionary\n\
1972\n\
1973Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001974With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001975
Alex Martellia70b1912003-04-22 08:12:33 +00001976
1977static PyObject*
1978builtin_sum(PyObject *self, PyObject *args)
1979{
1980 PyObject *seq;
1981 PyObject *result = NULL;
1982 PyObject *temp, *item, *iter;
1983
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001984 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001985 return NULL;
1986
1987 iter = PyObject_GetIter(seq);
1988 if (iter == NULL)
1989 return NULL;
1990
1991 if (result == NULL) {
1992 result = PyInt_FromLong(0);
1993 if (result == NULL) {
1994 Py_DECREF(iter);
1995 return NULL;
1996 }
1997 } else {
1998 /* reject string values for 'start' parameter */
1999 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2000 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002001 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002002 Py_DECREF(iter);
2003 return NULL;
2004 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002005 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002006 }
2007
2008 for(;;) {
2009 item = PyIter_Next(iter);
2010 if (item == NULL) {
2011 /* error, or end-of-sequence */
2012 if (PyErr_Occurred()) {
2013 Py_DECREF(result);
2014 result = NULL;
2015 }
2016 break;
2017 }
Alex Martellia253e182003-10-25 23:24:14 +00002018 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002019 Py_DECREF(result);
2020 Py_DECREF(item);
2021 result = temp;
2022 if (result == NULL)
2023 break;
2024 }
2025 Py_DECREF(iter);
2026 return result;
2027}
2028
2029PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002030"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002031\n\
2032Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002033of parameter 'start' (which defaults to 0). When the sequence is\n\
2034empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002035
2036
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002037static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002038builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002039{
2040 PyObject *inst;
2041 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002042 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002043
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002044 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002045 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002046
Guido van Rossum823649d2001-03-21 18:40:58 +00002047 retval = PyObject_IsInstance(inst, cls);
2048 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002049 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002050 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002051}
2052
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002053PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002054"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002055\n\
2056Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002057With a type as second argument, return whether that is the object's type.\n\
2058The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002059isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002060
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002061
2062static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002063builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002064{
2065 PyObject *derived;
2066 PyObject *cls;
2067 int retval;
2068
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002069 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002070 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002071
Guido van Rossum823649d2001-03-21 18:40:58 +00002072 retval = PyObject_IsSubclass(derived, cls);
2073 if (retval < 0)
2074 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002075 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002076}
2077
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002078PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002079"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002080\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002081Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2082When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2083is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002084
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002085
Barry Warsawbd599b52000-08-03 15:45:29 +00002086static PyObject*
2087builtin_zip(PyObject *self, PyObject *args)
2088{
Guido van Rossumb65fb332006-08-25 23:26:40 +00002089 /* args must be a tuple */
2090 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002091
Guido van Rossumb65fb332006-08-25 23:26:40 +00002092 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002093}
2094
2095
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002096PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00002097"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002098\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00002099Return an iterator yielding tuples, where each tuple contains the\n\
2100corresponding element from each of the argument iterables.\n\
2101The returned iterator ends when the shortest argument iterable is exhausted.\n\
2102NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00002103
2104
Guido van Rossum79f25d91997-04-29 20:08:16 +00002105static PyMethodDef builtin_methods[] = {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002106 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002107 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002108 {"all", builtin_all, METH_O, all_doc},
2109 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002110 {"callable", builtin_callable, METH_O, callable_doc},
2111 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2112 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002113 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2114 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2115 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2116 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2117 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002118 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002119 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2120 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2121 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2122 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2123 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2124 {"hash", builtin_hash, METH_O, hash_doc},
2125 {"hex", builtin_hex, METH_O, hex_doc},
2126 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002127 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002128 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2129 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2130 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2131 {"len", builtin_len, METH_O, len_doc},
2132 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2133 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002134 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2135 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002136 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002137 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002138 {"ord", builtin_ord, METH_O, ord_doc},
2139 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002140 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002141 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002142 {"reload", builtin_reload, METH_O, reload_doc},
2143 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002144 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002145 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002146 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002147 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002148#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002149 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002150#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002151 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002152 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002153 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002154};
2155
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002156PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002157"Built-in functions, exceptions, and other objects.\n\
2158\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002159Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002160
Guido van Rossum25ce5661997-08-02 03:10:38 +00002161PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002162_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002163{
Fred Drake5550de32000-06-20 04:54:19 +00002164 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002165 mod = Py_InitModule4("__builtin__", builtin_methods,
2166 builtin_doc, (PyObject *)NULL,
2167 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002168 if (mod == NULL)
2169 return NULL;
2170 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002171
Tim Peters7571a0f2003-03-23 17:52:28 +00002172#ifdef Py_TRACE_REFS
2173 /* __builtin__ exposes a number of statically allocated objects
2174 * that, before this code was added in 2.3, never showed up in
2175 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2176 * result, programs leaking references to None and False (etc)
2177 * couldn't be diagnosed by examining sys.getobjects(0).
2178 */
2179#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2180#else
2181#define ADD_TO_ALL(OBJECT) (void)0
2182#endif
2183
Tim Peters4b7625e2001-09-13 21:37:17 +00002184#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002185 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2186 return NULL; \
2187 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002188
2189 SETBUILTIN("None", Py_None);
2190 SETBUILTIN("Ellipsis", Py_Ellipsis);
2191 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002192 SETBUILTIN("False", Py_False);
2193 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002194 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002195 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002196 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002197 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002198 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002199#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002200 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002201#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002202 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002203 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002204 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002205 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002206 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002207 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002208 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002209 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002210 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002211 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002212 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002213 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002214 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2215 SETBUILTIN("str", &PyString_Type);
2216 SETBUILTIN("super", &PySuper_Type);
2217 SETBUILTIN("tuple", &PyTuple_Type);
2218 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002219 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002220#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002221 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002222#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002223 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002224 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2225 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002226 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002227 }
2228 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002229
Guido van Rossum25ce5661997-08-02 03:10:38 +00002230 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002231#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002232#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002233}
2234
Guido van Rossume77a7571993-11-03 15:01:26 +00002235/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002236
Guido van Rossum79f25d91997-04-29 20:08:16 +00002237static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002238filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002239{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002240 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002241 Py_ssize_t i, j;
2242 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002243
Guido van Rossumb7b45621995-08-04 04:07:45 +00002244 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002245 if (PyTuple_CheckExact(tuple))
2246 Py_INCREF(tuple);
2247 else
2248 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002249 return tuple;
2250 }
2251
Guido van Rossum79f25d91997-04-29 20:08:16 +00002252 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002253 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002254
Guido van Rossum12d12c51993-10-26 17:58:25 +00002255 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002256 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002257 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002258
Walter Dörwald8dd19322003-02-10 17:36:40 +00002259 if (tuple->ob_type->tp_as_sequence &&
2260 tuple->ob_type->tp_as_sequence->sq_item) {
2261 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002262 if (item == NULL)
2263 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002264 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002265 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002266 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002267 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002268 if (func == Py_None) {
2269 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002270 good = item;
2271 }
2272 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002273 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002274 if (arg == NULL) {
2275 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002276 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002277 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002278 good = PyEval_CallObject(func, arg);
2279 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002280 if (good == NULL) {
2281 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002282 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002283 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002284 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002285 ok = PyObject_IsTrue(good);
2286 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002287 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002288 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002289 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002290 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002291 else
2292 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002293 }
2294
Tim Peters4324aa32001-05-28 22:30:08 +00002295 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002296 return NULL;
2297
Guido van Rossum12d12c51993-10-26 17:58:25 +00002298 return result;
2299
Guido van Rossum12d12c51993-10-26 17:58:25 +00002300Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002301 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002302 return NULL;
2303}
2304
2305
Guido van Rossume77a7571993-11-03 15:01:26 +00002306/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002307
Guido van Rossum79f25d91997-04-29 20:08:16 +00002308static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002309filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002310{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002311 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002312 Py_ssize_t i, j;
2313 Py_ssize_t len = PyString_Size(strobj);
2314 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002315
Guido van Rossum79f25d91997-04-29 20:08:16 +00002316 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002317 /* If it's a real string we can return the original,
2318 * as no character is ever false and __getitem__
2319 * does return this character. If it's a subclass
2320 * we must go through the __getitem__ loop */
2321 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002322 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002323 return strobj;
2324 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002325 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002326 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002327 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002328
Guido van Rossum12d12c51993-10-26 17:58:25 +00002329 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002330 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002331 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002332
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002333 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2334 if (item == NULL)
2335 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002336 if (func==Py_None) {
2337 ok = 1;
2338 } else {
2339 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002340 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002341 if (arg == NULL) {
2342 Py_DECREF(item);
2343 goto Fail_1;
2344 }
2345 good = PyEval_CallObject(func, arg);
2346 Py_DECREF(arg);
2347 if (good == NULL) {
2348 Py_DECREF(item);
2349 goto Fail_1;
2350 }
2351 ok = PyObject_IsTrue(good);
2352 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002353 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002354 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002355 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002356 if (!PyString_Check(item)) {
2357 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2358 " __getitem__ returned different type");
2359 Py_DECREF(item);
2360 goto Fail_1;
2361 }
2362 reslen = PyString_GET_SIZE(item);
2363 if (reslen == 1) {
2364 PyString_AS_STRING(result)[j++] =
2365 PyString_AS_STRING(item)[0];
2366 } else {
2367 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002368 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002369 if (need > outlen) {
2370 /* overallocate, to avoid reallocations */
2371 if (need<2*outlen)
2372 need = 2*outlen;
2373 if (_PyString_Resize(&result, need)) {
2374 Py_DECREF(item);
2375 return NULL;
2376 }
2377 outlen = need;
2378 }
2379 memcpy(
2380 PyString_AS_STRING(result) + j,
2381 PyString_AS_STRING(item),
2382 reslen
2383 );
2384 j += reslen;
2385 }
2386 }
Tim Peters388ed082001-04-07 20:34:48 +00002387 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002388 }
2389
Walter Dörwald903f1e02003-02-04 16:28:00 +00002390 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002391 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002392
Guido van Rossum12d12c51993-10-26 17:58:25 +00002393 return result;
2394
Guido van Rossum12d12c51993-10-26 17:58:25 +00002395Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002396 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002397 return NULL;
2398}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002399
2400#ifdef Py_USING_UNICODE
2401/* Helper for filter(): filter a Unicode object through a function */
2402
2403static PyObject *
2404filterunicode(PyObject *func, PyObject *strobj)
2405{
2406 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002407 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002408 Py_ssize_t len = PyUnicode_GetSize(strobj);
2409 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002410
2411 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002412 /* If it's a real string we can return the original,
2413 * as no character is ever false and __getitem__
2414 * does return this character. If it's a subclass
2415 * we must go through the __getitem__ loop */
2416 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002417 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002418 return strobj;
2419 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002420 }
2421 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2422 return NULL;
2423
2424 for (i = j = 0; i < len; ++i) {
2425 PyObject *item, *arg, *good;
2426 int ok;
2427
2428 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2429 if (item == NULL)
2430 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002431 if (func == Py_None) {
2432 ok = 1;
2433 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002434 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002435 if (arg == NULL) {
2436 Py_DECREF(item);
2437 goto Fail_1;
2438 }
2439 good = PyEval_CallObject(func, arg);
2440 Py_DECREF(arg);
2441 if (good == NULL) {
2442 Py_DECREF(item);
2443 goto Fail_1;
2444 }
2445 ok = PyObject_IsTrue(good);
2446 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002447 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002448 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002449 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002450 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002451 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002452 "can't filter unicode to unicode:"
2453 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002454 Py_DECREF(item);
2455 goto Fail_1;
2456 }
2457 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002458 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002459 PyUnicode_AS_UNICODE(result)[j++] =
2460 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002461 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002462 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002463 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002464 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002465 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002466 to avoid reallocations */
2467 if (need < 2 * outlen)
2468 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002469 if (PyUnicode_Resize(
2470 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002471 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002472 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002473 }
2474 outlen = need;
2475 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002476 memcpy(PyUnicode_AS_UNICODE(result) + j,
2477 PyUnicode_AS_UNICODE(item),
2478 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002479 j += reslen;
2480 }
2481 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002482 Py_DECREF(item);
2483 }
2484
Walter Dörwald903f1e02003-02-04 16:28:00 +00002485 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002486 PyUnicode_Resize(&result, j);
2487
2488 return result;
2489
2490Fail_1:
2491 Py_DECREF(result);
2492 return NULL;
2493}
2494#endif