blob: b201aaf7877511043cab1c3ff27e7f4deb46063f [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;
Tim Peters5ba58662001-07-16 02:29:45 +0000469 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000470 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000471 Py_ssize_t length;
Georg Brandl5240d742007-03-13 20:46:32 +0000472 static char *kwlist[] = {"source", "filename", "mode", "flags",
473 "dont_inherit", NULL};
Georg Brandlf2bfd542008-03-29 13:24:23 +0000474 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000475
Georg Brandl5240d742007-03-13 20:46:32 +0000476 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
477 kwlist, &cmd, &filename, &startstr,
478 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000479 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000480
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000481 cf.cf_flags = supplied_flags;
482
Georg Brandlfc8eef32008-03-28 12:11:56 +0000483 if (supplied_flags &
484 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
485 {
486 PyErr_SetString(PyExc_ValueError,
487 "compile(): unrecognised flags");
488 return NULL;
489 }
490 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
491
492 if (!dont_inherit) {
493 PyEval_MergeCompilerFlags(&cf);
494 }
495
Georg Brandlf2bfd542008-03-29 13:24:23 +0000496 if (strcmp(startstr, "exec") == 0)
497 mode = 0;
498 else if (strcmp(startstr, "eval") == 0)
499 mode = 1;
500 else if (strcmp(startstr, "single") == 0)
501 mode = 2;
502 else {
503 PyErr_SetString(PyExc_ValueError,
504 "compile() arg 3 must be 'exec', 'eval' or 'single'");
505 return NULL;
506 }
507
Georg Brandlfc8eef32008-03-28 12:11:56 +0000508 if (PyAST_Check(cmd)) {
509 if (supplied_flags & PyCF_ONLY_AST) {
510 Py_INCREF(cmd);
511 result = cmd;
512 }
513 else {
514 PyArena *arena;
515 mod_ty mod;
516
517 arena = PyArena_New();
Georg Brandlf2bfd542008-03-29 13:24:23 +0000518 mod = PyAST_obj2mod(cmd, arena, mode);
Georg Brandlfc8eef32008-03-28 12:11:56 +0000519 if (mod == NULL) {
520 PyArena_Free(arena);
521 return NULL;
522 }
523 result = (PyObject*)PyAST_Compile(mod, filename,
524 &cf, arena);
525 PyArena_Free(arena);
526 }
527 return result;
528 }
529
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000530#ifdef Py_USING_UNICODE
531 if (PyUnicode_Check(cmd)) {
532 tmp = PyUnicode_AsUTF8String(cmd);
533 if (tmp == NULL)
534 return NULL;
535 cmd = tmp;
536 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
537 }
538#endif
Tim Peters6cd6a822001-08-17 22:11:27 +0000539
Georg Brandlfc8eef32008-03-28 12:11:56 +0000540 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000541 goto cleanup;
Georg Brandlfc8eef32008-03-28 12:11:56 +0000542 if ((size_t)length != strlen(str)) {
543 PyErr_SetString(PyExc_TypeError,
544 "compile() expected string without null bytes");
545 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000546 }
Georg Brandlf2bfd542008-03-29 13:24:23 +0000547 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000548cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000549 Py_XDECREF(tmp);
550 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000551}
552
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000553PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000554"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000555\n\
556Compile the source string (a Python module, statement or expression)\n\
557into a code object that can be executed by the exec statement or eval().\n\
558The filename will be used for run-time error messages.\n\
559The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000560single (interactive) statement, or 'eval' to compile an expression.\n\
561The flags argument, if present, controls which future statements influence\n\
562the compilation of the code.\n\
563The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
564the effects of any future statements in effect in the code calling\n\
565compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000566in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000567
Guido van Rossum79f25d91997-04-29 20:08:16 +0000568static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000569builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000570{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000571 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000573 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000574 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000575 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000576}
577
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000578PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000579"dir([object]) -> list of strings\n"
580"\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000581"If called without an argument, return the names in the current scope.\n"
582"Else, return an alphabetized list of names comprising (some of) the attributes\n"
583"of the given object, and of attributes reachable from it.\n"
584"If the object supplies a method named __dir__, it will be used; otherwise\n"
585"the default dir() logic is used and returns:\n"
586" for a module object: the module's attributes.\n"
587" for a class object: its attributes, and recursively the attributes\n"
588" of its bases.\n"
Georg Brandl3bb15672007-03-13 07:23:16 +0000589" for any other object: its attributes, its class's attributes, and\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000590" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000591
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000593builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000594{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000596
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000597 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000598 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000599 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000600}
601
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000602PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000603"divmod(x, y) -> (div, mod)\n\
604\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000605Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000606
607
Guido van Rossum79f25d91997-04-29 20:08:16 +0000608static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000609builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000610{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000611 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000613 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000614 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000615
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000616 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000617 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000618 if (locals != Py_None && !PyMapping_Check(locals)) {
619 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000620 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000621 }
622 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000623 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000624 "globals must be a real dict; try eval(expr, {}, mapping)"
625 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000626 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000627 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628 if (globals == Py_None) {
629 globals = PyEval_GetGlobals();
630 if (locals == Py_None)
631 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000632 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000634 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000635
Georg Brandl77c85e62005-09-15 10:46:13 +0000636 if (globals == NULL || locals == NULL) {
637 PyErr_SetString(PyExc_TypeError,
638 "eval must be given globals and locals "
639 "when called without a frame");
640 return NULL;
641 }
642
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
644 if (PyDict_SetItemString(globals, "__builtins__",
645 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000646 return NULL;
647 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000648
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000649 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000650 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000651 PyErr_SetString(PyExc_TypeError,
652 "code object passed to eval() may not contain free variables");
653 return NULL;
654 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000656 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000657
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000658 if (!PyString_Check(cmd) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000659 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000661 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000662 return NULL;
663 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000664 cf.cf_flags = 0;
665
666#ifdef Py_USING_UNICODE
667 if (PyUnicode_Check(cmd)) {
668 tmp = PyUnicode_AsUTF8String(cmd);
669 if (tmp == NULL)
670 return NULL;
671 cmd = tmp;
672 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
673 }
674#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000675 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000676 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000677 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000678 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000679 while (*str == ' ' || *str == '\t')
680 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000681
Tim Peters9fa96be2001-08-17 23:04:59 +0000682 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000683 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
684 Py_XDECREF(tmp);
685 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000686}
687
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000688PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000689"eval(source[, globals[, locals]]) -> value\n\
690\n\
691Evaluate the source in the context of globals and locals.\n\
692The source may be a string representing a Python expression\n\
693or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000694The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000695defaulting to the current globals and locals.\n\
696If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000697
698
Guido van Rossum79f25d91997-04-29 20:08:16 +0000699static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000700builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000701{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000702 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 PyObject *globals = Py_None, *locals = Py_None;
704 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000705 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000706 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000707 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000708
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000709 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000710 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000711 return NULL;
712
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000713 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000714 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000715 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000716 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000717 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000718 if (locals != Py_None && !PyMapping_Check(locals)) {
719 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
720 return NULL;
721 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722 if (globals == Py_None) {
723 globals = PyEval_GetGlobals();
724 if (locals == Py_None)
725 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000726 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000728 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
730 if (PyDict_SetItemString(globals, "__builtins__",
731 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000732 return NULL;
733 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000734
735 exists = 0;
736 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000737#if defined(PLAN9)
738 {
739 Dir *d;
740
741 if ((d = dirstat(filename))!=nil) {
742 if(d->mode & DMDIR)
743 werrstr("is a directory");
744 else
745 exists = 1;
746 free(d);
747 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000748 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000749#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000750 if (object_exists(filename)) {
751 if (isdir(filename))
752 errno = EISDIR;
753 else
754 exists = 1;
755 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000756#else /* standard Posix */
757 {
758 struct stat s;
759 if (stat(filename, &s) == 0) {
760 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000761# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000762 errno = EOS2ERR;
763# else
764 errno = EISDIR;
765# endif
766 else
767 exists = 1;
768 }
769 }
770#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000771
772 if (exists) {
773 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000774 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000775 Py_END_ALLOW_THREADS
776
777 if (fp == NULL) {
778 exists = 0;
779 }
780 }
781
782 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000783 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000784 return NULL;
785 }
Tim Peters5ba58662001-07-16 02:29:45 +0000786 cf.cf_flags = 0;
787 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000788 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000789 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000790 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000791 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000792 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000793 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000794}
795
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000796PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000797"execfile(filename[, globals[, locals]])\n\
798\n\
799Read and execute a Python script from a file.\n\
800The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000801globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000802
803
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000805builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000806{
Guido van Rossum950ff291998-06-29 13:38:57 +0000807 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000809
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000810 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000811 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000812#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000813 if (PyUnicode_Check(name)) {
814 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
815 if (name == NULL)
816 return NULL;
817 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000818#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000819
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000820 if (!PyString_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000821 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000822 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000823 return NULL;
824 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000825 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000826 if (result == NULL && dflt != NULL &&
827 PyErr_ExceptionMatches(PyExc_AttributeError))
828 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000829 PyErr_Clear();
830 Py_INCREF(dflt);
831 result = dflt;
832 }
833 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000834}
835
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000836PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000837"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000838\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000839Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
840When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000841exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000842
843
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000845builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000846{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000848
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000850 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000851 return d;
852}
853
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000854PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000855"globals() -> dictionary\n\
856\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000857Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000858
859
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000861builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000862{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 PyObject *v;
864 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000866 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000867 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000868#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000869 if (PyUnicode_Check(name)) {
870 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
871 if (name == NULL)
872 return NULL;
873 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000874#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000875
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000876 if (!PyString_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000877 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000878 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000879 return NULL;
880 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000881 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000882 if (v == NULL) {
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000883 if (!PyErr_ExceptionMatches(PyExc_Exception))
884 return NULL;
885 else {
886 PyErr_Clear();
887 Py_INCREF(Py_False);
888 return Py_False;
889 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000890 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000892 Py_INCREF(Py_True);
893 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000894}
895
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000896PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000897"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898\n\
899Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000900(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000901
902
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000904builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000905{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000906 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000907}
908
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000909PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000910"id(object) -> integer\n\
911\n\
912Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000913simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914
915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000917builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000918{
919 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000920 PyObject *it; /* the iterator object */
921 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000922 } sequence;
923
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000925 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000926 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000927 register int i, j;
928
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000930 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931 PyErr_SetString(PyExc_TypeError,
932 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000933 return NULL;
934 }
935
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000938
Neal Norwitz53152a12008-02-24 02:20:25 +0000939 if (func == Py_None) {
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000940 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000941 "use list(...)", 1) < 0)
Neal Norwitz53152a12008-02-24 02:20:25 +0000942 return NULL;
943 if (n == 1) {
944 /* map(None, S) is the same as list(S). */
945 return PySequence_List(PyTuple_GetItem(args, 1));
946 }
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000947 }
948
Tim Peters4e9afdc2001-05-03 23:54:49 +0000949 /* Get space for sequence descriptors. Must NULL out the iterator
950 * pointers so that jumping to Fail_2 later doesn't see trash.
951 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
953 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000954 return NULL;
955 }
956 for (i = 0; i < n; ++i) {
957 seqs[i].it = (PyObject*)NULL;
958 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000959 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000960
Tim Peters4e9afdc2001-05-03 23:54:49 +0000961 /* Do a first pass to obtain iterators for the arguments, and set len
962 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000963 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000964 len = 0;
965 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
966 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000967 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000968
Tim Peters4e9afdc2001-05-03 23:54:49 +0000969 /* Get iterator. */
970 curseq = PyTuple_GetItem(args, i+1);
971 sqp->it = PyObject_GetIter(curseq);
Benjamin Petersond692a712009-09-07 13:02:15 +0000972 if (sqp->it == NULL) {
973 static char errmsg[] =
974 "argument %d to map() must support iteration";
975 char errbuf[sizeof(errmsg) + 25];
976 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
977 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000978 goto Fail_2;
Benjamin Petersond692a712009-09-07 13:02:15 +0000979 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000980
Tim Peters4e9afdc2001-05-03 23:54:49 +0000981 /* Update len. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000982 curlen = _PyObject_LengthHint(curseq, 8);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000983 if (curlen > len)
984 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000985 }
986
Tim Peters4e9afdc2001-05-03 23:54:49 +0000987 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000989 goto Fail_2;
990
Tim Peters4e9afdc2001-05-03 23:54:49 +0000991 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000992 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000993 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000994 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000995
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000997 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000998 else if ((alist = PyTuple_New(n)) == NULL)
999 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001000
1001 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001002 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003 Py_INCREF(Py_None);
1004 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001005 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001006 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001007 item = PyIter_Next(sqp->it);
1008 if (item)
1009 ++numactive;
1010 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001011 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001012 Py_XDECREF(alist);
1013 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001014 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 Py_INCREF(Py_None);
1016 item = Py_None;
1017 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001018 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001019 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001020 if (alist)
1021 PyTuple_SET_ITEM(alist, j, item);
1022 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001023 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001024 }
1025
Guido van Rossum32120311995-07-10 13:52:21 +00001026 if (!alist)
1027 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001028
Tim Peters4e9afdc2001-05-03 23:54:49 +00001029 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001030 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001031 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001032 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001033
Guido van Rossum79f25d91997-04-29 20:08:16 +00001034 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001035 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001036 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037 value = PyEval_CallObject(func, alist);
1038 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001039 if (value == NULL)
1040 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001041 }
1042 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001043 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001044 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001045 if (status < 0)
1046 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001047 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001048 else if (PyList_SetItem(result, i, value) < 0)
1049 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001050 }
1051
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001052 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1053 goto Fail_1;
1054
Tim Peters4e9afdc2001-05-03 23:54:49 +00001055 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001056
Guido van Rossum12d12c51993-10-26 17:58:25 +00001057Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001058 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001060 result = NULL;
1061Succeed:
1062 assert(seqs);
1063 for (i = 0; i < n; ++i)
1064 Py_XDECREF(seqs[i].it);
1065 PyMem_DEL(seqs);
1066 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001067}
1068
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001069PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001070"map(function, sequence[, sequence, ...]) -> list\n\
1071\n\
1072Return a list of the results of applying the function to the items of\n\
1073the argument sequence(s). If more than one sequence is given, the\n\
1074function is called with an argument list consisting of the corresponding\n\
1075item of each sequence, substituting None for missing values when not all\n\
1076sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001077the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001078
1079
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080static PyObject *
Georg Brandl28e08732008-04-30 19:47:09 +00001081builtin_next(PyObject *self, PyObject *args)
1082{
1083 PyObject *it, *res;
1084 PyObject *def = NULL;
1085
1086 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1087 return NULL;
1088 if (!PyIter_Check(it)) {
1089 PyErr_Format(PyExc_TypeError,
1090 "%.200s object is not an iterator",
1091 it->ob_type->tp_name);
1092 return NULL;
1093 }
1094
1095 res = (*it->ob_type->tp_iternext)(it);
1096 if (res != NULL) {
1097 return res;
1098 } else if (def != NULL) {
1099 if (PyErr_Occurred()) {
1100 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
1101 return NULL;
1102 PyErr_Clear();
1103 }
1104 Py_INCREF(def);
1105 return def;
1106 } else if (PyErr_Occurred()) {
1107 return NULL;
1108 } else {
1109 PyErr_SetNone(PyExc_StopIteration);
1110 return NULL;
1111 }
1112}
1113
1114PyDoc_STRVAR(next_doc,
1115"next(iterator[, default])\n\
1116\n\
1117Return the next item from the iterator. If default is given and the iterator\n\
1118is exhausted, it is returned instead of raising StopIteration.");
1119
1120
1121static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001122builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001123{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001124 PyObject *v;
1125 PyObject *name;
1126 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001127
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001128 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001129 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001130 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001131 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001132 Py_INCREF(Py_None);
1133 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001134}
1135
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001136PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001137"setattr(object, name, value)\n\
1138\n\
1139Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001140``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001141
1142
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001144builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001145{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146 PyObject *v;
1147 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001148
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001149 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001150 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001151 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001152 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001153 Py_INCREF(Py_None);
1154 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001155}
1156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001157PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001158"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001159\n\
1160Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001161``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001162
1163
Guido van Rossum79f25d91997-04-29 20:08:16 +00001164static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001165builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001166{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001167 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001168
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001170 if (x == -1)
1171 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001173}
1174
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001175PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001176"hash(object) -> integer\n\
1177\n\
1178Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001179the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001180
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001183builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001184{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001186 PyObject *res;
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001187
1188 if ((nb = v->ob_type->tp_as_number) == NULL ||
1189 nb->nb_hex == NULL) {
1190 PyErr_SetString(PyExc_TypeError,
1191 "hex() argument can't be converted to hex");
1192 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001193 }
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001194 res = (*nb->nb_hex)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001195 if (res && !PyString_Check(res)) {
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001196 PyErr_Format(PyExc_TypeError,
1197 "__hex__ returned non-string (type %.200s)",
1198 res->ob_type->tp_name);
1199 Py_DECREF(res);
1200 return NULL;
1201 }
1202 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001203}
1204
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001205PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001206"hex(number) -> string\n\
1207\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001208Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209
1210
Tim Petersdbd9ba62000-07-09 03:09:57 +00001211static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001212
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001214builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001215{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001217 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001218 PyObject *res;
1219 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001220 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221
1222 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001223 if (line == NULL)
1224 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001226 return NULL;
1227 while (*str == ' ' || *str == '\t')
1228 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229 globals = PyEval_GetGlobals();
1230 locals = PyEval_GetLocals();
1231 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1232 if (PyDict_SetItemString(globals, "__builtins__",
1233 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001234 return NULL;
1235 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001236 cf.cf_flags = 0;
1237 PyEval_MergeCompilerFlags(&cf);
1238 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001239 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001240 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001241}
1242
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001243PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001244"input([prompt]) -> value\n\
1245\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001247
1248
Guido van Rossume8811f81997-02-14 15:48:05 +00001249static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001250builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001251{
1252 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001253 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001254 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001255 if (!PyString_CheckExact(s)) {
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001256 PyErr_SetString(PyExc_TypeError,
1257 "can't intern subclass of string");
1258 return NULL;
1259 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001260 Py_INCREF(s);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001261 PyString_InternInPlace(&s);
Guido van Rossume8811f81997-02-14 15:48:05 +00001262 return s;
1263}
1264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001265PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001266"intern(string) -> string\n\
1267\n\
1268``Intern'' the given string. This enters the string in the (global)\n\
1269table of interned strings whose purpose is to speed up dictionary lookups.\n\
1270Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001271same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001272
1273
Guido van Rossum79f25d91997-04-29 20:08:16 +00001274static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001275builtin_iter(PyObject *self, PyObject *args)
1276{
1277 PyObject *v, *w = NULL;
1278
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001279 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001280 return NULL;
1281 if (w == NULL)
1282 return PyObject_GetIter(v);
1283 if (!PyCallable_Check(v)) {
1284 PyErr_SetString(PyExc_TypeError,
1285 "iter(v, w): v must be callable");
1286 return NULL;
1287 }
1288 return PyCallIter_New(v, w);
1289}
1290
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001291PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001292"iter(collection) -> iterator\n\
1293iter(callable, sentinel) -> iterator\n\
1294\n\
1295Get an iterator from an object. In the first form, the argument must\n\
1296supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001297In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001298
1299
1300static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001301builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001302{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001303 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001304
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001305 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001306 if (res < 0 && PyErr_Occurred())
1307 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001308 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001309}
1310
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001311PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001312"len(object) -> integer\n\
1313\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001314Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001315
1316
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001318builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001319{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001320 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001321
Guido van Rossum79f25d91997-04-29 20:08:16 +00001322 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001323 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001324 return d;
1325}
1326
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001327PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001328"locals() -> dictionary\n\
1329\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001330Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001331
1332
Guido van Rossum79f25d91997-04-29 20:08:16 +00001333static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001334min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001335{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001336 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001337 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001338
Guido van Rossum79f25d91997-04-29 20:08:16 +00001339 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001340 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001341 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001342 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001343
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001344 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1345 keyfunc = PyDict_GetItemString(kwds, "key");
1346 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001347 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001348 "%s() got an unexpected keyword argument", name);
1349 return NULL;
1350 }
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001351 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001352 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001353
Tim Petersc3074532001-05-03 07:00:32 +00001354 it = PyObject_GetIter(v);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001355 if (it == NULL) {
1356 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001357 return NULL;
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001358 }
Tim Petersc3074532001-05-03 07:00:32 +00001359
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001360 maxitem = NULL; /* the result */
1361 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001362 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001363 /* get the value from the key function */
1364 if (keyfunc != NULL) {
1365 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1366 if (val == NULL)
1367 goto Fail_it_item;
1368 }
1369 /* no key function; the value is the item */
1370 else {
1371 val = item;
1372 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001373 }
Tim Petersc3074532001-05-03 07:00:32 +00001374
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001375 /* maximum value and item are unset; set them */
1376 if (maxval == NULL) {
1377 maxitem = item;
1378 maxval = val;
1379 }
1380 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001381 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001382 int cmp = PyObject_RichCompareBool(val, maxval, op);
1383 if (cmp < 0)
1384 goto Fail_it_item_and_val;
1385 else if (cmp > 0) {
1386 Py_DECREF(maxval);
1387 Py_DECREF(maxitem);
1388 maxval = val;
1389 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001390 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001391 else {
1392 Py_DECREF(item);
1393 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001394 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001395 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001396 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001397 if (PyErr_Occurred())
1398 goto Fail_it;
1399 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001400 PyErr_Format(PyExc_ValueError,
1401 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001402 assert(maxitem == NULL);
1403 }
1404 else
1405 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001406 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001407 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001408 return maxitem;
1409
1410Fail_it_item_and_val:
1411 Py_DECREF(val);
1412Fail_it_item:
1413 Py_DECREF(item);
1414Fail_it:
1415 Py_XDECREF(maxval);
1416 Py_XDECREF(maxitem);
1417 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001418 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001419 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001420}
1421
Guido van Rossum79f25d91997-04-29 20:08:16 +00001422static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001423builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001424{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001425 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001426}
1427
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001428PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001429"min(iterable[, key=func]) -> value\n\
1430min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001431\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001432With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001433With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001434
1435
Guido van Rossum79f25d91997-04-29 20:08:16 +00001436static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001437builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001438{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001439 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001440}
1441
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001442PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001443"max(iterable[, key=func]) -> value\n\
1444max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001445\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001446With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001447With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001448
1449
Guido van Rossum79f25d91997-04-29 20:08:16 +00001450static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001451builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001452{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001453 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001454 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001455
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001456 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1457 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001458 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001459 "oct() argument can't be converted to oct");
1460 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001461 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001462 res = (*nb->nb_oct)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001463 if (res && !PyString_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001464 PyErr_Format(PyExc_TypeError,
1465 "__oct__ returned non-string (type %.200s)",
1466 res->ob_type->tp_name);
1467 Py_DECREF(res);
1468 return NULL;
1469 }
1470 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001471}
1472
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001473PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001474"oct(number) -> string\n\
1475\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001476Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001477
1478
Guido van Rossum79f25d91997-04-29 20:08:16 +00001479static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001480builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1481{
1482 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1483}
1484
1485PyDoc_STRVAR(open_doc,
1486"open(name[, mode[, buffering]]) -> file object\n\
1487\n\
Skip Montanaro4e3ebe02007-12-08 14:37:43 +00001488Open a file using the file() type, returns a file object. This is the\n\
Philip Jenveydd0388a2009-05-28 03:12:16 +00001489preferred way to open a file. See file.__doc__ for further information.");
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001490
1491
1492static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001493builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001494{
Guido van Rossum09095f32000-03-10 23:00:52 +00001495 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001496 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001497
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001498 if (PyString_Check(obj)) {
1499 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001500 if (size == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001501 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001502 return PyInt_FromLong(ord);
1503 }
Christian Heimes3497f942008-05-26 12:29:14 +00001504 } else if (PyByteArray_Check(obj)) {
1505 size = PyByteArray_GET_SIZE(obj);
Christian Heimes1a6387e2008-03-26 12:49:49 +00001506 if (size == 1) {
Christian Heimes3497f942008-05-26 12:29:14 +00001507 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes1a6387e2008-03-26 12:49:49 +00001508 return PyInt_FromLong(ord);
1509 }
1510
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001511#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001512 } else if (PyUnicode_Check(obj)) {
1513 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001514 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001515 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001516 return PyInt_FromLong(ord);
1517 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001518#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001519 } else {
1520 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001521 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001522 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001523 return NULL;
1524 }
1525
Guido van Rossumad991772001-01-12 16:03:05 +00001526 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001527 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001528 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001529 size);
1530 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001531}
1532
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001533PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001534"ord(c) -> integer\n\
1535\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001536Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537
1538
Guido van Rossum79f25d91997-04-29 20:08:16 +00001539static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001540builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001541{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001542 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001543
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001544 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001545 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001546 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001547}
1548
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001549PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001550"pow(x, y[, z]) -> number\n\
1551\n\
1552With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001553equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001554
1555
Eric Smith7c478942008-03-18 23:45:49 +00001556static PyObject *
1557builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1558{
1559 static char *kwlist[] = {"sep", "end", "file", 0};
Benjamin Peterson753d1622009-07-02 18:16:45 +00001560 static PyObject *dummy_args = NULL;
1561 static PyObject *unicode_newline = NULL, *unicode_space = NULL;
1562 static PyObject *str_newline = NULL, *str_space = NULL;
1563 PyObject *newline, *space;
Eric Smith7c478942008-03-18 23:45:49 +00001564 PyObject *sep = NULL, *end = NULL, *file = NULL;
Benjamin Peterson753d1622009-07-02 18:16:45 +00001565 int i, err, use_unicode = 0;
Eric Smith7c478942008-03-18 23:45:49 +00001566
1567 if (dummy_args == NULL) {
1568 if (!(dummy_args = PyTuple_New(0)))
1569 return NULL;
1570 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001571 if (str_newline == NULL) {
1572 str_newline = PyString_FromString("\n");
1573 if (str_newline == NULL)
1574 return NULL;
1575 str_space = PyString_FromString(" ");
1576 if (str_space == NULL) {
1577 Py_CLEAR(str_newline);
1578 return NULL;
1579 }
1580 unicode_newline = PyUnicode_FromString("\n");
1581 if (unicode_newline == NULL) {
1582 Py_CLEAR(str_newline);
1583 Py_CLEAR(str_space);
1584 return NULL;
1585 }
1586 unicode_space = PyUnicode_FromString(" ");
1587 if (unicode_space == NULL) {
1588 Py_CLEAR(str_newline);
1589 Py_CLEAR(str_space);
1590 Py_CLEAR(unicode_space);
1591 return NULL;
1592 }
1593 }
Eric Smith7c478942008-03-18 23:45:49 +00001594 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1595 kwlist, &sep, &end, &file))
1596 return NULL;
1597 if (file == NULL || file == Py_None) {
1598 file = PySys_GetObject("stdout");
1599 /* sys.stdout may be None when FILE* stdout isn't connected */
1600 if (file == Py_None)
1601 Py_RETURN_NONE;
1602 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001603 if (sep == Py_None) {
1604 sep = NULL;
Eric Smith7c478942008-03-18 23:45:49 +00001605 }
Benjamin Peterson753d1622009-07-02 18:16:45 +00001606 else if (sep) {
1607 if (PyUnicode_Check(sep)) {
1608 use_unicode = 1;
1609 }
1610 else if (!PyString_Check(sep)) {
1611 PyErr_Format(PyExc_TypeError,
1612 "sep must be None, str or unicode, not %.200s",
1613 sep->ob_type->tp_name);
1614 return NULL;
1615 }
1616 }
1617 if (end == Py_None)
1618 end = NULL;
1619 else if (end) {
1620 if (PyUnicode_Check(end)) {
1621 use_unicode = 1;
1622 }
1623 else if (!PyString_Check(end)) {
1624 PyErr_Format(PyExc_TypeError,
1625 "end must be None, str or unicode, not %.200s",
1626 end->ob_type->tp_name);
1627 return NULL;
1628 }
1629 }
1630
1631 if (!use_unicode) {
1632 for (i = 0; i < PyTuple_Size(args); i++) {
1633 if (PyUnicode_Check(PyTuple_GET_ITEM(args, i))) {
1634 use_unicode = 1;
1635 break;
1636 }
1637 }
1638 }
1639 if (use_unicode) {
1640 newline = unicode_newline;
1641 space = unicode_space;
1642 }
1643 else {
1644 newline = str_newline;
1645 space = str_space;
Eric Smith7c478942008-03-18 23:45:49 +00001646 }
1647
1648 for (i = 0; i < PyTuple_Size(args); i++) {
1649 if (i > 0) {
Benjamin Peterson753d1622009-07-02 18:16:45 +00001650 if (sep == NULL)
1651 err = PyFile_WriteObject(space, file,
1652 Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001653 else
1654 err = PyFile_WriteObject(sep, file,
1655 Py_PRINT_RAW);
1656 if (err)
1657 return NULL;
1658 }
1659 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1660 Py_PRINT_RAW);
1661 if (err)
1662 return NULL;
1663 }
1664
Benjamin Peterson753d1622009-07-02 18:16:45 +00001665 if (end == NULL)
1666 err = PyFile_WriteObject(newline, file, Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001667 else
1668 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1669 if (err)
1670 return NULL;
1671
1672 Py_RETURN_NONE;
1673}
1674
1675PyDoc_STRVAR(print_doc,
1676"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
1677\n\
1678Prints the values to a stream, or to sys.stdout by default.\n\
1679Optional keyword arguments:\n\
1680file: a file-like object (stream); defaults to the current sys.stdout.\n\
1681sep: string inserted between values, default a space.\n\
1682end: string appended after the last value, default a newline.");
1683
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001684
1685/* Return number of items in range (lo, hi, step), when arguments are
1686 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1687 * & only if the true value is too large to fit in a signed long.
1688 * Arguments MUST return 1 with either PyInt_Check() or
1689 * PyLong_Check(). Return -1 when there is an error.
1690 */
1691static long
1692get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1693{
1694 /* -------------------------------------------------------------
1695 Algorithm is equal to that of get_len_of_range(), but it operates
1696 on PyObjects (which are assumed to be PyLong or PyInt objects).
1697 ---------------------------------------------------------------*/
1698 long n;
1699 PyObject *diff = NULL;
1700 PyObject *one = NULL;
1701 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1702 /* holds sub-expression evaluations */
1703
1704 /* if (lo >= hi), return length of 0. */
1705 if (PyObject_Compare(lo, hi) >= 0)
1706 return 0;
1707
1708 if ((one = PyLong_FromLong(1L)) == NULL)
1709 goto Fail;
1710
1711 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1712 goto Fail;
1713
1714 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1715 goto Fail;
1716
1717 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1718 goto Fail;
1719
1720 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1721 goto Fail;
1722
1723 n = PyLong_AsLong(tmp3);
1724 if (PyErr_Occurred()) { /* Check for Overflow */
1725 PyErr_Clear();
1726 goto Fail;
1727 }
1728
1729 Py_DECREF(tmp3);
1730 Py_DECREF(tmp2);
1731 Py_DECREF(diff);
1732 Py_DECREF(tmp1);
1733 Py_DECREF(one);
1734 return n;
1735
1736 Fail:
1737 Py_XDECREF(tmp3);
1738 Py_XDECREF(tmp2);
1739 Py_XDECREF(diff);
1740 Py_XDECREF(tmp1);
1741 Py_XDECREF(one);
1742 return -1;
1743}
1744
1745/* An extension of builtin_range() that handles the case when PyLong
1746 * arguments are given. */
1747static PyObject *
1748handle_range_longs(PyObject *self, PyObject *args)
1749{
1750 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001751 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001752 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001753
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001754 PyObject *curnum = NULL;
1755 PyObject *v = NULL;
1756 long bign;
Mark Dickinson3dc25412009-12-03 12:08:56 +00001757 Py_ssize_t i, n;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001758 int cmp_result;
1759
Tim Peters874e1f72003-04-13 22:13:08 +00001760 PyObject *zero = PyLong_FromLong(0);
1761
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001762 if (zero == NULL)
1763 return NULL;
1764
Tim Peters874e1f72003-04-13 22:13:08 +00001765 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1766 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001767 return NULL;
1768 }
1769
Tim Peters874e1f72003-04-13 22:13:08 +00001770 /* Figure out which way we were called, supply defaults, and be
1771 * sure to incref everything so that the decrefs at the end
1772 * are correct.
1773 */
1774 assert(ilow != NULL);
1775 if (ihigh == NULL) {
1776 /* only 1 arg -- it's the upper limit */
1777 ihigh = ilow;
1778 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001779 }
Tim Peters874e1f72003-04-13 22:13:08 +00001780 assert(ihigh != NULL);
1781 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001782
Tim Peters874e1f72003-04-13 22:13:08 +00001783 /* ihigh correct now; do ilow */
1784 if (ilow == NULL)
1785 ilow = zero;
1786 Py_INCREF(ilow);
1787
1788 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001789 if (istep == NULL) {
1790 istep = PyLong_FromLong(1L);
1791 if (istep == NULL)
1792 goto Fail;
1793 }
1794 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001795 Py_INCREF(istep);
1796 }
1797
Tim Peters874e1f72003-04-13 22:13:08 +00001798 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001799 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001800 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001801 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001802 goto Fail;
1803 }
1804
Tim Peters874e1f72003-04-13 22:13:08 +00001805 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001806 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001807 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001808 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001809 goto Fail;
1810 }
1811
1812 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001813 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001814 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001815 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001816 goto Fail;
1817 }
1818
1819 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1820 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001821 if (cmp_result == 0) {
1822 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001823 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001824 goto Fail;
1825 }
1826
1827 if (cmp_result > 0)
1828 bign = get_len_of_range_longs(ilow, ihigh, istep);
1829 else {
1830 PyObject *neg_istep = PyNumber_Negative(istep);
1831 if (neg_istep == NULL)
1832 goto Fail;
1833 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1834 Py_DECREF(neg_istep);
1835 }
1836
Mark Dickinson3dc25412009-12-03 12:08:56 +00001837 n = (Py_ssize_t)bign;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001838 if (bign < 0 || (long)n != bign) {
1839 PyErr_SetString(PyExc_OverflowError,
1840 "range() result has too many items");
1841 goto Fail;
1842 }
1843
1844 v = PyList_New(n);
1845 if (v == NULL)
1846 goto Fail;
1847
1848 curnum = ilow;
1849 Py_INCREF(curnum);
1850
1851 for (i = 0; i < n; i++) {
1852 PyObject *w = PyNumber_Long(curnum);
1853 PyObject *tmp_num;
1854 if (w == NULL)
1855 goto Fail;
1856
1857 PyList_SET_ITEM(v, i, w);
1858
1859 tmp_num = PyNumber_Add(curnum, istep);
1860 if (tmp_num == NULL)
1861 goto Fail;
1862
1863 Py_DECREF(curnum);
1864 curnum = tmp_num;
1865 }
Tim Peters874e1f72003-04-13 22:13:08 +00001866 Py_DECREF(ilow);
1867 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001868 Py_DECREF(istep);
1869 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001870 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001871 return v;
1872
1873 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001874 Py_DECREF(ilow);
1875 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001876 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001877 Py_DECREF(zero);
1878 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001879 Py_XDECREF(v);
1880 return NULL;
1881}
1882
Guido van Rossum124eff01999-02-23 16:11:01 +00001883/* Return number of items in range/xrange (lo, hi, step). step > 0
1884 * required. Return a value < 0 if & only if the true value is too
1885 * large to fit in a signed long.
1886 */
1887static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001888get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001889{
1890 /* -------------------------------------------------------------
1891 If lo >= hi, the range is empty.
1892 Else if n values are in the range, the last one is
1893 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1894 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1895 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1896 the RHS is non-negative and so truncation is the same as the
1897 floor. Letting M be the largest positive long, the worst case
1898 for the RHS numerator is hi=M, lo=-M-1, and then
1899 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1900 precision to compute the RHS exactly.
1901 ---------------------------------------------------------------*/
1902 long n = 0;
1903 if (lo < hi) {
1904 unsigned long uhi = (unsigned long)hi;
1905 unsigned long ulo = (unsigned long)lo;
1906 unsigned long diff = uhi - ulo - 1;
1907 n = (long)(diff / (unsigned long)step + 1);
1908 }
1909 return n;
1910}
1911
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001913builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001914{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001915 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001916 long bign;
Mark Dickinson3dc25412009-12-03 12:08:56 +00001917 Py_ssize_t i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001918
Guido van Rossum79f25d91997-04-29 20:08:16 +00001919 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001920
Guido van Rossum79f25d91997-04-29 20:08:16 +00001921 if (PyTuple_Size(args) <= 1) {
1922 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001923 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001924 &ihigh)) {
1925 PyErr_Clear();
1926 return handle_range_longs(self, args);
1927 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001928 }
1929 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001930 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001931 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001932 &ilow, &ihigh, &istep)) {
1933 PyErr_Clear();
1934 return handle_range_longs(self, args);
1935 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001936 }
1937 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001938 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001939 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001940 return NULL;
1941 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001942 if (istep > 0)
1943 bign = get_len_of_range(ilow, ihigh, istep);
1944 else
1945 bign = get_len_of_range(ihigh, ilow, -istep);
Mark Dickinson3dc25412009-12-03 12:08:56 +00001946 n = (Py_ssize_t)bign;
Guido van Rossum124eff01999-02-23 16:11:01 +00001947 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001948 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001949 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001950 return NULL;
1951 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001952 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001953 if (v == NULL)
1954 return NULL;
1955 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001957 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001958 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001959 return NULL;
1960 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001961 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001962 ilow += istep;
1963 }
1964 return v;
1965}
1966
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001967PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001968"range([start,] stop[, step]) -> list of integers\n\
1969\n\
1970Return a list containing an arithmetic progression of integers.\n\
1971range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1972When step is given, it specifies the increment (or decrement).\n\
1973For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001974These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001975
1976
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001978builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001979{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001980 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001981 PyObject *fin = PySys_GetObject("stdin");
1982 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001983
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001984 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001985 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001986
1987 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001988 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001989 return NULL;
1990 }
1991 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001992 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001993 return NULL;
1994 }
1995 if (PyFile_SoftSpace(fout, 0)) {
1996 if (PyFile_WriteString(" ", fout) != 0)
1997 return NULL;
1998 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001999 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002000 && isatty(fileno(PyFile_AsFile(fin)))
2001 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00002003 char *prompt;
2004 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002005 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00002006 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00002008 if (po == NULL)
2009 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002010 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00002011 if (prompt == NULL)
2012 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00002013 }
2014 else {
2015 po = NULL;
2016 prompt = "";
2017 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00002018 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002019 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002020 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00002021 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00002022 if (!PyErr_Occurred())
2023 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00002024 return NULL;
2025 }
2026 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002027 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00002028 result = NULL;
2029 }
2030 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00002031 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00002032 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002033 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002034 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00002035 result = NULL;
2036 }
2037 else {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002038 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00002039 }
Guido van Rossum872537c1995-07-07 22:43:42 +00002040 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00002041 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00002042 return result;
2043 }
Guido van Rossum90933611991-06-07 16:10:43 +00002044 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002045 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00002046 return NULL;
2047 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002048 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002049}
2050
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002051PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002052"raw_input([prompt]) -> string\n\
2053\n\
2054Read a string from standard input. The trailing newline is stripped.\n\
2055If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
2056On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002057is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002058
2059
Guido van Rossum79f25d91997-04-29 20:08:16 +00002060static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002061builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002062{
Benjamin Peterson08336e32008-08-18 02:01:21 +00002063 static PyObject *functools_reduce = NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002064
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002065 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002066 "use functools.reduce()", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002067 return NULL;
2068
Benjamin Peterson08336e32008-08-18 02:01:21 +00002069 if (functools_reduce == NULL) {
2070 PyObject *functools = PyImport_ImportModule("functools");
2071 if (functools == NULL)
2072 return NULL;
2073 functools_reduce = PyObject_GetAttrString(functools, "reduce");
2074 Py_DECREF(functools);
2075 if (functools_reduce == NULL)
2076 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002077 }
Benjamin Peterson08336e32008-08-18 02:01:21 +00002078 return PyObject_Call(functools_reduce, args, NULL);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002079}
2080
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002081PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002082"reduce(function, sequence[, initial]) -> value\n\
2083\n\
2084Apply a function of two arguments cumulatively to the items of a sequence,\n\
2085from left to right, so as to reduce the sequence to a single value.\n\
2086For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
2087((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
2088of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002089sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002090
2091
Guido van Rossum79f25d91997-04-29 20:08:16 +00002092static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002093builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002094{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002095 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002096 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002097 return NULL;
2098
Guido van Rossum79f25d91997-04-29 20:08:16 +00002099 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002100}
2101
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002102PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002103"reload(module) -> module\n\
2104\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002105Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002106
2107
Guido van Rossum79f25d91997-04-29 20:08:16 +00002108static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002109builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002110{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002111 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002112}
2113
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002114PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002115"repr(object) -> string\n\
2116\n\
2117Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002118For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002119
2120
Guido van Rossum79f25d91997-04-29 20:08:16 +00002121static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00002122builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002123{
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002124 double x;
2125 PyObject *o_ndigits = NULL;
2126 Py_ssize_t ndigits;
Georg Brandlccadf842006-03-31 18:54:53 +00002127 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002128
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002129 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|O:round",
2130 kwlist, &x, &o_ndigits))
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002131 return NULL;
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002132
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002133 if (o_ndigits == NULL) {
2134 /* second argument defaults to 0 */
2135 ndigits = 0;
2136 }
2137 else {
2138 /* interpret 2nd argument as a Py_ssize_t; clip on overflow */
2139 ndigits = PyNumber_AsSsize_t(o_ndigits, NULL);
2140 if (ndigits == -1 && PyErr_Occurred())
2141 return NULL;
2142 }
2143
Mark Dickinsonbce78372009-11-24 10:54:58 +00002144 /* nans, infinities and zeros round to themselves */
2145 if (!Py_IS_FINITE(x) || x == 0.0)
2146 return PyFloat_FromDouble(x);
2147
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002148 /* Deal with extreme values for ndigits. For ndigits > NDIGITS_MAX, x
2149 always rounds to itself. For ndigits < NDIGITS_MIN, x always
2150 rounds to +-0.0. Here 0.30103 is an upper bound for log10(2). */
2151#define NDIGITS_MAX ((int)((DBL_MANT_DIG-DBL_MIN_EXP) * 0.30103))
2152#define NDIGITS_MIN (-(int)((DBL_MAX_EXP + 1) * 0.30103))
2153 if (ndigits > NDIGITS_MAX)
2154 /* return x */
2155 return PyFloat_FromDouble(x);
2156 else if (ndigits < NDIGITS_MIN)
2157 /* return 0.0, but with sign of x */
2158 return PyFloat_FromDouble(0.0*x);
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002159 else
Mark Dickinsonbd15a062009-11-18 19:33:35 +00002160 /* finite x, and ndigits is not unreasonably large */
2161 /* _Py_double_round is defined in floatobject.c */
2162 return _Py_double_round(x, (int)ndigits);
2163#undef NDIGITS_MAX
2164#undef NDIGITS_MIN
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002165}
2166
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002167PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002168"round(number[, ndigits]) -> floating point number\n\
2169\n\
2170Round a number to a given precision in decimal digits (default 0 digits).\n\
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002171This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002172
Raymond Hettinger64958a12003-12-17 20:43:33 +00002173static PyObject *
2174builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2175{
2176 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2177 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002178 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002179 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002180
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002181 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002182 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2183 kwlist, &seq, &compare, &keyfunc, &reverse))
2184 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002185
2186 newlist = PySequence_List(seq);
2187 if (newlist == NULL)
2188 return NULL;
2189
2190 callable = PyObject_GetAttrString(newlist, "sort");
2191 if (callable == NULL) {
2192 Py_DECREF(newlist);
2193 return NULL;
2194 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002195
Raymond Hettinger64958a12003-12-17 20:43:33 +00002196 newargs = PyTuple_GetSlice(args, 1, 4);
2197 if (newargs == NULL) {
2198 Py_DECREF(newlist);
2199 Py_DECREF(callable);
2200 return NULL;
2201 }
2202
2203 v = PyObject_Call(callable, newargs, kwds);
2204 Py_DECREF(newargs);
2205 Py_DECREF(callable);
2206 if (v == NULL) {
2207 Py_DECREF(newlist);
2208 return NULL;
2209 }
2210 Py_DECREF(v);
2211 return newlist;
2212}
2213
2214PyDoc_STRVAR(sorted_doc,
2215"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002216
Guido van Rossum79f25d91997-04-29 20:08:16 +00002217static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002218builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002219{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002220 PyObject *v = NULL;
2221 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002222
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002223 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002224 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002225 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002226 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002227 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002228 if (!PyErr_Occurred())
2229 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002230 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002231 }
2232 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002233 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002234 }
2235 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002236 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002237 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002238 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002239 "vars() argument must have __dict__ attribute");
2240 return NULL;
2241 }
2242 }
2243 return d;
2244}
2245
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002246PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002247"vars([object]) -> dictionary\n\
2248\n\
2249Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002250With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002251
Alex Martellia70b1912003-04-22 08:12:33 +00002252
2253static PyObject*
2254builtin_sum(PyObject *self, PyObject *args)
2255{
2256 PyObject *seq;
2257 PyObject *result = NULL;
2258 PyObject *temp, *item, *iter;
2259
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002260 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002261 return NULL;
2262
2263 iter = PyObject_GetIter(seq);
2264 if (iter == NULL)
2265 return NULL;
2266
2267 if (result == NULL) {
2268 result = PyInt_FromLong(0);
2269 if (result == NULL) {
2270 Py_DECREF(iter);
2271 return NULL;
2272 }
2273 } else {
2274 /* reject string values for 'start' parameter */
2275 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2276 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002277 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002278 Py_DECREF(iter);
2279 return NULL;
2280 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002281 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002282 }
2283
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002284#ifndef SLOW_SUM
2285 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2286 Assumes all inputs are the same type. If the assumption fails, default
2287 to the more general routine.
2288 */
2289 if (PyInt_CheckExact(result)) {
2290 long i_result = PyInt_AS_LONG(result);
2291 Py_DECREF(result);
2292 result = NULL;
2293 while(result == NULL) {
2294 item = PyIter_Next(iter);
2295 if (item == NULL) {
2296 Py_DECREF(iter);
2297 if (PyErr_Occurred())
2298 return NULL;
2299 return PyInt_FromLong(i_result);
2300 }
2301 if (PyInt_CheckExact(item)) {
2302 long b = PyInt_AS_LONG(item);
2303 long x = i_result + b;
2304 if ((x^i_result) >= 0 || (x^b) >= 0) {
2305 i_result = x;
2306 Py_DECREF(item);
2307 continue;
2308 }
2309 }
2310 /* Either overflowed or is not an int. Restore real objects and process normally */
2311 result = PyInt_FromLong(i_result);
2312 temp = PyNumber_Add(result, item);
2313 Py_DECREF(result);
2314 Py_DECREF(item);
2315 result = temp;
2316 if (result == NULL) {
2317 Py_DECREF(iter);
2318 return NULL;
2319 }
2320 }
2321 }
2322
2323 if (PyFloat_CheckExact(result)) {
2324 double f_result = PyFloat_AS_DOUBLE(result);
2325 Py_DECREF(result);
2326 result = NULL;
2327 while(result == NULL) {
2328 item = PyIter_Next(iter);
2329 if (item == NULL) {
2330 Py_DECREF(iter);
2331 if (PyErr_Occurred())
2332 return NULL;
2333 return PyFloat_FromDouble(f_result);
2334 }
2335 if (PyFloat_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002336 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002337 f_result += PyFloat_AS_DOUBLE(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002338 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002339 Py_DECREF(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002340 continue;
2341 }
2342 if (PyInt_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002343 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002344 f_result += (double)PyInt_AS_LONG(item);
2345 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002346 Py_DECREF(item);
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002347 continue;
2348 }
2349 result = PyFloat_FromDouble(f_result);
2350 temp = PyNumber_Add(result, item);
2351 Py_DECREF(result);
2352 Py_DECREF(item);
2353 result = temp;
2354 if (result == NULL) {
2355 Py_DECREF(iter);
2356 return NULL;
2357 }
2358 }
2359 }
2360#endif
2361
Alex Martellia70b1912003-04-22 08:12:33 +00002362 for(;;) {
2363 item = PyIter_Next(iter);
2364 if (item == NULL) {
2365 /* error, or end-of-sequence */
2366 if (PyErr_Occurred()) {
2367 Py_DECREF(result);
2368 result = NULL;
2369 }
2370 break;
2371 }
Mark Dickinson0e0e2152009-10-26 14:18:44 +00002372 /* It's tempting to use PyNumber_InPlaceAdd instead of
2373 PyNumber_Add here, to avoid quadratic running time
2374 when doing 'sum(list_of_lists, [])'. However, this
2375 would produce a change in behaviour: a snippet like
2376
2377 empty = []
2378 sum([[x] for x in range(10)], empty)
2379
2380 would change the value of empty. */
Alex Martellia253e182003-10-25 23:24:14 +00002381 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002382 Py_DECREF(result);
2383 Py_DECREF(item);
2384 result = temp;
2385 if (result == NULL)
2386 break;
2387 }
2388 Py_DECREF(iter);
2389 return result;
2390}
2391
2392PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002393"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002394\n\
2395Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002396of parameter 'start' (which defaults to 0). When the sequence is\n\
2397empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002398
2399
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002400static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002401builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002402{
2403 PyObject *inst;
2404 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002405 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002406
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002407 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002408 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002409
Guido van Rossum823649d2001-03-21 18:40:58 +00002410 retval = PyObject_IsInstance(inst, cls);
2411 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002412 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002413 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002414}
2415
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002416PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002417"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002418\n\
2419Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002420With a type as second argument, return whether that is the object's type.\n\
2421The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002422isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002423
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002424
2425static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002426builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002427{
2428 PyObject *derived;
2429 PyObject *cls;
2430 int retval;
2431
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002432 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002433 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002434
Guido van Rossum823649d2001-03-21 18:40:58 +00002435 retval = PyObject_IsSubclass(derived, cls);
2436 if (retval < 0)
2437 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002438 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002439}
2440
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002441PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002442"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002443\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002444Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2445When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2446is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002447
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002448
Barry Warsawbd599b52000-08-03 15:45:29 +00002449static PyObject*
2450builtin_zip(PyObject *self, PyObject *args)
2451{
2452 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002453 const Py_ssize_t itemsize = PySequence_Length(args);
2454 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002455 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002456 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002457
Raymond Hettingereaef6152003-08-02 07:42:57 +00002458 if (itemsize == 0)
2459 return PyList_New(0);
2460
Barry Warsawbd599b52000-08-03 15:45:29 +00002461 /* args must be a tuple */
2462 assert(PyTuple_Check(args));
2463
Tim Peters39a86c22002-05-12 07:19:38 +00002464 /* Guess at result length: the shortest of the input lengths.
2465 If some argument refuses to say, we refuse to guess too, lest
2466 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002467 len = -1; /* unknown */
2468 for (i = 0; i < itemsize; ++i) {
2469 PyObject *item = PyTuple_GET_ITEM(args, i);
Benjamin Peterson4c1fe512009-05-09 19:17:59 +00002470 Py_ssize_t thislen = _PyObject_LengthHint(item, -2);
Tim Peters39a86c22002-05-12 07:19:38 +00002471 if (thislen < 0) {
Benjamin Peterson4c1fe512009-05-09 19:17:59 +00002472 if (thislen == -1)
2473 return NULL;
Tim Peters39a86c22002-05-12 07:19:38 +00002474 len = -1;
2475 break;
2476 }
Tim Peters67d687a2002-04-29 21:27:32 +00002477 else if (len < 0 || thislen < len)
2478 len = thislen;
2479 }
2480
Tim Peters8572b4f2001-05-06 01:05:02 +00002481 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002482 if (len < 0)
2483 len = 10; /* arbitrary */
2484 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002485 return NULL;
2486
Tim Peters8572b4f2001-05-06 01:05:02 +00002487 /* obtain iterators */
2488 itlist = PyTuple_New(itemsize);
2489 if (itlist == NULL)
2490 goto Fail_ret;
2491 for (i = 0; i < itemsize; ++i) {
2492 PyObject *item = PyTuple_GET_ITEM(args, i);
2493 PyObject *it = PyObject_GetIter(item);
Benjamin Petersond692a712009-09-07 13:02:15 +00002494 if (it == NULL) {
2495 if (PyErr_ExceptionMatches(PyExc_TypeError))
2496 PyErr_Format(PyExc_TypeError,
2497 "zip argument #%zd must support iteration",
2498 i+1);
Tim Peters8572b4f2001-05-06 01:05:02 +00002499 goto Fail_ret_itlist;
Benjamin Petersond692a712009-09-07 13:02:15 +00002500 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002501 PyTuple_SET_ITEM(itlist, i, it);
2502 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002503
Tim Peters8572b4f2001-05-06 01:05:02 +00002504 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002505 for (i = 0; ; ++i) {
2506 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002507 PyObject *next = PyTuple_New(itemsize);
2508 if (!next)
2509 goto Fail_ret_itlist;
2510
Tim Peters67d687a2002-04-29 21:27:32 +00002511 for (j = 0; j < itemsize; j++) {
2512 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002513 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002514 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002515 if (PyErr_Occurred()) {
2516 Py_DECREF(ret);
2517 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002518 }
2519 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002520 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002521 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002522 }
Tim Peters67d687a2002-04-29 21:27:32 +00002523 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002524 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002525
Tim Peters67d687a2002-04-29 21:27:32 +00002526 if (i < len)
2527 PyList_SET_ITEM(ret, i, next);
2528 else {
2529 int status = PyList_Append(ret, next);
2530 Py_DECREF(next);
2531 ++len;
2532 if (status < 0)
2533 goto Fail_ret_itlist;
2534 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002535 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002536
Tim Peters67d687a2002-04-29 21:27:32 +00002537Done:
2538 if (ret != NULL && i < len) {
2539 /* The list is too big. */
2540 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2541 return NULL;
2542 }
2543 return ret;
2544
Tim Peters8572b4f2001-05-06 01:05:02 +00002545Fail_ret_itlist:
2546 Py_DECREF(itlist);
2547Fail_ret:
2548 Py_DECREF(ret);
2549 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002550}
2551
2552
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002553PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002554"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2555\n\
2556Return a list of tuples, where each tuple contains the i-th element\n\
2557from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002558in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002559
2560
Guido van Rossum79f25d91997-04-29 20:08:16 +00002561static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002562 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002563 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002564 {"all", builtin_all, METH_O, all_doc},
2565 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002566 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Eric Smith3cd81942008-02-22 16:30:22 +00002567 {"bin", builtin_bin, METH_O, bin_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002568 {"callable", builtin_callable, METH_O, callable_doc},
2569 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2570 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2571 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
Georg Brandl5240d742007-03-13 20:46:32 +00002572 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002573 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2574 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2575 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2576 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2577 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2578 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smitha9f7d622008-02-17 19:46:49 +00002579 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002580 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2581 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2582 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2583 {"hash", builtin_hash, METH_O, hash_doc},
2584 {"hex", builtin_hex, METH_O, hex_doc},
2585 {"id", builtin_id, METH_O, id_doc},
2586 {"input", builtin_input, METH_VARARGS, input_doc},
2587 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2588 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2589 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2590 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2591 {"len", builtin_len, METH_O, len_doc},
2592 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2593 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002594 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2595 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandl28e08732008-04-30 19:47:09 +00002596 {"next", builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002597 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002598 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002599 {"ord", builtin_ord, METH_O, ord_doc},
2600 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Eric Smith7c478942008-03-18 23:45:49 +00002601 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002602 {"range", builtin_range, METH_VARARGS, range_doc},
2603 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2604 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2605 {"reload", builtin_reload, METH_O, reload_doc},
2606 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002607 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002608 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002609 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002610 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002611#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002612 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002613#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002614 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002615 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002616 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002617};
2618
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002619PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002620"Built-in functions, exceptions, and other objects.\n\
2621\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002622Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002623
Guido van Rossum25ce5661997-08-02 03:10:38 +00002624PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002625_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002626{
Fred Drake5550de32000-06-20 04:54:19 +00002627 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002628 mod = Py_InitModule4("__builtin__", builtin_methods,
2629 builtin_doc, (PyObject *)NULL,
2630 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002631 if (mod == NULL)
2632 return NULL;
2633 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002634
Tim Peters7571a0f2003-03-23 17:52:28 +00002635#ifdef Py_TRACE_REFS
2636 /* __builtin__ exposes a number of statically allocated objects
2637 * that, before this code was added in 2.3, never showed up in
2638 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2639 * result, programs leaking references to None and False (etc)
2640 * couldn't be diagnosed by examining sys.getobjects(0).
2641 */
2642#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2643#else
2644#define ADD_TO_ALL(OBJECT) (void)0
2645#endif
2646
Tim Peters4b7625e2001-09-13 21:37:17 +00002647#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002648 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2649 return NULL; \
2650 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002651
2652 SETBUILTIN("None", Py_None);
2653 SETBUILTIN("Ellipsis", Py_Ellipsis);
2654 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002655 SETBUILTIN("False", Py_False);
2656 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002657 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002658 SETBUILTIN("bool", &PyBool_Type);
Antoine Pitrou789be0c2009-04-02 21:18:34 +00002659 SETBUILTIN("memoryview", &PyMemoryView_Type);
Christian Heimes3497f942008-05-26 12:29:14 +00002660 SETBUILTIN("bytearray", &PyByteArray_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002661 SETBUILTIN("bytes", &PyString_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002662 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002663 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002664#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002665 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002666#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002667 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002668 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002669 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002670 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002671 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002672 SETBUILTIN("property", &PyProperty_Type);
2673 SETBUILTIN("int", &PyInt_Type);
2674 SETBUILTIN("list", &PyList_Type);
2675 SETBUILTIN("long", &PyLong_Type);
2676 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002677 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002678 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002679 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002680 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002681 SETBUILTIN("str", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002682 SETBUILTIN("super", &PySuper_Type);
2683 SETBUILTIN("tuple", &PyTuple_Type);
2684 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002685 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002686#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002687 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002688#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002689 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002690 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2691 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002692 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002693 }
2694 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002695
Guido van Rossum25ce5661997-08-02 03:10:38 +00002696 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002697#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002698#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002699}
2700
Guido van Rossume77a7571993-11-03 15:01:26 +00002701/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002702
Guido van Rossum79f25d91997-04-29 20:08:16 +00002703static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002704filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002705{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002706 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002707 Py_ssize_t i, j;
2708 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002709
Guido van Rossumb7b45621995-08-04 04:07:45 +00002710 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002711 if (PyTuple_CheckExact(tuple))
2712 Py_INCREF(tuple);
2713 else
2714 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002715 return tuple;
2716 }
2717
Guido van Rossum79f25d91997-04-29 20:08:16 +00002718 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002719 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002720
Guido van Rossum12d12c51993-10-26 17:58:25 +00002721 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002722 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002723 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002724
Walter Dörwald8dd19322003-02-10 17:36:40 +00002725 if (tuple->ob_type->tp_as_sequence &&
2726 tuple->ob_type->tp_as_sequence->sq_item) {
2727 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002728 if (item == NULL)
2729 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002730 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002731 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002732 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002733 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002734 if (func == Py_None) {
2735 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002736 good = item;
2737 }
2738 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002739 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002740 if (arg == NULL) {
2741 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002742 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002743 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002744 good = PyEval_CallObject(func, arg);
2745 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002746 if (good == NULL) {
2747 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002748 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002749 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002750 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002751 ok = PyObject_IsTrue(good);
2752 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002753 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002754 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002755 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002756 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002757 else
2758 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002759 }
2760
Tim Peters4324aa32001-05-28 22:30:08 +00002761 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002762 return NULL;
2763
Guido van Rossum12d12c51993-10-26 17:58:25 +00002764 return result;
2765
Guido van Rossum12d12c51993-10-26 17:58:25 +00002766Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002767 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002768 return NULL;
2769}
2770
2771
Guido van Rossume77a7571993-11-03 15:01:26 +00002772/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002773
Guido van Rossum79f25d91997-04-29 20:08:16 +00002774static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002775filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002776{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002777 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002778 Py_ssize_t i, j;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002779 Py_ssize_t len = PyString_Size(strobj);
Martin v. Löwis18e16552006-02-15 17:27:45 +00002780 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002781
Guido van Rossum79f25d91997-04-29 20:08:16 +00002782 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002783 /* If it's a real string we can return the original,
2784 * as no character is ever false and __getitem__
2785 * does return this character. If it's a subclass
2786 * we must go through the __getitem__ loop */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002787 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002788 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002789 return strobj;
2790 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002791 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002792 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002793 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002794
Guido van Rossum12d12c51993-10-26 17:58:25 +00002795 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002796 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002797 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002798
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002799 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2800 if (item == NULL)
2801 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002802 if (func==Py_None) {
2803 ok = 1;
2804 } else {
2805 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002806 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002807 if (arg == NULL) {
2808 Py_DECREF(item);
2809 goto Fail_1;
2810 }
2811 good = PyEval_CallObject(func, arg);
2812 Py_DECREF(arg);
2813 if (good == NULL) {
2814 Py_DECREF(item);
2815 goto Fail_1;
2816 }
2817 ok = PyObject_IsTrue(good);
2818 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002819 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002820 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002821 Py_ssize_t reslen;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002822 if (!PyString_Check(item)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002823 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2824 " __getitem__ returned different type");
2825 Py_DECREF(item);
2826 goto Fail_1;
2827 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002828 reslen = PyString_GET_SIZE(item);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002829 if (reslen == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002830 PyString_AS_STRING(result)[j++] =
2831 PyString_AS_STRING(item)[0];
Walter Dörwald903f1e02003-02-04 16:28:00 +00002832 } else {
2833 /* do we need more space? */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002834 Py_ssize_t need = j;
2835
2836 /* calculate space requirements while checking for overflow */
2837 if (need > PY_SSIZE_T_MAX - reslen) {
2838 Py_DECREF(item);
2839 goto Fail_1;
2840 }
2841
2842 need += reslen;
2843
2844 if (need > PY_SSIZE_T_MAX - len) {
2845 Py_DECREF(item);
2846 goto Fail_1;
2847 }
2848
2849 need += len;
2850
2851 if (need <= i) {
2852 Py_DECREF(item);
2853 goto Fail_1;
2854 }
2855
2856 need = need - i - 1;
2857
2858 assert(need >= 0);
2859 assert(outlen >= 0);
2860
Walter Dörwald903f1e02003-02-04 16:28:00 +00002861 if (need > outlen) {
2862 /* overallocate, to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002863 if (outlen > PY_SSIZE_T_MAX / 2) {
2864 Py_DECREF(item);
2865 return NULL;
2866 }
2867
2868 if (need<2*outlen) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002869 need = 2*outlen;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002870 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002871 if (_PyString_Resize(&result, need)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002872 Py_DECREF(item);
2873 return NULL;
2874 }
2875 outlen = need;
2876 }
2877 memcpy(
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002878 PyString_AS_STRING(result) + j,
2879 PyString_AS_STRING(item),
Walter Dörwald903f1e02003-02-04 16:28:00 +00002880 reslen
2881 );
2882 j += reslen;
2883 }
2884 }
Tim Peters388ed082001-04-07 20:34:48 +00002885 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002886 }
2887
Walter Dörwald903f1e02003-02-04 16:28:00 +00002888 if (j < outlen)
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002889 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002890
Guido van Rossum12d12c51993-10-26 17:58:25 +00002891 return result;
2892
Guido van Rossum12d12c51993-10-26 17:58:25 +00002893Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002894 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002895 return NULL;
2896}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002897
2898#ifdef Py_USING_UNICODE
2899/* Helper for filter(): filter a Unicode object through a function */
2900
2901static PyObject *
2902filterunicode(PyObject *func, PyObject *strobj)
2903{
2904 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002905 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002906 Py_ssize_t len = PyUnicode_GetSize(strobj);
2907 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002908
2909 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002910 /* If it's a real string we can return the original,
2911 * as no character is ever false and __getitem__
2912 * does return this character. If it's a subclass
2913 * we must go through the __getitem__ loop */
2914 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002915 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002916 return strobj;
2917 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002918 }
2919 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2920 return NULL;
2921
2922 for (i = j = 0; i < len; ++i) {
2923 PyObject *item, *arg, *good;
2924 int ok;
2925
2926 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2927 if (item == NULL)
2928 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002929 if (func == Py_None) {
2930 ok = 1;
2931 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002932 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002933 if (arg == NULL) {
2934 Py_DECREF(item);
2935 goto Fail_1;
2936 }
2937 good = PyEval_CallObject(func, arg);
2938 Py_DECREF(arg);
2939 if (good == NULL) {
2940 Py_DECREF(item);
2941 goto Fail_1;
2942 }
2943 ok = PyObject_IsTrue(good);
2944 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002945 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002946 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002947 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002948 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002949 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002950 "can't filter unicode to unicode:"
2951 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002952 Py_DECREF(item);
2953 goto Fail_1;
2954 }
2955 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002956 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002957 PyUnicode_AS_UNICODE(result)[j++] =
2958 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002959 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002960 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002961 Py_ssize_t need = j + reslen + len - i - 1;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002962
2963 /* check that didnt overflow */
2964 if ((j > PY_SSIZE_T_MAX - reslen) ||
2965 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
2966 ((j + reslen + len) < i) ||
2967 ((j + reslen + len - i) <= 0)) {
2968 Py_DECREF(item);
2969 return NULL;
2970 }
2971
2972 assert(need >= 0);
2973 assert(outlen >= 0);
2974
Walter Dörwald903f1e02003-02-04 16:28:00 +00002975 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002976 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002977 to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002978 if (need < 2 * outlen) {
2979 if (outlen > PY_SSIZE_T_MAX / 2) {
2980 Py_DECREF(item);
2981 return NULL;
2982 } else {
2983 need = 2 * outlen;
2984 }
2985 }
2986
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002987 if (PyUnicode_Resize(
2988 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002989 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002990 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002991 }
2992 outlen = need;
2993 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002994 memcpy(PyUnicode_AS_UNICODE(result) + j,
2995 PyUnicode_AS_UNICODE(item),
2996 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002997 j += reslen;
2998 }
2999 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00003000 Py_DECREF(item);
3001 }
3002
Walter Dörwald903f1e02003-02-04 16:28:00 +00003003 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00003004 PyUnicode_Resize(&result, j);
3005
3006 return result;
3007
3008Fail_1:
3009 Py_DECREF(result);
3010 return NULL;
3011}
3012#endif