blob: b1b1e8e14046fe074ca5b240c978e72682006681 [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"
Georg Brandlfc8eef32008-03-28 12:11:56 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00008#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossume2ae77b2001-10-24 20:42:55 +000012#ifdef RISCOS
13#include "unixstuff.h"
14#endif
15
Mark Hammond26cffde2001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000019#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
25#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000026
Guido van Rossum12d12c51993-10-26 17:58:25 +000027/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000028static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000029#ifdef Py_USING_UNICODE
30static PyObject *filterunicode(PyObject *, PyObject *);
31#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000032static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000033
Guido van Rossum79f25d91997-04-29 20:08:16 +000034static PyObject *
Neal Norwitz92e212f2006-04-03 04:48:37 +000035builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +000036{
Neal Norwitz92e212f2006-04-03 04:48:37 +000037 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
38 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000040 PyObject *globals = NULL;
41 PyObject *locals = NULL;
42 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000043 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044
Neal Norwitz92e212f2006-04-03 04:48:37 +000045 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
46 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000047 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000048 return PyImport_ImportModuleLevel(name, globals, locals,
49 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000050}
51
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000052PyDoc_STRVAR(import_doc,
Neal Norwitz92e212f2006-04-03 04:48:37 +000053"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000054\n\
55Import a module. The globals are only used to determine the context;\n\
56they are not modified. The locals are currently unused. The fromlist\n\
57should be a list of names to emulate ``from name import ...'', or an\n\
58empty list to emulate ``import name''.\n\
59When importing a module from a package, note that __import__('A.B', ...)\n\
60returns package A when fromlist is empty, but its submodule B when\n\
Neal Norwitz92e212f2006-04-03 04:48:37 +000061fromlist is not empty. Level is used to determine whether to perform \n\
62absolute or relative imports. -1 is the original strategy of attempting\n\
63both absolute and relative imports, 0 is absolute, a positive number\n\
64is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065
Guido van Rossum1ae940a1995-01-02 19:04:15 +000066
Guido van Rossum79f25d91997-04-29 20:08:16 +000067static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000068builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000069{
Guido van Rossum09df08a1998-05-22 00:51:39 +000070 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000071}
72
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000073PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000074"abs(number) -> number\n\
75\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000076Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000077
Raymond Hettinger96229b12005-03-11 06:49:40 +000078static PyObject *
79builtin_all(PyObject *self, PyObject *v)
80{
81 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +000082 PyObject *(*iternext)(PyObject *);
83 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +000084
85 it = PyObject_GetIter(v);
86 if (it == NULL)
87 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +000088 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +000089
Guido van Rossum01dbc102007-12-20 23:48:28 +000090 for (;;) {
91 item = iternext(it);
92 if (item == NULL)
93 break;
94 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +000095 Py_DECREF(item);
96 if (cmp < 0) {
97 Py_DECREF(it);
98 return NULL;
99 }
100 if (cmp == 0) {
101 Py_DECREF(it);
102 Py_RETURN_FALSE;
103 }
104 }
105 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000106 if (PyErr_Occurred()) {
107 if (PyErr_ExceptionMatches(PyExc_StopIteration))
108 PyErr_Clear();
109 else
110 return NULL;
111 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000112 Py_RETURN_TRUE;
113}
114
115PyDoc_STRVAR(all_doc,
116"all(iterable) -> bool\n\
117\n\
118Return True if bool(x) is True for all values x in the iterable.");
119
120static PyObject *
121builtin_any(PyObject *self, PyObject *v)
122{
123 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000124 PyObject *(*iternext)(PyObject *);
125 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000126
127 it = PyObject_GetIter(v);
128 if (it == NULL)
129 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000130 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000131
Guido van Rossum01dbc102007-12-20 23:48:28 +0000132 for (;;) {
133 item = iternext(it);
134 if (item == NULL)
135 break;
136 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000137 Py_DECREF(item);
138 if (cmp < 0) {
139 Py_DECREF(it);
140 return NULL;
141 }
142 if (cmp == 1) {
143 Py_DECREF(it);
144 Py_RETURN_TRUE;
145 }
146 }
147 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000148 if (PyErr_Occurred()) {
149 if (PyErr_ExceptionMatches(PyExc_StopIteration))
150 PyErr_Clear();
151 else
152 return NULL;
153 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000154 Py_RETURN_FALSE;
155}
156
157PyDoc_STRVAR(any_doc,
158"any(iterable) -> bool\n\
159\n\
160Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000161
Guido van Rossum79f25d91997-04-29 20:08:16 +0000162static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000163builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000164{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000165 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000166 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000167
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000168 if (PyErr_WarnPy3k("apply() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000169 "use func(*args, **kwargs)", 1) < 0)
Neal Norwitz8b2bfbc2007-05-23 06:35:32 +0000170 return NULL;
171
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000172 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000173 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000174 if (alist != NULL) {
175 if (!PyTuple_Check(alist)) {
176 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000177 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000178 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000179 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000180 return NULL;
181 }
182 t = PySequence_Tuple(alist);
183 if (t == NULL)
184 return NULL;
185 alist = t;
186 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000187 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000189 PyErr_Format(PyExc_TypeError,
190 "apply() arg 3 expected dictionary, found %s",
191 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000192 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000193 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000194 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
195 finally:
196 Py_XDECREF(t);
197 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000198}
199
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000200PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000201"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000202\n\
Fred Drake7b912121999-12-23 14:16:55 +0000203Call a callable object with positional arguments taken from the tuple args,\n\
204and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000205Note that classes are callable, as are instances with a __call__() method.\n\
206\n\
207Deprecated since release 2.3. Instead, use the extended call syntax:\n\
208 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000209
210
Guido van Rossum79f25d91997-04-29 20:08:16 +0000211static PyObject *
Eric Smith3cd81942008-02-22 16:30:22 +0000212builtin_bin(PyObject *self, PyObject *v)
213{
Raymond Hettinger9c437af2008-06-24 22:46:07 +0000214 return PyNumber_ToBase(v, 2);
Eric Smith3cd81942008-02-22 16:30:22 +0000215}
216
217PyDoc_STRVAR(bin_doc,
218"bin(number) -> string\n\
219\n\
220Return the binary representation of an integer or long integer.");
221
222
223static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000224builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000225{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000226 if (PyErr_WarnPy3k("callable() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000227 "use hasattr(o, '__call__')", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000228 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +0000229 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000230}
231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000232PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000233"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000234\n\
235Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000236Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000237
238
Guido van Rossum79f25d91997-04-29 20:08:16 +0000239static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000240builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000241{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000242 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000243 Py_ssize_t len; /* guess for result list size */
244 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000245
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000246 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000247 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000248
Tim Peters0e57abf2001-05-02 07:39:38 +0000249 /* Strings and tuples return a result of the same type. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000250 if (PyString_Check(seq))
Tim Peters0e57abf2001-05-02 07:39:38 +0000251 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000252#ifdef Py_USING_UNICODE
253 if (PyUnicode_Check(seq))
254 return filterunicode(func, seq);
255#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000256 if (PyTuple_Check(seq))
257 return filtertuple(func, seq);
258
Georg Brandle35b6572005-07-19 22:20:20 +0000259 /* Pre-allocate argument list tuple. */
260 arg = PyTuple_New(1);
261 if (arg == NULL)
262 return NULL;
263
Tim Peters0e57abf2001-05-02 07:39:38 +0000264 /* Get iterator. */
265 it = PyObject_GetIter(seq);
266 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000267 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000268
269 /* Guess a result list size. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000270 len = _PyObject_LengthHint(seq, 8);
Raymond Hettingerb5163702009-02-02 21:50:13 +0000271 if (len == -1)
272 goto Fail_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000273
Tim Peters0e57abf2001-05-02 07:39:38 +0000274 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000275 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000276 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000277 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000278 result = seq;
279 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000280 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000281 result = PyList_New(len);
282 if (result == NULL)
283 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000284 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000285
Tim Peters0e57abf2001-05-02 07:39:38 +0000286 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000287 j = 0;
288 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000289 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000290 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000291
Tim Peters0e57abf2001-05-02 07:39:38 +0000292 item = PyIter_Next(it);
293 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000294 if (PyErr_Occurred())
295 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000296 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000297 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000298
Neil Schemenauer68973552003-08-14 20:37:34 +0000299 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000300 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000301 }
302 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000303 PyObject *good;
304 PyTuple_SET_ITEM(arg, 0, item);
305 good = PyObject_Call(func, arg, NULL);
306 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000307 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000308 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000309 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000310 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000311 ok = PyObject_IsTrue(good);
312 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000313 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000314 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000315 if (j < len)
316 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000317 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000318 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000319 Py_DECREF(item);
320 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000321 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000322 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000323 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000324 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000325 else
326 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000327 }
328
Guido van Rossum12d12c51993-10-26 17:58:25 +0000329
Tim Peters0e57abf2001-05-02 07:39:38 +0000330 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000331 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000332 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000333
Tim Peters3c6b1482001-05-21 08:07:05 +0000334 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000335 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000336 return result;
337
Tim Peters0e57abf2001-05-02 07:39:38 +0000338Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000339 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000340Fail_it:
341 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000342Fail_arg:
343 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000344 return NULL;
345}
346
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000347PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000348"filter(function or None, sequence) -> list, tuple, or string\n"
349"\n"
350"Return those items of sequence for which function(item) is true. If\n"
351"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000352"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000353
Guido van Rossum79f25d91997-04-29 20:08:16 +0000354static PyObject *
Eric Smitha9f7d622008-02-17 19:46:49 +0000355builtin_format(PyObject *self, PyObject *args)
356{
357 PyObject *value;
358 PyObject *format_spec = NULL;
359
360 if (!PyArg_ParseTuple(args, "O|O:format", &value, &format_spec))
361 return NULL;
362
363 return PyObject_Format(value, format_spec);
364}
365
366PyDoc_STRVAR(format_doc,
367"format(value[, format_spec]) -> string\n\
368\n\
369Returns value.__format__(format_spec)\n\
370format_spec defaults to \"\"");
371
372static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000373builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000374{
375 long x;
376 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000377
Guido van Rossum79f25d91997-04-29 20:08:16 +0000378 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000379 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000380 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000381 PyErr_SetString(PyExc_ValueError,
382 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000383 return NULL;
384 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000385 s[0] = (char)x;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000386 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000387}
388
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000389PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000390"chr(i) -> character\n\
391\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000392Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000393
394
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000395#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000396static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000397builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000398{
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +0000399 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000400
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +0000401 if (!PyArg_ParseTuple(args, "i:unichr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000402 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000403
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000404 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000405}
406
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000407PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000408"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000409\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000410Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000411#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000412
413
414static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000415builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000416{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000418 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000420 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000421 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000422 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000423 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000424 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000425}
426
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000427PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000428"cmp(x, y) -> integer\n\
429\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000430Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000431
432
Guido van Rossum79f25d91997-04-29 20:08:16 +0000433static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000434builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000435{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000436 PyObject *v, *w;
437 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000438
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000439 if (PyErr_WarnPy3k("coerce() not supported in 3.x", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000440 return NULL;
441
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000442 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000443 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000444 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000445 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000446 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000447 Py_DECREF(v);
448 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000449 return res;
450}
451
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000452PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000453"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000454\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000455Return a tuple consisting of the two numeric arguments converted to\n\
456a common type, using the same rules as used by arithmetic operations.\n\
457If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000458
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459static PyObject *
Georg Brandl5240d742007-03-13 20:46:32 +0000460builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000461{
462 char *str;
463 char *filename;
464 char *startstr;
Georg Brandlf2bfd542008-03-29 13:24:23 +0000465 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000466 int dont_inherit = 0;
467 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000468 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000469 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000470 Py_ssize_t length;
Georg Brandl5240d742007-03-13 20:46:32 +0000471 static char *kwlist[] = {"source", "filename", "mode", "flags",
472 "dont_inherit", NULL};
Georg Brandlf2bfd542008-03-29 13:24:23 +0000473 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000474
Georg Brandl5240d742007-03-13 20:46:32 +0000475 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
476 kwlist, &cmd, &filename, &startstr,
477 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000478 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000479
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000480 cf.cf_flags = supplied_flags;
481
Georg Brandlfc8eef32008-03-28 12:11:56 +0000482 if (supplied_flags &
483 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
484 {
485 PyErr_SetString(PyExc_ValueError,
486 "compile(): unrecognised flags");
487 return NULL;
488 }
489 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
490
491 if (!dont_inherit) {
492 PyEval_MergeCompilerFlags(&cf);
493 }
494
Georg Brandlf2bfd542008-03-29 13:24:23 +0000495 if (strcmp(startstr, "exec") == 0)
496 mode = 0;
497 else if (strcmp(startstr, "eval") == 0)
498 mode = 1;
499 else if (strcmp(startstr, "single") == 0)
500 mode = 2;
501 else {
502 PyErr_SetString(PyExc_ValueError,
503 "compile() arg 3 must be 'exec', 'eval' or 'single'");
504 return NULL;
505 }
506
Georg Brandlfc8eef32008-03-28 12:11:56 +0000507 if (PyAST_Check(cmd)) {
508 if (supplied_flags & PyCF_ONLY_AST) {
509 Py_INCREF(cmd);
510 result = cmd;
511 }
512 else {
513 PyArena *arena;
514 mod_ty mod;
515
516 arena = PyArena_New();
Georg Brandlf2bfd542008-03-29 13:24:23 +0000517 mod = PyAST_obj2mod(cmd, arena, mode);
Georg Brandlfc8eef32008-03-28 12:11:56 +0000518 if (mod == NULL) {
519 PyArena_Free(arena);
520 return NULL;
521 }
522 result = (PyObject*)PyAST_Compile(mod, filename,
523 &cf, arena);
524 PyArena_Free(arena);
525 }
526 return result;
527 }
528
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000529#ifdef Py_USING_UNICODE
530 if (PyUnicode_Check(cmd)) {
531 tmp = PyUnicode_AsUTF8String(cmd);
532 if (tmp == NULL)
533 return NULL;
534 cmd = tmp;
535 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
536 }
537#endif
Tim Peters6cd6a822001-08-17 22:11:27 +0000538
Georg Brandlfc8eef32008-03-28 12:11:56 +0000539 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000540 goto cleanup;
Georg Brandlfc8eef32008-03-28 12:11:56 +0000541 if ((size_t)length != strlen(str)) {
542 PyErr_SetString(PyExc_TypeError,
543 "compile() expected string without null bytes");
544 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000545 }
Georg Brandlf2bfd542008-03-29 13:24:23 +0000546 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000547cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000548 Py_XDECREF(tmp);
549 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000550}
551
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000552PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000553"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000554\n\
555Compile the source string (a Python module, statement or expression)\n\
556into a code object that can be executed by the exec statement or eval().\n\
557The filename will be used for run-time error messages.\n\
558The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000559single (interactive) statement, or 'eval' to compile an expression.\n\
560The flags argument, if present, controls which future statements influence\n\
561the compilation of the code.\n\
562The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
563the effects of any future statements in effect in the code calling\n\
564compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000565in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000566
Guido van Rossum79f25d91997-04-29 20:08:16 +0000567static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000568builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000569{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000570 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000572 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000574 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000575}
576
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000577PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000578"dir([object]) -> list of strings\n"
579"\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000580"If called without an argument, return the names in the current scope.\n"
581"Else, return an alphabetized list of names comprising (some of) the attributes\n"
582"of the given object, and of attributes reachable from it.\n"
583"If the object supplies a method named __dir__, it will be used; otherwise\n"
584"the default dir() logic is used and returns:\n"
585" for a module object: the module's attributes.\n"
586" for a class object: its attributes, and recursively the attributes\n"
587" of its bases.\n"
Georg Brandl3bb15672007-03-13 07:23:16 +0000588" for any other object: its attributes, its class's attributes, and\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000589" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000590
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000592builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000593{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000595
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000596 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000597 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000598 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000599}
600
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000601PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000602"divmod(x, y) -> (div, mod)\n\
603\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000604Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000605
606
Guido van Rossum79f25d91997-04-29 20:08:16 +0000607static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000608builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000609{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000610 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000612 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000613 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000614
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000615 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000617 if (locals != Py_None && !PyMapping_Check(locals)) {
618 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000619 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000620 }
621 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000622 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000623 "globals must be a real dict; try eval(expr, {}, mapping)"
624 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000625 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000626 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627 if (globals == Py_None) {
628 globals = PyEval_GetGlobals();
629 if (locals == Py_None)
630 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000631 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000633 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000634
Georg Brandl77c85e62005-09-15 10:46:13 +0000635 if (globals == NULL || locals == NULL) {
636 PyErr_SetString(PyExc_TypeError,
637 "eval must be given globals and locals "
638 "when called without a frame");
639 return NULL;
640 }
641
Guido van Rossum79f25d91997-04-29 20:08:16 +0000642 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
643 if (PyDict_SetItemString(globals, "__builtins__",
644 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000645 return NULL;
646 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000647
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000648 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000649 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000650 PyErr_SetString(PyExc_TypeError,
651 "code object passed to eval() may not contain free variables");
652 return NULL;
653 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000655 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000656
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000657 if (!PyString_Check(cmd) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000658 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000660 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000661 return NULL;
662 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000663 cf.cf_flags = 0;
664
665#ifdef Py_USING_UNICODE
666 if (PyUnicode_Check(cmd)) {
667 tmp = PyUnicode_AsUTF8String(cmd);
668 if (tmp == NULL)
669 return NULL;
670 cmd = tmp;
671 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
672 }
673#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000674 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000675 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000676 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000677 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000678 while (*str == ' ' || *str == '\t')
679 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000680
Tim Peters9fa96be2001-08-17 23:04:59 +0000681 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000682 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
683 Py_XDECREF(tmp);
684 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000685}
686
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000687PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000688"eval(source[, globals[, locals]]) -> value\n\
689\n\
690Evaluate the source in the context of globals and locals.\n\
691The source may be a string representing a Python expression\n\
692or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000693The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000694defaulting to the current globals and locals.\n\
695If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000696
697
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000699builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000700{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000701 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 PyObject *globals = Py_None, *locals = Py_None;
703 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000704 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000705 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000706 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000708 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000709 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000710 return NULL;
711
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000712 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000713 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000714 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000715 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000716 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000717 if (locals != Py_None && !PyMapping_Check(locals)) {
718 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
719 return NULL;
720 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000721 if (globals == Py_None) {
722 globals = PyEval_GetGlobals();
723 if (locals == Py_None)
724 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000725 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000727 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
729 if (PyDict_SetItemString(globals, "__builtins__",
730 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000731 return NULL;
732 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000733
734 exists = 0;
735 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000736#if defined(PLAN9)
737 {
738 Dir *d;
739
740 if ((d = dirstat(filename))!=nil) {
741 if(d->mode & DMDIR)
742 werrstr("is a directory");
743 else
744 exists = 1;
745 free(d);
746 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000747 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000748#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000749 if (object_exists(filename)) {
750 if (isdir(filename))
751 errno = EISDIR;
752 else
753 exists = 1;
754 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000755#else /* standard Posix */
756 {
757 struct stat s;
758 if (stat(filename, &s) == 0) {
759 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000760# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000761 errno = EOS2ERR;
762# else
763 errno = EISDIR;
764# endif
765 else
766 exists = 1;
767 }
768 }
769#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000770
771 if (exists) {
772 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000773 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000774 Py_END_ALLOW_THREADS
775
776 if (fp == NULL) {
777 exists = 0;
778 }
779 }
780
781 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000782 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000783 return NULL;
784 }
Tim Peters5ba58662001-07-16 02:29:45 +0000785 cf.cf_flags = 0;
786 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000787 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000788 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000789 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000790 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000791 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000792 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000793}
794
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000795PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000796"execfile(filename[, globals[, locals]])\n\
797\n\
798Read and execute a Python script from a file.\n\
799The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000800globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000801
802
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000804builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000805{
Guido van Rossum950ff291998-06-29 13:38:57 +0000806 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000808
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000809 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000810 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000811#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000812 if (PyUnicode_Check(name)) {
813 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
814 if (name == NULL)
815 return NULL;
816 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000817#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000818
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000819 if (!PyString_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000820 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000821 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000822 return NULL;
823 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000824 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000825 if (result == NULL && dflt != NULL &&
826 PyErr_ExceptionMatches(PyExc_AttributeError))
827 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000828 PyErr_Clear();
829 Py_INCREF(dflt);
830 result = dflt;
831 }
832 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000833}
834
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000835PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000836"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000837\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000838Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
839When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000840exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000841
842
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000844builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000845{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000847
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000849 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000850 return d;
851}
852
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000853PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000854"globals() -> dictionary\n\
855\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000856Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000857
858
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000860builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000861{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 PyObject *v;
863 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000864
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000865 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000866 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000867#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000868 if (PyUnicode_Check(name)) {
869 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
870 if (name == NULL)
871 return NULL;
872 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000873#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000874
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000875 if (!PyString_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000876 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000877 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000878 return NULL;
879 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000881 if (v == NULL) {
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000882 if (!PyErr_ExceptionMatches(PyExc_Exception))
883 return NULL;
884 else {
885 PyErr_Clear();
886 Py_INCREF(Py_False);
887 return Py_False;
888 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000889 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000891 Py_INCREF(Py_True);
892 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000893}
894
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000895PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000896"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000897\n\
898Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900
901
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000903builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000904{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000905 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000906}
907
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000908PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000909"id(object) -> integer\n\
910\n\
911Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000912simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000913
914
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000916builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000917{
918 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000919 PyObject *it; /* the iterator object */
920 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000921 } sequence;
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000924 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000925 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000926 register int i, j;
927
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000929 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 PyErr_SetString(PyExc_TypeError,
931 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000932 return NULL;
933 }
934
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000936 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000937
Neal Norwitz53152a12008-02-24 02:20:25 +0000938 if (func == Py_None) {
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000939 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000940 "use list(...)", 1) < 0)
Neal Norwitz53152a12008-02-24 02:20:25 +0000941 return NULL;
942 if (n == 1) {
943 /* map(None, S) is the same as list(S). */
944 return PySequence_List(PyTuple_GetItem(args, 1));
945 }
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000946 }
947
Tim Peters4e9afdc2001-05-03 23:54:49 +0000948 /* Get space for sequence descriptors. Must NULL out the iterator
949 * pointers so that jumping to Fail_2 later doesn't see trash.
950 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
952 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000953 return NULL;
954 }
955 for (i = 0; i < n; ++i) {
956 seqs[i].it = (PyObject*)NULL;
957 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000958 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000959
Tim Peters4e9afdc2001-05-03 23:54:49 +0000960 /* Do a first pass to obtain iterators for the arguments, and set len
961 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000962 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000963 len = 0;
964 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
965 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000966 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000967
Tim Peters4e9afdc2001-05-03 23:54:49 +0000968 /* Get iterator. */
969 curseq = PyTuple_GetItem(args, i+1);
970 sqp->it = PyObject_GetIter(curseq);
Benjamin Peterson55159902009-09-06 22:43:39 +0000971 if (sqp->it == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000972 goto Fail_2;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000973
Tim Peters4e9afdc2001-05-03 23:54:49 +0000974 /* Update len. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000975 curlen = _PyObject_LengthHint(curseq, 8);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000976 if (curlen > len)
977 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000978 }
979
Tim Peters4e9afdc2001-05-03 23:54:49 +0000980 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000981 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000982 goto Fail_2;
983
Tim Peters4e9afdc2001-05-03 23:54:49 +0000984 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000985 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000987 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000988
Guido van Rossum79f25d91997-04-29 20:08:16 +0000989 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000990 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000991 else if ((alist = PyTuple_New(n)) == NULL)
992 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000993
994 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000995 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 Py_INCREF(Py_None);
997 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000998 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000999 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001000 item = PyIter_Next(sqp->it);
1001 if (item)
1002 ++numactive;
1003 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001004 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001005 Py_XDECREF(alist);
1006 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001007 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001008 Py_INCREF(Py_None);
1009 item = Py_None;
1010 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001011 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001012 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001013 if (alist)
1014 PyTuple_SET_ITEM(alist, j, item);
1015 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001016 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001017 }
1018
Guido van Rossum32120311995-07-10 13:52:21 +00001019 if (!alist)
1020 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001021
Tim Peters4e9afdc2001-05-03 23:54:49 +00001022 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001023 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001024 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001025 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001026
Guido van Rossum79f25d91997-04-29 20:08:16 +00001027 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001028 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001029 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001030 value = PyEval_CallObject(func, alist);
1031 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001032 if (value == NULL)
1033 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001034 }
1035 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001036 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001037 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001038 if (status < 0)
1039 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001040 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001041 else if (PyList_SetItem(result, i, value) < 0)
1042 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001043 }
1044
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001045 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1046 goto Fail_1;
1047
Tim Peters4e9afdc2001-05-03 23:54:49 +00001048 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001049
Guido van Rossum12d12c51993-10-26 17:58:25 +00001050Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001052Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001053 result = NULL;
1054Succeed:
1055 assert(seqs);
1056 for (i = 0; i < n; ++i)
1057 Py_XDECREF(seqs[i].it);
1058 PyMem_DEL(seqs);
1059 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060}
1061
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001062PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001063"map(function, sequence[, sequence, ...]) -> list\n\
1064\n\
1065Return a list of the results of applying the function to the items of\n\
1066the argument sequence(s). If more than one sequence is given, the\n\
1067function is called with an argument list consisting of the corresponding\n\
1068item of each sequence, substituting None for missing values when not all\n\
1069sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001070the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001071
1072
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073static PyObject *
Georg Brandl28e08732008-04-30 19:47:09 +00001074builtin_next(PyObject *self, PyObject *args)
1075{
1076 PyObject *it, *res;
1077 PyObject *def = NULL;
1078
1079 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1080 return NULL;
1081 if (!PyIter_Check(it)) {
1082 PyErr_Format(PyExc_TypeError,
1083 "%.200s object is not an iterator",
1084 it->ob_type->tp_name);
1085 return NULL;
1086 }
1087
1088 res = (*it->ob_type->tp_iternext)(it);
1089 if (res != NULL) {
1090 return res;
1091 } else if (def != NULL) {
1092 if (PyErr_Occurred()) {
1093 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
1094 return NULL;
1095 PyErr_Clear();
1096 }
1097 Py_INCREF(def);
1098 return def;
1099 } else if (PyErr_Occurred()) {
1100 return NULL;
1101 } else {
1102 PyErr_SetNone(PyExc_StopIteration);
1103 return NULL;
1104 }
1105}
1106
1107PyDoc_STRVAR(next_doc,
1108"next(iterator[, default])\n\
1109\n\
1110Return the next item from the iterator. If default is given and the iterator\n\
1111is exhausted, it is returned instead of raising StopIteration.");
1112
1113
1114static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001115builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001116{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 PyObject *v;
1118 PyObject *name;
1119 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001120
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001121 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001122 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001123 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001124 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 Py_INCREF(Py_None);
1126 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001127}
1128
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001129PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001130"setattr(object, name, value)\n\
1131\n\
1132Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001133``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001134
1135
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001137builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001138{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139 PyObject *v;
1140 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001141
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001142 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001143 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001145 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146 Py_INCREF(Py_None);
1147 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001148}
1149
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001150PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001151"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152\n\
1153Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001154``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001155
1156
Guido van Rossum79f25d91997-04-29 20:08:16 +00001157static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001158builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001159{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001160 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001161
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001163 if (x == -1)
1164 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001165 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001166}
1167
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001168PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001169"hash(object) -> integer\n\
1170\n\
1171Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001172the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001173
1174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001176builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001177{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001179 PyObject *res;
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001180
1181 if ((nb = v->ob_type->tp_as_number) == NULL ||
1182 nb->nb_hex == NULL) {
1183 PyErr_SetString(PyExc_TypeError,
1184 "hex() argument can't be converted to hex");
1185 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001186 }
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001187 res = (*nb->nb_hex)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001188 if (res && !PyString_Check(res)) {
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001189 PyErr_Format(PyExc_TypeError,
1190 "__hex__ returned non-string (type %.200s)",
1191 res->ob_type->tp_name);
1192 Py_DECREF(res);
1193 return NULL;
1194 }
1195 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001196}
1197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001198PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001199"hex(number) -> string\n\
1200\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001201Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001202
1203
Tim Petersdbd9ba62000-07-09 03:09:57 +00001204static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001205
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001207builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001208{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211 PyObject *res;
1212 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001213 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001214
1215 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001216 if (line == NULL)
1217 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001218 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001219 return NULL;
1220 while (*str == ' ' || *str == '\t')
1221 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 globals = PyEval_GetGlobals();
1223 locals = PyEval_GetLocals();
1224 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1225 if (PyDict_SetItemString(globals, "__builtins__",
1226 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001227 return NULL;
1228 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001229 cf.cf_flags = 0;
1230 PyEval_MergeCompilerFlags(&cf);
1231 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001232 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001234}
1235
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001236PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001237"input([prompt]) -> value\n\
1238\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001239Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001240
1241
Guido van Rossume8811f81997-02-14 15:48:05 +00001242static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001243builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001244{
1245 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001246 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001247 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001248 if (!PyString_CheckExact(s)) {
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001249 PyErr_SetString(PyExc_TypeError,
1250 "can't intern subclass of string");
1251 return NULL;
1252 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001253 Py_INCREF(s);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001254 PyString_InternInPlace(&s);
Guido van Rossume8811f81997-02-14 15:48:05 +00001255 return s;
1256}
1257
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001258PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001259"intern(string) -> string\n\
1260\n\
1261``Intern'' the given string. This enters the string in the (global)\n\
1262table of interned strings whose purpose is to speed up dictionary lookups.\n\
1263Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001264same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001265
1266
Guido van Rossum79f25d91997-04-29 20:08:16 +00001267static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001268builtin_iter(PyObject *self, PyObject *args)
1269{
1270 PyObject *v, *w = NULL;
1271
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001272 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001273 return NULL;
1274 if (w == NULL)
1275 return PyObject_GetIter(v);
1276 if (!PyCallable_Check(v)) {
1277 PyErr_SetString(PyExc_TypeError,
1278 "iter(v, w): v must be callable");
1279 return NULL;
1280 }
1281 return PyCallIter_New(v, w);
1282}
1283
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001284PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001285"iter(collection) -> iterator\n\
1286iter(callable, sentinel) -> iterator\n\
1287\n\
1288Get an iterator from an object. In the first form, the argument must\n\
1289supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001290In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001291
1292
1293static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001294builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001296 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001297
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001298 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001299 if (res < 0 && PyErr_Occurred())
1300 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001301 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001302}
1303
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001304PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001305"len(object) -> integer\n\
1306\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001307Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001308
1309
Guido van Rossum79f25d91997-04-29 20:08:16 +00001310static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001311builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001312{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001313 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001314
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001316 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001317 return d;
1318}
1319
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001320PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001321"locals() -> dictionary\n\
1322\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001323Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001324
1325
Guido van Rossum79f25d91997-04-29 20:08:16 +00001326static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001327min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001328{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001329 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001330 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001331
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001333 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001334 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001335 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001336
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001337 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1338 keyfunc = PyDict_GetItemString(kwds, "key");
1339 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001340 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001341 "%s() got an unexpected keyword argument", name);
1342 return NULL;
1343 }
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001344 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001345 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001346
Tim Petersc3074532001-05-03 07:00:32 +00001347 it = PyObject_GetIter(v);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001348 if (it == NULL) {
1349 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001350 return NULL;
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001351 }
Tim Petersc3074532001-05-03 07:00:32 +00001352
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001353 maxitem = NULL; /* the result */
1354 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001355 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356 /* get the value from the key function */
1357 if (keyfunc != NULL) {
1358 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1359 if (val == NULL)
1360 goto Fail_it_item;
1361 }
1362 /* no key function; the value is the item */
1363 else {
1364 val = item;
1365 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001366 }
Tim Petersc3074532001-05-03 07:00:32 +00001367
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001368 /* maximum value and item are unset; set them */
1369 if (maxval == NULL) {
1370 maxitem = item;
1371 maxval = val;
1372 }
1373 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001374 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001375 int cmp = PyObject_RichCompareBool(val, maxval, op);
1376 if (cmp < 0)
1377 goto Fail_it_item_and_val;
1378 else if (cmp > 0) {
1379 Py_DECREF(maxval);
1380 Py_DECREF(maxitem);
1381 maxval = val;
1382 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001383 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001384 else {
1385 Py_DECREF(item);
1386 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001387 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001388 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001389 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001390 if (PyErr_Occurred())
1391 goto Fail_it;
1392 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001393 PyErr_Format(PyExc_ValueError,
1394 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001395 assert(maxitem == NULL);
1396 }
1397 else
1398 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001399 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001400 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001401 return maxitem;
1402
1403Fail_it_item_and_val:
1404 Py_DECREF(val);
1405Fail_it_item:
1406 Py_DECREF(item);
1407Fail_it:
1408 Py_XDECREF(maxval);
1409 Py_XDECREF(maxitem);
1410 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001411 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001412 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001413}
1414
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001416builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001417{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001418 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001419}
1420
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001421PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001422"min(iterable[, key=func]) -> value\n\
1423min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001425With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001426With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001427
1428
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001430builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001431{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001432 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001433}
1434
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001435PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001436"max(iterable[, key=func]) -> value\n\
1437max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001438\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001439With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001440With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441
1442
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001444builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001445{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001446 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001447 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001448
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001449 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1450 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001451 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001452 "oct() argument can't be converted to oct");
1453 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001454 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001455 res = (*nb->nb_oct)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001456 if (res && !PyString_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001457 PyErr_Format(PyExc_TypeError,
1458 "__oct__ returned non-string (type %.200s)",
1459 res->ob_type->tp_name);
1460 Py_DECREF(res);
1461 return NULL;
1462 }
1463 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001464}
1465
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001466PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001467"oct(number) -> string\n\
1468\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001469Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001470
1471
Guido van Rossum79f25d91997-04-29 20:08:16 +00001472static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001473builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1474{
1475 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1476}
1477
1478PyDoc_STRVAR(open_doc,
1479"open(name[, mode[, buffering]]) -> file object\n\
1480\n\
Skip Montanaro4e3ebe02007-12-08 14:37:43 +00001481Open a file using the file() type, returns a file object. This is the\n\
Philip Jenveydd0388a2009-05-28 03:12:16 +00001482preferred way to open a file. See file.__doc__ for further information.");
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001483
1484
1485static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001486builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001487{
Guido van Rossum09095f32000-03-10 23:00:52 +00001488 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001489 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001490
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001491 if (PyString_Check(obj)) {
1492 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001493 if (size == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001494 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001495 return PyInt_FromLong(ord);
1496 }
Christian Heimes3497f942008-05-26 12:29:14 +00001497 } else if (PyByteArray_Check(obj)) {
1498 size = PyByteArray_GET_SIZE(obj);
Christian Heimes1a6387e2008-03-26 12:49:49 +00001499 if (size == 1) {
Christian Heimes3497f942008-05-26 12:29:14 +00001500 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes1a6387e2008-03-26 12:49:49 +00001501 return PyInt_FromLong(ord);
1502 }
1503
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001504#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001505 } else if (PyUnicode_Check(obj)) {
1506 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001507 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001508 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001509 return PyInt_FromLong(ord);
1510 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001511#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001512 } else {
1513 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001514 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001515 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001516 return NULL;
1517 }
1518
Guido van Rossumad991772001-01-12 16:03:05 +00001519 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001520 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001521 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001522 size);
1523 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001524}
1525
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001526PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001527"ord(c) -> integer\n\
1528\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001529Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001530
1531
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001533builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001534{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001535 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001536
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001537 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001538 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001539 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001540}
1541
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001542PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001543"pow(x, y[, z]) -> number\n\
1544\n\
1545With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001546equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001547
1548
Eric Smith7c478942008-03-18 23:45:49 +00001549static PyObject *
1550builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1551{
1552 static char *kwlist[] = {"sep", "end", "file", 0};
Benjamin Peterson753d1622009-07-02 18:16:45 +00001553 static PyObject *dummy_args = NULL;
1554 static PyObject *unicode_newline = NULL, *unicode_space = NULL;
1555 static PyObject *str_newline = NULL, *str_space = NULL;
1556 PyObject *newline, *space;
Eric Smith7c478942008-03-18 23:45:49 +00001557 PyObject *sep = NULL, *end = NULL, *file = NULL;
Benjamin Peterson753d1622009-07-02 18:16:45 +00001558 int i, err, use_unicode = 0;
Eric Smith7c478942008-03-18 23:45:49 +00001559
1560 if (dummy_args == NULL) {
1561 if (!(dummy_args = PyTuple_New(0)))
1562 return NULL;
1563 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001564 if (str_newline == NULL) {
1565 str_newline = PyString_FromString("\n");
1566 if (str_newline == NULL)
1567 return NULL;
1568 str_space = PyString_FromString(" ");
1569 if (str_space == NULL) {
1570 Py_CLEAR(str_newline);
1571 return NULL;
1572 }
1573 unicode_newline = PyUnicode_FromString("\n");
1574 if (unicode_newline == NULL) {
1575 Py_CLEAR(str_newline);
1576 Py_CLEAR(str_space);
1577 return NULL;
1578 }
1579 unicode_space = PyUnicode_FromString(" ");
1580 if (unicode_space == NULL) {
1581 Py_CLEAR(str_newline);
1582 Py_CLEAR(str_space);
1583 Py_CLEAR(unicode_space);
1584 return NULL;
1585 }
1586 }
Eric Smith7c478942008-03-18 23:45:49 +00001587 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1588 kwlist, &sep, &end, &file))
1589 return NULL;
1590 if (file == NULL || file == Py_None) {
1591 file = PySys_GetObject("stdout");
1592 /* sys.stdout may be None when FILE* stdout isn't connected */
1593 if (file == Py_None)
1594 Py_RETURN_NONE;
1595 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001596 if (sep == Py_None) {
1597 sep = NULL;
Eric Smith7c478942008-03-18 23:45:49 +00001598 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001599 else if (sep) {
1600 if (PyUnicode_Check(sep)) {
1601 use_unicode = 1;
1602 }
1603 else if (!PyString_Check(sep)) {
1604 PyErr_Format(PyExc_TypeError,
1605 "sep must be None, str or unicode, not %.200s",
1606 sep->ob_type->tp_name);
1607 return NULL;
1608 }
1609 }
1610 if (end == Py_None)
1611 end = NULL;
1612 else if (end) {
1613 if (PyUnicode_Check(end)) {
1614 use_unicode = 1;
1615 }
1616 else if (!PyString_Check(end)) {
1617 PyErr_Format(PyExc_TypeError,
1618 "end must be None, str or unicode, not %.200s",
1619 end->ob_type->tp_name);
1620 return NULL;
1621 }
1622 }
1623
1624 if (!use_unicode) {
1625 for (i = 0; i < PyTuple_Size(args); i++) {
1626 if (PyUnicode_Check(PyTuple_GET_ITEM(args, i))) {
1627 use_unicode = 1;
1628 break;
1629 }
1630 }
1631 }
1632 if (use_unicode) {
1633 newline = unicode_newline;
1634 space = unicode_space;
1635 }
1636 else {
1637 newline = str_newline;
1638 space = str_space;
Eric Smith7c478942008-03-18 23:45:49 +00001639 }
1640
1641 for (i = 0; i < PyTuple_Size(args); i++) {
1642 if (i > 0) {
Benjamin Peterson753d1622009-07-02 18:16:45 +00001643 if (sep == NULL)
1644 err = PyFile_WriteObject(space, file,
1645 Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001646 else
1647 err = PyFile_WriteObject(sep, file,
1648 Py_PRINT_RAW);
1649 if (err)
1650 return NULL;
1651 }
1652 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1653 Py_PRINT_RAW);
1654 if (err)
1655 return NULL;
1656 }
1657
Benjamin Peterson753d1622009-07-02 18:16:45 +00001658 if (end == NULL)
1659 err = PyFile_WriteObject(newline, file, Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001660 else
1661 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1662 if (err)
1663 return NULL;
1664
1665 Py_RETURN_NONE;
1666}
1667
1668PyDoc_STRVAR(print_doc,
1669"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
1670\n\
1671Prints the values to a stream, or to sys.stdout by default.\n\
1672Optional keyword arguments:\n\
1673file: a file-like object (stream); defaults to the current sys.stdout.\n\
1674sep: string inserted between values, default a space.\n\
1675end: string appended after the last value, default a newline.");
1676
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001677
1678/* Return number of items in range (lo, hi, step), when arguments are
1679 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1680 * & only if the true value is too large to fit in a signed long.
1681 * Arguments MUST return 1 with either PyInt_Check() or
1682 * PyLong_Check(). Return -1 when there is an error.
1683 */
1684static long
1685get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1686{
1687 /* -------------------------------------------------------------
1688 Algorithm is equal to that of get_len_of_range(), but it operates
1689 on PyObjects (which are assumed to be PyLong or PyInt objects).
1690 ---------------------------------------------------------------*/
1691 long n;
1692 PyObject *diff = NULL;
1693 PyObject *one = NULL;
1694 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1695 /* holds sub-expression evaluations */
1696
1697 /* if (lo >= hi), return length of 0. */
1698 if (PyObject_Compare(lo, hi) >= 0)
1699 return 0;
1700
1701 if ((one = PyLong_FromLong(1L)) == NULL)
1702 goto Fail;
1703
1704 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1705 goto Fail;
1706
1707 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1708 goto Fail;
1709
1710 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1711 goto Fail;
1712
1713 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1714 goto Fail;
1715
1716 n = PyLong_AsLong(tmp3);
1717 if (PyErr_Occurred()) { /* Check for Overflow */
1718 PyErr_Clear();
1719 goto Fail;
1720 }
1721
1722 Py_DECREF(tmp3);
1723 Py_DECREF(tmp2);
1724 Py_DECREF(diff);
1725 Py_DECREF(tmp1);
1726 Py_DECREF(one);
1727 return n;
1728
1729 Fail:
1730 Py_XDECREF(tmp3);
1731 Py_XDECREF(tmp2);
1732 Py_XDECREF(diff);
1733 Py_XDECREF(tmp1);
1734 Py_XDECREF(one);
1735 return -1;
1736}
1737
1738/* An extension of builtin_range() that handles the case when PyLong
1739 * arguments are given. */
1740static PyObject *
1741handle_range_longs(PyObject *self, PyObject *args)
1742{
1743 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001744 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001745 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001746
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001747 PyObject *curnum = NULL;
1748 PyObject *v = NULL;
1749 long bign;
1750 int i, n;
1751 int cmp_result;
1752
Tim Peters874e1f72003-04-13 22:13:08 +00001753 PyObject *zero = PyLong_FromLong(0);
1754
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001755 if (zero == NULL)
1756 return NULL;
1757
Tim Peters874e1f72003-04-13 22:13:08 +00001758 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1759 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001760 return NULL;
1761 }
1762
Tim Peters874e1f72003-04-13 22:13:08 +00001763 /* Figure out which way we were called, supply defaults, and be
1764 * sure to incref everything so that the decrefs at the end
1765 * are correct.
1766 */
1767 assert(ilow != NULL);
1768 if (ihigh == NULL) {
1769 /* only 1 arg -- it's the upper limit */
1770 ihigh = ilow;
1771 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001772 }
Tim Peters874e1f72003-04-13 22:13:08 +00001773 assert(ihigh != NULL);
1774 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001775
Tim Peters874e1f72003-04-13 22:13:08 +00001776 /* ihigh correct now; do ilow */
1777 if (ilow == NULL)
1778 ilow = zero;
1779 Py_INCREF(ilow);
1780
1781 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001782 if (istep == NULL) {
1783 istep = PyLong_FromLong(1L);
1784 if (istep == NULL)
1785 goto Fail;
1786 }
1787 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001788 Py_INCREF(istep);
1789 }
1790
Tim Peters874e1f72003-04-13 22:13:08 +00001791 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001792 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001793 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001794 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001795 goto Fail;
1796 }
1797
Tim Peters874e1f72003-04-13 22:13:08 +00001798 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001799 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001800 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001801 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001802 goto Fail;
1803 }
1804
1805 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001806 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001807 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001808 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001809 goto Fail;
1810 }
1811
1812 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1813 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001814 if (cmp_result == 0) {
1815 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001816 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001817 goto Fail;
1818 }
1819
1820 if (cmp_result > 0)
1821 bign = get_len_of_range_longs(ilow, ihigh, istep);
1822 else {
1823 PyObject *neg_istep = PyNumber_Negative(istep);
1824 if (neg_istep == NULL)
1825 goto Fail;
1826 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1827 Py_DECREF(neg_istep);
1828 }
1829
1830 n = (int)bign;
1831 if (bign < 0 || (long)n != bign) {
1832 PyErr_SetString(PyExc_OverflowError,
1833 "range() result has too many items");
1834 goto Fail;
1835 }
1836
1837 v = PyList_New(n);
1838 if (v == NULL)
1839 goto Fail;
1840
1841 curnum = ilow;
1842 Py_INCREF(curnum);
1843
1844 for (i = 0; i < n; i++) {
1845 PyObject *w = PyNumber_Long(curnum);
1846 PyObject *tmp_num;
1847 if (w == NULL)
1848 goto Fail;
1849
1850 PyList_SET_ITEM(v, i, w);
1851
1852 tmp_num = PyNumber_Add(curnum, istep);
1853 if (tmp_num == NULL)
1854 goto Fail;
1855
1856 Py_DECREF(curnum);
1857 curnum = tmp_num;
1858 }
Tim Peters874e1f72003-04-13 22:13:08 +00001859 Py_DECREF(ilow);
1860 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001861 Py_DECREF(istep);
1862 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001863 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001864 return v;
1865
1866 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001867 Py_DECREF(ilow);
1868 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001869 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001870 Py_DECREF(zero);
1871 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001872 Py_XDECREF(v);
1873 return NULL;
1874}
1875
Guido van Rossum124eff01999-02-23 16:11:01 +00001876/* Return number of items in range/xrange (lo, hi, step). step > 0
1877 * required. Return a value < 0 if & only if the true value is too
1878 * large to fit in a signed long.
1879 */
1880static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001881get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001882{
1883 /* -------------------------------------------------------------
1884 If lo >= hi, the range is empty.
1885 Else if n values are in the range, the last one is
1886 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1887 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1888 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1889 the RHS is non-negative and so truncation is the same as the
1890 floor. Letting M be the largest positive long, the worst case
1891 for the RHS numerator is hi=M, lo=-M-1, and then
1892 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1893 precision to compute the RHS exactly.
1894 ---------------------------------------------------------------*/
1895 long n = 0;
1896 if (lo < hi) {
1897 unsigned long uhi = (unsigned long)hi;
1898 unsigned long ulo = (unsigned long)lo;
1899 unsigned long diff = uhi - ulo - 1;
1900 n = (long)(diff / (unsigned long)step + 1);
1901 }
1902 return n;
1903}
1904
Guido van Rossum79f25d91997-04-29 20:08:16 +00001905static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001906builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001907{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001908 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001909 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001910 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001911
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001913
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 if (PyTuple_Size(args) <= 1) {
1915 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001916 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001917 &ihigh)) {
1918 PyErr_Clear();
1919 return handle_range_longs(self, args);
1920 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001921 }
1922 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001923 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001924 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001925 &ilow, &ihigh, &istep)) {
1926 PyErr_Clear();
1927 return handle_range_longs(self, args);
1928 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001929 }
1930 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001931 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001932 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001933 return NULL;
1934 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001935 if (istep > 0)
1936 bign = get_len_of_range(ilow, ihigh, istep);
1937 else
1938 bign = get_len_of_range(ihigh, ilow, -istep);
1939 n = (int)bign;
1940 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001941 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001942 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001943 return NULL;
1944 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001946 if (v == NULL)
1947 return NULL;
1948 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001949 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001950 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001952 return NULL;
1953 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001954 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001955 ilow += istep;
1956 }
1957 return v;
1958}
1959
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001960PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001961"range([start,] stop[, step]) -> list of integers\n\
1962\n\
1963Return a list containing an arithmetic progression of integers.\n\
1964range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1965When step is given, it specifies the increment (or decrement).\n\
1966For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001967These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001968
1969
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001971builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001972{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001974 PyObject *fin = PySys_GetObject("stdin");
1975 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001976
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001977 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001978 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001979
1980 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001981 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001982 return NULL;
1983 }
1984 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001985 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001986 return NULL;
1987 }
1988 if (PyFile_SoftSpace(fout, 0)) {
1989 if (PyFile_WriteString(" ", fout) != 0)
1990 return NULL;
1991 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001992 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001993 && isatty(fileno(PyFile_AsFile(fin)))
1994 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001995 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001996 char *prompt;
1997 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001998 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001999 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002000 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00002001 if (po == NULL)
2002 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002003 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00002004 if (prompt == NULL)
2005 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00002006 }
2007 else {
2008 po = NULL;
2009 prompt = "";
2010 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00002011 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002012 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002013 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00002014 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00002015 if (!PyErr_Occurred())
2016 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00002017 return NULL;
2018 }
2019 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002020 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00002021 result = NULL;
2022 }
2023 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00002024 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00002025 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002026 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002027 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00002028 result = NULL;
2029 }
2030 else {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002031 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00002032 }
Guido van Rossum872537c1995-07-07 22:43:42 +00002033 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00002034 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00002035 return result;
2036 }
Guido van Rossum90933611991-06-07 16:10:43 +00002037 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002038 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00002039 return NULL;
2040 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002041 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002042}
2043
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002044PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002045"raw_input([prompt]) -> string\n\
2046\n\
2047Read a string from standard input. The trailing newline is stripped.\n\
2048If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
2049On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002050is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002051
2052
Guido van Rossum79f25d91997-04-29 20:08:16 +00002053static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002054builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002055{
Benjamin Peterson08336e32008-08-18 02:01:21 +00002056 static PyObject *functools_reduce = NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002057
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002058 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002059 "use functools.reduce()", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002060 return NULL;
2061
Benjamin Peterson08336e32008-08-18 02:01:21 +00002062 if (functools_reduce == NULL) {
2063 PyObject *functools = PyImport_ImportModule("functools");
2064 if (functools == NULL)
2065 return NULL;
2066 functools_reduce = PyObject_GetAttrString(functools, "reduce");
2067 Py_DECREF(functools);
2068 if (functools_reduce == NULL)
2069 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002070 }
Benjamin Peterson08336e32008-08-18 02:01:21 +00002071 return PyObject_Call(functools_reduce, args, NULL);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002072}
2073
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002074PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002075"reduce(function, sequence[, initial]) -> value\n\
2076\n\
2077Apply a function of two arguments cumulatively to the items of a sequence,\n\
2078from left to right, so as to reduce the sequence to a single value.\n\
2079For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
2080((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
2081of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002082sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002083
2084
Guido van Rossum79f25d91997-04-29 20:08:16 +00002085static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002086builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002087{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002088 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002089 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002090 return NULL;
2091
Guido van Rossum79f25d91997-04-29 20:08:16 +00002092 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002093}
2094
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002095PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002096"reload(module) -> module\n\
2097\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002098Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002099
2100
Guido van Rossum79f25d91997-04-29 20:08:16 +00002101static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002102builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002103{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002104 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002105}
2106
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002107PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002108"repr(object) -> string\n\
2109\n\
2110Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002111For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002112
2113
Guido van Rossum79f25d91997-04-29 20:08:16 +00002114static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00002115builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002116{
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002117 double number;
2118 double f;
2119 int ndigits = 0;
2120 int i;
Georg Brandlccadf842006-03-31 18:54:53 +00002121 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002122
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002123 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
2124 kwlist, &number, &ndigits))
2125 return NULL;
2126 f = 1.0;
2127 i = abs(ndigits);
2128 while (--i >= 0)
2129 f = f*10.0;
2130 if (ndigits < 0)
2131 number /= f;
2132 else
2133 number *= f;
Mark Dickinson1bdf7e92009-04-18 14:59:42 +00002134 number = round(number);
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002135 if (ndigits < 0)
2136 number *= f;
2137 else
2138 number /= f;
2139 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002140}
2141
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002142PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002143"round(number[, ndigits]) -> floating point number\n\
2144\n\
2145Round a number to a given precision in decimal digits (default 0 digits).\n\
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002146This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002147
Raymond Hettinger64958a12003-12-17 20:43:33 +00002148static PyObject *
2149builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2150{
2151 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2152 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002153 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002154 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002155
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002156 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002157 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2158 kwlist, &seq, &compare, &keyfunc, &reverse))
2159 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002160
2161 newlist = PySequence_List(seq);
2162 if (newlist == NULL)
2163 return NULL;
2164
2165 callable = PyObject_GetAttrString(newlist, "sort");
2166 if (callable == NULL) {
2167 Py_DECREF(newlist);
2168 return NULL;
2169 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002170
Raymond Hettinger64958a12003-12-17 20:43:33 +00002171 newargs = PyTuple_GetSlice(args, 1, 4);
2172 if (newargs == NULL) {
2173 Py_DECREF(newlist);
2174 Py_DECREF(callable);
2175 return NULL;
2176 }
2177
2178 v = PyObject_Call(callable, newargs, kwds);
2179 Py_DECREF(newargs);
2180 Py_DECREF(callable);
2181 if (v == NULL) {
2182 Py_DECREF(newlist);
2183 return NULL;
2184 }
2185 Py_DECREF(v);
2186 return newlist;
2187}
2188
2189PyDoc_STRVAR(sorted_doc,
2190"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002191
Guido van Rossum79f25d91997-04-29 20:08:16 +00002192static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002193builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002194{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002195 PyObject *v = NULL;
2196 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002197
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002198 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002199 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002200 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002201 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002202 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002203 if (!PyErr_Occurred())
2204 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002205 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002206 }
2207 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002208 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002209 }
2210 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002211 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002212 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002213 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002214 "vars() argument must have __dict__ attribute");
2215 return NULL;
2216 }
2217 }
2218 return d;
2219}
2220
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002221PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002222"vars([object]) -> dictionary\n\
2223\n\
2224Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002225With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002226
Alex Martellia70b1912003-04-22 08:12:33 +00002227
2228static PyObject*
2229builtin_sum(PyObject *self, PyObject *args)
2230{
2231 PyObject *seq;
2232 PyObject *result = NULL;
2233 PyObject *temp, *item, *iter;
2234
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002235 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002236 return NULL;
2237
2238 iter = PyObject_GetIter(seq);
2239 if (iter == NULL)
2240 return NULL;
2241
2242 if (result == NULL) {
2243 result = PyInt_FromLong(0);
2244 if (result == NULL) {
2245 Py_DECREF(iter);
2246 return NULL;
2247 }
2248 } else {
2249 /* reject string values for 'start' parameter */
2250 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2251 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002252 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002253 Py_DECREF(iter);
2254 return NULL;
2255 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002256 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002257 }
2258
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002259#ifndef SLOW_SUM
2260 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2261 Assumes all inputs are the same type. If the assumption fails, default
2262 to the more general routine.
2263 */
2264 if (PyInt_CheckExact(result)) {
2265 long i_result = PyInt_AS_LONG(result);
2266 Py_DECREF(result);
2267 result = NULL;
2268 while(result == NULL) {
2269 item = PyIter_Next(iter);
2270 if (item == NULL) {
2271 Py_DECREF(iter);
2272 if (PyErr_Occurred())
2273 return NULL;
2274 return PyInt_FromLong(i_result);
2275 }
2276 if (PyInt_CheckExact(item)) {
2277 long b = PyInt_AS_LONG(item);
2278 long x = i_result + b;
2279 if ((x^i_result) >= 0 || (x^b) >= 0) {
2280 i_result = x;
2281 Py_DECREF(item);
2282 continue;
2283 }
2284 }
2285 /* Either overflowed or is not an int. Restore real objects and process normally */
2286 result = PyInt_FromLong(i_result);
2287 temp = PyNumber_Add(result, item);
2288 Py_DECREF(result);
2289 Py_DECREF(item);
2290 result = temp;
2291 if (result == NULL) {
2292 Py_DECREF(iter);
2293 return NULL;
2294 }
2295 }
2296 }
2297
2298 if (PyFloat_CheckExact(result)) {
2299 double f_result = PyFloat_AS_DOUBLE(result);
2300 Py_DECREF(result);
2301 result = NULL;
2302 while(result == NULL) {
2303 item = PyIter_Next(iter);
2304 if (item == NULL) {
2305 Py_DECREF(iter);
2306 if (PyErr_Occurred())
2307 return NULL;
2308 return PyFloat_FromDouble(f_result);
2309 }
2310 if (PyFloat_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002311 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002312 f_result += PyFloat_AS_DOUBLE(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002313 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002314 Py_DECREF(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002315 continue;
2316 }
2317 if (PyInt_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002318 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002319 f_result += (double)PyInt_AS_LONG(item);
2320 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002321 Py_DECREF(item);
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002322 continue;
2323 }
2324 result = PyFloat_FromDouble(f_result);
2325 temp = PyNumber_Add(result, item);
2326 Py_DECREF(result);
2327 Py_DECREF(item);
2328 result = temp;
2329 if (result == NULL) {
2330 Py_DECREF(iter);
2331 return NULL;
2332 }
2333 }
2334 }
2335#endif
2336
Alex Martellia70b1912003-04-22 08:12:33 +00002337 for(;;) {
2338 item = PyIter_Next(iter);
2339 if (item == NULL) {
2340 /* error, or end-of-sequence */
2341 if (PyErr_Occurred()) {
2342 Py_DECREF(result);
2343 result = NULL;
2344 }
2345 break;
2346 }
Alex Martellia253e182003-10-25 23:24:14 +00002347 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002348 Py_DECREF(result);
2349 Py_DECREF(item);
2350 result = temp;
2351 if (result == NULL)
2352 break;
2353 }
2354 Py_DECREF(iter);
2355 return result;
2356}
2357
2358PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002359"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002360\n\
2361Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002362of parameter 'start' (which defaults to 0). When the sequence is\n\
2363empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002364
2365
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002366static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002367builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002368{
2369 PyObject *inst;
2370 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002371 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002372
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002373 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002374 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002375
Guido van Rossum823649d2001-03-21 18:40:58 +00002376 retval = PyObject_IsInstance(inst, cls);
2377 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002378 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002379 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002380}
2381
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002382PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002383"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002384\n\
2385Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002386With a type as second argument, return whether that is the object's type.\n\
2387The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002388isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002389
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002390
2391static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002392builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002393{
2394 PyObject *derived;
2395 PyObject *cls;
2396 int retval;
2397
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002398 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002399 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002400
Guido van Rossum823649d2001-03-21 18:40:58 +00002401 retval = PyObject_IsSubclass(derived, cls);
2402 if (retval < 0)
2403 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002404 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002405}
2406
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002407PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002408"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002409\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002410Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2411When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2412is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002413
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002414
Barry Warsawbd599b52000-08-03 15:45:29 +00002415static PyObject*
2416builtin_zip(PyObject *self, PyObject *args)
2417{
2418 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002419 const Py_ssize_t itemsize = PySequence_Length(args);
2420 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002421 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002422 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002423
Raymond Hettingereaef6152003-08-02 07:42:57 +00002424 if (itemsize == 0)
2425 return PyList_New(0);
2426
Barry Warsawbd599b52000-08-03 15:45:29 +00002427 /* args must be a tuple */
2428 assert(PyTuple_Check(args));
2429
Tim Peters39a86c22002-05-12 07:19:38 +00002430 /* Guess at result length: the shortest of the input lengths.
2431 If some argument refuses to say, we refuse to guess too, lest
2432 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002433 len = -1; /* unknown */
2434 for (i = 0; i < itemsize; ++i) {
2435 PyObject *item = PyTuple_GET_ITEM(args, i);
Benjamin Peterson4c1fe512009-05-09 19:17:59 +00002436 Py_ssize_t thislen = _PyObject_LengthHint(item, -2);
Tim Peters39a86c22002-05-12 07:19:38 +00002437 if (thislen < 0) {
Benjamin Peterson4c1fe512009-05-09 19:17:59 +00002438 if (thislen == -1)
2439 return NULL;
Tim Peters39a86c22002-05-12 07:19:38 +00002440 len = -1;
2441 break;
2442 }
Tim Peters67d687a2002-04-29 21:27:32 +00002443 else if (len < 0 || thislen < len)
2444 len = thislen;
2445 }
2446
Tim Peters8572b4f2001-05-06 01:05:02 +00002447 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002448 if (len < 0)
2449 len = 10; /* arbitrary */
2450 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002451 return NULL;
2452
Tim Peters8572b4f2001-05-06 01:05:02 +00002453 /* obtain iterators */
2454 itlist = PyTuple_New(itemsize);
2455 if (itlist == NULL)
2456 goto Fail_ret;
2457 for (i = 0; i < itemsize; ++i) {
2458 PyObject *item = PyTuple_GET_ITEM(args, i);
2459 PyObject *it = PyObject_GetIter(item);
Benjamin Peterson55159902009-09-06 22:43:39 +00002460 if (it == NULL)
Tim Peters8572b4f2001-05-06 01:05:02 +00002461 goto Fail_ret_itlist;
Tim Peters8572b4f2001-05-06 01:05:02 +00002462 PyTuple_SET_ITEM(itlist, i, it);
2463 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002464
Tim Peters8572b4f2001-05-06 01:05:02 +00002465 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002466 for (i = 0; ; ++i) {
2467 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002468 PyObject *next = PyTuple_New(itemsize);
2469 if (!next)
2470 goto Fail_ret_itlist;
2471
Tim Peters67d687a2002-04-29 21:27:32 +00002472 for (j = 0; j < itemsize; j++) {
2473 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002474 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002475 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002476 if (PyErr_Occurred()) {
2477 Py_DECREF(ret);
2478 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002479 }
2480 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002481 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002482 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002483 }
Tim Peters67d687a2002-04-29 21:27:32 +00002484 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002485 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002486
Tim Peters67d687a2002-04-29 21:27:32 +00002487 if (i < len)
2488 PyList_SET_ITEM(ret, i, next);
2489 else {
2490 int status = PyList_Append(ret, next);
2491 Py_DECREF(next);
2492 ++len;
2493 if (status < 0)
2494 goto Fail_ret_itlist;
2495 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002496 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002497
Tim Peters67d687a2002-04-29 21:27:32 +00002498Done:
2499 if (ret != NULL && i < len) {
2500 /* The list is too big. */
2501 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2502 return NULL;
2503 }
2504 return ret;
2505
Tim Peters8572b4f2001-05-06 01:05:02 +00002506Fail_ret_itlist:
2507 Py_DECREF(itlist);
2508Fail_ret:
2509 Py_DECREF(ret);
2510 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002511}
2512
2513
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002514PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002515"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2516\n\
2517Return a list of tuples, where each tuple contains the i-th element\n\
2518from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002519in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002520
2521
Guido van Rossum79f25d91997-04-29 20:08:16 +00002522static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002523 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002524 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002525 {"all", builtin_all, METH_O, all_doc},
2526 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002527 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Eric Smith3cd81942008-02-22 16:30:22 +00002528 {"bin", builtin_bin, METH_O, bin_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002529 {"callable", builtin_callable, METH_O, callable_doc},
2530 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2531 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2532 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
Georg Brandl5240d742007-03-13 20:46:32 +00002533 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002534 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2535 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2536 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2537 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2538 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2539 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smitha9f7d622008-02-17 19:46:49 +00002540 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002541 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2542 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2543 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2544 {"hash", builtin_hash, METH_O, hash_doc},
2545 {"hex", builtin_hex, METH_O, hex_doc},
2546 {"id", builtin_id, METH_O, id_doc},
2547 {"input", builtin_input, METH_VARARGS, input_doc},
2548 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2549 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2550 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2551 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2552 {"len", builtin_len, METH_O, len_doc},
2553 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2554 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002555 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2556 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandl28e08732008-04-30 19:47:09 +00002557 {"next", builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002558 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002559 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002560 {"ord", builtin_ord, METH_O, ord_doc},
2561 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Eric Smith7c478942008-03-18 23:45:49 +00002562 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002563 {"range", builtin_range, METH_VARARGS, range_doc},
2564 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2565 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2566 {"reload", builtin_reload, METH_O, reload_doc},
2567 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002568 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002569 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002570 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002571 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002572#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002573 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002574#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002575 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002576 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002577 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002578};
2579
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002580PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002581"Built-in functions, exceptions, and other objects.\n\
2582\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002583Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002584
Guido van Rossum25ce5661997-08-02 03:10:38 +00002585PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002586_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002587{
Fred Drake5550de32000-06-20 04:54:19 +00002588 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002589 mod = Py_InitModule4("__builtin__", builtin_methods,
2590 builtin_doc, (PyObject *)NULL,
2591 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002592 if (mod == NULL)
2593 return NULL;
2594 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002595
Tim Peters7571a0f2003-03-23 17:52:28 +00002596#ifdef Py_TRACE_REFS
2597 /* __builtin__ exposes a number of statically allocated objects
2598 * that, before this code was added in 2.3, never showed up in
2599 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2600 * result, programs leaking references to None and False (etc)
2601 * couldn't be diagnosed by examining sys.getobjects(0).
2602 */
2603#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2604#else
2605#define ADD_TO_ALL(OBJECT) (void)0
2606#endif
2607
Tim Peters4b7625e2001-09-13 21:37:17 +00002608#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002609 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2610 return NULL; \
2611 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002612
2613 SETBUILTIN("None", Py_None);
2614 SETBUILTIN("Ellipsis", Py_Ellipsis);
2615 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002616 SETBUILTIN("False", Py_False);
2617 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002618 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002619 SETBUILTIN("bool", &PyBool_Type);
Antoine Pitrou789be0c2009-04-02 21:18:34 +00002620 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes3497f942008-05-26 12:29:14 +00002621 SETBUILTIN("bytearray", &PyByteArray_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002622 SETBUILTIN("bytes", &PyString_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002623 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002624 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002625#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002626 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002627#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002628 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002629 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002630 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002631 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002632 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002633 SETBUILTIN("property", &PyProperty_Type);
2634 SETBUILTIN("int", &PyInt_Type);
2635 SETBUILTIN("list", &PyList_Type);
2636 SETBUILTIN("long", &PyLong_Type);
2637 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002638 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002639 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002640 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002641 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002642 SETBUILTIN("str", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002643 SETBUILTIN("super", &PySuper_Type);
2644 SETBUILTIN("tuple", &PyTuple_Type);
2645 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002646 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002647#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002648 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002649#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002650 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002651 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2652 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002653 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002654 }
2655 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002656
Guido van Rossum25ce5661997-08-02 03:10:38 +00002657 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002658#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002659#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002660}
2661
Guido van Rossume77a7571993-11-03 15:01:26 +00002662/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002663
Guido van Rossum79f25d91997-04-29 20:08:16 +00002664static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002665filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002666{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002667 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002668 Py_ssize_t i, j;
2669 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002670
Guido van Rossumb7b45621995-08-04 04:07:45 +00002671 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002672 if (PyTuple_CheckExact(tuple))
2673 Py_INCREF(tuple);
2674 else
2675 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002676 return tuple;
2677 }
2678
Guido van Rossum79f25d91997-04-29 20:08:16 +00002679 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002680 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002681
Guido van Rossum12d12c51993-10-26 17:58:25 +00002682 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002683 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002684 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002685
Walter Dörwald8dd19322003-02-10 17:36:40 +00002686 if (tuple->ob_type->tp_as_sequence &&
2687 tuple->ob_type->tp_as_sequence->sq_item) {
2688 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002689 if (item == NULL)
2690 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002691 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002692 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002693 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002694 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002695 if (func == Py_None) {
2696 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002697 good = item;
2698 }
2699 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002700 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002701 if (arg == NULL) {
2702 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002703 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002704 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002705 good = PyEval_CallObject(func, arg);
2706 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002707 if (good == NULL) {
2708 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002709 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002710 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002711 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002712 ok = PyObject_IsTrue(good);
2713 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002714 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002715 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002716 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002717 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002718 else
2719 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002720 }
2721
Tim Peters4324aa32001-05-28 22:30:08 +00002722 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002723 return NULL;
2724
Guido van Rossum12d12c51993-10-26 17:58:25 +00002725 return result;
2726
Guido van Rossum12d12c51993-10-26 17:58:25 +00002727Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002728 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002729 return NULL;
2730}
2731
2732
Guido van Rossume77a7571993-11-03 15:01:26 +00002733/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002734
Guido van Rossum79f25d91997-04-29 20:08:16 +00002735static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002736filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002737{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002738 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002739 Py_ssize_t i, j;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002740 Py_ssize_t len = PyString_Size(strobj);
Martin v. Löwis18e16552006-02-15 17:27:45 +00002741 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002742
Guido van Rossum79f25d91997-04-29 20:08:16 +00002743 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002744 /* If it's a real string we can return the original,
2745 * as no character is ever false and __getitem__
2746 * does return this character. If it's a subclass
2747 * we must go through the __getitem__ loop */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002748 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002749 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002750 return strobj;
2751 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002752 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002753 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002754 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002755
Guido van Rossum12d12c51993-10-26 17:58:25 +00002756 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002757 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002758 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002759
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002760 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2761 if (item == NULL)
2762 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002763 if (func==Py_None) {
2764 ok = 1;
2765 } else {
2766 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002767 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002768 if (arg == NULL) {
2769 Py_DECREF(item);
2770 goto Fail_1;
2771 }
2772 good = PyEval_CallObject(func, arg);
2773 Py_DECREF(arg);
2774 if (good == NULL) {
2775 Py_DECREF(item);
2776 goto Fail_1;
2777 }
2778 ok = PyObject_IsTrue(good);
2779 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002780 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002781 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002782 Py_ssize_t reslen;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002783 if (!PyString_Check(item)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002784 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2785 " __getitem__ returned different type");
2786 Py_DECREF(item);
2787 goto Fail_1;
2788 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002789 reslen = PyString_GET_SIZE(item);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002790 if (reslen == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002791 PyString_AS_STRING(result)[j++] =
2792 PyString_AS_STRING(item)[0];
Walter Dörwald903f1e02003-02-04 16:28:00 +00002793 } else {
2794 /* do we need more space? */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002795 Py_ssize_t need = j;
2796
2797 /* calculate space requirements while checking for overflow */
2798 if (need > PY_SSIZE_T_MAX - reslen) {
2799 Py_DECREF(item);
2800 goto Fail_1;
2801 }
2802
2803 need += reslen;
2804
2805 if (need > PY_SSIZE_T_MAX - len) {
2806 Py_DECREF(item);
2807 goto Fail_1;
2808 }
2809
2810 need += len;
2811
2812 if (need <= i) {
2813 Py_DECREF(item);
2814 goto Fail_1;
2815 }
2816
2817 need = need - i - 1;
2818
2819 assert(need >= 0);
2820 assert(outlen >= 0);
2821
Walter Dörwald903f1e02003-02-04 16:28:00 +00002822 if (need > outlen) {
2823 /* overallocate, to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002824 if (outlen > PY_SSIZE_T_MAX / 2) {
2825 Py_DECREF(item);
2826 return NULL;
2827 }
2828
2829 if (need<2*outlen) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002830 need = 2*outlen;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002831 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002832 if (_PyString_Resize(&result, need)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002833 Py_DECREF(item);
2834 return NULL;
2835 }
2836 outlen = need;
2837 }
2838 memcpy(
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002839 PyString_AS_STRING(result) + j,
2840 PyString_AS_STRING(item),
Walter Dörwald903f1e02003-02-04 16:28:00 +00002841 reslen
2842 );
2843 j += reslen;
2844 }
2845 }
Tim Peters388ed082001-04-07 20:34:48 +00002846 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002847 }
2848
Walter Dörwald903f1e02003-02-04 16:28:00 +00002849 if (j < outlen)
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002850 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002851
Guido van Rossum12d12c51993-10-26 17:58:25 +00002852 return result;
2853
Guido van Rossum12d12c51993-10-26 17:58:25 +00002854Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002855 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002856 return NULL;
2857}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002858
2859#ifdef Py_USING_UNICODE
2860/* Helper for filter(): filter a Unicode object through a function */
2861
2862static PyObject *
2863filterunicode(PyObject *func, PyObject *strobj)
2864{
2865 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002866 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002867 Py_ssize_t len = PyUnicode_GetSize(strobj);
2868 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002869
2870 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002871 /* If it's a real string we can return the original,
2872 * as no character is ever false and __getitem__
2873 * does return this character. If it's a subclass
2874 * we must go through the __getitem__ loop */
2875 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002876 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002877 return strobj;
2878 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002879 }
2880 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2881 return NULL;
2882
2883 for (i = j = 0; i < len; ++i) {
2884 PyObject *item, *arg, *good;
2885 int ok;
2886
2887 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2888 if (item == NULL)
2889 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002890 if (func == Py_None) {
2891 ok = 1;
2892 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002893 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002894 if (arg == NULL) {
2895 Py_DECREF(item);
2896 goto Fail_1;
2897 }
2898 good = PyEval_CallObject(func, arg);
2899 Py_DECREF(arg);
2900 if (good == NULL) {
2901 Py_DECREF(item);
2902 goto Fail_1;
2903 }
2904 ok = PyObject_IsTrue(good);
2905 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002906 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002907 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002908 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002909 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002910 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002911 "can't filter unicode to unicode:"
2912 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002913 Py_DECREF(item);
2914 goto Fail_1;
2915 }
2916 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002917 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002918 PyUnicode_AS_UNICODE(result)[j++] =
2919 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002920 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002921 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002922 Py_ssize_t need = j + reslen + len - i - 1;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002923
2924 /* check that didnt overflow */
2925 if ((j > PY_SSIZE_T_MAX - reslen) ||
2926 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
2927 ((j + reslen + len) < i) ||
2928 ((j + reslen + len - i) <= 0)) {
2929 Py_DECREF(item);
2930 return NULL;
2931 }
2932
2933 assert(need >= 0);
2934 assert(outlen >= 0);
2935
Walter Dörwald903f1e02003-02-04 16:28:00 +00002936 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002937 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002938 to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002939 if (need < 2 * outlen) {
2940 if (outlen > PY_SSIZE_T_MAX / 2) {
2941 Py_DECREF(item);
2942 return NULL;
2943 } else {
2944 need = 2 * outlen;
2945 }
2946 }
2947
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002948 if (PyUnicode_Resize(
2949 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002950 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002951 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002952 }
2953 outlen = need;
2954 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002955 memcpy(PyUnicode_AS_UNICODE(result) + j,
2956 PyUnicode_AS_UNICODE(item),
2957 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002958 j += reslen;
2959 }
2960 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002961 Py_DECREF(item);
2962 }
2963
Walter Dörwald903f1e02003-02-04 16:28:00 +00002964 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002965 PyUnicode_Resize(&result, j);
2966
2967 return result;
2968
2969Fail_1:
2970 Py_DECREF(result);
2971 return NULL;
2972}
2973#endif