blob: 4b5a062f6ff3fc0b3c25afe9ad9f3fa296555e2a [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 Peterson0811a442009-11-17 21:33:08 +0000227 "use isinstance(x, collections.Callable)", 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 Hettinger24e28722009-02-02 22:44:06 +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;
Benjamin Peterson011e9f12009-12-13 00:59:01 +0000468 int is_ast;
Tim Peters5ba58662001-07-16 02:29:45 +0000469 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000470 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000471 Py_ssize_t length;
Georg Brandl5240d742007-03-13 20:46:32 +0000472 static char *kwlist[] = {"source", "filename", "mode", "flags",
473 "dont_inherit", NULL};
Georg Brandlf2bfd542008-03-29 13:24:23 +0000474 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000475
Georg Brandl5240d742007-03-13 20:46:32 +0000476 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
477 kwlist, &cmd, &filename, &startstr,
478 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000479 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000480
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000481 cf.cf_flags = supplied_flags;
482
Georg Brandlfc8eef32008-03-28 12:11:56 +0000483 if (supplied_flags &
484 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
485 {
486 PyErr_SetString(PyExc_ValueError,
487 "compile(): unrecognised flags");
488 return NULL;
489 }
490 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
491
492 if (!dont_inherit) {
493 PyEval_MergeCompilerFlags(&cf);
494 }
495
Georg Brandlf2bfd542008-03-29 13:24:23 +0000496 if (strcmp(startstr, "exec") == 0)
497 mode = 0;
498 else if (strcmp(startstr, "eval") == 0)
499 mode = 1;
500 else if (strcmp(startstr, "single") == 0)
501 mode = 2;
502 else {
503 PyErr_SetString(PyExc_ValueError,
504 "compile() arg 3 must be 'exec', 'eval' or 'single'");
505 return NULL;
506 }
507
Benjamin Peterson011e9f12009-12-13 00:59:01 +0000508 is_ast = PyAST_Check(cmd);
509 if (is_ast == -1)
510 return NULL;
511 if (is_ast) {
Georg Brandlfc8eef32008-03-28 12:11:56 +0000512 if (supplied_flags & PyCF_ONLY_AST) {
513 Py_INCREF(cmd);
514 result = cmd;
515 }
516 else {
517 PyArena *arena;
518 mod_ty mod;
519
520 arena = PyArena_New();
Georg Brandlf2bfd542008-03-29 13:24:23 +0000521 mod = PyAST_obj2mod(cmd, arena, mode);
Georg Brandlfc8eef32008-03-28 12:11:56 +0000522 if (mod == NULL) {
523 PyArena_Free(arena);
524 return NULL;
525 }
526 result = (PyObject*)PyAST_Compile(mod, filename,
527 &cf, arena);
528 PyArena_Free(arena);
529 }
530 return result;
531 }
532
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000533#ifdef Py_USING_UNICODE
534 if (PyUnicode_Check(cmd)) {
535 tmp = PyUnicode_AsUTF8String(cmd);
536 if (tmp == NULL)
537 return NULL;
538 cmd = tmp;
539 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
540 }
541#endif
Tim Peters6cd6a822001-08-17 22:11:27 +0000542
Georg Brandlfc8eef32008-03-28 12:11:56 +0000543 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000544 goto cleanup;
Georg Brandlfc8eef32008-03-28 12:11:56 +0000545 if ((size_t)length != strlen(str)) {
546 PyErr_SetString(PyExc_TypeError,
547 "compile() expected string without null bytes");
548 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000549 }
Georg Brandlf2bfd542008-03-29 13:24:23 +0000550 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000551cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000552 Py_XDECREF(tmp);
553 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000554}
555
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000556PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000557"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000558\n\
559Compile the source string (a Python module, statement or expression)\n\
560into a code object that can be executed by the exec statement or eval().\n\
561The filename will be used for run-time error messages.\n\
562The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000563single (interactive) statement, or 'eval' to compile an expression.\n\
564The flags argument, if present, controls which future statements influence\n\
565the compilation of the code.\n\
566The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
567the effects of any future statements in effect in the code calling\n\
568compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000569in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000570
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000572builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000573{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000574 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000576 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000577 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000578 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000579}
580
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000581PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000582"dir([object]) -> list of strings\n"
583"\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000584"If called without an argument, return the names in the current scope.\n"
585"Else, return an alphabetized list of names comprising (some of) the attributes\n"
586"of the given object, and of attributes reachable from it.\n"
587"If the object supplies a method named __dir__, it will be used; otherwise\n"
588"the default dir() logic is used and returns:\n"
589" for a module object: the module's attributes.\n"
590" for a class object: its attributes, and recursively the attributes\n"
591" of its bases.\n"
Georg Brandl3bb15672007-03-13 07:23:16 +0000592" for any other object: its attributes, its class's attributes, and\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000593" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000594
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000596builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000597{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000599
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000600 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000601 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000602 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000603}
604
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000605PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000606"divmod(x, y) -> (div, mod)\n\
607\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000608Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000609
610
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000612builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000613{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000614 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000617 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000618
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000619 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000621 if (locals != Py_None && !PyMapping_Check(locals)) {
622 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000623 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000624 }
625 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000626 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000627 "globals must be a real dict; try eval(expr, {}, mapping)"
628 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000629 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000630 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631 if (globals == Py_None) {
632 globals = PyEval_GetGlobals();
633 if (locals == Py_None)
634 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000635 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000637 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000638
Georg Brandl77c85e62005-09-15 10:46:13 +0000639 if (globals == NULL || locals == NULL) {
640 PyErr_SetString(PyExc_TypeError,
641 "eval must be given globals and locals "
642 "when called without a frame");
643 return NULL;
644 }
645
Guido van Rossum79f25d91997-04-29 20:08:16 +0000646 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
647 if (PyDict_SetItemString(globals, "__builtins__",
648 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000649 return NULL;
650 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000651
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000652 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000653 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000654 PyErr_SetString(PyExc_TypeError,
655 "code object passed to eval() may not contain free variables");
656 return NULL;
657 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000658 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000659 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000660
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000661 if (!PyString_Check(cmd) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000662 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000664 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000665 return NULL;
666 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000667 cf.cf_flags = 0;
668
669#ifdef Py_USING_UNICODE
670 if (PyUnicode_Check(cmd)) {
671 tmp = PyUnicode_AsUTF8String(cmd);
672 if (tmp == NULL)
673 return NULL;
674 cmd = tmp;
675 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
676 }
677#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000678 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000679 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000680 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000681 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682 while (*str == ' ' || *str == '\t')
683 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000684
Tim Peters9fa96be2001-08-17 23:04:59 +0000685 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000686 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
687 Py_XDECREF(tmp);
688 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000689}
690
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000691PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000692"eval(source[, globals[, locals]]) -> value\n\
693\n\
694Evaluate the source in the context of globals and locals.\n\
695The source may be a string representing a Python expression\n\
696or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000697The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000698defaulting to the current globals and locals.\n\
699If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000700
701
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000703builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000704{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 PyObject *globals = Py_None, *locals = Py_None;
707 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000708 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000709 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000710 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000712 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000713 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000714 return NULL;
715
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000716 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000717 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000718 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000719 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000720 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000721 if (locals != Py_None && !PyMapping_Check(locals)) {
722 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
723 return NULL;
724 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725 if (globals == Py_None) {
726 globals = PyEval_GetGlobals();
727 if (locals == Py_None)
728 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000729 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000730 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000731 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000732 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
733 if (PyDict_SetItemString(globals, "__builtins__",
734 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000735 return NULL;
736 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000737
738 exists = 0;
739 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000740#if defined(PLAN9)
741 {
742 Dir *d;
743
744 if ((d = dirstat(filename))!=nil) {
745 if(d->mode & DMDIR)
746 werrstr("is a directory");
747 else
748 exists = 1;
749 free(d);
750 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000751 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000752#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000753 if (object_exists(filename)) {
754 if (isdir(filename))
755 errno = EISDIR;
756 else
757 exists = 1;
758 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000759#else /* standard Posix */
760 {
761 struct stat s;
762 if (stat(filename, &s) == 0) {
763 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000764# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000765 errno = EOS2ERR;
766# else
767 errno = EISDIR;
768# endif
769 else
770 exists = 1;
771 }
772 }
773#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000774
775 if (exists) {
776 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000777 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000778 Py_END_ALLOW_THREADS
779
780 if (fp == NULL) {
781 exists = 0;
782 }
783 }
784
785 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000786 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000787 return NULL;
788 }
Tim Peters5ba58662001-07-16 02:29:45 +0000789 cf.cf_flags = 0;
790 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000791 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000792 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000793 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000794 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000795 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000797}
798
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000799PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000800"execfile(filename[, globals[, locals]])\n\
801\n\
802Read and execute a Python script from a file.\n\
803The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000804globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000805
806
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000808builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000809{
Guido van Rossum950ff291998-06-29 13:38:57 +0000810 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000812
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000813 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000814 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000815#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000816 if (PyUnicode_Check(name)) {
817 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
818 if (name == NULL)
819 return NULL;
820 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000821#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000822
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000823 if (!PyString_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000824 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000825 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000826 return NULL;
827 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000828 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000829 if (result == NULL && dflt != NULL &&
830 PyErr_ExceptionMatches(PyExc_AttributeError))
831 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000832 PyErr_Clear();
833 Py_INCREF(dflt);
834 result = dflt;
835 }
836 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000837}
838
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000839PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000840"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000841\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000842Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
843When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000844exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000845
846
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000848builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000849{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000851
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000853 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000854 return d;
855}
856
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000857PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000858"globals() -> dictionary\n\
859\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000860Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861
862
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000864builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000865{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 PyObject *v;
867 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000869 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000870 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000871#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000872 if (PyUnicode_Check(name)) {
873 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
874 if (name == NULL)
875 return NULL;
876 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000877#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000878
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000879 if (!PyString_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000880 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000881 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000882 return NULL;
883 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000885 if (v == NULL) {
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000886 if (!PyErr_ExceptionMatches(PyExc_Exception))
887 return NULL;
888 else {
889 PyErr_Clear();
890 Py_INCREF(Py_False);
891 return Py_False;
892 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000893 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000895 Py_INCREF(Py_True);
896 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000897}
898
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000900"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000901\n\
902Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000903(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904
905
Guido van Rossum79f25d91997-04-29 20:08:16 +0000906static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000907builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000908{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000909 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000910}
911
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000912PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000913"id(object) -> integer\n\
914\n\
915Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000916simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000917
918
Guido van Rossum79f25d91997-04-29 20:08:16 +0000919static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000920builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000921{
922 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000923 PyObject *it; /* the iterator object */
924 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000925 } sequence;
926
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000928 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000929 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000930 register int i, j;
931
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000933 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 PyErr_SetString(PyExc_TypeError,
935 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000936 return NULL;
937 }
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000940 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000941
Neal Norwitz53152a12008-02-24 02:20:25 +0000942 if (func == Py_None) {
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000943 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000944 "use list(...)", 1) < 0)
Neal Norwitz53152a12008-02-24 02:20:25 +0000945 return NULL;
946 if (n == 1) {
947 /* map(None, S) is the same as list(S). */
948 return PySequence_List(PyTuple_GetItem(args, 1));
949 }
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000950 }
951
Tim Peters4e9afdc2001-05-03 23:54:49 +0000952 /* Get space for sequence descriptors. Must NULL out the iterator
953 * pointers so that jumping to Fail_2 later doesn't see trash.
954 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
956 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000957 return NULL;
958 }
959 for (i = 0; i < n; ++i) {
960 seqs[i].it = (PyObject*)NULL;
961 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000962 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000963
Tim Peters4e9afdc2001-05-03 23:54:49 +0000964 /* Do a first pass to obtain iterators for the arguments, and set len
965 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000966 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000967 len = 0;
968 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
969 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000970 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000971
Tim Peters4e9afdc2001-05-03 23:54:49 +0000972 /* Get iterator. */
973 curseq = PyTuple_GetItem(args, i+1);
974 sqp->it = PyObject_GetIter(curseq);
975 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000977 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000978 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000979 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981 goto Fail_2;
982 }
983
Tim Peters4e9afdc2001-05-03 23:54:49 +0000984 /* Update len. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000985 curlen = _PyObject_LengthHint(curseq, 8);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000986 if (curlen > len)
987 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000988 }
989
Tim Peters4e9afdc2001-05-03 23:54:49 +0000990 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000991 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000992 goto Fail_2;
993
Tim Peters4e9afdc2001-05-03 23:54:49 +0000994 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000995 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000998
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001000 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001001 else if ((alist = PyTuple_New(n)) == NULL)
1002 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001003
1004 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001005 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 Py_INCREF(Py_None);
1007 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001008 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001009 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001010 item = PyIter_Next(sqp->it);
1011 if (item)
1012 ++numactive;
1013 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001014 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001015 Py_XDECREF(alist);
1016 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001017 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 Py_INCREF(Py_None);
1019 item = Py_None;
1020 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001021 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001023 if (alist)
1024 PyTuple_SET_ITEM(alist, j, item);
1025 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001026 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001027 }
1028
Guido van Rossum32120311995-07-10 13:52:21 +00001029 if (!alist)
1030 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001031
Tim Peters4e9afdc2001-05-03 23:54:49 +00001032 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001033 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001034 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001035 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001036
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001038 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001040 value = PyEval_CallObject(func, alist);
1041 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001042 if (value == NULL)
1043 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001044 }
1045 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001046 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001047 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001048 if (status < 0)
1049 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001050 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001051 else if (PyList_SetItem(result, i, value) < 0)
1052 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001053 }
1054
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001055 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1056 goto Fail_1;
1057
Tim Peters4e9afdc2001-05-03 23:54:49 +00001058 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001061 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001062Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001063 result = NULL;
1064Succeed:
1065 assert(seqs);
1066 for (i = 0; i < n; ++i)
1067 Py_XDECREF(seqs[i].it);
1068 PyMem_DEL(seqs);
1069 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001070}
1071
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001072PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073"map(function, sequence[, sequence, ...]) -> list\n\
1074\n\
1075Return a list of the results of applying the function to the items of\n\
1076the argument sequence(s). If more than one sequence is given, the\n\
1077function is called with an argument list consisting of the corresponding\n\
1078item of each sequence, substituting None for missing values when not all\n\
1079sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001080the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001081
1082
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083static PyObject *
Georg Brandl28e08732008-04-30 19:47:09 +00001084builtin_next(PyObject *self, PyObject *args)
1085{
1086 PyObject *it, *res;
1087 PyObject *def = NULL;
1088
1089 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1090 return NULL;
1091 if (!PyIter_Check(it)) {
1092 PyErr_Format(PyExc_TypeError,
1093 "%.200s object is not an iterator",
1094 it->ob_type->tp_name);
1095 return NULL;
1096 }
1097
1098 res = (*it->ob_type->tp_iternext)(it);
1099 if (res != NULL) {
1100 return res;
1101 } else if (def != NULL) {
1102 if (PyErr_Occurred()) {
1103 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
1104 return NULL;
1105 PyErr_Clear();
1106 }
1107 Py_INCREF(def);
1108 return def;
1109 } else if (PyErr_Occurred()) {
1110 return NULL;
1111 } else {
1112 PyErr_SetNone(PyExc_StopIteration);
1113 return NULL;
1114 }
1115}
1116
1117PyDoc_STRVAR(next_doc,
1118"next(iterator[, default])\n\
1119\n\
1120Return the next item from the iterator. If default is given and the iterator\n\
1121is exhausted, it is returned instead of raising StopIteration.");
1122
1123
1124static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001125builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001126{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 PyObject *v;
1128 PyObject *name;
1129 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001130
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001131 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001132 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001133 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001134 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001135 Py_INCREF(Py_None);
1136 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001137}
1138
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001140"setattr(object, name, value)\n\
1141\n\
1142Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001143``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001144
1145
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001147builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001148{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149 PyObject *v;
1150 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001151
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001152 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001153 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001155 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156 Py_INCREF(Py_None);
1157 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001158}
1159
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001160PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001161"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001162\n\
1163Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165
1166
Guido van Rossum79f25d91997-04-29 20:08:16 +00001167static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001168builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001169{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001170 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001171
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001173 if (x == -1)
1174 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001176}
1177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001178PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179"hash(object) -> integer\n\
1180\n\
1181Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001182the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001183
1184
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001186builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001187{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001189 PyObject *res;
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001190
1191 if ((nb = v->ob_type->tp_as_number) == NULL ||
1192 nb->nb_hex == NULL) {
1193 PyErr_SetString(PyExc_TypeError,
1194 "hex() argument can't be converted to hex");
1195 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001196 }
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001197 res = (*nb->nb_hex)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001198 if (res && !PyString_Check(res)) {
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001199 PyErr_Format(PyExc_TypeError,
1200 "__hex__ returned non-string (type %.200s)",
1201 res->ob_type->tp_name);
1202 Py_DECREF(res);
1203 return NULL;
1204 }
1205 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001206}
1207
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001208PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209"hex(number) -> string\n\
1210\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001212
1213
Tim Petersdbd9ba62000-07-09 03:09:57 +00001214static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001215
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001217builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001218{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221 PyObject *res;
1222 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001223 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001224
1225 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001226 if (line == NULL)
1227 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229 return NULL;
1230 while (*str == ' ' || *str == '\t')
1231 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001232 globals = PyEval_GetGlobals();
1233 locals = PyEval_GetLocals();
1234 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1235 if (PyDict_SetItemString(globals, "__builtins__",
1236 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001237 return NULL;
1238 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001239 cf.cf_flags = 0;
1240 PyEval_MergeCompilerFlags(&cf);
1241 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001243 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001244}
1245
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001247"input([prompt]) -> value\n\
1248\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001249Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001250
1251
Guido van Rossume8811f81997-02-14 15:48:05 +00001252static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001253builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001254{
1255 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001256 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001257 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001258 if (!PyString_CheckExact(s)) {
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001259 PyErr_SetString(PyExc_TypeError,
1260 "can't intern subclass of string");
1261 return NULL;
1262 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001263 Py_INCREF(s);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001264 PyString_InternInPlace(&s);
Guido van Rossume8811f81997-02-14 15:48:05 +00001265 return s;
1266}
1267
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001268PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001269"intern(string) -> string\n\
1270\n\
1271``Intern'' the given string. This enters the string in the (global)\n\
1272table of interned strings whose purpose is to speed up dictionary lookups.\n\
1273Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001274same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001275
1276
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001278builtin_iter(PyObject *self, PyObject *args)
1279{
1280 PyObject *v, *w = NULL;
1281
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001282 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001283 return NULL;
1284 if (w == NULL)
1285 return PyObject_GetIter(v);
1286 if (!PyCallable_Check(v)) {
1287 PyErr_SetString(PyExc_TypeError,
1288 "iter(v, w): v must be callable");
1289 return NULL;
1290 }
1291 return PyCallIter_New(v, w);
1292}
1293
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001294PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001295"iter(collection) -> iterator\n\
1296iter(callable, sentinel) -> iterator\n\
1297\n\
1298Get an iterator from an object. In the first form, the argument must\n\
1299supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001300In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001301
1302
1303static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001304builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001305{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001306 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001307
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001308 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001309 if (res < 0 && PyErr_Occurred())
1310 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001311 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001312}
1313
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001314PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001315"len(object) -> integer\n\
1316\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001317Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001318
1319
Guido van Rossum79f25d91997-04-29 20:08:16 +00001320static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001321builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001322{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001323 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001324
Guido van Rossum79f25d91997-04-29 20:08:16 +00001325 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001326 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001327 return d;
1328}
1329
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001330PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001331"locals() -> dictionary\n\
1332\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001333Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001334
1335
Guido van Rossum79f25d91997-04-29 20:08:16 +00001336static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001337min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001338{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001339 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001340 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001341
Guido van Rossum79f25d91997-04-29 20:08:16 +00001342 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001343 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001344 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001345 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001346
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001347 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1348 keyfunc = PyDict_GetItemString(kwds, "key");
1349 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001350 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001351 "%s() got an unexpected keyword argument", name);
1352 return NULL;
1353 }
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001354 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001355 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356
Tim Petersc3074532001-05-03 07:00:32 +00001357 it = PyObject_GetIter(v);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001358 if (it == NULL) {
1359 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001360 return NULL;
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001361 }
Tim Petersc3074532001-05-03 07:00:32 +00001362
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001363 maxitem = NULL; /* the result */
1364 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001365 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001366 /* get the value from the key function */
1367 if (keyfunc != NULL) {
1368 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1369 if (val == NULL)
1370 goto Fail_it_item;
1371 }
1372 /* no key function; the value is the item */
1373 else {
1374 val = item;
1375 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001376 }
Tim Petersc3074532001-05-03 07:00:32 +00001377
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001378 /* maximum value and item are unset; set them */
1379 if (maxval == NULL) {
1380 maxitem = item;
1381 maxval = val;
1382 }
1383 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001384 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001385 int cmp = PyObject_RichCompareBool(val, maxval, op);
1386 if (cmp < 0)
1387 goto Fail_it_item_and_val;
1388 else if (cmp > 0) {
1389 Py_DECREF(maxval);
1390 Py_DECREF(maxitem);
1391 maxval = val;
1392 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001393 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001394 else {
1395 Py_DECREF(item);
1396 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001397 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001398 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001399 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001400 if (PyErr_Occurred())
1401 goto Fail_it;
1402 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001403 PyErr_Format(PyExc_ValueError,
1404 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001405 assert(maxitem == NULL);
1406 }
1407 else
1408 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001409 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001410 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001411 return maxitem;
1412
1413Fail_it_item_and_val:
1414 Py_DECREF(val);
1415Fail_it_item:
1416 Py_DECREF(item);
1417Fail_it:
1418 Py_XDECREF(maxval);
1419 Py_XDECREF(maxitem);
1420 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001421 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001422 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001423}
1424
Guido van Rossum79f25d91997-04-29 20:08:16 +00001425static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001426builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001427{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001428 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001429}
1430
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001431PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001432"min(iterable[, key=func]) -> value\n\
1433min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001434\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001435With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001436With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001437
1438
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001440builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001441{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001442 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001443}
1444
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001445PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001446"max(iterable[, key=func]) -> value\n\
1447max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001448\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001449With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001450With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001451
1452
Guido van Rossum79f25d91997-04-29 20:08:16 +00001453static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001454builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001455{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001456 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001457 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001458
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001459 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1460 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001461 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001462 "oct() argument can't be converted to oct");
1463 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001464 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001465 res = (*nb->nb_oct)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001466 if (res && !PyString_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001467 PyErr_Format(PyExc_TypeError,
1468 "__oct__ returned non-string (type %.200s)",
1469 res->ob_type->tp_name);
1470 Py_DECREF(res);
1471 return NULL;
1472 }
1473 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001474}
1475
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001476PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001477"oct(number) -> string\n\
1478\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001479Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001480
1481
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001483builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1484{
1485 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1486}
1487
1488PyDoc_STRVAR(open_doc,
1489"open(name[, mode[, buffering]]) -> file object\n\
1490\n\
Skip Montanaro4e3ebe02007-12-08 14:37:43 +00001491Open a file using the file() type, returns a file object. This is the\n\
1492preferred way to open a file.");
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001493
1494
1495static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001496builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497{
Guido van Rossum09095f32000-03-10 23:00:52 +00001498 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001499 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001500
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001501 if (PyString_Check(obj)) {
1502 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001503 if (size == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001504 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001505 return PyInt_FromLong(ord);
1506 }
Christian Heimes3497f942008-05-26 12:29:14 +00001507 } else if (PyByteArray_Check(obj)) {
1508 size = PyByteArray_GET_SIZE(obj);
Christian Heimes1a6387e2008-03-26 12:49:49 +00001509 if (size == 1) {
Christian Heimes3497f942008-05-26 12:29:14 +00001510 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes1a6387e2008-03-26 12:49:49 +00001511 return PyInt_FromLong(ord);
1512 }
1513
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001514#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001515 } else if (PyUnicode_Check(obj)) {
1516 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001517 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001518 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001519 return PyInt_FromLong(ord);
1520 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001521#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001522 } else {
1523 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001524 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001525 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001526 return NULL;
1527 }
1528
Guido van Rossumad991772001-01-12 16:03:05 +00001529 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001530 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001531 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001532 size);
1533 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001534}
1535
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001536PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537"ord(c) -> integer\n\
1538\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001539Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001540
1541
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001543builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001544{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001545 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001546
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001547 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001548 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001549 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001550}
1551
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001552PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001553"pow(x, y[, z]) -> number\n\
1554\n\
1555With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001556equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001557
1558
Eric Smith7c478942008-03-18 23:45:49 +00001559static PyObject *
1560builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1561{
1562 static char *kwlist[] = {"sep", "end", "file", 0};
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001563 static PyObject *dummy_args = NULL;
1564 static PyObject *unicode_newline = NULL, *unicode_space = NULL;
1565 static PyObject *str_newline = NULL, *str_space = NULL;
1566 PyObject *newline, *space;
Eric Smith7c478942008-03-18 23:45:49 +00001567 PyObject *sep = NULL, *end = NULL, *file = NULL;
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001568 int i, err, use_unicode = 0;
Eric Smith7c478942008-03-18 23:45:49 +00001569
1570 if (dummy_args == NULL) {
1571 if (!(dummy_args = PyTuple_New(0)))
1572 return NULL;
1573 }
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001574 if (str_newline == NULL) {
1575 str_newline = PyString_FromString("\n");
1576 if (str_newline == NULL)
1577 return NULL;
1578 str_space = PyString_FromString(" ");
1579 if (str_space == NULL) {
1580 Py_CLEAR(str_newline);
1581 return NULL;
1582 }
1583 unicode_newline = PyUnicode_FromString("\n");
1584 if (unicode_newline == NULL) {
1585 Py_CLEAR(str_newline);
1586 Py_CLEAR(str_space);
1587 return NULL;
1588 }
1589 unicode_space = PyUnicode_FromString(" ");
1590 if (unicode_space == NULL) {
1591 Py_CLEAR(str_newline);
1592 Py_CLEAR(str_space);
1593 Py_CLEAR(unicode_space);
1594 return NULL;
1595 }
1596 }
Eric Smith7c478942008-03-18 23:45:49 +00001597 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1598 kwlist, &sep, &end, &file))
1599 return NULL;
1600 if (file == NULL || file == Py_None) {
1601 file = PySys_GetObject("stdout");
1602 /* sys.stdout may be None when FILE* stdout isn't connected */
1603 if (file == Py_None)
1604 Py_RETURN_NONE;
1605 }
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001606 if (sep == Py_None) {
1607 sep = NULL;
Eric Smith7c478942008-03-18 23:45:49 +00001608 }
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001609 else if (sep) {
1610 if (PyUnicode_Check(sep)) {
1611 use_unicode = 1;
1612 }
1613 else if (!PyString_Check(sep)) {
1614 PyErr_Format(PyExc_TypeError,
1615 "sep must be None, str or unicode, not %.200s",
1616 sep->ob_type->tp_name);
1617 return NULL;
1618 }
1619 }
1620 if (end == Py_None)
1621 end = NULL;
1622 else if (end) {
1623 if (PyUnicode_Check(end)) {
1624 use_unicode = 1;
1625 }
1626 else if (!PyString_Check(end)) {
1627 PyErr_Format(PyExc_TypeError,
1628 "end must be None, str or unicode, not %.200s",
1629 end->ob_type->tp_name);
1630 return NULL;
1631 }
1632 }
1633
1634 if (!use_unicode) {
1635 for (i = 0; i < PyTuple_Size(args); i++) {
1636 if (PyUnicode_Check(PyTuple_GET_ITEM(args, i))) {
1637 use_unicode = 1;
1638 break;
1639 }
1640 }
1641 }
1642 if (use_unicode) {
1643 newline = unicode_newline;
1644 space = unicode_space;
1645 }
1646 else {
1647 newline = str_newline;
1648 space = str_space;
Eric Smith7c478942008-03-18 23:45:49 +00001649 }
1650
1651 for (i = 0; i < PyTuple_Size(args); i++) {
1652 if (i > 0) {
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001653 if (sep == NULL)
1654 err = PyFile_WriteObject(space, file,
1655 Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001656 else
1657 err = PyFile_WriteObject(sep, file,
1658 Py_PRINT_RAW);
1659 if (err)
1660 return NULL;
1661 }
1662 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1663 Py_PRINT_RAW);
1664 if (err)
1665 return NULL;
1666 }
1667
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001668 if (end == NULL)
1669 err = PyFile_WriteObject(newline, file, Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001670 else
1671 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1672 if (err)
1673 return NULL;
1674
1675 Py_RETURN_NONE;
1676}
1677
1678PyDoc_STRVAR(print_doc,
1679"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
1680\n\
1681Prints the values to a stream, or to sys.stdout by default.\n\
1682Optional keyword arguments:\n\
1683file: a file-like object (stream); defaults to the current sys.stdout.\n\
1684sep: string inserted between values, default a space.\n\
1685end: string appended after the last value, default a newline.");
1686
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001687
1688/* Return number of items in range (lo, hi, step), when arguments are
1689 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1690 * & only if the true value is too large to fit in a signed long.
1691 * Arguments MUST return 1 with either PyInt_Check() or
1692 * PyLong_Check(). Return -1 when there is an error.
1693 */
1694static long
1695get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1696{
1697 /* -------------------------------------------------------------
1698 Algorithm is equal to that of get_len_of_range(), but it operates
1699 on PyObjects (which are assumed to be PyLong or PyInt objects).
1700 ---------------------------------------------------------------*/
1701 long n;
1702 PyObject *diff = NULL;
1703 PyObject *one = NULL;
1704 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1705 /* holds sub-expression evaluations */
1706
1707 /* if (lo >= hi), return length of 0. */
1708 if (PyObject_Compare(lo, hi) >= 0)
1709 return 0;
1710
1711 if ((one = PyLong_FromLong(1L)) == NULL)
1712 goto Fail;
1713
1714 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1715 goto Fail;
1716
1717 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1718 goto Fail;
1719
1720 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1721 goto Fail;
1722
1723 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1724 goto Fail;
1725
1726 n = PyLong_AsLong(tmp3);
1727 if (PyErr_Occurred()) { /* Check for Overflow */
1728 PyErr_Clear();
1729 goto Fail;
1730 }
1731
1732 Py_DECREF(tmp3);
1733 Py_DECREF(tmp2);
1734 Py_DECREF(diff);
1735 Py_DECREF(tmp1);
1736 Py_DECREF(one);
1737 return n;
1738
1739 Fail:
1740 Py_XDECREF(tmp3);
1741 Py_XDECREF(tmp2);
1742 Py_XDECREF(diff);
1743 Py_XDECREF(tmp1);
1744 Py_XDECREF(one);
1745 return -1;
1746}
1747
1748/* An extension of builtin_range() that handles the case when PyLong
1749 * arguments are given. */
1750static PyObject *
1751handle_range_longs(PyObject *self, PyObject *args)
1752{
1753 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001754 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001755 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001756
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001757 PyObject *curnum = NULL;
1758 PyObject *v = NULL;
1759 long bign;
1760 int i, n;
1761 int cmp_result;
1762
Tim Peters874e1f72003-04-13 22:13:08 +00001763 PyObject *zero = PyLong_FromLong(0);
1764
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001765 if (zero == NULL)
1766 return NULL;
1767
Tim Peters874e1f72003-04-13 22:13:08 +00001768 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1769 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001770 return NULL;
1771 }
1772
Tim Peters874e1f72003-04-13 22:13:08 +00001773 /* Figure out which way we were called, supply defaults, and be
1774 * sure to incref everything so that the decrefs at the end
1775 * are correct.
1776 */
1777 assert(ilow != NULL);
1778 if (ihigh == NULL) {
1779 /* only 1 arg -- it's the upper limit */
1780 ihigh = ilow;
1781 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001782 }
Tim Peters874e1f72003-04-13 22:13:08 +00001783 assert(ihigh != NULL);
1784 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001785
Tim Peters874e1f72003-04-13 22:13:08 +00001786 /* ihigh correct now; do ilow */
1787 if (ilow == NULL)
1788 ilow = zero;
1789 Py_INCREF(ilow);
1790
1791 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001792 if (istep == NULL) {
1793 istep = PyLong_FromLong(1L);
1794 if (istep == NULL)
1795 goto Fail;
1796 }
1797 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001798 Py_INCREF(istep);
1799 }
1800
Tim Peters874e1f72003-04-13 22:13:08 +00001801 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001802 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001803 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001804 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001805 goto Fail;
1806 }
1807
Tim Peters874e1f72003-04-13 22:13:08 +00001808 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001809 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001810 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001811 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001812 goto Fail;
1813 }
1814
1815 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001816 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001817 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001818 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001819 goto Fail;
1820 }
1821
1822 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1823 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001824 if (cmp_result == 0) {
1825 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001826 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001827 goto Fail;
1828 }
1829
1830 if (cmp_result > 0)
1831 bign = get_len_of_range_longs(ilow, ihigh, istep);
1832 else {
1833 PyObject *neg_istep = PyNumber_Negative(istep);
1834 if (neg_istep == NULL)
1835 goto Fail;
1836 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1837 Py_DECREF(neg_istep);
1838 }
1839
1840 n = (int)bign;
1841 if (bign < 0 || (long)n != bign) {
1842 PyErr_SetString(PyExc_OverflowError,
1843 "range() result has too many items");
1844 goto Fail;
1845 }
1846
1847 v = PyList_New(n);
1848 if (v == NULL)
1849 goto Fail;
1850
1851 curnum = ilow;
1852 Py_INCREF(curnum);
1853
1854 for (i = 0; i < n; i++) {
1855 PyObject *w = PyNumber_Long(curnum);
1856 PyObject *tmp_num;
1857 if (w == NULL)
1858 goto Fail;
1859
1860 PyList_SET_ITEM(v, i, w);
1861
1862 tmp_num = PyNumber_Add(curnum, istep);
1863 if (tmp_num == NULL)
1864 goto Fail;
1865
1866 Py_DECREF(curnum);
1867 curnum = tmp_num;
1868 }
Tim Peters874e1f72003-04-13 22:13:08 +00001869 Py_DECREF(ilow);
1870 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001871 Py_DECREF(istep);
1872 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001873 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001874 return v;
1875
1876 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001877 Py_DECREF(ilow);
1878 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001879 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001880 Py_DECREF(zero);
1881 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001882 Py_XDECREF(v);
1883 return NULL;
1884}
1885
Guido van Rossum124eff01999-02-23 16:11:01 +00001886/* Return number of items in range/xrange (lo, hi, step). step > 0
1887 * required. Return a value < 0 if & only if the true value is too
1888 * large to fit in a signed long.
1889 */
1890static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001891get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001892{
1893 /* -------------------------------------------------------------
1894 If lo >= hi, the range is empty.
1895 Else if n values are in the range, the last one is
1896 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1897 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1898 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1899 the RHS is non-negative and so truncation is the same as the
1900 floor. Letting M be the largest positive long, the worst case
1901 for the RHS numerator is hi=M, lo=-M-1, and then
1902 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1903 precision to compute the RHS exactly.
1904 ---------------------------------------------------------------*/
1905 long n = 0;
1906 if (lo < hi) {
1907 unsigned long uhi = (unsigned long)hi;
1908 unsigned long ulo = (unsigned long)lo;
1909 unsigned long diff = uhi - ulo - 1;
1910 n = (long)(diff / (unsigned long)step + 1);
1911 }
1912 return n;
1913}
1914
Guido van Rossum79f25d91997-04-29 20:08:16 +00001915static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001916builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001917{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001918 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001919 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001920 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001921
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001923
Guido van Rossum79f25d91997-04-29 20:08:16 +00001924 if (PyTuple_Size(args) <= 1) {
1925 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001926 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001927 &ihigh)) {
1928 PyErr_Clear();
1929 return handle_range_longs(self, args);
1930 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001931 }
1932 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001934 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001935 &ilow, &ihigh, &istep)) {
1936 PyErr_Clear();
1937 return handle_range_longs(self, args);
1938 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001939 }
1940 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001941 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001942 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001943 return NULL;
1944 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001945 if (istep > 0)
1946 bign = get_len_of_range(ilow, ihigh, istep);
1947 else
1948 bign = get_len_of_range(ihigh, ilow, -istep);
1949 n = (int)bign;
1950 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001951 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001952 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001953 return NULL;
1954 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001956 if (v == NULL)
1957 return NULL;
1958 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001959 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001960 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001962 return NULL;
1963 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001964 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001965 ilow += istep;
1966 }
1967 return v;
1968}
1969
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001970PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001971"range([start,] stop[, step]) -> list of integers\n\
1972\n\
1973Return a list containing an arithmetic progression of integers.\n\
1974range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1975When step is given, it specifies the increment (or decrement).\n\
1976For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001977These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001978
1979
Guido van Rossum79f25d91997-04-29 20:08:16 +00001980static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001981builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001982{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001983 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001984 PyObject *fin = PySys_GetObject("stdin");
1985 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001986
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001987 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001988 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001989
1990 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001991 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001992 return NULL;
1993 }
1994 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001995 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001996 return NULL;
1997 }
1998 if (PyFile_SoftSpace(fout, 0)) {
1999 if (PyFile_WriteString(" ", fout) != 0)
2000 return NULL;
2001 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00002002 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002003 && isatty(fileno(PyFile_AsFile(fin)))
2004 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002005 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00002006 char *prompt;
2007 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002008 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00002009 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002010 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00002011 if (po == NULL)
2012 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002013 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00002014 if (prompt == NULL)
2015 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00002016 }
2017 else {
2018 po = NULL;
2019 prompt = "";
2020 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00002021 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002022 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002023 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00002024 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00002025 if (!PyErr_Occurred())
2026 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00002027 return NULL;
2028 }
2029 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002030 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00002031 result = NULL;
2032 }
2033 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00002034 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00002035 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002036 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002037 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00002038 result = NULL;
2039 }
2040 else {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002041 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00002042 }
Guido van Rossum872537c1995-07-07 22:43:42 +00002043 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00002044 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00002045 return result;
2046 }
Guido van Rossum90933611991-06-07 16:10:43 +00002047 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002048 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00002049 return NULL;
2050 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002051 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002052}
2053
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002054PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002055"raw_input([prompt]) -> string\n\
2056\n\
2057Read a string from standard input. The trailing newline is stripped.\n\
2058If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
2059On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002060is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002061
2062
Guido van Rossum79f25d91997-04-29 20:08:16 +00002063static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002064builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002065{
Benjamin Peterson08336e32008-08-18 02:01:21 +00002066 static PyObject *functools_reduce = NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002067
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002068 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002069 "use functools.reduce()", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002070 return NULL;
2071
Benjamin Peterson08336e32008-08-18 02:01:21 +00002072 if (functools_reduce == NULL) {
2073 PyObject *functools = PyImport_ImportModule("functools");
2074 if (functools == NULL)
2075 return NULL;
2076 functools_reduce = PyObject_GetAttrString(functools, "reduce");
2077 Py_DECREF(functools);
2078 if (functools_reduce == NULL)
2079 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002080 }
Benjamin Peterson08336e32008-08-18 02:01:21 +00002081 return PyObject_Call(functools_reduce, args, NULL);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002082}
2083
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002084PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002085"reduce(function, sequence[, initial]) -> value\n\
2086\n\
2087Apply a function of two arguments cumulatively to the items of a sequence,\n\
2088from left to right, so as to reduce the sequence to a single value.\n\
2089For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
2090((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
2091of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002092sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002093
2094
Guido van Rossum79f25d91997-04-29 20:08:16 +00002095static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002096builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002097{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002098 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002099 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002100 return NULL;
2101
Guido van Rossum79f25d91997-04-29 20:08:16 +00002102 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002103}
2104
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002105PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002106"reload(module) -> module\n\
2107\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002108Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002109
2110
Guido van Rossum79f25d91997-04-29 20:08:16 +00002111static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002112builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002113{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002114 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002115}
2116
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002117PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002118"repr(object) -> string\n\
2119\n\
2120Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002121For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002122
2123
Guido van Rossum79f25d91997-04-29 20:08:16 +00002124static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00002125builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002126{
Mark Dickinsonf2637242009-11-09 17:45:40 +00002127 double number, abs_number, abs_result;
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002128 double f;
2129 int ndigits = 0;
2130 int i;
Georg Brandlccadf842006-03-31 18:54:53 +00002131 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002132
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002133 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
2134 kwlist, &number, &ndigits))
2135 return NULL;
2136 f = 1.0;
2137 i = abs(ndigits);
2138 while (--i >= 0)
2139 f = f*10.0;
2140 if (ndigits < 0)
2141 number /= f;
2142 else
2143 number *= f;
Mark Dickinsonf2637242009-11-09 17:45:40 +00002144
2145 /* round `number` to nearest integer, rounding halves away from zero */
2146 abs_number = fabs(number);
2147 abs_result = floor(abs_number);
2148 if (abs_number - abs_result >= 0.5)
2149 abs_result += 1.0;
2150 number = copysign(abs_result, number);
2151
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002152 if (ndigits < 0)
2153 number *= f;
2154 else
2155 number /= f;
2156 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002157}
2158
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002159PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002160"round(number[, ndigits]) -> floating point number\n\
2161\n\
2162Round a number to a given precision in decimal digits (default 0 digits).\n\
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002163This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002164
Raymond Hettinger64958a12003-12-17 20:43:33 +00002165static PyObject *
2166builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2167{
2168 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2169 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002170 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002171 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002172
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002173 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002174 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2175 kwlist, &seq, &compare, &keyfunc, &reverse))
2176 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002177
2178 newlist = PySequence_List(seq);
2179 if (newlist == NULL)
2180 return NULL;
2181
2182 callable = PyObject_GetAttrString(newlist, "sort");
2183 if (callable == NULL) {
2184 Py_DECREF(newlist);
2185 return NULL;
2186 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002187
Raymond Hettinger64958a12003-12-17 20:43:33 +00002188 newargs = PyTuple_GetSlice(args, 1, 4);
2189 if (newargs == NULL) {
2190 Py_DECREF(newlist);
2191 Py_DECREF(callable);
2192 return NULL;
2193 }
2194
2195 v = PyObject_Call(callable, newargs, kwds);
2196 Py_DECREF(newargs);
2197 Py_DECREF(callable);
2198 if (v == NULL) {
2199 Py_DECREF(newlist);
2200 return NULL;
2201 }
2202 Py_DECREF(v);
2203 return newlist;
2204}
2205
2206PyDoc_STRVAR(sorted_doc,
2207"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002208
Guido van Rossum79f25d91997-04-29 20:08:16 +00002209static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002210builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002211{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002212 PyObject *v = NULL;
2213 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002214
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002215 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002216 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002217 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002218 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002219 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002220 if (!PyErr_Occurred())
2221 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002222 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002223 }
2224 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002225 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002226 }
2227 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002228 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002229 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002230 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002231 "vars() argument must have __dict__ attribute");
2232 return NULL;
2233 }
2234 }
2235 return d;
2236}
2237
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002238PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002239"vars([object]) -> dictionary\n\
2240\n\
2241Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002242With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002243
Alex Martellia70b1912003-04-22 08:12:33 +00002244
2245static PyObject*
2246builtin_sum(PyObject *self, PyObject *args)
2247{
2248 PyObject *seq;
2249 PyObject *result = NULL;
2250 PyObject *temp, *item, *iter;
2251
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002252 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002253 return NULL;
2254
2255 iter = PyObject_GetIter(seq);
2256 if (iter == NULL)
2257 return NULL;
2258
2259 if (result == NULL) {
2260 result = PyInt_FromLong(0);
2261 if (result == NULL) {
2262 Py_DECREF(iter);
2263 return NULL;
2264 }
2265 } else {
2266 /* reject string values for 'start' parameter */
2267 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2268 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002269 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002270 Py_DECREF(iter);
2271 return NULL;
2272 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002273 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002274 }
2275
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002276#ifndef SLOW_SUM
2277 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2278 Assumes all inputs are the same type. If the assumption fails, default
2279 to the more general routine.
2280 */
2281 if (PyInt_CheckExact(result)) {
2282 long i_result = PyInt_AS_LONG(result);
2283 Py_DECREF(result);
2284 result = NULL;
2285 while(result == NULL) {
2286 item = PyIter_Next(iter);
2287 if (item == NULL) {
2288 Py_DECREF(iter);
2289 if (PyErr_Occurred())
2290 return NULL;
2291 return PyInt_FromLong(i_result);
2292 }
2293 if (PyInt_CheckExact(item)) {
2294 long b = PyInt_AS_LONG(item);
2295 long x = i_result + b;
2296 if ((x^i_result) >= 0 || (x^b) >= 0) {
2297 i_result = x;
2298 Py_DECREF(item);
2299 continue;
2300 }
2301 }
2302 /* Either overflowed or is not an int. Restore real objects and process normally */
2303 result = PyInt_FromLong(i_result);
2304 temp = PyNumber_Add(result, item);
2305 Py_DECREF(result);
2306 Py_DECREF(item);
2307 result = temp;
2308 if (result == NULL) {
2309 Py_DECREF(iter);
2310 return NULL;
2311 }
2312 }
2313 }
2314
2315 if (PyFloat_CheckExact(result)) {
2316 double f_result = PyFloat_AS_DOUBLE(result);
2317 Py_DECREF(result);
2318 result = NULL;
2319 while(result == NULL) {
2320 item = PyIter_Next(iter);
2321 if (item == NULL) {
2322 Py_DECREF(iter);
2323 if (PyErr_Occurred())
2324 return NULL;
2325 return PyFloat_FromDouble(f_result);
2326 }
2327 if (PyFloat_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002328 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002329 f_result += PyFloat_AS_DOUBLE(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002330 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002331 Py_DECREF(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002332 continue;
2333 }
2334 if (PyInt_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002335 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002336 f_result += (double)PyInt_AS_LONG(item);
2337 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002338 Py_DECREF(item);
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002339 continue;
2340 }
2341 result = PyFloat_FromDouble(f_result);
2342 temp = PyNumber_Add(result, item);
2343 Py_DECREF(result);
2344 Py_DECREF(item);
2345 result = temp;
2346 if (result == NULL) {
2347 Py_DECREF(iter);
2348 return NULL;
2349 }
2350 }
2351 }
2352#endif
2353
Alex Martellia70b1912003-04-22 08:12:33 +00002354 for(;;) {
2355 item = PyIter_Next(iter);
2356 if (item == NULL) {
2357 /* error, or end-of-sequence */
2358 if (PyErr_Occurred()) {
2359 Py_DECREF(result);
2360 result = NULL;
2361 }
2362 break;
2363 }
Alex Martellia253e182003-10-25 23:24:14 +00002364 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002365 Py_DECREF(result);
2366 Py_DECREF(item);
2367 result = temp;
2368 if (result == NULL)
2369 break;
2370 }
2371 Py_DECREF(iter);
2372 return result;
2373}
2374
2375PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002376"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002377\n\
2378Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002379of parameter 'start' (which defaults to 0). When the sequence is\n\
2380empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002381
2382
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002383static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002384builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002385{
2386 PyObject *inst;
2387 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002388 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002389
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002390 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002391 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002392
Guido van Rossum823649d2001-03-21 18:40:58 +00002393 retval = PyObject_IsInstance(inst, cls);
2394 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002395 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002396 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002397}
2398
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002399PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002400"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002401\n\
2402Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002403With a type as second argument, return whether that is the object's type.\n\
2404The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002405isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002406
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002407
2408static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002409builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002410{
2411 PyObject *derived;
2412 PyObject *cls;
2413 int retval;
2414
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002415 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002416 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002417
Guido van Rossum823649d2001-03-21 18:40:58 +00002418 retval = PyObject_IsSubclass(derived, cls);
2419 if (retval < 0)
2420 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002421 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002422}
2423
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002424PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002425"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002426\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002427Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2428When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2429is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002430
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002431
Barry Warsawbd599b52000-08-03 15:45:29 +00002432static PyObject*
2433builtin_zip(PyObject *self, PyObject *args)
2434{
2435 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002436 const Py_ssize_t itemsize = PySequence_Length(args);
2437 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002438 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002439 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002440
Raymond Hettingereaef6152003-08-02 07:42:57 +00002441 if (itemsize == 0)
2442 return PyList_New(0);
2443
Barry Warsawbd599b52000-08-03 15:45:29 +00002444 /* args must be a tuple */
2445 assert(PyTuple_Check(args));
2446
Tim Peters39a86c22002-05-12 07:19:38 +00002447 /* Guess at result length: the shortest of the input lengths.
2448 If some argument refuses to say, we refuse to guess too, lest
2449 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002450 len = -1; /* unknown */
2451 for (i = 0; i < itemsize; ++i) {
2452 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger4e2f7142007-12-06 00:56:53 +00002453 Py_ssize_t thislen = _PyObject_LengthHint(item, -1);
Tim Peters39a86c22002-05-12 07:19:38 +00002454 if (thislen < 0) {
Tim Peters39a86c22002-05-12 07:19:38 +00002455 len = -1;
2456 break;
2457 }
Tim Peters67d687a2002-04-29 21:27:32 +00002458 else if (len < 0 || thislen < len)
2459 len = thislen;
2460 }
2461
Tim Peters8572b4f2001-05-06 01:05:02 +00002462 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002463 if (len < 0)
2464 len = 10; /* arbitrary */
2465 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002466 return NULL;
2467
Tim Peters8572b4f2001-05-06 01:05:02 +00002468 /* obtain iterators */
2469 itlist = PyTuple_New(itemsize);
2470 if (itlist == NULL)
2471 goto Fail_ret;
2472 for (i = 0; i < itemsize; ++i) {
2473 PyObject *item = PyTuple_GET_ITEM(args, i);
2474 PyObject *it = PyObject_GetIter(item);
2475 if (it == NULL) {
2476 if (PyErr_ExceptionMatches(PyExc_TypeError))
2477 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00002478 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00002479 i+1);
2480 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002481 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002482 PyTuple_SET_ITEM(itlist, i, it);
2483 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002484
Tim Peters8572b4f2001-05-06 01:05:02 +00002485 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002486 for (i = 0; ; ++i) {
2487 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002488 PyObject *next = PyTuple_New(itemsize);
2489 if (!next)
2490 goto Fail_ret_itlist;
2491
Tim Peters67d687a2002-04-29 21:27:32 +00002492 for (j = 0; j < itemsize; j++) {
2493 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002494 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002495 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002496 if (PyErr_Occurred()) {
2497 Py_DECREF(ret);
2498 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002499 }
2500 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002501 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002502 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002503 }
Tim Peters67d687a2002-04-29 21:27:32 +00002504 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002505 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002506
Tim Peters67d687a2002-04-29 21:27:32 +00002507 if (i < len)
2508 PyList_SET_ITEM(ret, i, next);
2509 else {
2510 int status = PyList_Append(ret, next);
2511 Py_DECREF(next);
2512 ++len;
2513 if (status < 0)
2514 goto Fail_ret_itlist;
2515 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002516 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002517
Tim Peters67d687a2002-04-29 21:27:32 +00002518Done:
2519 if (ret != NULL && i < len) {
2520 /* The list is too big. */
2521 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2522 return NULL;
2523 }
2524 return ret;
2525
Tim Peters8572b4f2001-05-06 01:05:02 +00002526Fail_ret_itlist:
2527 Py_DECREF(itlist);
2528Fail_ret:
2529 Py_DECREF(ret);
2530 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002531}
2532
2533
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002534PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002535"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2536\n\
2537Return a list of tuples, where each tuple contains the i-th element\n\
2538from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002539in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002540
2541
Guido van Rossum79f25d91997-04-29 20:08:16 +00002542static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002543 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002544 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002545 {"all", builtin_all, METH_O, all_doc},
2546 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002547 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Eric Smith3cd81942008-02-22 16:30:22 +00002548 {"bin", builtin_bin, METH_O, bin_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002549 {"callable", builtin_callable, METH_O, callable_doc},
2550 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2551 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2552 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
Georg Brandl5240d742007-03-13 20:46:32 +00002553 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002554 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2555 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2556 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2557 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2558 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2559 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smitha9f7d622008-02-17 19:46:49 +00002560 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002561 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2562 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2563 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2564 {"hash", builtin_hash, METH_O, hash_doc},
2565 {"hex", builtin_hex, METH_O, hex_doc},
2566 {"id", builtin_id, METH_O, id_doc},
2567 {"input", builtin_input, METH_VARARGS, input_doc},
2568 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2569 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2570 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2571 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2572 {"len", builtin_len, METH_O, len_doc},
2573 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2574 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002575 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2576 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandl28e08732008-04-30 19:47:09 +00002577 {"next", builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002578 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002579 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002580 {"ord", builtin_ord, METH_O, ord_doc},
2581 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Eric Smith7c478942008-03-18 23:45:49 +00002582 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002583 {"range", builtin_range, METH_VARARGS, range_doc},
2584 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2585 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2586 {"reload", builtin_reload, METH_O, reload_doc},
2587 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002588 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002589 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002590 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002591 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002592#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002593 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002594#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002595 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002596 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002597 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002598};
2599
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002600PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002601"Built-in functions, exceptions, and other objects.\n\
2602\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002603Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002604
Guido van Rossum25ce5661997-08-02 03:10:38 +00002605PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002606_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002607{
Fred Drake5550de32000-06-20 04:54:19 +00002608 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002609 mod = Py_InitModule4("__builtin__", builtin_methods,
2610 builtin_doc, (PyObject *)NULL,
2611 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002612 if (mod == NULL)
2613 return NULL;
2614 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002615
Tim Peters7571a0f2003-03-23 17:52:28 +00002616#ifdef Py_TRACE_REFS
2617 /* __builtin__ exposes a number of statically allocated objects
2618 * that, before this code was added in 2.3, never showed up in
2619 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2620 * result, programs leaking references to None and False (etc)
2621 * couldn't be diagnosed by examining sys.getobjects(0).
2622 */
2623#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2624#else
2625#define ADD_TO_ALL(OBJECT) (void)0
2626#endif
2627
Tim Peters4b7625e2001-09-13 21:37:17 +00002628#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002629 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2630 return NULL; \
2631 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002632
2633 SETBUILTIN("None", Py_None);
2634 SETBUILTIN("Ellipsis", Py_Ellipsis);
2635 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002636 SETBUILTIN("False", Py_False);
2637 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002638 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002639 SETBUILTIN("bool", &PyBool_Type);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +00002640 /* SETBUILTIN("memoryview", &PyMemoryView_Type); */
Christian Heimes3497f942008-05-26 12:29:14 +00002641 SETBUILTIN("bytearray", &PyByteArray_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002642 SETBUILTIN("bytes", &PyString_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002643 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002644 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002645#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002646 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002647#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002648 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002649 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002650 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002651 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002652 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002653 SETBUILTIN("property", &PyProperty_Type);
2654 SETBUILTIN("int", &PyInt_Type);
2655 SETBUILTIN("list", &PyList_Type);
2656 SETBUILTIN("long", &PyLong_Type);
2657 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002658 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002659 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002660 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002661 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002662 SETBUILTIN("str", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002663 SETBUILTIN("super", &PySuper_Type);
2664 SETBUILTIN("tuple", &PyTuple_Type);
2665 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002666 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002667#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002668 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002669#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002670 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002671 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2672 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002673 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002674 }
2675 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002676
Guido van Rossum25ce5661997-08-02 03:10:38 +00002677 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002678#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002679#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002680}
2681
Guido van Rossume77a7571993-11-03 15:01:26 +00002682/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002683
Guido van Rossum79f25d91997-04-29 20:08:16 +00002684static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002685filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002686{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002687 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002688 Py_ssize_t i, j;
2689 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002690
Guido van Rossumb7b45621995-08-04 04:07:45 +00002691 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002692 if (PyTuple_CheckExact(tuple))
2693 Py_INCREF(tuple);
2694 else
2695 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002696 return tuple;
2697 }
2698
Guido van Rossum79f25d91997-04-29 20:08:16 +00002699 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002700 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002701
Guido van Rossum12d12c51993-10-26 17:58:25 +00002702 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002703 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002704 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002705
Walter Dörwald8dd19322003-02-10 17:36:40 +00002706 if (tuple->ob_type->tp_as_sequence &&
2707 tuple->ob_type->tp_as_sequence->sq_item) {
2708 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002709 if (item == NULL)
2710 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002711 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002712 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002713 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002714 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002715 if (func == Py_None) {
2716 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002717 good = item;
2718 }
2719 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002720 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002721 if (arg == NULL) {
2722 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002723 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002724 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002725 good = PyEval_CallObject(func, arg);
2726 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002727 if (good == NULL) {
2728 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002729 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002730 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002731 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002732 ok = PyObject_IsTrue(good);
2733 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002734 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002735 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002736 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002737 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002738 else
2739 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002740 }
2741
Tim Peters4324aa32001-05-28 22:30:08 +00002742 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002743 return NULL;
2744
Guido van Rossum12d12c51993-10-26 17:58:25 +00002745 return result;
2746
Guido van Rossum12d12c51993-10-26 17:58:25 +00002747Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002748 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002749 return NULL;
2750}
2751
2752
Guido van Rossume77a7571993-11-03 15:01:26 +00002753/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002754
Guido van Rossum79f25d91997-04-29 20:08:16 +00002755static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002756filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002757{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002758 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002759 Py_ssize_t i, j;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002760 Py_ssize_t len = PyString_Size(strobj);
Martin v. Löwis18e16552006-02-15 17:27:45 +00002761 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002762
Guido van Rossum79f25d91997-04-29 20:08:16 +00002763 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002764 /* If it's a real string we can return the original,
2765 * as no character is ever false and __getitem__
2766 * does return this character. If it's a subclass
2767 * we must go through the __getitem__ loop */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002768 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002769 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002770 return strobj;
2771 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002772 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002773 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002774 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002775
Guido van Rossum12d12c51993-10-26 17:58:25 +00002776 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002777 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002778 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002779
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002780 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2781 if (item == NULL)
2782 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002783 if (func==Py_None) {
2784 ok = 1;
2785 } else {
2786 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002787 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002788 if (arg == NULL) {
2789 Py_DECREF(item);
2790 goto Fail_1;
2791 }
2792 good = PyEval_CallObject(func, arg);
2793 Py_DECREF(arg);
2794 if (good == NULL) {
2795 Py_DECREF(item);
2796 goto Fail_1;
2797 }
2798 ok = PyObject_IsTrue(good);
2799 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002800 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002801 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002802 Py_ssize_t reslen;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002803 if (!PyString_Check(item)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002804 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2805 " __getitem__ returned different type");
2806 Py_DECREF(item);
2807 goto Fail_1;
2808 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002809 reslen = PyString_GET_SIZE(item);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002810 if (reslen == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002811 PyString_AS_STRING(result)[j++] =
2812 PyString_AS_STRING(item)[0];
Walter Dörwald903f1e02003-02-04 16:28:00 +00002813 } else {
2814 /* do we need more space? */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002815 Py_ssize_t need = j;
2816
2817 /* calculate space requirements while checking for overflow */
2818 if (need > PY_SSIZE_T_MAX - reslen) {
2819 Py_DECREF(item);
2820 goto Fail_1;
2821 }
2822
2823 need += reslen;
2824
2825 if (need > PY_SSIZE_T_MAX - len) {
2826 Py_DECREF(item);
2827 goto Fail_1;
2828 }
2829
2830 need += len;
2831
2832 if (need <= i) {
2833 Py_DECREF(item);
2834 goto Fail_1;
2835 }
2836
2837 need = need - i - 1;
2838
2839 assert(need >= 0);
2840 assert(outlen >= 0);
2841
Walter Dörwald903f1e02003-02-04 16:28:00 +00002842 if (need > outlen) {
2843 /* overallocate, to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002844 if (outlen > PY_SSIZE_T_MAX / 2) {
2845 Py_DECREF(item);
2846 return NULL;
2847 }
2848
2849 if (need<2*outlen) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002850 need = 2*outlen;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002851 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002852 if (_PyString_Resize(&result, need)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002853 Py_DECREF(item);
2854 return NULL;
2855 }
2856 outlen = need;
2857 }
2858 memcpy(
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002859 PyString_AS_STRING(result) + j,
2860 PyString_AS_STRING(item),
Walter Dörwald903f1e02003-02-04 16:28:00 +00002861 reslen
2862 );
2863 j += reslen;
2864 }
2865 }
Tim Peters388ed082001-04-07 20:34:48 +00002866 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002867 }
2868
Walter Dörwald903f1e02003-02-04 16:28:00 +00002869 if (j < outlen)
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002870 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002871
Guido van Rossum12d12c51993-10-26 17:58:25 +00002872 return result;
2873
Guido van Rossum12d12c51993-10-26 17:58:25 +00002874Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002875 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002876 return NULL;
2877}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002878
2879#ifdef Py_USING_UNICODE
2880/* Helper for filter(): filter a Unicode object through a function */
2881
2882static PyObject *
2883filterunicode(PyObject *func, PyObject *strobj)
2884{
2885 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002886 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002887 Py_ssize_t len = PyUnicode_GetSize(strobj);
2888 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002889
2890 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002891 /* If it's a real string we can return the original,
2892 * as no character is ever false and __getitem__
2893 * does return this character. If it's a subclass
2894 * we must go through the __getitem__ loop */
2895 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002896 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002897 return strobj;
2898 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002899 }
2900 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2901 return NULL;
2902
2903 for (i = j = 0; i < len; ++i) {
2904 PyObject *item, *arg, *good;
2905 int ok;
2906
2907 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2908 if (item == NULL)
2909 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002910 if (func == Py_None) {
2911 ok = 1;
2912 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002913 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002914 if (arg == NULL) {
2915 Py_DECREF(item);
2916 goto Fail_1;
2917 }
2918 good = PyEval_CallObject(func, arg);
2919 Py_DECREF(arg);
2920 if (good == NULL) {
2921 Py_DECREF(item);
2922 goto Fail_1;
2923 }
2924 ok = PyObject_IsTrue(good);
2925 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002926 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002927 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002928 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002929 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002930 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002931 "can't filter unicode to unicode:"
2932 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002933 Py_DECREF(item);
2934 goto Fail_1;
2935 }
2936 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002937 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002938 PyUnicode_AS_UNICODE(result)[j++] =
2939 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002940 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002941 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002942 Py_ssize_t need = j + reslen + len - i - 1;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002943
2944 /* check that didnt overflow */
2945 if ((j > PY_SSIZE_T_MAX - reslen) ||
2946 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
2947 ((j + reslen + len) < i) ||
2948 ((j + reslen + len - i) <= 0)) {
2949 Py_DECREF(item);
2950 return NULL;
2951 }
2952
2953 assert(need >= 0);
2954 assert(outlen >= 0);
2955
Walter Dörwald903f1e02003-02-04 16:28:00 +00002956 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002957 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002958 to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002959 if (need < 2 * outlen) {
2960 if (outlen > PY_SSIZE_T_MAX / 2) {
2961 Py_DECREF(item);
2962 return NULL;
2963 } else {
2964 need = 2 * outlen;
2965 }
2966 }
2967
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002968 if (PyUnicode_Resize(
2969 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002970 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002971 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002972 }
2973 outlen = need;
2974 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002975 memcpy(PyUnicode_AS_UNICODE(result) + j,
2976 PyUnicode_AS_UNICODE(item),
2977 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002978 j += reslen;
2979 }
2980 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002981 Py_DECREF(item);
2982 }
2983
Walter Dörwald903f1e02003-02-04 16:28:00 +00002984 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002985 PyUnicode_Resize(&result, j);
2986
2987 return result;
2988
2989Fail_1:
2990 Py_DECREF(result);
2991 return NULL;
2992}
2993#endif