blob: 3132cf4b41b67d874fed629450da5cddb2fda706 [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>
Mark Dickinsonbd15a062009-11-18 19:33:35 +000011#include <float.h> /* for DBL_MANT_DIG and friends */
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012
Guido van Rossume2ae77b2001-10-24 20:42:55 +000013#ifdef RISCOS
14#include "unixstuff.h"
15#endif
16
Mark Hammond26cffde2001-05-14 12:17:34 +000017/* The default encoding used by the platform file system APIs
18 Can remain NULL for all platforms that don't have such a concept
19*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000020#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000021const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000022#elif defined(__APPLE__)
23const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000024#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
26#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000027
Guido van Rossum12d12c51993-10-26 17:58:25 +000028/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000029static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000030#ifdef Py_USING_UNICODE
31static PyObject *filterunicode(PyObject *, PyObject *);
32#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000033static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000034
Guido van Rossum79f25d91997-04-29 20:08:16 +000035static PyObject *
Neal Norwitz92e212f2006-04-03 04:48:37 +000036builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +000037{
Neal Norwitz92e212f2006-04-03 04:48:37 +000038 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
39 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +000040 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000041 PyObject *globals = NULL;
42 PyObject *locals = NULL;
43 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000044 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000045
Neal Norwitz92e212f2006-04-03 04:48:37 +000046 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
47 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000048 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000049 return PyImport_ImportModuleLevel(name, globals, locals,
50 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000051}
52
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000053PyDoc_STRVAR(import_doc,
Neal Norwitz92e212f2006-04-03 04:48:37 +000054"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000055\n\
56Import a module. The globals are only used to determine the context;\n\
57they are not modified. The locals are currently unused. The fromlist\n\
58should be a list of names to emulate ``from name import ...'', or an\n\
59empty list to emulate ``import name''.\n\
60When importing a module from a package, note that __import__('A.B', ...)\n\
61returns package A when fromlist is empty, but its submodule B when\n\
Neal Norwitz92e212f2006-04-03 04:48:37 +000062fromlist is not empty. Level is used to determine whether to perform \n\
63absolute or relative imports. -1 is the original strategy of attempting\n\
64both absolute and relative imports, 0 is absolute, a positive number\n\
65is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000066
Guido van Rossum1ae940a1995-01-02 19:04:15 +000067
Guido van Rossum79f25d91997-04-29 20:08:16 +000068static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000069builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000070{
Guido van Rossum09df08a1998-05-22 00:51:39 +000071 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000072}
73
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000074PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000075"abs(number) -> number\n\
76\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000077Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000078
Raymond Hettinger96229b12005-03-11 06:49:40 +000079static PyObject *
80builtin_all(PyObject *self, PyObject *v)
81{
82 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +000083 PyObject *(*iternext)(PyObject *);
84 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +000085
86 it = PyObject_GetIter(v);
87 if (it == NULL)
88 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +000089 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +000090
Guido van Rossum01dbc102007-12-20 23:48:28 +000091 for (;;) {
92 item = iternext(it);
93 if (item == NULL)
94 break;
95 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +000096 Py_DECREF(item);
97 if (cmp < 0) {
98 Py_DECREF(it);
99 return NULL;
100 }
101 if (cmp == 0) {
102 Py_DECREF(it);
103 Py_RETURN_FALSE;
104 }
105 }
106 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000107 if (PyErr_Occurred()) {
108 if (PyErr_ExceptionMatches(PyExc_StopIteration))
109 PyErr_Clear();
110 else
111 return NULL;
112 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000113 Py_RETURN_TRUE;
114}
115
116PyDoc_STRVAR(all_doc,
117"all(iterable) -> bool\n\
118\n\
119Return True if bool(x) is True for all values x in the iterable.");
120
121static PyObject *
122builtin_any(PyObject *self, PyObject *v)
123{
124 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000125 PyObject *(*iternext)(PyObject *);
126 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000127
128 it = PyObject_GetIter(v);
129 if (it == NULL)
130 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000131 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000132
Guido van Rossum01dbc102007-12-20 23:48:28 +0000133 for (;;) {
134 item = iternext(it);
135 if (item == NULL)
136 break;
137 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000138 Py_DECREF(item);
139 if (cmp < 0) {
140 Py_DECREF(it);
141 return NULL;
142 }
143 if (cmp == 1) {
144 Py_DECREF(it);
145 Py_RETURN_TRUE;
146 }
147 }
148 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000149 if (PyErr_Occurred()) {
150 if (PyErr_ExceptionMatches(PyExc_StopIteration))
151 PyErr_Clear();
152 else
153 return NULL;
154 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000155 Py_RETURN_FALSE;
156}
157
158PyDoc_STRVAR(any_doc,
159"any(iterable) -> bool\n\
160\n\
161Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000162
Guido van Rossum79f25d91997-04-29 20:08:16 +0000163static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000164builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000165{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000166 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000167 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000168
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000169 if (PyErr_WarnPy3k("apply() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000170 "use func(*args, **kwargs)", 1) < 0)
Neal Norwitz8b2bfbc2007-05-23 06:35:32 +0000171 return NULL;
172
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000173 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000174 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000175 if (alist != NULL) {
176 if (!PyTuple_Check(alist)) {
177 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000178 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000179 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000180 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000181 return NULL;
182 }
183 t = PySequence_Tuple(alist);
184 if (t == NULL)
185 return NULL;
186 alist = t;
187 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000188 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000189 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000190 PyErr_Format(PyExc_TypeError,
191 "apply() arg 3 expected dictionary, found %s",
192 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000193 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000194 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000195 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
196 finally:
197 Py_XDECREF(t);
198 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000199}
200
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000201PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000202"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000203\n\
Fred Drake7b912121999-12-23 14:16:55 +0000204Call a callable object with positional arguments taken from the tuple args,\n\
205and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000206Note that classes are callable, as are instances with a __call__() method.\n\
207\n\
208Deprecated since release 2.3. Instead, use the extended call syntax:\n\
209 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000210
211
Guido van Rossum79f25d91997-04-29 20:08:16 +0000212static PyObject *
Eric Smith3cd81942008-02-22 16:30:22 +0000213builtin_bin(PyObject *self, PyObject *v)
214{
Raymond Hettinger9c437af2008-06-24 22:46:07 +0000215 return PyNumber_ToBase(v, 2);
Eric Smith3cd81942008-02-22 16:30:22 +0000216}
217
218PyDoc_STRVAR(bin_doc,
219"bin(number) -> string\n\
220\n\
221Return the binary representation of an integer or long integer.");
222
223
224static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000225builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000226{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000227 if (PyErr_WarnPy3k("callable() not supported in 3.x; "
Benjamin Peterson90ed6112009-11-17 21:24:54 +0000228 "use isinstance(x, collections.Callable)", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000229 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +0000230 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000231}
232
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000233PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000234"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000235\n\
236Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000237Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000238
239
Guido van Rossum79f25d91997-04-29 20:08:16 +0000240static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000241builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000242{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000243 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000244 Py_ssize_t len; /* guess for result list size */
245 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000247 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000248 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000249
Tim Peters0e57abf2001-05-02 07:39:38 +0000250 /* Strings and tuples return a result of the same type. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000251 if (PyString_Check(seq))
Tim Peters0e57abf2001-05-02 07:39:38 +0000252 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000253#ifdef Py_USING_UNICODE
254 if (PyUnicode_Check(seq))
255 return filterunicode(func, seq);
256#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000257 if (PyTuple_Check(seq))
258 return filtertuple(func, seq);
259
Georg Brandle35b6572005-07-19 22:20:20 +0000260 /* Pre-allocate argument list tuple. */
261 arg = PyTuple_New(1);
262 if (arg == NULL)
263 return NULL;
264
Tim Peters0e57abf2001-05-02 07:39:38 +0000265 /* Get iterator. */
266 it = PyObject_GetIter(seq);
267 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000268 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000269
270 /* Guess a result list size. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000271 len = _PyObject_LengthHint(seq, 8);
Raymond Hettingerb5163702009-02-02 21:50:13 +0000272 if (len == -1)
273 goto Fail_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000274
Tim Peters0e57abf2001-05-02 07:39:38 +0000275 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000276 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000277 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000278 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000279 result = seq;
280 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000281 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000282 result = PyList_New(len);
283 if (result == NULL)
284 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000285 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000286
Tim Peters0e57abf2001-05-02 07:39:38 +0000287 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000288 j = 0;
289 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000290 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000291 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000292
Tim Peters0e57abf2001-05-02 07:39:38 +0000293 item = PyIter_Next(it);
294 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000295 if (PyErr_Occurred())
296 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000297 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000298 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000299
Neil Schemenauer68973552003-08-14 20:37:34 +0000300 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000301 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000302 }
303 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000304 PyObject *good;
305 PyTuple_SET_ITEM(arg, 0, item);
306 good = PyObject_Call(func, arg, NULL);
307 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000308 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000309 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000310 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000311 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000312 ok = PyObject_IsTrue(good);
313 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000314 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000315 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000316 if (j < len)
317 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000318 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000319 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000320 Py_DECREF(item);
321 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000322 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000323 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000324 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000325 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000326 else
327 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000328 }
329
Guido van Rossum12d12c51993-10-26 17:58:25 +0000330
Tim Peters0e57abf2001-05-02 07:39:38 +0000331 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000332 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000333 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000334
Tim Peters3c6b1482001-05-21 08:07:05 +0000335 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000336 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000337 return result;
338
Tim Peters0e57abf2001-05-02 07:39:38 +0000339Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000340 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000341Fail_it:
342 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000343Fail_arg:
344 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000345 return NULL;
346}
347
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000348PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000349"filter(function or None, sequence) -> list, tuple, or string\n"
350"\n"
351"Return those items of sequence for which function(item) is true. If\n"
352"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000353"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000354
Guido van Rossum79f25d91997-04-29 20:08:16 +0000355static PyObject *
Eric Smitha9f7d622008-02-17 19:46:49 +0000356builtin_format(PyObject *self, PyObject *args)
357{
358 PyObject *value;
359 PyObject *format_spec = NULL;
360
361 if (!PyArg_ParseTuple(args, "O|O:format", &value, &format_spec))
362 return NULL;
363
364 return PyObject_Format(value, format_spec);
365}
366
367PyDoc_STRVAR(format_doc,
368"format(value[, format_spec]) -> string\n\
369\n\
370Returns value.__format__(format_spec)\n\
371format_spec defaults to \"\"");
372
373static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000374builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000375{
376 long x;
377 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000378
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000380 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000381 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382 PyErr_SetString(PyExc_ValueError,
383 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000384 return NULL;
385 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000386 s[0] = (char)x;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000387 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000388}
389
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000390PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000391"chr(i) -> character\n\
392\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000393Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000394
395
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000396#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000398builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000399{
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +0000400 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000401
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +0000402 if (!PyArg_ParseTuple(args, "i:unichr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000403 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000404
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000405 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000406}
407
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000408PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000409"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000410\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000411Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000412#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000413
414
415static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000416builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000417{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000418 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000419 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000420
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000421 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000422 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000423 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000424 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000425 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000426}
427
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000428PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000429"cmp(x, y) -> integer\n\
430\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000431Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000432
433
Guido van Rossum79f25d91997-04-29 20:08:16 +0000434static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000435builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000436{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000437 PyObject *v, *w;
438 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000439
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000440 if (PyErr_WarnPy3k("coerce() not supported in 3.x", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000441 return NULL;
442
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000443 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000444 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000446 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000447 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000448 Py_DECREF(v);
449 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000450 return res;
451}
452
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000453PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000454"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000455\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000456Return a tuple consisting of the two numeric arguments converted to\n\
457a common type, using the same rules as used by arithmetic operations.\n\
458If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000459
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460static PyObject *
Georg Brandl5240d742007-03-13 20:46:32 +0000461builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000462{
463 char *str;
464 char *filename;
465 char *startstr;
Georg Brandlf2bfd542008-03-29 13:24:23 +0000466 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000467 int dont_inherit = 0;
468 int supplied_flags = 0;
Benjamin Peterson5f429e02009-12-13 00:54:15 +0000469 int is_ast;
Tim Peters5ba58662001-07-16 02:29:45 +0000470 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000471 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000472 Py_ssize_t length;
Georg Brandl5240d742007-03-13 20:46:32 +0000473 static char *kwlist[] = {"source", "filename", "mode", "flags",
474 "dont_inherit", NULL};
Georg Brandlf2bfd542008-03-29 13:24:23 +0000475 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000476
Georg Brandl5240d742007-03-13 20:46:32 +0000477 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
478 kwlist, &cmd, &filename, &startstr,
479 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000480 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000481
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000482 cf.cf_flags = supplied_flags;
483
Georg Brandlfc8eef32008-03-28 12:11:56 +0000484 if (supplied_flags &
485 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
486 {
487 PyErr_SetString(PyExc_ValueError,
488 "compile(): unrecognised flags");
489 return NULL;
490 }
491 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
492
493 if (!dont_inherit) {
494 PyEval_MergeCompilerFlags(&cf);
495 }
496
Georg Brandlf2bfd542008-03-29 13:24:23 +0000497 if (strcmp(startstr, "exec") == 0)
498 mode = 0;
499 else if (strcmp(startstr, "eval") == 0)
500 mode = 1;
501 else if (strcmp(startstr, "single") == 0)
502 mode = 2;
503 else {
504 PyErr_SetString(PyExc_ValueError,
505 "compile() arg 3 must be 'exec', 'eval' or 'single'");
506 return NULL;
507 }
508
Benjamin Peterson5f429e02009-12-13 00:54:15 +0000509 is_ast = PyAST_Check(cmd);
510 if (is_ast == -1)
511 return NULL;
512 if (is_ast) {
Georg Brandlfc8eef32008-03-28 12:11:56 +0000513 if (supplied_flags & PyCF_ONLY_AST) {
514 Py_INCREF(cmd);
515 result = cmd;
516 }
517 else {
518 PyArena *arena;
519 mod_ty mod;
520
521 arena = PyArena_New();
Georg Brandlf2bfd542008-03-29 13:24:23 +0000522 mod = PyAST_obj2mod(cmd, arena, mode);
Georg Brandlfc8eef32008-03-28 12:11:56 +0000523 if (mod == NULL) {
524 PyArena_Free(arena);
525 return NULL;
526 }
527 result = (PyObject*)PyAST_Compile(mod, filename,
528 &cf, arena);
529 PyArena_Free(arena);
530 }
531 return result;
532 }
533
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000534#ifdef Py_USING_UNICODE
535 if (PyUnicode_Check(cmd)) {
536 tmp = PyUnicode_AsUTF8String(cmd);
537 if (tmp == NULL)
538 return NULL;
539 cmd = tmp;
540 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
541 }
542#endif
Tim Peters6cd6a822001-08-17 22:11:27 +0000543
Georg Brandlfc8eef32008-03-28 12:11:56 +0000544 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000545 goto cleanup;
Georg Brandlfc8eef32008-03-28 12:11:56 +0000546 if ((size_t)length != strlen(str)) {
547 PyErr_SetString(PyExc_TypeError,
548 "compile() expected string without null bytes");
549 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000550 }
Georg Brandlf2bfd542008-03-29 13:24:23 +0000551 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000552cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000553 Py_XDECREF(tmp);
554 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000555}
556
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000557PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000558"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000559\n\
560Compile the source string (a Python module, statement or expression)\n\
561into a code object that can be executed by the exec statement or eval().\n\
562The filename will be used for run-time error messages.\n\
563The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000564single (interactive) statement, or 'eval' to compile an expression.\n\
565The flags argument, if present, controls which future statements influence\n\
566the compilation of the code.\n\
567The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
568the effects of any future statements in effect in the code calling\n\
569compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000570in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000571
Guido van Rossum79f25d91997-04-29 20:08:16 +0000572static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000573builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000574{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000575 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000577 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000578 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000579 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000580}
581
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000582PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000583"dir([object]) -> list of strings\n"
584"\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000585"If called without an argument, return the names in the current scope.\n"
586"Else, return an alphabetized list of names comprising (some of) the attributes\n"
587"of the given object, and of attributes reachable from it.\n"
588"If the object supplies a method named __dir__, it will be used; otherwise\n"
589"the default dir() logic is used and returns:\n"
590" for a module object: the module's attributes.\n"
591" for a class object: its attributes, and recursively the attributes\n"
592" of its bases.\n"
Georg Brandl3bb15672007-03-13 07:23:16 +0000593" for any other object: its attributes, its class's attributes, and\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000594" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000595
Guido van Rossum79f25d91997-04-29 20:08:16 +0000596static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000597builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000598{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000599 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000600
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000601 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000602 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000603 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000604}
605
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000606PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000607"divmod(x, y) -> (div, mod)\n\
608\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000609Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000610
611
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000613builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000614{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000615 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000616 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000617 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000618 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000619
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000620 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000622 if (locals != Py_None && !PyMapping_Check(locals)) {
623 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000624 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000625 }
626 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000627 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000628 "globals must be a real dict; try eval(expr, {}, mapping)"
629 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000630 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000631 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632 if (globals == Py_None) {
633 globals = PyEval_GetGlobals();
634 if (locals == Py_None)
635 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000636 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000637 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000638 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000639
Georg Brandl77c85e62005-09-15 10:46:13 +0000640 if (globals == NULL || locals == NULL) {
641 PyErr_SetString(PyExc_TypeError,
642 "eval must be given globals and locals "
643 "when called without a frame");
644 return NULL;
645 }
646
Guido van Rossum79f25d91997-04-29 20:08:16 +0000647 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
648 if (PyDict_SetItemString(globals, "__builtins__",
649 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000650 return NULL;
651 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000652
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000653 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000654 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000655 PyErr_SetString(PyExc_TypeError,
656 "code object passed to eval() may not contain free variables");
657 return NULL;
658 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000659 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000660 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000661
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000662 if (!PyString_Check(cmd) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000663 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000664 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000665 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000666 return NULL;
667 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000668 cf.cf_flags = 0;
669
670#ifdef Py_USING_UNICODE
671 if (PyUnicode_Check(cmd)) {
672 tmp = PyUnicode_AsUTF8String(cmd);
673 if (tmp == NULL)
674 return NULL;
675 cmd = tmp;
676 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
677 }
678#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000679 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000680 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000681 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000682 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000683 while (*str == ' ' || *str == '\t')
684 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000685
Tim Peters9fa96be2001-08-17 23:04:59 +0000686 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000687 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
688 Py_XDECREF(tmp);
689 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000690}
691
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000692PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000693"eval(source[, globals[, locals]]) -> value\n\
694\n\
695Evaluate the source in the context of globals and locals.\n\
696The source may be a string representing a Python expression\n\
697or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000698The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000699defaulting to the current globals and locals.\n\
700If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000701
702
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000704builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000705{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000706 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000707 PyObject *globals = Py_None, *locals = Py_None;
708 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000709 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000710 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000711 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000712
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000713 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000714 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000715 return NULL;
716
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000717 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000718 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000719 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000720 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000721 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000722 if (locals != Py_None && !PyMapping_Check(locals)) {
723 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
724 return NULL;
725 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 if (globals == Py_None) {
727 globals = PyEval_GetGlobals();
728 if (locals == Py_None)
729 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000730 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000732 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000733 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
734 if (PyDict_SetItemString(globals, "__builtins__",
735 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000736 return NULL;
737 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000738
739 exists = 0;
740 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000741#if defined(PLAN9)
742 {
743 Dir *d;
744
745 if ((d = dirstat(filename))!=nil) {
746 if(d->mode & DMDIR)
747 werrstr("is a directory");
748 else
749 exists = 1;
750 free(d);
751 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000752 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000753#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000754 if (object_exists(filename)) {
755 if (isdir(filename))
756 errno = EISDIR;
757 else
758 exists = 1;
759 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000760#else /* standard Posix */
761 {
762 struct stat s;
763 if (stat(filename, &s) == 0) {
764 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000765# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000766 errno = EOS2ERR;
767# else
768 errno = EISDIR;
769# endif
770 else
771 exists = 1;
772 }
773 }
774#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000775
776 if (exists) {
777 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000778 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000779 Py_END_ALLOW_THREADS
780
781 if (fp == NULL) {
782 exists = 0;
783 }
784 }
785
786 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000787 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000788 return NULL;
789 }
Tim Peters5ba58662001-07-16 02:29:45 +0000790 cf.cf_flags = 0;
791 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000792 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000793 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000794 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000795 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000796 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000797 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000798}
799
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000800PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000801"execfile(filename[, globals[, locals]])\n\
802\n\
803Read and execute a Python script from a file.\n\
804The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000805globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000806
807
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000809builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000810{
Guido van Rossum950ff291998-06-29 13:38:57 +0000811 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000814 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000815 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000816#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000817 if (PyUnicode_Check(name)) {
818 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
819 if (name == NULL)
820 return NULL;
821 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000822#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000823
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000824 if (!PyString_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000825 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000826 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000827 return NULL;
828 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000829 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000830 if (result == NULL && dflt != NULL &&
831 PyErr_ExceptionMatches(PyExc_AttributeError))
832 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000833 PyErr_Clear();
834 Py_INCREF(dflt);
835 result = dflt;
836 }
837 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000838}
839
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000840PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000841"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000842\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000843Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
844When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000845exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000846
847
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000849builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000850{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000851 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000852
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000854 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000855 return d;
856}
857
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000858PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000859"globals() -> dictionary\n\
860\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000861Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000862
863
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000865builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000866{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867 PyObject *v;
868 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000869
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000870 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000871 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000872#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000873 if (PyUnicode_Check(name)) {
874 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
875 if (name == NULL)
876 return NULL;
877 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000878#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000879
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000880 if (!PyString_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000881 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000882 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000883 return NULL;
884 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000886 if (v == NULL) {
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000887 if (!PyErr_ExceptionMatches(PyExc_Exception))
888 return NULL;
889 else {
890 PyErr_Clear();
891 Py_INCREF(Py_False);
892 return Py_False;
893 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000896 Py_INCREF(Py_True);
897 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000898}
899
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000900PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000901"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902\n\
903Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000904(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000905
906
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000908builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000909{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000910 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000911}
912
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000913PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914"id(object) -> integer\n\
915\n\
916Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918
919
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000921builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000922{
923 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000924 PyObject *it; /* the iterator object */
925 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000926 } sequence;
927
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000929 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000930 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000931 register int i, j;
932
Guido van Rossum79f25d91997-04-29 20:08:16 +0000933 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000934 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935 PyErr_SetString(PyExc_TypeError,
936 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000937 return NULL;
938 }
939
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000941 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000942
Neal Norwitz53152a12008-02-24 02:20:25 +0000943 if (func == Py_None) {
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000944 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000945 "use list(...)", 1) < 0)
Neal Norwitz53152a12008-02-24 02:20:25 +0000946 return NULL;
947 if (n == 1) {
948 /* map(None, S) is the same as list(S). */
949 return PySequence_List(PyTuple_GetItem(args, 1));
950 }
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000951 }
952
Tim Peters4e9afdc2001-05-03 23:54:49 +0000953 /* Get space for sequence descriptors. Must NULL out the iterator
954 * pointers so that jumping to Fail_2 later doesn't see trash.
955 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000956 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
957 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000958 return NULL;
959 }
960 for (i = 0; i < n; ++i) {
961 seqs[i].it = (PyObject*)NULL;
962 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000963 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000964
Tim Peters4e9afdc2001-05-03 23:54:49 +0000965 /* Do a first pass to obtain iterators for the arguments, and set len
966 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000967 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000968 len = 0;
969 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
970 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000971 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000972
Tim Peters4e9afdc2001-05-03 23:54:49 +0000973 /* Get iterator. */
974 curseq = PyTuple_GetItem(args, i+1);
975 sqp->it = PyObject_GetIter(curseq);
Benjamin Petersond692a712009-09-07 13:02:15 +0000976 if (sqp->it == NULL) {
977 static char errmsg[] =
978 "argument %d to map() must support iteration";
979 char errbuf[sizeof(errmsg) + 25];
980 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
981 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000982 goto Fail_2;
Benjamin Petersond692a712009-09-07 13:02:15 +0000983 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000984
Tim Peters4e9afdc2001-05-03 23:54:49 +0000985 /* Update len. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000986 curlen = _PyObject_LengthHint(curseq, 8);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000987 if (curlen > len)
988 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000989 }
990
Tim Peters4e9afdc2001-05-03 23:54:49 +0000991 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000993 goto Fail_2;
994
Tim Peters4e9afdc2001-05-03 23:54:49 +0000995 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000996 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000997 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000998 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000999
Guido van Rossum79f25d91997-04-29 20:08:16 +00001000 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001001 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001002 else if ((alist = PyTuple_New(n)) == NULL)
1003 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004
1005 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001006 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001007 Py_INCREF(Py_None);
1008 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001009 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001010 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001011 item = PyIter_Next(sqp->it);
1012 if (item)
1013 ++numactive;
1014 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001016 Py_XDECREF(alist);
1017 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001018 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001019 Py_INCREF(Py_None);
1020 item = Py_None;
1021 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001022 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001023 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001024 if (alist)
1025 PyTuple_SET_ITEM(alist, j, item);
1026 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001027 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001028 }
1029
Guido van Rossum32120311995-07-10 13:52:21 +00001030 if (!alist)
1031 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001032
Tim Peters4e9afdc2001-05-03 23:54:49 +00001033 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001034 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001035 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001036 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001037
Guido van Rossum79f25d91997-04-29 20:08:16 +00001038 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001039 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001040 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041 value = PyEval_CallObject(func, alist);
1042 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001043 if (value == NULL)
1044 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001045 }
1046 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001047 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001048 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001049 if (status < 0)
1050 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001051 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001052 else if (PyList_SetItem(result, i, value) < 0)
1053 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001054 }
1055
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001056 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1057 goto Fail_1;
1058
Tim Peters4e9afdc2001-05-03 23:54:49 +00001059 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060
Guido van Rossum12d12c51993-10-26 17:58:25 +00001061Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001062 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001063Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001064 result = NULL;
1065Succeed:
1066 assert(seqs);
1067 for (i = 0; i < n; ++i)
1068 Py_XDECREF(seqs[i].it);
1069 PyMem_DEL(seqs);
1070 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001071}
1072
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001073PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001074"map(function, sequence[, sequence, ...]) -> list\n\
1075\n\
1076Return a list of the results of applying the function to the items of\n\
1077the argument sequence(s). If more than one sequence is given, the\n\
1078function is called with an argument list consisting of the corresponding\n\
1079item of each sequence, substituting None for missing values when not all\n\
1080sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001081the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001082
1083
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084static PyObject *
Georg Brandl28e08732008-04-30 19:47:09 +00001085builtin_next(PyObject *self, PyObject *args)
1086{
1087 PyObject *it, *res;
1088 PyObject *def = NULL;
1089
1090 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1091 return NULL;
1092 if (!PyIter_Check(it)) {
1093 PyErr_Format(PyExc_TypeError,
1094 "%.200s object is not an iterator",
1095 it->ob_type->tp_name);
1096 return NULL;
1097 }
1098
1099 res = (*it->ob_type->tp_iternext)(it);
1100 if (res != NULL) {
1101 return res;
1102 } else if (def != NULL) {
1103 if (PyErr_Occurred()) {
1104 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
1105 return NULL;
1106 PyErr_Clear();
1107 }
1108 Py_INCREF(def);
1109 return def;
1110 } else if (PyErr_Occurred()) {
1111 return NULL;
1112 } else {
1113 PyErr_SetNone(PyExc_StopIteration);
1114 return NULL;
1115 }
1116}
1117
1118PyDoc_STRVAR(next_doc,
1119"next(iterator[, default])\n\
1120\n\
1121Return the next item from the iterator. If default is given and the iterator\n\
1122is exhausted, it is returned instead of raising StopIteration.");
1123
1124
1125static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001126builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001127{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001128 PyObject *v;
1129 PyObject *name;
1130 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001131
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001132 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001133 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001135 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 Py_INCREF(Py_None);
1137 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001138}
1139
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001140PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001141"setattr(object, name, value)\n\
1142\n\
1143Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001144``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001145
1146
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001148builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001149{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001150 PyObject *v;
1151 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001152
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001153 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001154 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001156 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001157 Py_INCREF(Py_None);
1158 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001159}
1160
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001161PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001162"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001163\n\
1164Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001165``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001166
1167
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001169builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001170{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001171 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001172
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001174 if (x == -1)
1175 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001177}
1178
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001179PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001180"hash(object) -> integer\n\
1181\n\
1182Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001183the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184
1185
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001187builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001188{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001190 PyObject *res;
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001191
1192 if ((nb = v->ob_type->tp_as_number) == NULL ||
1193 nb->nb_hex == NULL) {
1194 PyErr_SetString(PyExc_TypeError,
1195 "hex() argument can't be converted to hex");
1196 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001197 }
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001198 res = (*nb->nb_hex)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001199 if (res && !PyString_Check(res)) {
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001200 PyErr_Format(PyExc_TypeError,
1201 "__hex__ returned non-string (type %.200s)",
1202 res->ob_type->tp_name);
1203 Py_DECREF(res);
1204 return NULL;
1205 }
1206 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001207}
1208
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001209PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001210"hex(number) -> string\n\
1211\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001212Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001213
1214
Tim Petersdbd9ba62000-07-09 03:09:57 +00001215static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001216
Guido van Rossum79f25d91997-04-29 20:08:16 +00001217static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001218builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001219{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 PyObject *res;
1223 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001224 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001225
1226 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001227 if (line == NULL)
1228 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001230 return NULL;
1231 while (*str == ' ' || *str == '\t')
1232 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 globals = PyEval_GetGlobals();
1234 locals = PyEval_GetLocals();
1235 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1236 if (PyDict_SetItemString(globals, "__builtins__",
1237 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001238 return NULL;
1239 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001240 cf.cf_flags = 0;
1241 PyEval_MergeCompilerFlags(&cf);
1242 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001245}
1246
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001247PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001248"input([prompt]) -> value\n\
1249\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001250Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001251
1252
Guido van Rossume8811f81997-02-14 15:48:05 +00001253static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001254builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001255{
1256 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001257 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001258 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001259 if (!PyString_CheckExact(s)) {
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001260 PyErr_SetString(PyExc_TypeError,
1261 "can't intern subclass of string");
1262 return NULL;
1263 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001264 Py_INCREF(s);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001265 PyString_InternInPlace(&s);
Guido van Rossume8811f81997-02-14 15:48:05 +00001266 return s;
1267}
1268
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001269PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001270"intern(string) -> string\n\
1271\n\
1272``Intern'' the given string. This enters the string in the (global)\n\
1273table of interned strings whose purpose is to speed up dictionary lookups.\n\
1274Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001275same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001276
1277
Guido van Rossum79f25d91997-04-29 20:08:16 +00001278static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001279builtin_iter(PyObject *self, PyObject *args)
1280{
1281 PyObject *v, *w = NULL;
1282
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001283 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001284 return NULL;
1285 if (w == NULL)
1286 return PyObject_GetIter(v);
1287 if (!PyCallable_Check(v)) {
1288 PyErr_SetString(PyExc_TypeError,
1289 "iter(v, w): v must be callable");
1290 return NULL;
1291 }
1292 return PyCallIter_New(v, w);
1293}
1294
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001295PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001296"iter(collection) -> iterator\n\
1297iter(callable, sentinel) -> iterator\n\
1298\n\
1299Get an iterator from an object. In the first form, the argument must\n\
1300supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001301In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001302
1303
1304static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001305builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001306{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001307 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001308
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001309 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001310 if (res < 0 && PyErr_Occurred())
1311 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001312 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001313}
1314
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001315PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001316"len(object) -> integer\n\
1317\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001318Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001319
1320
Guido van Rossum79f25d91997-04-29 20:08:16 +00001321static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001322builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001323{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001324 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001325
Guido van Rossum79f25d91997-04-29 20:08:16 +00001326 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001327 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001328 return d;
1329}
1330
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001331PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001332"locals() -> dictionary\n\
1333\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001334Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001335
1336
Guido van Rossum79f25d91997-04-29 20:08:16 +00001337static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001338min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001339{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001340 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001341 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001342
Guido van Rossum79f25d91997-04-29 20:08:16 +00001343 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001345 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001346 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001347
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001348 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1349 keyfunc = PyDict_GetItemString(kwds, "key");
1350 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001351 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001352 "%s() got an unexpected keyword argument", name);
1353 return NULL;
1354 }
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001355 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001356 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001357
Tim Petersc3074532001-05-03 07:00:32 +00001358 it = PyObject_GetIter(v);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001359 if (it == NULL) {
1360 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001361 return NULL;
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001362 }
Tim Petersc3074532001-05-03 07:00:32 +00001363
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001364 maxitem = NULL; /* the result */
1365 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001366 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001367 /* get the value from the key function */
1368 if (keyfunc != NULL) {
1369 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1370 if (val == NULL)
1371 goto Fail_it_item;
1372 }
1373 /* no key function; the value is the item */
1374 else {
1375 val = item;
1376 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001377 }
Tim Petersc3074532001-05-03 07:00:32 +00001378
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379 /* maximum value and item are unset; set them */
1380 if (maxval == NULL) {
1381 maxitem = item;
1382 maxval = val;
1383 }
1384 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001385 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001386 int cmp = PyObject_RichCompareBool(val, maxval, op);
1387 if (cmp < 0)
1388 goto Fail_it_item_and_val;
1389 else if (cmp > 0) {
1390 Py_DECREF(maxval);
1391 Py_DECREF(maxitem);
1392 maxval = val;
1393 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001394 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001395 else {
1396 Py_DECREF(item);
1397 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001398 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001399 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001400 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001401 if (PyErr_Occurred())
1402 goto Fail_it;
1403 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001404 PyErr_Format(PyExc_ValueError,
1405 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001406 assert(maxitem == NULL);
1407 }
1408 else
1409 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001410 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001411 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001412 return maxitem;
1413
1414Fail_it_item_and_val:
1415 Py_DECREF(val);
1416Fail_it_item:
1417 Py_DECREF(item);
1418Fail_it:
1419 Py_XDECREF(maxval);
1420 Py_XDECREF(maxitem);
1421 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001422 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001423 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001424}
1425
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001427builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001428{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001429 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001430}
1431
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001432PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001433"min(iterable[, key=func]) -> value\n\
1434min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001435\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001436With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001437With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001438
1439
Guido van Rossum79f25d91997-04-29 20:08:16 +00001440static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001441builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001442{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001443 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001444}
1445
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001446PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001447"max(iterable[, key=func]) -> value\n\
1448max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001450With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001451With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001452
1453
Guido van Rossum79f25d91997-04-29 20:08:16 +00001454static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001455builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001456{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001457 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001458 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001459
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001460 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1461 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001463 "oct() argument can't be converted to oct");
1464 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001465 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001466 res = (*nb->nb_oct)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001467 if (res && !PyString_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001468 PyErr_Format(PyExc_TypeError,
1469 "__oct__ returned non-string (type %.200s)",
1470 res->ob_type->tp_name);
1471 Py_DECREF(res);
1472 return NULL;
1473 }
1474 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001475}
1476
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001477PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001478"oct(number) -> string\n\
1479\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001480Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001481
1482
Guido van Rossum79f25d91997-04-29 20:08:16 +00001483static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001484builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1485{
1486 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1487}
1488
1489PyDoc_STRVAR(open_doc,
1490"open(name[, mode[, buffering]]) -> file object\n\
1491\n\
Skip Montanaro4e3ebe02007-12-08 14:37:43 +00001492Open a file using the file() type, returns a file object. This is the\n\
Philip Jenveydd0388a2009-05-28 03:12:16 +00001493preferred way to open a file. See file.__doc__ for further information.");
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001494
1495
1496static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001497builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001498{
Guido van Rossum09095f32000-03-10 23:00:52 +00001499 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001500 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001501
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001502 if (PyString_Check(obj)) {
1503 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001504 if (size == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001505 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001506 return PyInt_FromLong(ord);
1507 }
Christian Heimes3497f942008-05-26 12:29:14 +00001508 } else if (PyByteArray_Check(obj)) {
1509 size = PyByteArray_GET_SIZE(obj);
Christian Heimes1a6387e2008-03-26 12:49:49 +00001510 if (size == 1) {
Christian Heimes3497f942008-05-26 12:29:14 +00001511 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes1a6387e2008-03-26 12:49:49 +00001512 return PyInt_FromLong(ord);
1513 }
1514
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001515#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001516 } else if (PyUnicode_Check(obj)) {
1517 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001518 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001519 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001520 return PyInt_FromLong(ord);
1521 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001522#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001523 } else {
1524 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001525 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001526 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001527 return NULL;
1528 }
1529
Guido van Rossumad991772001-01-12 16:03:05 +00001530 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001531 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001532 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001533 size);
1534 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001535}
1536
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001537PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001538"ord(c) -> integer\n\
1539\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001540Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001541
1542
Guido van Rossum79f25d91997-04-29 20:08:16 +00001543static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001544builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001545{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001546 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001547
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001548 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001549 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001550 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001551}
1552
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001553PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001554"pow(x, y[, z]) -> number\n\
1555\n\
1556With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001557equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001558
1559
Eric Smith7c478942008-03-18 23:45:49 +00001560static PyObject *
1561builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1562{
1563 static char *kwlist[] = {"sep", "end", "file", 0};
Benjamin Peterson753d1622009-07-02 18:16:45 +00001564 static PyObject *dummy_args = NULL;
1565 static PyObject *unicode_newline = NULL, *unicode_space = NULL;
1566 static PyObject *str_newline = NULL, *str_space = NULL;
1567 PyObject *newline, *space;
Eric Smith7c478942008-03-18 23:45:49 +00001568 PyObject *sep = NULL, *end = NULL, *file = NULL;
Benjamin Peterson753d1622009-07-02 18:16:45 +00001569 int i, err, use_unicode = 0;
Eric Smith7c478942008-03-18 23:45:49 +00001570
1571 if (dummy_args == NULL) {
1572 if (!(dummy_args = PyTuple_New(0)))
1573 return NULL;
1574 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001575 if (str_newline == NULL) {
1576 str_newline = PyString_FromString("\n");
1577 if (str_newline == NULL)
1578 return NULL;
1579 str_space = PyString_FromString(" ");
1580 if (str_space == NULL) {
1581 Py_CLEAR(str_newline);
1582 return NULL;
1583 }
1584 unicode_newline = PyUnicode_FromString("\n");
1585 if (unicode_newline == NULL) {
1586 Py_CLEAR(str_newline);
1587 Py_CLEAR(str_space);
1588 return NULL;
1589 }
1590 unicode_space = PyUnicode_FromString(" ");
1591 if (unicode_space == NULL) {
1592 Py_CLEAR(str_newline);
1593 Py_CLEAR(str_space);
1594 Py_CLEAR(unicode_space);
1595 return NULL;
1596 }
1597 }
Eric Smith7c478942008-03-18 23:45:49 +00001598 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1599 kwlist, &sep, &end, &file))
1600 return NULL;
1601 if (file == NULL || file == Py_None) {
1602 file = PySys_GetObject("stdout");
1603 /* sys.stdout may be None when FILE* stdout isn't connected */
1604 if (file == Py_None)
1605 Py_RETURN_NONE;
1606 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001607 if (sep == Py_None) {
1608 sep = NULL;
Eric Smith7c478942008-03-18 23:45:49 +00001609 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001610 else if (sep) {
1611 if (PyUnicode_Check(sep)) {
1612 use_unicode = 1;
1613 }
1614 else if (!PyString_Check(sep)) {
1615 PyErr_Format(PyExc_TypeError,
1616 "sep must be None, str or unicode, not %.200s",
1617 sep->ob_type->tp_name);
1618 return NULL;
1619 }
1620 }
1621 if (end == Py_None)
1622 end = NULL;
1623 else if (end) {
1624 if (PyUnicode_Check(end)) {
1625 use_unicode = 1;
1626 }
1627 else if (!PyString_Check(end)) {
1628 PyErr_Format(PyExc_TypeError,
1629 "end must be None, str or unicode, not %.200s",
1630 end->ob_type->tp_name);
1631 return NULL;
1632 }
1633 }
1634
1635 if (!use_unicode) {
1636 for (i = 0; i < PyTuple_Size(args); i++) {
1637 if (PyUnicode_Check(PyTuple_GET_ITEM(args, i))) {
1638 use_unicode = 1;
1639 break;
1640 }
1641 }
1642 }
1643 if (use_unicode) {
1644 newline = unicode_newline;
1645 space = unicode_space;
1646 }
1647 else {
1648 newline = str_newline;
1649 space = str_space;
Eric Smith7c478942008-03-18 23:45:49 +00001650 }
1651
1652 for (i = 0; i < PyTuple_Size(args); i++) {
1653 if (i > 0) {
Benjamin Peterson753d1622009-07-02 18:16:45 +00001654 if (sep == NULL)
1655 err = PyFile_WriteObject(space, file,
1656 Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001657 else
1658 err = PyFile_WriteObject(sep, file,
1659 Py_PRINT_RAW);
1660 if (err)
1661 return NULL;
1662 }
1663 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1664 Py_PRINT_RAW);
1665 if (err)
1666 return NULL;
1667 }
1668
Benjamin Peterson753d1622009-07-02 18:16:45 +00001669 if (end == NULL)
1670 err = PyFile_WriteObject(newline, file, Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001671 else
1672 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1673 if (err)
1674 return NULL;
1675
1676 Py_RETURN_NONE;
1677}
1678
1679PyDoc_STRVAR(print_doc,
1680"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
1681\n\
1682Prints the values to a stream, or to sys.stdout by default.\n\
1683Optional keyword arguments:\n\
1684file: a file-like object (stream); defaults to the current sys.stdout.\n\
1685sep: string inserted between values, default a space.\n\
1686end: string appended after the last value, default a newline.");
1687
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001688
1689/* Return number of items in range (lo, hi, step), when arguments are
1690 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1691 * & only if the true value is too large to fit in a signed long.
1692 * Arguments MUST return 1 with either PyInt_Check() or
1693 * PyLong_Check(). Return -1 when there is an error.
1694 */
1695static long
1696get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1697{
1698 /* -------------------------------------------------------------
1699 Algorithm is equal to that of get_len_of_range(), but it operates
1700 on PyObjects (which are assumed to be PyLong or PyInt objects).
1701 ---------------------------------------------------------------*/
1702 long n;
1703 PyObject *diff = NULL;
1704 PyObject *one = NULL;
1705 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1706 /* holds sub-expression evaluations */
1707
1708 /* if (lo >= hi), return length of 0. */
1709 if (PyObject_Compare(lo, hi) >= 0)
1710 return 0;
1711
1712 if ((one = PyLong_FromLong(1L)) == NULL)
1713 goto Fail;
1714
1715 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1716 goto Fail;
1717
1718 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1719 goto Fail;
1720
1721 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1722 goto Fail;
1723
1724 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1725 goto Fail;
1726
1727 n = PyLong_AsLong(tmp3);
1728 if (PyErr_Occurred()) { /* Check for Overflow */
1729 PyErr_Clear();
1730 goto Fail;
1731 }
1732
1733 Py_DECREF(tmp3);
1734 Py_DECREF(tmp2);
1735 Py_DECREF(diff);
1736 Py_DECREF(tmp1);
1737 Py_DECREF(one);
1738 return n;
1739
1740 Fail:
1741 Py_XDECREF(tmp3);
1742 Py_XDECREF(tmp2);
1743 Py_XDECREF(diff);
1744 Py_XDECREF(tmp1);
1745 Py_XDECREF(one);
1746 return -1;
1747}
1748
1749/* An extension of builtin_range() that handles the case when PyLong
1750 * arguments are given. */
1751static PyObject *
1752handle_range_longs(PyObject *self, PyObject *args)
1753{
1754 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001755 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001756 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001757
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001758 PyObject *curnum = NULL;
1759 PyObject *v = NULL;
1760 long bign;
Mark Dickinson3dc25412009-12-03 12:08:56 +00001761 Py_ssize_t i, n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001762 int cmp_result;
1763
Tim Peters874e1f72003-04-13 22:13:08 +00001764 PyObject *zero = PyLong_FromLong(0);
1765
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001766 if (zero == NULL)
1767 return NULL;
1768
Tim Peters874e1f72003-04-13 22:13:08 +00001769 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1770 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001771 return NULL;
1772 }
1773
Tim Peters874e1f72003-04-13 22:13:08 +00001774 /* Figure out which way we were called, supply defaults, and be
1775 * sure to incref everything so that the decrefs at the end
1776 * are correct.
1777 */
1778 assert(ilow != NULL);
1779 if (ihigh == NULL) {
1780 /* only 1 arg -- it's the upper limit */
1781 ihigh = ilow;
1782 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001783 }
Tim Peters874e1f72003-04-13 22:13:08 +00001784 assert(ihigh != NULL);
1785 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001786
Tim Peters874e1f72003-04-13 22:13:08 +00001787 /* ihigh correct now; do ilow */
1788 if (ilow == NULL)
1789 ilow = zero;
1790 Py_INCREF(ilow);
1791
1792 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001793 if (istep == NULL) {
1794 istep = PyLong_FromLong(1L);
1795 if (istep == NULL)
1796 goto Fail;
1797 }
1798 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001799 Py_INCREF(istep);
1800 }
1801
Tim Peters874e1f72003-04-13 22:13:08 +00001802 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001803 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001804 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001805 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001806 goto Fail;
1807 }
1808
Tim Peters874e1f72003-04-13 22:13:08 +00001809 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001810 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001811 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001812 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001813 goto Fail;
1814 }
1815
1816 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001817 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001818 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001819 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001820 goto Fail;
1821 }
1822
1823 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1824 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001825 if (cmp_result == 0) {
1826 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001827 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001828 goto Fail;
1829 }
1830
1831 if (cmp_result > 0)
1832 bign = get_len_of_range_longs(ilow, ihigh, istep);
1833 else {
1834 PyObject *neg_istep = PyNumber_Negative(istep);
1835 if (neg_istep == NULL)
1836 goto Fail;
1837 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1838 Py_DECREF(neg_istep);
1839 }
1840
Mark Dickinson3dc25412009-12-03 12:08:56 +00001841 n = (Py_ssize_t)bign;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001842 if (bign < 0 || (long)n != bign) {
1843 PyErr_SetString(PyExc_OverflowError,
1844 "range() result has too many items");
1845 goto Fail;
1846 }
1847
1848 v = PyList_New(n);
1849 if (v == NULL)
1850 goto Fail;
1851
1852 curnum = ilow;
1853 Py_INCREF(curnum);
1854
1855 for (i = 0; i < n; i++) {
1856 PyObject *w = PyNumber_Long(curnum);
1857 PyObject *tmp_num;
1858 if (w == NULL)
1859 goto Fail;
1860
1861 PyList_SET_ITEM(v, i, w);
1862
1863 tmp_num = PyNumber_Add(curnum, istep);
1864 if (tmp_num == NULL)
1865 goto Fail;
1866
1867 Py_DECREF(curnum);
1868 curnum = tmp_num;
1869 }
Tim Peters874e1f72003-04-13 22:13:08 +00001870 Py_DECREF(ilow);
1871 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001872 Py_DECREF(istep);
1873 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001874 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001875 return v;
1876
1877 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001878 Py_DECREF(ilow);
1879 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001880 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001881 Py_DECREF(zero);
1882 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001883 Py_XDECREF(v);
1884 return NULL;
1885}
1886
Guido van Rossum124eff01999-02-23 16:11:01 +00001887/* Return number of items in range/xrange (lo, hi, step). step > 0
1888 * required. Return a value < 0 if & only if the true value is too
1889 * large to fit in a signed long.
1890 */
1891static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001892get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001893{
1894 /* -------------------------------------------------------------
1895 If lo >= hi, the range is empty.
1896 Else if n values are in the range, the last one is
1897 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1898 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1899 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1900 the RHS is non-negative and so truncation is the same as the
1901 floor. Letting M be the largest positive long, the worst case
1902 for the RHS numerator is hi=M, lo=-M-1, and then
1903 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1904 precision to compute the RHS exactly.
1905 ---------------------------------------------------------------*/
1906 long n = 0;
1907 if (lo < hi) {
1908 unsigned long uhi = (unsigned long)hi;
1909 unsigned long ulo = (unsigned long)lo;
1910 unsigned long diff = uhi - ulo - 1;
1911 n = (long)(diff / (unsigned long)step + 1);
1912 }
1913 return n;
1914}
1915
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001917builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001918{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001919 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001920 long bign;
Mark Dickinson3dc25412009-12-03 12:08:56 +00001921 Py_ssize_t i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001922
Guido van Rossum79f25d91997-04-29 20:08:16 +00001923 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001924
Guido van Rossum79f25d91997-04-29 20:08:16 +00001925 if (PyTuple_Size(args) <= 1) {
1926 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001927 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001928 &ihigh)) {
1929 PyErr_Clear();
1930 return handle_range_longs(self, args);
1931 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001932 }
1933 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001934 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001935 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001936 &ilow, &ihigh, &istep)) {
1937 PyErr_Clear();
1938 return handle_range_longs(self, args);
1939 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001940 }
1941 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001942 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001943 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001944 return NULL;
1945 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001946 if (istep > 0)
1947 bign = get_len_of_range(ilow, ihigh, istep);
1948 else
1949 bign = get_len_of_range(ihigh, ilow, -istep);
Mark Dickinson3dc25412009-12-03 12:08:56 +00001950 n = (Py_ssize_t)bign;
Guido van Rossum124eff01999-02-23 16:11:01 +00001951 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001952 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001953 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001954 return NULL;
1955 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001957 if (v == NULL)
1958 return NULL;
1959 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001960 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001961 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001962 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001963 return NULL;
1964 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001965 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001966 ilow += istep;
1967 }
1968 return v;
1969}
1970
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001971PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001972"range([start,] stop[, step]) -> list of integers\n\
1973\n\
1974Return a list containing an arithmetic progression of integers.\n\
1975range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1976When step is given, it specifies the increment (or decrement).\n\
1977For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001978These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001979
1980
Guido van Rossum79f25d91997-04-29 20:08:16 +00001981static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001982builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001983{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001984 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001985 PyObject *fin = PySys_GetObject("stdin");
1986 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001987
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001988 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001989 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001990
1991 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001992 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001993 return NULL;
1994 }
1995 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001996 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001997 return NULL;
1998 }
1999 if (PyFile_SoftSpace(fout, 0)) {
2000 if (PyFile_WriteString(" ", fout) != 0)
2001 return NULL;
2002 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00002003 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002004 && isatty(fileno(PyFile_AsFile(fin)))
2005 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002006 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00002007 char *prompt;
2008 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002009 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00002010 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002011 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00002012 if (po == NULL)
2013 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002014 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00002015 if (prompt == NULL)
2016 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00002017 }
2018 else {
2019 po = NULL;
2020 prompt = "";
2021 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00002022 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002023 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002024 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00002025 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00002026 if (!PyErr_Occurred())
2027 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00002028 return NULL;
2029 }
2030 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002031 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00002032 result = NULL;
2033 }
2034 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00002035 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00002036 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002037 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002038 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00002039 result = NULL;
2040 }
2041 else {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002042 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00002043 }
Guido van Rossum872537c1995-07-07 22:43:42 +00002044 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00002045 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00002046 return result;
2047 }
Guido van Rossum90933611991-06-07 16:10:43 +00002048 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002049 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00002050 return NULL;
2051 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002052 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002053}
2054
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002055PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002056"raw_input([prompt]) -> string\n\
2057\n\
2058Read a string from standard input. The trailing newline is stripped.\n\
2059If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
2060On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002061is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002062
2063
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002065builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002066{
Benjamin Peterson08336e32008-08-18 02:01:21 +00002067 static PyObject *functools_reduce = NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002068
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002069 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002070 "use functools.reduce()", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002071 return NULL;
2072
Benjamin Peterson08336e32008-08-18 02:01:21 +00002073 if (functools_reduce == NULL) {
2074 PyObject *functools = PyImport_ImportModule("functools");
2075 if (functools == NULL)
2076 return NULL;
2077 functools_reduce = PyObject_GetAttrString(functools, "reduce");
2078 Py_DECREF(functools);
2079 if (functools_reduce == NULL)
2080 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002081 }
Benjamin Peterson08336e32008-08-18 02:01:21 +00002082 return PyObject_Call(functools_reduce, args, NULL);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002083}
2084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002085PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002086"reduce(function, sequence[, initial]) -> value\n\
2087\n\
2088Apply a function of two arguments cumulatively to the items of a sequence,\n\
2089from left to right, so as to reduce the sequence to a single value.\n\
2090For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
2091((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
2092of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002093sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002094
2095
Guido van Rossum79f25d91997-04-29 20:08:16 +00002096static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002097builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002098{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002099 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002100 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002101 return NULL;
2102
Guido van Rossum79f25d91997-04-29 20:08:16 +00002103 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002104}
2105
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002106PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002107"reload(module) -> module\n\
2108\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002109Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002110
2111
Guido van Rossum79f25d91997-04-29 20:08:16 +00002112static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002113builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002114{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002115 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002116}
2117
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002118PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002119"repr(object) -> string\n\
2120\n\
2121Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002122For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002123
2124
Guido van Rossum79f25d91997-04-29 20:08:16 +00002125static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00002126builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002127{
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002128 double x;
2129 PyObject *o_ndigits = NULL;
2130 Py_ssize_t ndigits;
Georg Brandlccadf842006-03-31 18:54:53 +00002131 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002132
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002133 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|O:round",
2134 kwlist, &x, &o_ndigits))
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002135 return NULL;
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002136
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002137 if (o_ndigits == NULL) {
2138 /* second argument defaults to 0 */
2139 ndigits = 0;
2140 }
2141 else {
2142 /* interpret 2nd argument as a Py_ssize_t; clip on overflow */
2143 ndigits = PyNumber_AsSsize_t(o_ndigits, NULL);
2144 if (ndigits == -1 && PyErr_Occurred())
2145 return NULL;
2146 }
2147
Mark Dickinsonbce78372009-11-24 10:54:58 +00002148 /* nans, infinities and zeros round to themselves */
2149 if (!Py_IS_FINITE(x) || x == 0.0)
2150 return PyFloat_FromDouble(x);
2151
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002152 /* Deal with extreme values for ndigits. For ndigits > NDIGITS_MAX, x
2153 always rounds to itself. For ndigits < NDIGITS_MIN, x always
2154 rounds to +-0.0. Here 0.30103 is an upper bound for log10(2). */
2155#define NDIGITS_MAX ((int)((DBL_MANT_DIG-DBL_MIN_EXP) * 0.30103))
2156#define NDIGITS_MIN (-(int)((DBL_MAX_EXP + 1) * 0.30103))
2157 if (ndigits > NDIGITS_MAX)
2158 /* return x */
2159 return PyFloat_FromDouble(x);
2160 else if (ndigits < NDIGITS_MIN)
2161 /* return 0.0, but with sign of x */
2162 return PyFloat_FromDouble(0.0*x);
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002163 else
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002164 /* finite x, and ndigits is not unreasonably large */
2165 /* _Py_double_round is defined in floatobject.c */
2166 return _Py_double_round(x, (int)ndigits);
2167#undef NDIGITS_MAX
2168#undef NDIGITS_MIN
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002169}
2170
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002171PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002172"round(number[, ndigits]) -> floating point number\n\
2173\n\
2174Round a number to a given precision in decimal digits (default 0 digits).\n\
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002175This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002176
Raymond Hettinger64958a12003-12-17 20:43:33 +00002177static PyObject *
2178builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2179{
2180 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2181 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002182 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002183 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002184
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002185 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002186 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2187 kwlist, &seq, &compare, &keyfunc, &reverse))
2188 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002189
2190 newlist = PySequence_List(seq);
2191 if (newlist == NULL)
2192 return NULL;
2193
2194 callable = PyObject_GetAttrString(newlist, "sort");
2195 if (callable == NULL) {
2196 Py_DECREF(newlist);
2197 return NULL;
2198 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002199
Raymond Hettinger64958a12003-12-17 20:43:33 +00002200 newargs = PyTuple_GetSlice(args, 1, 4);
2201 if (newargs == NULL) {
2202 Py_DECREF(newlist);
2203 Py_DECREF(callable);
2204 return NULL;
2205 }
2206
2207 v = PyObject_Call(callable, newargs, kwds);
2208 Py_DECREF(newargs);
2209 Py_DECREF(callable);
2210 if (v == NULL) {
2211 Py_DECREF(newlist);
2212 return NULL;
2213 }
2214 Py_DECREF(v);
2215 return newlist;
2216}
2217
2218PyDoc_STRVAR(sorted_doc,
2219"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002220
Guido van Rossum79f25d91997-04-29 20:08:16 +00002221static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002222builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002223{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002224 PyObject *v = NULL;
2225 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002226
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002227 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002228 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002229 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002230 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002231 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002232 if (!PyErr_Occurred())
2233 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002234 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002235 }
2236 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002237 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002238 }
2239 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002240 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002241 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002242 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002243 "vars() argument must have __dict__ attribute");
2244 return NULL;
2245 }
2246 }
2247 return d;
2248}
2249
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002250PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002251"vars([object]) -> dictionary\n\
2252\n\
2253Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002254With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002255
Alex Martellia70b1912003-04-22 08:12:33 +00002256
2257static PyObject*
2258builtin_sum(PyObject *self, PyObject *args)
2259{
2260 PyObject *seq;
2261 PyObject *result = NULL;
2262 PyObject *temp, *item, *iter;
2263
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002264 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002265 return NULL;
2266
2267 iter = PyObject_GetIter(seq);
2268 if (iter == NULL)
2269 return NULL;
2270
2271 if (result == NULL) {
2272 result = PyInt_FromLong(0);
2273 if (result == NULL) {
2274 Py_DECREF(iter);
2275 return NULL;
2276 }
2277 } else {
2278 /* reject string values for 'start' parameter */
2279 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2280 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002281 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002282 Py_DECREF(iter);
2283 return NULL;
2284 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002285 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002286 }
2287
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002288#ifndef SLOW_SUM
2289 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2290 Assumes all inputs are the same type. If the assumption fails, default
2291 to the more general routine.
2292 */
2293 if (PyInt_CheckExact(result)) {
2294 long i_result = PyInt_AS_LONG(result);
2295 Py_DECREF(result);
2296 result = NULL;
2297 while(result == NULL) {
2298 item = PyIter_Next(iter);
2299 if (item == NULL) {
2300 Py_DECREF(iter);
2301 if (PyErr_Occurred())
2302 return NULL;
2303 return PyInt_FromLong(i_result);
2304 }
2305 if (PyInt_CheckExact(item)) {
2306 long b = PyInt_AS_LONG(item);
2307 long x = i_result + b;
2308 if ((x^i_result) >= 0 || (x^b) >= 0) {
2309 i_result = x;
2310 Py_DECREF(item);
2311 continue;
2312 }
2313 }
2314 /* Either overflowed or is not an int. Restore real objects and process normally */
2315 result = PyInt_FromLong(i_result);
2316 temp = PyNumber_Add(result, item);
2317 Py_DECREF(result);
2318 Py_DECREF(item);
2319 result = temp;
2320 if (result == NULL) {
2321 Py_DECREF(iter);
2322 return NULL;
2323 }
2324 }
2325 }
2326
2327 if (PyFloat_CheckExact(result)) {
2328 double f_result = PyFloat_AS_DOUBLE(result);
2329 Py_DECREF(result);
2330 result = NULL;
2331 while(result == NULL) {
2332 item = PyIter_Next(iter);
2333 if (item == NULL) {
2334 Py_DECREF(iter);
2335 if (PyErr_Occurred())
2336 return NULL;
2337 return PyFloat_FromDouble(f_result);
2338 }
2339 if (PyFloat_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002340 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002341 f_result += PyFloat_AS_DOUBLE(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002342 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002343 Py_DECREF(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002344 continue;
2345 }
2346 if (PyInt_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002347 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002348 f_result += (double)PyInt_AS_LONG(item);
2349 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002350 Py_DECREF(item);
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002351 continue;
2352 }
2353 result = PyFloat_FromDouble(f_result);
2354 temp = PyNumber_Add(result, item);
2355 Py_DECREF(result);
2356 Py_DECREF(item);
2357 result = temp;
2358 if (result == NULL) {
2359 Py_DECREF(iter);
2360 return NULL;
2361 }
2362 }
2363 }
2364#endif
2365
Alex Martellia70b1912003-04-22 08:12:33 +00002366 for(;;) {
2367 item = PyIter_Next(iter);
2368 if (item == NULL) {
2369 /* error, or end-of-sequence */
2370 if (PyErr_Occurred()) {
2371 Py_DECREF(result);
2372 result = NULL;
2373 }
2374 break;
2375 }
Mark Dickinson0e0e2152009-10-26 14:18:44 +00002376 /* It's tempting to use PyNumber_InPlaceAdd instead of
2377 PyNumber_Add here, to avoid quadratic running time
2378 when doing 'sum(list_of_lists, [])'. However, this
2379 would produce a change in behaviour: a snippet like
2380
2381 empty = []
2382 sum([[x] for x in range(10)], empty)
2383
2384 would change the value of empty. */
Alex Martellia253e182003-10-25 23:24:14 +00002385 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002386 Py_DECREF(result);
2387 Py_DECREF(item);
2388 result = temp;
2389 if (result == NULL)
2390 break;
2391 }
2392 Py_DECREF(iter);
2393 return result;
2394}
2395
2396PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002397"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002398\n\
2399Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002400of parameter 'start' (which defaults to 0). When the sequence is\n\
2401empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002402
2403
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002404static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002405builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002406{
2407 PyObject *inst;
2408 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002409 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002410
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002411 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002412 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002413
Guido van Rossum823649d2001-03-21 18:40:58 +00002414 retval = PyObject_IsInstance(inst, cls);
2415 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002416 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002417 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002418}
2419
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002420PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002421"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002422\n\
2423Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002424With a type as second argument, return whether that is the object's type.\n\
2425The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002426isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002427
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002428
2429static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002430builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002431{
2432 PyObject *derived;
2433 PyObject *cls;
2434 int retval;
2435
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002436 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002437 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002438
Guido van Rossum823649d2001-03-21 18:40:58 +00002439 retval = PyObject_IsSubclass(derived, cls);
2440 if (retval < 0)
2441 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002442 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002443}
2444
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002445PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002446"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002447\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002448Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2449When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2450is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002451
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002452
Barry Warsawbd599b52000-08-03 15:45:29 +00002453static PyObject*
2454builtin_zip(PyObject *self, PyObject *args)
2455{
2456 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002457 const Py_ssize_t itemsize = PySequence_Length(args);
2458 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002459 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002460 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002461
Raymond Hettingereaef6152003-08-02 07:42:57 +00002462 if (itemsize == 0)
2463 return PyList_New(0);
2464
Barry Warsawbd599b52000-08-03 15:45:29 +00002465 /* args must be a tuple */
2466 assert(PyTuple_Check(args));
2467
Tim Peters39a86c22002-05-12 07:19:38 +00002468 /* Guess at result length: the shortest of the input lengths.
2469 If some argument refuses to say, we refuse to guess too, lest
2470 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002471 len = -1; /* unknown */
2472 for (i = 0; i < itemsize; ++i) {
2473 PyObject *item = PyTuple_GET_ITEM(args, i);
Benjamin Peterson4c1fe512009-05-09 19:17:59 +00002474 Py_ssize_t thislen = _PyObject_LengthHint(item, -2);
Tim Peters39a86c22002-05-12 07:19:38 +00002475 if (thislen < 0) {
Benjamin Peterson4c1fe512009-05-09 19:17:59 +00002476 if (thislen == -1)
2477 return NULL;
Tim Peters39a86c22002-05-12 07:19:38 +00002478 len = -1;
2479 break;
2480 }
Tim Peters67d687a2002-04-29 21:27:32 +00002481 else if (len < 0 || thislen < len)
2482 len = thislen;
2483 }
2484
Tim Peters8572b4f2001-05-06 01:05:02 +00002485 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002486 if (len < 0)
2487 len = 10; /* arbitrary */
2488 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002489 return NULL;
2490
Tim Peters8572b4f2001-05-06 01:05:02 +00002491 /* obtain iterators */
2492 itlist = PyTuple_New(itemsize);
2493 if (itlist == NULL)
2494 goto Fail_ret;
2495 for (i = 0; i < itemsize; ++i) {
2496 PyObject *item = PyTuple_GET_ITEM(args, i);
2497 PyObject *it = PyObject_GetIter(item);
Benjamin Petersond692a712009-09-07 13:02:15 +00002498 if (it == NULL) {
2499 if (PyErr_ExceptionMatches(PyExc_TypeError))
2500 PyErr_Format(PyExc_TypeError,
2501 "zip argument #%zd must support iteration",
2502 i+1);
Tim Peters8572b4f2001-05-06 01:05:02 +00002503 goto Fail_ret_itlist;
Benjamin Petersond692a712009-09-07 13:02:15 +00002504 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002505 PyTuple_SET_ITEM(itlist, i, it);
2506 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002507
Tim Peters8572b4f2001-05-06 01:05:02 +00002508 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002509 for (i = 0; ; ++i) {
2510 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002511 PyObject *next = PyTuple_New(itemsize);
2512 if (!next)
2513 goto Fail_ret_itlist;
2514
Tim Peters67d687a2002-04-29 21:27:32 +00002515 for (j = 0; j < itemsize; j++) {
2516 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002517 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002518 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002519 if (PyErr_Occurred()) {
2520 Py_DECREF(ret);
2521 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002522 }
2523 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002524 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002525 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002526 }
Tim Peters67d687a2002-04-29 21:27:32 +00002527 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002528 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002529
Tim Peters67d687a2002-04-29 21:27:32 +00002530 if (i < len)
2531 PyList_SET_ITEM(ret, i, next);
2532 else {
2533 int status = PyList_Append(ret, next);
2534 Py_DECREF(next);
2535 ++len;
2536 if (status < 0)
2537 goto Fail_ret_itlist;
2538 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002539 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002540
Tim Peters67d687a2002-04-29 21:27:32 +00002541Done:
2542 if (ret != NULL && i < len) {
2543 /* The list is too big. */
2544 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2545 return NULL;
2546 }
2547 return ret;
2548
Tim Peters8572b4f2001-05-06 01:05:02 +00002549Fail_ret_itlist:
2550 Py_DECREF(itlist);
2551Fail_ret:
2552 Py_DECREF(ret);
2553 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002554}
2555
2556
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002557PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002558"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2559\n\
2560Return a list of tuples, where each tuple contains the i-th element\n\
2561from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002562in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002563
2564
Guido van Rossum79f25d91997-04-29 20:08:16 +00002565static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002566 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002567 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002568 {"all", builtin_all, METH_O, all_doc},
2569 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002570 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Eric Smith3cd81942008-02-22 16:30:22 +00002571 {"bin", builtin_bin, METH_O, bin_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002572 {"callable", builtin_callable, METH_O, callable_doc},
2573 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2574 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2575 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
Georg Brandl5240d742007-03-13 20:46:32 +00002576 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002577 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2578 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2579 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2580 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2581 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2582 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smitha9f7d622008-02-17 19:46:49 +00002583 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002584 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2585 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2586 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2587 {"hash", builtin_hash, METH_O, hash_doc},
2588 {"hex", builtin_hex, METH_O, hex_doc},
2589 {"id", builtin_id, METH_O, id_doc},
2590 {"input", builtin_input, METH_VARARGS, input_doc},
2591 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2592 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2593 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2594 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2595 {"len", builtin_len, METH_O, len_doc},
2596 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2597 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002598 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2599 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandl28e08732008-04-30 19:47:09 +00002600 {"next", builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002601 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002602 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002603 {"ord", builtin_ord, METH_O, ord_doc},
2604 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Eric Smith7c478942008-03-18 23:45:49 +00002605 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002606 {"range", builtin_range, METH_VARARGS, range_doc},
2607 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2608 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2609 {"reload", builtin_reload, METH_O, reload_doc},
2610 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002611 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002612 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002613 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002614 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002615#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002616 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002617#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002618 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002619 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002620 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002621};
2622
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002623PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002624"Built-in functions, exceptions, and other objects.\n\
2625\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002626Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002627
Guido van Rossum25ce5661997-08-02 03:10:38 +00002628PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002629_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002630{
Fred Drake5550de32000-06-20 04:54:19 +00002631 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002632 mod = Py_InitModule4("__builtin__", builtin_methods,
2633 builtin_doc, (PyObject *)NULL,
2634 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002635 if (mod == NULL)
2636 return NULL;
2637 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002638
Tim Peters7571a0f2003-03-23 17:52:28 +00002639#ifdef Py_TRACE_REFS
2640 /* __builtin__ exposes a number of statically allocated objects
2641 * that, before this code was added in 2.3, never showed up in
2642 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2643 * result, programs leaking references to None and False (etc)
2644 * couldn't be diagnosed by examining sys.getobjects(0).
2645 */
2646#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2647#else
2648#define ADD_TO_ALL(OBJECT) (void)0
2649#endif
2650
Tim Peters4b7625e2001-09-13 21:37:17 +00002651#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002652 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2653 return NULL; \
2654 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002655
2656 SETBUILTIN("None", Py_None);
2657 SETBUILTIN("Ellipsis", Py_Ellipsis);
2658 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002659 SETBUILTIN("False", Py_False);
2660 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002661 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002662 SETBUILTIN("bool", &PyBool_Type);
Antoine Pitrou789be0c2009-04-02 21:18:34 +00002663 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes3497f942008-05-26 12:29:14 +00002664 SETBUILTIN("bytearray", &PyByteArray_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002665 SETBUILTIN("bytes", &PyString_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002666 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002667 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002668#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002669 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002670#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002671 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002672 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002673 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002674 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002675 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002676 SETBUILTIN("property", &PyProperty_Type);
2677 SETBUILTIN("int", &PyInt_Type);
2678 SETBUILTIN("list", &PyList_Type);
2679 SETBUILTIN("long", &PyLong_Type);
2680 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002681 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002682 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002683 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002684 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002685 SETBUILTIN("str", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002686 SETBUILTIN("super", &PySuper_Type);
2687 SETBUILTIN("tuple", &PyTuple_Type);
2688 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002689 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002690#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002691 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002692#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002693 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002694 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2695 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002696 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002697 }
2698 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002699
Guido van Rossum25ce5661997-08-02 03:10:38 +00002700 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002701#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002702#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002703}
2704
Guido van Rossume77a7571993-11-03 15:01:26 +00002705/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002706
Guido van Rossum79f25d91997-04-29 20:08:16 +00002707static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002708filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002709{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002710 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002711 Py_ssize_t i, j;
2712 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002713
Guido van Rossumb7b45621995-08-04 04:07:45 +00002714 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002715 if (PyTuple_CheckExact(tuple))
2716 Py_INCREF(tuple);
2717 else
2718 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002719 return tuple;
2720 }
2721
Guido van Rossum79f25d91997-04-29 20:08:16 +00002722 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002723 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002724
Guido van Rossum12d12c51993-10-26 17:58:25 +00002725 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002726 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002727 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002728
Walter Dörwald8dd19322003-02-10 17:36:40 +00002729 if (tuple->ob_type->tp_as_sequence &&
2730 tuple->ob_type->tp_as_sequence->sq_item) {
2731 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002732 if (item == NULL)
2733 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002734 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002735 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002736 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002737 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002738 if (func == Py_None) {
2739 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002740 good = item;
2741 }
2742 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002743 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002744 if (arg == NULL) {
2745 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002746 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002747 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002748 good = PyEval_CallObject(func, arg);
2749 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002750 if (good == NULL) {
2751 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002752 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002753 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002754 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002755 ok = PyObject_IsTrue(good);
2756 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002757 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002758 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002759 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002760 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002761 else
2762 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002763 }
2764
Tim Peters4324aa32001-05-28 22:30:08 +00002765 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002766 return NULL;
2767
Guido van Rossum12d12c51993-10-26 17:58:25 +00002768 return result;
2769
Guido van Rossum12d12c51993-10-26 17:58:25 +00002770Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002771 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002772 return NULL;
2773}
2774
2775
Guido van Rossume77a7571993-11-03 15:01:26 +00002776/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002777
Guido van Rossum79f25d91997-04-29 20:08:16 +00002778static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002779filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002780{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002781 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002782 Py_ssize_t i, j;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002783 Py_ssize_t len = PyString_Size(strobj);
Martin v. Löwis18e16552006-02-15 17:27:45 +00002784 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002785
Guido van Rossum79f25d91997-04-29 20:08:16 +00002786 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002787 /* If it's a real string we can return the original,
2788 * as no character is ever false and __getitem__
2789 * does return this character. If it's a subclass
2790 * we must go through the __getitem__ loop */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002791 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002792 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002793 return strobj;
2794 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002795 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002796 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002797 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002798
Guido van Rossum12d12c51993-10-26 17:58:25 +00002799 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002800 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002801 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002802
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002803 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2804 if (item == NULL)
2805 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002806 if (func==Py_None) {
2807 ok = 1;
2808 } else {
2809 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002810 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002811 if (arg == NULL) {
2812 Py_DECREF(item);
2813 goto Fail_1;
2814 }
2815 good = PyEval_CallObject(func, arg);
2816 Py_DECREF(arg);
2817 if (good == NULL) {
2818 Py_DECREF(item);
2819 goto Fail_1;
2820 }
2821 ok = PyObject_IsTrue(good);
2822 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002823 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002824 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002825 Py_ssize_t reslen;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002826 if (!PyString_Check(item)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002827 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2828 " __getitem__ returned different type");
2829 Py_DECREF(item);
2830 goto Fail_1;
2831 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002832 reslen = PyString_GET_SIZE(item);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002833 if (reslen == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002834 PyString_AS_STRING(result)[j++] =
2835 PyString_AS_STRING(item)[0];
Walter Dörwald903f1e02003-02-04 16:28:00 +00002836 } else {
2837 /* do we need more space? */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002838 Py_ssize_t need = j;
2839
2840 /* calculate space requirements while checking for overflow */
2841 if (need > PY_SSIZE_T_MAX - reslen) {
2842 Py_DECREF(item);
2843 goto Fail_1;
2844 }
2845
2846 need += reslen;
2847
2848 if (need > PY_SSIZE_T_MAX - len) {
2849 Py_DECREF(item);
2850 goto Fail_1;
2851 }
2852
2853 need += len;
2854
2855 if (need <= i) {
2856 Py_DECREF(item);
2857 goto Fail_1;
2858 }
2859
2860 need = need - i - 1;
2861
2862 assert(need >= 0);
2863 assert(outlen >= 0);
2864
Walter Dörwald903f1e02003-02-04 16:28:00 +00002865 if (need > outlen) {
2866 /* overallocate, to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002867 if (outlen > PY_SSIZE_T_MAX / 2) {
2868 Py_DECREF(item);
2869 return NULL;
2870 }
2871
2872 if (need<2*outlen) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002873 need = 2*outlen;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002874 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002875 if (_PyString_Resize(&result, need)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002876 Py_DECREF(item);
2877 return NULL;
2878 }
2879 outlen = need;
2880 }
2881 memcpy(
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002882 PyString_AS_STRING(result) + j,
2883 PyString_AS_STRING(item),
Walter Dörwald903f1e02003-02-04 16:28:00 +00002884 reslen
2885 );
2886 j += reslen;
2887 }
2888 }
Tim Peters388ed082001-04-07 20:34:48 +00002889 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002890 }
2891
Walter Dörwald903f1e02003-02-04 16:28:00 +00002892 if (j < outlen)
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002893 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002894
Guido van Rossum12d12c51993-10-26 17:58:25 +00002895 return result;
2896
Guido van Rossum12d12c51993-10-26 17:58:25 +00002897Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002898 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002899 return NULL;
2900}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002901
2902#ifdef Py_USING_UNICODE
2903/* Helper for filter(): filter a Unicode object through a function */
2904
2905static PyObject *
2906filterunicode(PyObject *func, PyObject *strobj)
2907{
2908 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002909 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002910 Py_ssize_t len = PyUnicode_GetSize(strobj);
2911 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002912
2913 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002914 /* If it's a real string we can return the original,
2915 * as no character is ever false and __getitem__
2916 * does return this character. If it's a subclass
2917 * we must go through the __getitem__ loop */
2918 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002919 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002920 return strobj;
2921 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002922 }
2923 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2924 return NULL;
2925
2926 for (i = j = 0; i < len; ++i) {
2927 PyObject *item, *arg, *good;
2928 int ok;
2929
2930 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2931 if (item == NULL)
2932 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002933 if (func == Py_None) {
2934 ok = 1;
2935 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002936 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002937 if (arg == NULL) {
2938 Py_DECREF(item);
2939 goto Fail_1;
2940 }
2941 good = PyEval_CallObject(func, arg);
2942 Py_DECREF(arg);
2943 if (good == NULL) {
2944 Py_DECREF(item);
2945 goto Fail_1;
2946 }
2947 ok = PyObject_IsTrue(good);
2948 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002949 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002950 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002951 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002952 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002953 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002954 "can't filter unicode to unicode:"
2955 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002956 Py_DECREF(item);
2957 goto Fail_1;
2958 }
2959 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002960 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002961 PyUnicode_AS_UNICODE(result)[j++] =
2962 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002963 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002964 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002965 Py_ssize_t need = j + reslen + len - i - 1;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002966
2967 /* check that didnt overflow */
2968 if ((j > PY_SSIZE_T_MAX - reslen) ||
2969 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
2970 ((j + reslen + len) < i) ||
2971 ((j + reslen + len - i) <= 0)) {
2972 Py_DECREF(item);
2973 return NULL;
2974 }
2975
2976 assert(need >= 0);
2977 assert(outlen >= 0);
2978
Walter Dörwald903f1e02003-02-04 16:28:00 +00002979 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002980 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002981 to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002982 if (need < 2 * outlen) {
2983 if (outlen > PY_SSIZE_T_MAX / 2) {
2984 Py_DECREF(item);
2985 return NULL;
2986 } else {
2987 need = 2 * outlen;
2988 }
2989 }
2990
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002991 if (PyUnicode_Resize(
2992 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002993 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002994 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002995 }
2996 outlen = need;
2997 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002998 memcpy(PyUnicode_AS_UNICODE(result) + j,
2999 PyUnicode_AS_UNICODE(item),
3000 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00003001 j += reslen;
3002 }
3003 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00003004 Py_DECREF(item);
3005 }
3006
Walter Dörwald903f1e02003-02-04 16:28:00 +00003007 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00003008 PyUnicode_Resize(&result, j);
3009
3010 return result;
3011
3012Fail_1:
3013 Py_DECREF(result);
3014 return NULL;
3015}
3016#endif