blob: 08cc8b368d7f5a2ccfe0dad83feb725f2132fa77 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Georg Brandlfc8eef32008-03-28 12:11:56 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00008#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossume2ae77b2001-10-24 20:42:55 +000012#ifdef RISCOS
13#include "unixstuff.h"
14#endif
15
Mark Hammond26cffde2001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000019#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
25#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000026
Guido van Rossum12d12c51993-10-26 17:58:25 +000027/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000028static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000029#ifdef Py_USING_UNICODE
30static PyObject *filterunicode(PyObject *, PyObject *);
31#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000032static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000033
Guido van Rossum79f25d91997-04-29 20:08:16 +000034static PyObject *
Neal Norwitz92e212f2006-04-03 04:48:37 +000035builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +000036{
Neal Norwitz92e212f2006-04-03 04:48:37 +000037 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
38 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000040 PyObject *globals = NULL;
41 PyObject *locals = NULL;
42 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000043 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044
Neal Norwitz92e212f2006-04-03 04:48:37 +000045 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
46 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000047 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000048 return PyImport_ImportModuleLevel(name, globals, locals,
49 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000050}
51
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000052PyDoc_STRVAR(import_doc,
Neal Norwitz92e212f2006-04-03 04:48:37 +000053"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000054\n\
55Import a module. The globals are only used to determine the context;\n\
56they are not modified. The locals are currently unused. The fromlist\n\
57should be a list of names to emulate ``from name import ...'', or an\n\
58empty list to emulate ``import name''.\n\
59When importing a module from a package, note that __import__('A.B', ...)\n\
60returns package A when fromlist is empty, but its submodule B when\n\
Neal Norwitz92e212f2006-04-03 04:48:37 +000061fromlist is not empty. Level is used to determine whether to perform \n\
62absolute or relative imports. -1 is the original strategy of attempting\n\
63both absolute and relative imports, 0 is absolute, a positive number\n\
64is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065
Guido van Rossum1ae940a1995-01-02 19:04:15 +000066
Guido van Rossum79f25d91997-04-29 20:08:16 +000067static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000068builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000069{
Guido van Rossum09df08a1998-05-22 00:51:39 +000070 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000071}
72
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000073PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000074"abs(number) -> number\n\
75\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000076Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000077
Raymond Hettinger96229b12005-03-11 06:49:40 +000078static PyObject *
79builtin_all(PyObject *self, PyObject *v)
80{
81 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +000082 PyObject *(*iternext)(PyObject *);
83 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +000084
85 it = PyObject_GetIter(v);
86 if (it == NULL)
87 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +000088 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +000089
Guido van Rossum01dbc102007-12-20 23:48:28 +000090 for (;;) {
91 item = iternext(it);
92 if (item == NULL)
93 break;
94 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +000095 Py_DECREF(item);
96 if (cmp < 0) {
97 Py_DECREF(it);
98 return NULL;
99 }
100 if (cmp == 0) {
101 Py_DECREF(it);
102 Py_RETURN_FALSE;
103 }
104 }
105 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000106 if (PyErr_Occurred()) {
107 if (PyErr_ExceptionMatches(PyExc_StopIteration))
108 PyErr_Clear();
109 else
110 return NULL;
111 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000112 Py_RETURN_TRUE;
113}
114
115PyDoc_STRVAR(all_doc,
116"all(iterable) -> bool\n\
117\n\
118Return True if bool(x) is True for all values x in the iterable.");
119
120static PyObject *
121builtin_any(PyObject *self, PyObject *v)
122{
123 PyObject *it, *item;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000124 PyObject *(*iternext)(PyObject *);
125 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000126
127 it = PyObject_GetIter(v);
128 if (it == NULL)
129 return NULL;
Guido van Rossum01dbc102007-12-20 23:48:28 +0000130 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000131
Guido van Rossum01dbc102007-12-20 23:48:28 +0000132 for (;;) {
133 item = iternext(it);
134 if (item == NULL)
135 break;
136 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000137 Py_DECREF(item);
138 if (cmp < 0) {
139 Py_DECREF(it);
140 return NULL;
141 }
142 if (cmp == 1) {
143 Py_DECREF(it);
144 Py_RETURN_TRUE;
145 }
146 }
147 Py_DECREF(it);
Guido van Rossum01dbc102007-12-20 23:48:28 +0000148 if (PyErr_Occurred()) {
149 if (PyErr_ExceptionMatches(PyExc_StopIteration))
150 PyErr_Clear();
151 else
152 return NULL;
153 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000154 Py_RETURN_FALSE;
155}
156
157PyDoc_STRVAR(any_doc,
158"any(iterable) -> bool\n\
159\n\
160Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000161
Guido van Rossum79f25d91997-04-29 20:08:16 +0000162static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000163builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000164{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000165 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000166 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000167
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000168 if (PyErr_WarnPy3k("apply() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000169 "use func(*args, **kwargs)", 1) < 0)
Neal Norwitz8b2bfbc2007-05-23 06:35:32 +0000170 return NULL;
171
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000172 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000173 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000174 if (alist != NULL) {
175 if (!PyTuple_Check(alist)) {
176 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000177 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000178 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000179 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000180 return NULL;
181 }
182 t = PySequence_Tuple(alist);
183 if (t == NULL)
184 return NULL;
185 alist = t;
186 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000187 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000189 PyErr_Format(PyExc_TypeError,
190 "apply() arg 3 expected dictionary, found %s",
191 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000192 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000193 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000194 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
195 finally:
196 Py_XDECREF(t);
197 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000198}
199
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000200PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000201"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000202\n\
Fred Drake7b912121999-12-23 14:16:55 +0000203Call a callable object with positional arguments taken from the tuple args,\n\
204and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000205Note that classes are callable, as are instances with a __call__() method.\n\
206\n\
207Deprecated since release 2.3. Instead, use the extended call syntax:\n\
208 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000209
210
Guido van Rossum79f25d91997-04-29 20:08:16 +0000211static PyObject *
Eric Smith3cd81942008-02-22 16:30:22 +0000212builtin_bin(PyObject *self, PyObject *v)
213{
Raymond Hettinger9c437af2008-06-24 22:46:07 +0000214 return PyNumber_ToBase(v, 2);
Eric Smith3cd81942008-02-22 16:30:22 +0000215}
216
217PyDoc_STRVAR(bin_doc,
218"bin(number) -> string\n\
219\n\
220Return the binary representation of an integer or long integer.");
221
222
223static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000224builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000225{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000226 if (PyErr_WarnPy3k("callable() not supported in 3.x; "
Benjamin Peterson0811a442009-11-17 21:33:08 +0000227 "use isinstance(x, collections.Callable)", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000228 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +0000229 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000230}
231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000232PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000233"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000234\n\
235Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000236Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000237
238
Guido van Rossum79f25d91997-04-29 20:08:16 +0000239static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000240builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000241{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000242 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000243 Py_ssize_t len; /* guess for result list size */
244 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000245
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000246 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000247 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000248
Tim Peters0e57abf2001-05-02 07:39:38 +0000249 /* Strings and tuples return a result of the same type. */
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000250 if (PyString_Check(seq))
Tim Peters0e57abf2001-05-02 07:39:38 +0000251 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000252#ifdef Py_USING_UNICODE
253 if (PyUnicode_Check(seq))
254 return filterunicode(func, seq);
255#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000256 if (PyTuple_Check(seq))
257 return filtertuple(func, seq);
258
Georg Brandle35b6572005-07-19 22:20:20 +0000259 /* Pre-allocate argument list tuple. */
260 arg = PyTuple_New(1);
261 if (arg == NULL)
262 return NULL;
263
Tim Peters0e57abf2001-05-02 07:39:38 +0000264 /* Get iterator. */
265 it = PyObject_GetIter(seq);
266 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000267 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000268
269 /* Guess a result list size. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000270 len = _PyObject_LengthHint(seq, 8);
Raymond Hettinger24e28722009-02-02 22:44:06 +0000271 if (len == -1)
272 goto Fail_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000273
Tim Peters0e57abf2001-05-02 07:39:38 +0000274 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000275 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000276 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000277 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000278 result = seq;
279 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000280 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000281 result = PyList_New(len);
282 if (result == NULL)
283 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000284 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000285
Tim Peters0e57abf2001-05-02 07:39:38 +0000286 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000287 j = 0;
288 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000289 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000290 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000291
Tim Peters0e57abf2001-05-02 07:39:38 +0000292 item = PyIter_Next(it);
293 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000294 if (PyErr_Occurred())
295 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000296 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000297 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000298
Neil Schemenauer68973552003-08-14 20:37:34 +0000299 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000300 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000301 }
302 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000303 PyObject *good;
304 PyTuple_SET_ITEM(arg, 0, item);
305 good = PyObject_Call(func, arg, NULL);
306 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000307 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000308 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000309 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000310 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000311 ok = PyObject_IsTrue(good);
312 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000313 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000314 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000315 if (j < len)
316 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000317 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000318 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000319 Py_DECREF(item);
320 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000321 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000322 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000323 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000324 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000325 else
326 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000327 }
328
Guido van Rossum12d12c51993-10-26 17:58:25 +0000329
Tim Peters0e57abf2001-05-02 07:39:38 +0000330 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000331 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000332 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000333
Tim Peters3c6b1482001-05-21 08:07:05 +0000334 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000335 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000336 return result;
337
Tim Peters0e57abf2001-05-02 07:39:38 +0000338Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000339 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000340Fail_it:
341 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000342Fail_arg:
343 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000344 return NULL;
345}
346
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000347PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000348"filter(function or None, sequence) -> list, tuple, or string\n"
349"\n"
350"Return those items of sequence for which function(item) is true. If\n"
351"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000352"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000353
Guido van Rossum79f25d91997-04-29 20:08:16 +0000354static PyObject *
Eric Smitha9f7d622008-02-17 19:46:49 +0000355builtin_format(PyObject *self, PyObject *args)
356{
357 PyObject *value;
358 PyObject *format_spec = NULL;
359
360 if (!PyArg_ParseTuple(args, "O|O:format", &value, &format_spec))
361 return NULL;
362
363 return PyObject_Format(value, format_spec);
364}
365
366PyDoc_STRVAR(format_doc,
367"format(value[, format_spec]) -> string\n\
368\n\
369Returns value.__format__(format_spec)\n\
370format_spec defaults to \"\"");
371
372static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000373builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000374{
375 long x;
376 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000377
Guido van Rossum79f25d91997-04-29 20:08:16 +0000378 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000379 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000380 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000381 PyErr_SetString(PyExc_ValueError,
382 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000383 return NULL;
384 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000385 s[0] = (char)x;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000386 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000387}
388
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000389PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000390"chr(i) -> character\n\
391\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000392Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000393
394
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000395#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000396static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000397builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000398{
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +0000399 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000400
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +0000401 if (!PyArg_ParseTuple(args, "i:unichr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000402 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000403
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000404 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000405}
406
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000407PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000408"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000409\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000410Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000411#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000412
413
414static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000415builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000416{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000418 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000420 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000421 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000422 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000423 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000424 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000425}
426
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000427PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000428"cmp(x, y) -> integer\n\
429\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000430Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000431
432
Guido van Rossum79f25d91997-04-29 20:08:16 +0000433static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000434builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000435{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000436 PyObject *v, *w;
437 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000438
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000439 if (PyErr_WarnPy3k("coerce() not supported in 3.x", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000440 return NULL;
441
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000442 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000443 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000444 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000445 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000446 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000447 Py_DECREF(v);
448 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000449 return res;
450}
451
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000452PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000453"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000454\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000455Return a tuple consisting of the two numeric arguments converted to\n\
456a common type, using the same rules as used by arithmetic operations.\n\
457If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000458
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459static PyObject *
Georg Brandl5240d742007-03-13 20:46:32 +0000460builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000461{
462 char *str;
463 char *filename;
464 char *startstr;
Georg Brandlf2bfd542008-03-29 13:24:23 +0000465 int mode = -1;
Tim Peters6cd6a822001-08-17 22:11:27 +0000466 int dont_inherit = 0;
467 int supplied_flags = 0;
Benjamin Peterson011e9f12009-12-13 00:59:01 +0000468 int is_ast;
Tim Peters5ba58662001-07-16 02:29:45 +0000469 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000470 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000471 Py_ssize_t length;
Georg Brandl5240d742007-03-13 20:46:32 +0000472 static char *kwlist[] = {"source", "filename", "mode", "flags",
473 "dont_inherit", NULL};
Georg Brandlf2bfd542008-03-29 13:24:23 +0000474 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000475
Georg Brandl5240d742007-03-13 20:46:32 +0000476 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
477 kwlist, &cmd, &filename, &startstr,
478 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000479 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000480
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000481 cf.cf_flags = supplied_flags;
482
Georg Brandlfc8eef32008-03-28 12:11:56 +0000483 if (supplied_flags &
484 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
485 {
486 PyErr_SetString(PyExc_ValueError,
487 "compile(): unrecognised flags");
488 return NULL;
489 }
490 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
491
492 if (!dont_inherit) {
493 PyEval_MergeCompilerFlags(&cf);
494 }
495
Georg Brandlf2bfd542008-03-29 13:24:23 +0000496 if (strcmp(startstr, "exec") == 0)
497 mode = 0;
498 else if (strcmp(startstr, "eval") == 0)
499 mode = 1;
500 else if (strcmp(startstr, "single") == 0)
501 mode = 2;
502 else {
503 PyErr_SetString(PyExc_ValueError,
504 "compile() arg 3 must be 'exec', 'eval' or 'single'");
505 return NULL;
506 }
507
Benjamin Peterson011e9f12009-12-13 00:59:01 +0000508 is_ast = PyAST_Check(cmd);
509 if (is_ast == -1)
510 return NULL;
511 if (is_ast) {
Georg Brandlfc8eef32008-03-28 12:11:56 +0000512 if (supplied_flags & PyCF_ONLY_AST) {
513 Py_INCREF(cmd);
514 result = cmd;
515 }
516 else {
517 PyArena *arena;
518 mod_ty mod;
519
520 arena = PyArena_New();
Georg Brandlf2bfd542008-03-29 13:24:23 +0000521 mod = PyAST_obj2mod(cmd, arena, mode);
Georg Brandlfc8eef32008-03-28 12:11:56 +0000522 if (mod == NULL) {
523 PyArena_Free(arena);
524 return NULL;
525 }
526 result = (PyObject*)PyAST_Compile(mod, filename,
527 &cf, arena);
528 PyArena_Free(arena);
529 }
530 return result;
531 }
532
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000533#ifdef Py_USING_UNICODE
534 if (PyUnicode_Check(cmd)) {
535 tmp = PyUnicode_AsUTF8String(cmd);
536 if (tmp == NULL)
537 return NULL;
538 cmd = tmp;
539 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
540 }
541#endif
Tim Peters6cd6a822001-08-17 22:11:27 +0000542
Georg Brandlfc8eef32008-03-28 12:11:56 +0000543 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000544 goto cleanup;
Georg Brandlfc8eef32008-03-28 12:11:56 +0000545 if ((size_t)length != strlen(str)) {
546 PyErr_SetString(PyExc_TypeError,
547 "compile() expected string without null bytes");
548 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000549 }
Georg Brandlf2bfd542008-03-29 13:24:23 +0000550 result = Py_CompileStringFlags(str, filename, start[mode], &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000551cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000552 Py_XDECREF(tmp);
553 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000554}
555
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000556PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000557"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000558\n\
559Compile the source string (a Python module, statement or expression)\n\
560into a code object that can be executed by the exec statement or eval().\n\
561The filename will be used for run-time error messages.\n\
562The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000563single (interactive) statement, or 'eval' to compile an expression.\n\
564The flags argument, if present, controls which future statements influence\n\
565the compilation of the code.\n\
566The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
567the effects of any future statements in effect in the code calling\n\
568compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000569in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000570
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000572builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000573{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000574 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000576 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000577 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000578 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000579}
580
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000581PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000582"dir([object]) -> list of strings\n"
583"\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000584"If called without an argument, return the names in the current scope.\n"
585"Else, return an alphabetized list of names comprising (some of) the attributes\n"
586"of the given object, and of attributes reachable from it.\n"
587"If the object supplies a method named __dir__, it will be used; otherwise\n"
588"the default dir() logic is used and returns:\n"
589" for a module object: the module's attributes.\n"
590" for a class object: its attributes, and recursively the attributes\n"
591" of its bases.\n"
Georg Brandl3bb15672007-03-13 07:23:16 +0000592" for any other object: its attributes, its class's attributes, and\n"
Georg Brandl871f1bc2007-03-12 13:17:36 +0000593" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000594
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000596builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000597{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000599
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000600 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000601 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000602 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000603}
604
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000605PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000606"divmod(x, y) -> (div, mod)\n\
607\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000608Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000609
610
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000612builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000613{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000614 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000617 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000618
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000619 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000621 if (locals != Py_None && !PyMapping_Check(locals)) {
622 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000623 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000624 }
625 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000626 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000627 "globals must be a real dict; try eval(expr, {}, mapping)"
628 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000629 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000630 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631 if (globals == Py_None) {
632 globals = PyEval_GetGlobals();
633 if (locals == Py_None)
634 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000635 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000637 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000638
Georg Brandl77c85e62005-09-15 10:46:13 +0000639 if (globals == NULL || locals == NULL) {
640 PyErr_SetString(PyExc_TypeError,
641 "eval must be given globals and locals "
642 "when called without a frame");
643 return NULL;
644 }
645
Guido van Rossum79f25d91997-04-29 20:08:16 +0000646 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
647 if (PyDict_SetItemString(globals, "__builtins__",
648 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000649 return NULL;
650 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000651
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000652 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000653 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000654 PyErr_SetString(PyExc_TypeError,
655 "code object passed to eval() may not contain free variables");
656 return NULL;
657 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000658 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000659 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000660
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000661 if (!PyString_Check(cmd) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000662 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000664 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000665 return NULL;
666 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000667 cf.cf_flags = 0;
668
669#ifdef Py_USING_UNICODE
670 if (PyUnicode_Check(cmd)) {
671 tmp = PyUnicode_AsUTF8String(cmd);
672 if (tmp == NULL)
673 return NULL;
674 cmd = tmp;
675 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
676 }
677#endif
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000678 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000679 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000680 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000681 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682 while (*str == ' ' || *str == '\t')
683 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000684
Tim Peters9fa96be2001-08-17 23:04:59 +0000685 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000686 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
687 Py_XDECREF(tmp);
688 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000689}
690
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000691PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000692"eval(source[, globals[, locals]]) -> value\n\
693\n\
694Evaluate the source in the context of globals and locals.\n\
695The source may be a string representing a Python expression\n\
696or a code object as returned by compile().\n\
Neal Norwitz477ca1c2006-09-05 02:25:41 +0000697The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000698defaulting to the current globals and locals.\n\
699If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000700
701
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000703builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000704{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 PyObject *globals = Py_None, *locals = Py_None;
707 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000708 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000709 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000710 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000712 if (PyErr_WarnPy3k("execfile() not supported in 3.x; use exec()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000713 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +0000714 return NULL;
715
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000716 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000717 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000718 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000719 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000720 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000721 if (locals != Py_None && !PyMapping_Check(locals)) {
722 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
723 return NULL;
724 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725 if (globals == Py_None) {
726 globals = PyEval_GetGlobals();
727 if (locals == Py_None)
728 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000729 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000730 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000731 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000732 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
733 if (PyDict_SetItemString(globals, "__builtins__",
734 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000735 return NULL;
736 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000737
738 exists = 0;
739 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000740#if defined(PLAN9)
741 {
742 Dir *d;
743
744 if ((d = dirstat(filename))!=nil) {
745 if(d->mode & DMDIR)
746 werrstr("is a directory");
747 else
748 exists = 1;
749 free(d);
750 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000751 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000752#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000753 if (object_exists(filename)) {
754 if (isdir(filename))
755 errno = EISDIR;
756 else
757 exists = 1;
758 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000759#else /* standard Posix */
760 {
761 struct stat s;
762 if (stat(filename, &s) == 0) {
763 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000764# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000765 errno = EOS2ERR;
766# else
767 errno = EISDIR;
768# endif
769 else
770 exists = 1;
771 }
772 }
773#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000774
775 if (exists) {
776 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000777 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000778 Py_END_ALLOW_THREADS
779
780 if (fp == NULL) {
781 exists = 0;
782 }
783 }
784
785 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000786 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000787 return NULL;
788 }
Tim Peters5ba58662001-07-16 02:29:45 +0000789 cf.cf_flags = 0;
790 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000791 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000792 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000793 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000794 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000795 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000797}
798
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000799PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000800"execfile(filename[, globals[, locals]])\n\
801\n\
802Read and execute a Python script from a file.\n\
803The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000804globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000805
806
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000808builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000809{
Guido van Rossum950ff291998-06-29 13:38:57 +0000810 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000812
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000813 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000814 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000815#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000816 if (PyUnicode_Check(name)) {
817 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
818 if (name == NULL)
819 return NULL;
820 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000821#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000822
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000823 if (!PyString_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000824 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000825 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000826 return NULL;
827 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000828 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000829 if (result == NULL && dflt != NULL &&
830 PyErr_ExceptionMatches(PyExc_AttributeError))
831 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000832 PyErr_Clear();
833 Py_INCREF(dflt);
834 result = dflt;
835 }
836 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000837}
838
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000839PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000840"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000841\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000842Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
843When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000844exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000845
846
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000848builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000849{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000851
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 d = PyEval_GetGlobals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +0000853 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000854 return d;
855}
856
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000857PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000858"globals() -> dictionary\n\
859\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000860Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861
862
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000864builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000865{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 PyObject *v;
867 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000869 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000870 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000871#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000872 if (PyUnicode_Check(name)) {
873 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
874 if (name == NULL)
875 return NULL;
876 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000877#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000878
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000879 if (!PyString_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000880 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000881 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000882 return NULL;
883 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000885 if (v == NULL) {
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000886 if (!PyErr_ExceptionMatches(PyExc_Exception))
887 return NULL;
888 else {
889 PyErr_Clear();
890 Py_INCREF(Py_False);
891 return Py_False;
892 }
Guido van Rossum9bfef441993-03-29 10:43:31 +0000893 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000895 Py_INCREF(Py_True);
896 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000897}
898
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000900"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000901\n\
902Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000903(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904
905
Guido van Rossum79f25d91997-04-29 20:08:16 +0000906static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000907builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000908{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000909 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000910}
911
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000912PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000913"id(object) -> integer\n\
914\n\
915Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000916simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000917
918
Guido van Rossum79f25d91997-04-29 20:08:16 +0000919static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000920builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000921{
922 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000923 PyObject *it; /* the iterator object */
924 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000925 } sequence;
926
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000928 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000929 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000930 register int i, j;
931
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000933 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 PyErr_SetString(PyExc_TypeError,
935 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000936 return NULL;
937 }
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000940 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000941
Neal Norwitz53152a12008-02-24 02:20:25 +0000942 if (func == Py_None) {
Benjamin Peterson9f4f4812008-04-27 03:01:45 +0000943 if (PyErr_WarnPy3k("map(None, ...) not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +0000944 "use list(...)", 1) < 0)
Neal Norwitz53152a12008-02-24 02:20:25 +0000945 return NULL;
946 if (n == 1) {
947 /* map(None, S) is the same as list(S). */
948 return PySequence_List(PyTuple_GetItem(args, 1));
949 }
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000950 }
951
Tim Peters4e9afdc2001-05-03 23:54:49 +0000952 /* Get space for sequence descriptors. Must NULL out the iterator
953 * pointers so that jumping to Fail_2 later doesn't see trash.
954 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
956 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000957 return NULL;
958 }
959 for (i = 0; i < n; ++i) {
960 seqs[i].it = (PyObject*)NULL;
961 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000962 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000963
Tim Peters4e9afdc2001-05-03 23:54:49 +0000964 /* Do a first pass to obtain iterators for the arguments, and set len
965 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000966 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000967 len = 0;
968 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
969 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000970 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000971
Tim Peters4e9afdc2001-05-03 23:54:49 +0000972 /* Get iterator. */
973 curseq = PyTuple_GetItem(args, i+1);
974 sqp->it = PyObject_GetIter(curseq);
975 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000977 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000978 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000979 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981 goto Fail_2;
982 }
983
Tim Peters4e9afdc2001-05-03 23:54:49 +0000984 /* Update len. */
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000985 curlen = _PyObject_LengthHint(curseq, 8);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000986 if (curlen > len)
987 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000988 }
989
Tim Peters4e9afdc2001-05-03 23:54:49 +0000990 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000991 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000992 goto Fail_2;
993
Tim Peters4e9afdc2001-05-03 23:54:49 +0000994 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000995 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000998
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001000 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001001 else if ((alist = PyTuple_New(n)) == NULL)
1002 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001003
1004 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001005 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 Py_INCREF(Py_None);
1007 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001008 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001009 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001010 item = PyIter_Next(sqp->it);
1011 if (item)
1012 ++numactive;
1013 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001014 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001015 Py_XDECREF(alist);
1016 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001017 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 Py_INCREF(Py_None);
1019 item = Py_None;
1020 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001021 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001023 if (alist)
1024 PyTuple_SET_ITEM(alist, j, item);
1025 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001026 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001027 }
1028
Guido van Rossum32120311995-07-10 13:52:21 +00001029 if (!alist)
1030 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001031
Tim Peters4e9afdc2001-05-03 23:54:49 +00001032 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001033 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001034 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001035 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001036
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001038 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001040 value = PyEval_CallObject(func, alist);
1041 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001042 if (value == NULL)
1043 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001044 }
1045 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001046 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001047 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001048 if (status < 0)
1049 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001050 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001051 else if (PyList_SetItem(result, i, value) < 0)
1052 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001053 }
1054
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001055 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1056 goto Fail_1;
1057
Tim Peters4e9afdc2001-05-03 23:54:49 +00001058 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001061 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001062Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001063 result = NULL;
1064Succeed:
1065 assert(seqs);
1066 for (i = 0; i < n; ++i)
1067 Py_XDECREF(seqs[i].it);
1068 PyMem_DEL(seqs);
1069 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001070}
1071
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001072PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073"map(function, sequence[, sequence, ...]) -> list\n\
1074\n\
1075Return a list of the results of applying the function to the items of\n\
1076the argument sequence(s). If more than one sequence is given, the\n\
1077function is called with an argument list consisting of the corresponding\n\
1078item of each sequence, substituting None for missing values when not all\n\
1079sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001080the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001081
1082
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083static PyObject *
Georg Brandl28e08732008-04-30 19:47:09 +00001084builtin_next(PyObject *self, PyObject *args)
1085{
1086 PyObject *it, *res;
1087 PyObject *def = NULL;
1088
1089 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1090 return NULL;
1091 if (!PyIter_Check(it)) {
1092 PyErr_Format(PyExc_TypeError,
1093 "%.200s object is not an iterator",
1094 it->ob_type->tp_name);
1095 return NULL;
1096 }
1097
1098 res = (*it->ob_type->tp_iternext)(it);
1099 if (res != NULL) {
1100 return res;
1101 } else if (def != NULL) {
1102 if (PyErr_Occurred()) {
1103 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
1104 return NULL;
1105 PyErr_Clear();
1106 }
1107 Py_INCREF(def);
1108 return def;
1109 } else if (PyErr_Occurred()) {
1110 return NULL;
1111 } else {
1112 PyErr_SetNone(PyExc_StopIteration);
1113 return NULL;
1114 }
1115}
1116
1117PyDoc_STRVAR(next_doc,
1118"next(iterator[, default])\n\
1119\n\
1120Return the next item from the iterator. If default is given and the iterator\n\
1121is exhausted, it is returned instead of raising StopIteration.");
1122
1123
1124static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001125builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001126{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 PyObject *v;
1128 PyObject *name;
1129 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001130
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001131 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001132 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001133 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001134 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001135 Py_INCREF(Py_None);
1136 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001137}
1138
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001140"setattr(object, name, value)\n\
1141\n\
1142Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001143``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001144
1145
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001147builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001148{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149 PyObject *v;
1150 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001151
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001152 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001153 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001155 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156 Py_INCREF(Py_None);
1157 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001158}
1159
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001160PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001161"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001162\n\
1163Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165
1166
Guido van Rossum79f25d91997-04-29 20:08:16 +00001167static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001168builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001169{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001170 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001171
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001173 if (x == -1)
1174 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001176}
1177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001178PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179"hash(object) -> integer\n\
1180\n\
1181Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001182the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001183
1184
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001186builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001187{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001189 PyObject *res;
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001190
1191 if ((nb = v->ob_type->tp_as_number) == NULL ||
1192 nb->nb_hex == NULL) {
1193 PyErr_SetString(PyExc_TypeError,
1194 "hex() argument can't be converted to hex");
1195 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001196 }
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001197 res = (*nb->nb_hex)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001198 if (res && !PyString_Check(res)) {
Benjamin Petersonc6d64ec2008-05-17 20:09:42 +00001199 PyErr_Format(PyExc_TypeError,
1200 "__hex__ returned non-string (type %.200s)",
1201 res->ob_type->tp_name);
1202 Py_DECREF(res);
1203 return NULL;
1204 }
1205 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001206}
1207
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001208PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209"hex(number) -> string\n\
1210\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001212
1213
Tim Petersdbd9ba62000-07-09 03:09:57 +00001214static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001215
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001217builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001218{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221 PyObject *res;
1222 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001223 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001224
1225 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001226 if (line == NULL)
1227 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229 return NULL;
1230 while (*str == ' ' || *str == '\t')
1231 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001232 globals = PyEval_GetGlobals();
1233 locals = PyEval_GetLocals();
1234 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1235 if (PyDict_SetItemString(globals, "__builtins__",
1236 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001237 return NULL;
1238 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001239 cf.cf_flags = 0;
1240 PyEval_MergeCompilerFlags(&cf);
1241 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001243 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001244}
1245
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001247"input([prompt]) -> value\n\
1248\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001249Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001250
1251
Guido van Rossume8811f81997-02-14 15:48:05 +00001252static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001253builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001254{
1255 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001256 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001257 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001258 if (!PyString_CheckExact(s)) {
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001259 PyErr_SetString(PyExc_TypeError,
1260 "can't intern subclass of string");
1261 return NULL;
1262 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001263 Py_INCREF(s);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001264 PyString_InternInPlace(&s);
Guido van Rossume8811f81997-02-14 15:48:05 +00001265 return s;
1266}
1267
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001268PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001269"intern(string) -> string\n\
1270\n\
1271``Intern'' the given string. This enters the string in the (global)\n\
1272table of interned strings whose purpose is to speed up dictionary lookups.\n\
1273Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001274same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001275
1276
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001278builtin_iter(PyObject *self, PyObject *args)
1279{
1280 PyObject *v, *w = NULL;
1281
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001282 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001283 return NULL;
1284 if (w == NULL)
1285 return PyObject_GetIter(v);
1286 if (!PyCallable_Check(v)) {
1287 PyErr_SetString(PyExc_TypeError,
1288 "iter(v, w): v must be callable");
1289 return NULL;
1290 }
1291 return PyCallIter_New(v, w);
1292}
1293
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001294PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001295"iter(collection) -> iterator\n\
1296iter(callable, sentinel) -> iterator\n\
1297\n\
1298Get an iterator from an object. In the first form, the argument must\n\
1299supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001300In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001301
1302
1303static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001304builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001305{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001306 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001307
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001308 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001309 if (res < 0 && PyErr_Occurred())
1310 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001311 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001312}
1313
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001314PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001315"len(object) -> integer\n\
1316\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001317Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001318
1319
Guido van Rossum79f25d91997-04-29 20:08:16 +00001320static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001321builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001322{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001323 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001324
Guido van Rossum79f25d91997-04-29 20:08:16 +00001325 d = PyEval_GetLocals();
Neal Norwitz43bd4db2006-08-12 01:46:42 +00001326 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001327 return d;
1328}
1329
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001330PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001331"locals() -> dictionary\n\
1332\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001333Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001334
1335
Guido van Rossum79f25d91997-04-29 20:08:16 +00001336static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001337min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001338{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001339 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001340 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001341
Guido van Rossum79f25d91997-04-29 20:08:16 +00001342 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001343 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001344 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001345 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001346
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001347 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1348 keyfunc = PyDict_GetItemString(kwds, "key");
1349 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001350 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001351 "%s() got an unexpected keyword argument", name);
1352 return NULL;
1353 }
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001354 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001355 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356
Tim Petersc3074532001-05-03 07:00:32 +00001357 it = PyObject_GetIter(v);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001358 if (it == NULL) {
1359 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001360 return NULL;
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001361 }
Tim Petersc3074532001-05-03 07:00:32 +00001362
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001363 maxitem = NULL; /* the result */
1364 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001365 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001366 /* get the value from the key function */
1367 if (keyfunc != NULL) {
1368 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1369 if (val == NULL)
1370 goto Fail_it_item;
1371 }
1372 /* no key function; the value is the item */
1373 else {
1374 val = item;
1375 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001376 }
Tim Petersc3074532001-05-03 07:00:32 +00001377
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001378 /* maximum value and item are unset; set them */
1379 if (maxval == NULL) {
1380 maxitem = item;
1381 maxval = val;
1382 }
1383 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001384 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001385 int cmp = PyObject_RichCompareBool(val, maxval, op);
1386 if (cmp < 0)
1387 goto Fail_it_item_and_val;
1388 else if (cmp > 0) {
1389 Py_DECREF(maxval);
1390 Py_DECREF(maxitem);
1391 maxval = val;
1392 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001393 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001394 else {
1395 Py_DECREF(item);
1396 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001397 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001398 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001399 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001400 if (PyErr_Occurred())
1401 goto Fail_it;
1402 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001403 PyErr_Format(PyExc_ValueError,
1404 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001405 assert(maxitem == NULL);
1406 }
1407 else
1408 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001409 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001410 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001411 return maxitem;
1412
1413Fail_it_item_and_val:
1414 Py_DECREF(val);
1415Fail_it_item:
1416 Py_DECREF(item);
1417Fail_it:
1418 Py_XDECREF(maxval);
1419 Py_XDECREF(maxitem);
1420 Py_DECREF(it);
Guido van Rossum1d9a9ea2008-01-23 20:19:01 +00001421 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001422 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001423}
1424
Guido van Rossum79f25d91997-04-29 20:08:16 +00001425static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001426builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001427{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001428 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001429}
1430
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001431PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001432"min(iterable[, key=func]) -> value\n\
1433min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001434\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001435With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001436With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001437
1438
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001440builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001441{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001442 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001443}
1444
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001445PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001446"max(iterable[, key=func]) -> value\n\
1447max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001448\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001449With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001450With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001451
1452
Guido van Rossum79f25d91997-04-29 20:08:16 +00001453static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001454builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001455{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001456 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001457 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001458
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001459 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1460 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001461 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001462 "oct() argument can't be converted to oct");
1463 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001464 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001465 res = (*nb->nb_oct)(v);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001466 if (res && !PyString_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001467 PyErr_Format(PyExc_TypeError,
1468 "__oct__ returned non-string (type %.200s)",
1469 res->ob_type->tp_name);
1470 Py_DECREF(res);
1471 return NULL;
1472 }
1473 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001474}
1475
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001476PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001477"oct(number) -> string\n\
1478\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001479Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001480
1481
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482static PyObject *
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001483builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1484{
1485 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1486}
1487
1488PyDoc_STRVAR(open_doc,
1489"open(name[, mode[, buffering]]) -> file object\n\
1490\n\
Skip Montanaro4e3ebe02007-12-08 14:37:43 +00001491Open a file using the file() type, returns a file object. This is the\n\
1492preferred way to open a file.");
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00001493
1494
1495static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001496builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497{
Guido van Rossum09095f32000-03-10 23:00:52 +00001498 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001499 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001500
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001501 if (PyString_Check(obj)) {
1502 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001503 if (size == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001504 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001505 return PyInt_FromLong(ord);
1506 }
Christian Heimes3497f942008-05-26 12:29:14 +00001507 } else if (PyByteArray_Check(obj)) {
1508 size = PyByteArray_GET_SIZE(obj);
Christian Heimes1a6387e2008-03-26 12:49:49 +00001509 if (size == 1) {
Christian Heimes3497f942008-05-26 12:29:14 +00001510 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
Christian Heimes1a6387e2008-03-26 12:49:49 +00001511 return PyInt_FromLong(ord);
1512 }
1513
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001514#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001515 } else if (PyUnicode_Check(obj)) {
1516 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001517 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001518 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001519 return PyInt_FromLong(ord);
1520 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001521#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001522 } else {
1523 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001524 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001525 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001526 return NULL;
1527 }
1528
Guido van Rossumad991772001-01-12 16:03:05 +00001529 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001530 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001531 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001532 size);
1533 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001534}
1535
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001536PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537"ord(c) -> integer\n\
1538\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001539Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001540
1541
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001543builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001544{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001545 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001546
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001547 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001548 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001549 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001550}
1551
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001552PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001553"pow(x, y[, z]) -> number\n\
1554\n\
1555With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001556equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001557
1558
Eric Smith7c478942008-03-18 23:45:49 +00001559static PyObject *
1560builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1561{
1562 static char *kwlist[] = {"sep", "end", "file", 0};
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001563 static PyObject *dummy_args = NULL;
1564 static PyObject *unicode_newline = NULL, *unicode_space = NULL;
1565 static PyObject *str_newline = NULL, *str_space = NULL;
1566 PyObject *newline, *space;
Eric Smith7c478942008-03-18 23:45:49 +00001567 PyObject *sep = NULL, *end = NULL, *file = NULL;
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001568 int i, err, use_unicode = 0;
Eric Smith7c478942008-03-18 23:45:49 +00001569
1570 if (dummy_args == NULL) {
1571 if (!(dummy_args = PyTuple_New(0)))
1572 return NULL;
1573 }
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001574 if (str_newline == NULL) {
1575 str_newline = PyString_FromString("\n");
1576 if (str_newline == NULL)
1577 return NULL;
1578 str_space = PyString_FromString(" ");
1579 if (str_space == NULL) {
1580 Py_CLEAR(str_newline);
1581 return NULL;
1582 }
1583 unicode_newline = PyUnicode_FromString("\n");
1584 if (unicode_newline == NULL) {
1585 Py_CLEAR(str_newline);
1586 Py_CLEAR(str_space);
1587 return NULL;
1588 }
1589 unicode_space = PyUnicode_FromString(" ");
1590 if (unicode_space == NULL) {
1591 Py_CLEAR(str_newline);
1592 Py_CLEAR(str_space);
1593 Py_CLEAR(unicode_space);
1594 return NULL;
1595 }
1596 }
Eric Smith7c478942008-03-18 23:45:49 +00001597 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1598 kwlist, &sep, &end, &file))
1599 return NULL;
1600 if (file == NULL || file == Py_None) {
1601 file = PySys_GetObject("stdout");
1602 /* sys.stdout may be None when FILE* stdout isn't connected */
1603 if (file == Py_None)
1604 Py_RETURN_NONE;
1605 }
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001606 if (sep == Py_None) {
1607 sep = NULL;
Eric Smith7c478942008-03-18 23:45:49 +00001608 }
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001609 else if (sep) {
1610 if (PyUnicode_Check(sep)) {
1611 use_unicode = 1;
1612 }
1613 else if (!PyString_Check(sep)) {
1614 PyErr_Format(PyExc_TypeError,
1615 "sep must be None, str or unicode, not %.200s",
1616 sep->ob_type->tp_name);
1617 return NULL;
1618 }
1619 }
1620 if (end == Py_None)
1621 end = NULL;
1622 else if (end) {
1623 if (PyUnicode_Check(end)) {
1624 use_unicode = 1;
1625 }
1626 else if (!PyString_Check(end)) {
1627 PyErr_Format(PyExc_TypeError,
1628 "end must be None, str or unicode, not %.200s",
1629 end->ob_type->tp_name);
1630 return NULL;
1631 }
1632 }
1633
1634 if (!use_unicode) {
1635 for (i = 0; i < PyTuple_Size(args); i++) {
1636 if (PyUnicode_Check(PyTuple_GET_ITEM(args, i))) {
1637 use_unicode = 1;
1638 break;
1639 }
1640 }
1641 }
1642 if (use_unicode) {
1643 newline = unicode_newline;
1644 space = unicode_space;
1645 }
1646 else {
1647 newline = str_newline;
1648 space = str_space;
Eric Smith7c478942008-03-18 23:45:49 +00001649 }
1650
1651 for (i = 0; i < PyTuple_Size(args); i++) {
1652 if (i > 0) {
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001653 if (sep == NULL)
1654 err = PyFile_WriteObject(space, file,
1655 Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001656 else
1657 err = PyFile_WriteObject(sep, file,
1658 Py_PRINT_RAW);
1659 if (err)
1660 return NULL;
1661 }
1662 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1663 Py_PRINT_RAW);
1664 if (err)
1665 return NULL;
1666 }
1667
Benjamin Peterson7d6b0142009-07-02 18:19:47 +00001668 if (end == NULL)
1669 err = PyFile_WriteObject(newline, file, Py_PRINT_RAW);
Eric Smith7c478942008-03-18 23:45:49 +00001670 else
1671 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1672 if (err)
1673 return NULL;
1674
1675 Py_RETURN_NONE;
1676}
1677
1678PyDoc_STRVAR(print_doc,
1679"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
1680\n\
1681Prints the values to a stream, or to sys.stdout by default.\n\
1682Optional keyword arguments:\n\
1683file: a file-like object (stream); defaults to the current sys.stdout.\n\
1684sep: string inserted between values, default a space.\n\
1685end: string appended after the last value, default a newline.");
1686
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001687
1688/* Return number of items in range (lo, hi, step), when arguments are
1689 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1690 * & only if the true value is too large to fit in a signed long.
1691 * Arguments MUST return 1 with either PyInt_Check() or
1692 * PyLong_Check(). Return -1 when there is an error.
1693 */
1694static long
1695get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1696{
1697 /* -------------------------------------------------------------
1698 Algorithm is equal to that of get_len_of_range(), but it operates
1699 on PyObjects (which are assumed to be PyLong or PyInt objects).
1700 ---------------------------------------------------------------*/
1701 long n;
1702 PyObject *diff = NULL;
1703 PyObject *one = NULL;
1704 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1705 /* holds sub-expression evaluations */
1706
1707 /* if (lo >= hi), return length of 0. */
1708 if (PyObject_Compare(lo, hi) >= 0)
1709 return 0;
1710
1711 if ((one = PyLong_FromLong(1L)) == NULL)
1712 goto Fail;
1713
1714 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1715 goto Fail;
1716
1717 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1718 goto Fail;
1719
1720 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1721 goto Fail;
1722
1723 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1724 goto Fail;
1725
1726 n = PyLong_AsLong(tmp3);
1727 if (PyErr_Occurred()) { /* Check for Overflow */
1728 PyErr_Clear();
1729 goto Fail;
1730 }
1731
1732 Py_DECREF(tmp3);
1733 Py_DECREF(tmp2);
1734 Py_DECREF(diff);
1735 Py_DECREF(tmp1);
1736 Py_DECREF(one);
1737 return n;
1738
1739 Fail:
1740 Py_XDECREF(tmp3);
1741 Py_XDECREF(tmp2);
1742 Py_XDECREF(diff);
1743 Py_XDECREF(tmp1);
1744 Py_XDECREF(one);
1745 return -1;
1746}
1747
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001748/* Helper function for handle_range_longs. If arg is int or long
1749 object, returns it with incremented reference count. If arg is
1750 float, raises type error. As a last resort, creates a new int by
1751 calling arg type's nb_int method if it is defined. Returns NULL
1752 and sets exception on error.
1753
1754 Returns a new reference to an int object. */
1755static PyObject *
1756get_range_long_argument(PyObject *arg, const char *name)
1757{
1758 PyObject *v;
1759 PyNumberMethods *nb;
1760 if (PyInt_Check(arg) || PyLong_Check(arg)) {
1761 Py_INCREF(arg);
1762 return arg;
1763 }
1764 if (PyFloat_Check(arg) ||
1765 (nb = Py_TYPE(arg)->tp_as_number) == NULL ||
1766 nb->nb_int == NULL) {
1767 PyErr_Format(PyExc_TypeError,
1768 "range() integer %s argument expected, got %s.",
1769 name, arg->ob_type->tp_name);
1770 return NULL;
1771 }
1772 v = nb->nb_int(arg);
1773 if (v == NULL)
1774 return NULL;
1775 if (PyInt_Check(v) || PyLong_Check(v))
1776 return v;
1777 Py_DECREF(v);
1778 PyErr_SetString(PyExc_TypeError,
1779 "__int__ should return int object");
1780 return NULL;
1781}
1782
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001783/* An extension of builtin_range() that handles the case when PyLong
1784 * arguments are given. */
1785static PyObject *
1786handle_range_longs(PyObject *self, PyObject *args)
1787{
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001788 PyObject *ilow = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001789 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001790 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001791
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001792 PyObject *low = NULL;
1793 PyObject *high = NULL;
1794 PyObject *step = NULL;
1795
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001796 PyObject *curnum = NULL;
1797 PyObject *v = NULL;
1798 long bign;
1799 int i, n;
1800 int cmp_result;
1801
Tim Peters874e1f72003-04-13 22:13:08 +00001802 PyObject *zero = PyLong_FromLong(0);
1803
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001804 if (zero == NULL)
1805 return NULL;
1806
Tim Peters874e1f72003-04-13 22:13:08 +00001807 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1808 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001809 return NULL;
1810 }
1811
Tim Peters874e1f72003-04-13 22:13:08 +00001812 /* Figure out which way we were called, supply defaults, and be
1813 * sure to incref everything so that the decrefs at the end
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001814 * are correct. NB: ilow, ihigh and istep are borrowed references.
Tim Peters874e1f72003-04-13 22:13:08 +00001815 */
1816 assert(ilow != NULL);
1817 if (ihigh == NULL) {
1818 /* only 1 arg -- it's the upper limit */
1819 ihigh = ilow;
1820 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001821 }
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001822
1823 /* convert ihigh if necessary */
Tim Peters874e1f72003-04-13 22:13:08 +00001824 assert(ihigh != NULL);
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001825 high = get_range_long_argument(ihigh, "end");
1826 if (high == NULL)
1827 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001828
Tim Peters874e1f72003-04-13 22:13:08 +00001829 /* ihigh correct now; do ilow */
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001830 if (ilow == NULL) {
1831 Py_INCREF(zero);
1832 low = zero;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001833 }
1834 else {
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001835 low = get_range_long_argument(ilow, "start");
1836 if (low == NULL)
1837 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001838 }
1839
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001840 /* ilow and ihigh correct now; do istep */
1841 if (istep == NULL)
1842 step = PyLong_FromLong(1);
1843 else
1844 step = get_range_long_argument(istep, "step");
1845 if (step == NULL)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001846 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001847
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001848 if (PyObject_Cmp(step, zero, &cmp_result) == -1)
Tim Peters874e1f72003-04-13 22:13:08 +00001849 goto Fail;
Tim Peters874e1f72003-04-13 22:13:08 +00001850
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001851 if (cmp_result == 0) {
1852 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001853 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001854 goto Fail;
1855 }
1856
1857 if (cmp_result > 0)
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001858 bign = get_len_of_range_longs(low, high, step);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001859 else {
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001860 PyObject *neg_step = PyNumber_Negative(step);
1861 if (neg_step == NULL)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001862 goto Fail;
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001863 bign = get_len_of_range_longs(high, low, neg_step);
1864 Py_DECREF(neg_step);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001865 }
1866
1867 n = (int)bign;
1868 if (bign < 0 || (long)n != bign) {
1869 PyErr_SetString(PyExc_OverflowError,
1870 "range() result has too many items");
1871 goto Fail;
1872 }
1873
1874 v = PyList_New(n);
1875 if (v == NULL)
1876 goto Fail;
1877
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001878 curnum = low;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001879 Py_INCREF(curnum);
1880
1881 for (i = 0; i < n; i++) {
1882 PyObject *w = PyNumber_Long(curnum);
1883 PyObject *tmp_num;
1884 if (w == NULL)
1885 goto Fail;
1886
1887 PyList_SET_ITEM(v, i, w);
1888
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001889 tmp_num = PyNumber_Add(curnum, step);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001890 if (tmp_num == NULL)
1891 goto Fail;
1892
1893 Py_DECREF(curnum);
1894 curnum = tmp_num;
1895 }
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001896 Py_DECREF(low);
1897 Py_DECREF(high);
1898 Py_DECREF(step);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001899 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001900 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001901 return v;
1902
1903 Fail:
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001904 Py_XDECREF(low);
1905 Py_XDECREF(high);
1906 Py_XDECREF(step);
Tim Peters874e1f72003-04-13 22:13:08 +00001907 Py_DECREF(zero);
1908 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001909 Py_XDECREF(v);
1910 return NULL;
1911}
1912
Guido van Rossum124eff01999-02-23 16:11:01 +00001913/* Return number of items in range/xrange (lo, hi, step). step > 0
1914 * required. Return a value < 0 if & only if the true value is too
1915 * large to fit in a signed long.
1916 */
1917static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001918get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001919{
1920 /* -------------------------------------------------------------
1921 If lo >= hi, the range is empty.
1922 Else if n values are in the range, the last one is
1923 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1924 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1925 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1926 the RHS is non-negative and so truncation is the same as the
1927 floor. Letting M be the largest positive long, the worst case
1928 for the RHS numerator is hi=M, lo=-M-1, and then
1929 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1930 precision to compute the RHS exactly.
1931 ---------------------------------------------------------------*/
1932 long n = 0;
1933 if (lo < hi) {
1934 unsigned long uhi = (unsigned long)hi;
1935 unsigned long ulo = (unsigned long)lo;
1936 unsigned long diff = uhi - ulo - 1;
1937 n = (long)(diff / (unsigned long)step + 1);
1938 }
1939 return n;
1940}
1941
Guido van Rossum79f25d91997-04-29 20:08:16 +00001942static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001943builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001944{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001945 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001946 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001947 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001948
Guido van Rossum79f25d91997-04-29 20:08:16 +00001949 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001950
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 if (PyTuple_Size(args) <= 1) {
1952 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001953 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001954 &ihigh)) {
1955 PyErr_Clear();
1956 return handle_range_longs(self, args);
1957 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001958 }
1959 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001960 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001961 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001962 &ilow, &ihigh, &istep)) {
1963 PyErr_Clear();
1964 return handle_range_longs(self, args);
1965 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001966 }
1967 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001968 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001969 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001970 return NULL;
1971 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001972 if (istep > 0)
1973 bign = get_len_of_range(ilow, ihigh, istep);
1974 else
1975 bign = get_len_of_range(ihigh, ilow, -istep);
1976 n = (int)bign;
1977 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001978 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001979 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001980 return NULL;
1981 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001983 if (v == NULL)
1984 return NULL;
1985 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001987 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001988 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001989 return NULL;
1990 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001991 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001992 ilow += istep;
1993 }
1994 return v;
1995}
1996
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001997PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001998"range([start,] stop[, step]) -> list of integers\n\
1999\n\
2000Return a list containing an arithmetic progression of integers.\n\
2001range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
2002When step is given, it specifies the increment (or decrement).\n\
2003For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002004These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002005
2006
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002008builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002009{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002010 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002011 PyObject *fin = PySys_GetObject("stdin");
2012 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002013
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002014 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00002015 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002016
2017 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002018 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002019 return NULL;
2020 }
2021 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002022 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002023 return NULL;
2024 }
2025 if (PyFile_SoftSpace(fout, 0)) {
2026 if (PyFile_WriteString(" ", fout) != 0)
2027 return NULL;
2028 }
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00002029 if (PyFile_AsFile(fin) && PyFile_AsFile(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002030 && isatty(fileno(PyFile_AsFile(fin)))
2031 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002032 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00002033 char *prompt;
2034 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002035 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00002036 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002037 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00002038 if (po == NULL)
2039 return NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002040 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00002041 if (prompt == NULL)
2042 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00002043 }
2044 else {
2045 po = NULL;
2046 prompt = "";
2047 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00002048 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00002049 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002050 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00002051 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00002052 if (!PyErr_Occurred())
2053 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00002054 return NULL;
2055 }
2056 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002057 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00002058 result = NULL;
2059 }
2060 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00002061 size_t len = strlen(s);
Martin v. Löwisb1ed7fa2006-04-13 07:52:27 +00002062 if (len > PY_SSIZE_T_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002063 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002064 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00002065 result = NULL;
2066 }
2067 else {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002068 result = PyString_FromStringAndSize(s, len-1);
Guido van Rossum106f2da2000-06-28 21:12:25 +00002069 }
Guido van Rossum872537c1995-07-07 22:43:42 +00002070 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00002071 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00002072 return result;
2073 }
Guido van Rossum90933611991-06-07 16:10:43 +00002074 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002075 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00002076 return NULL;
2077 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00002078 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002079}
2080
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002081PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002082"raw_input([prompt]) -> string\n\
2083\n\
2084Read a string from standard input. The trailing newline is stripped.\n\
2085If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
2086On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002087is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002088
2089
Guido van Rossum79f25d91997-04-29 20:08:16 +00002090static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002091builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002092{
Benjamin Peterson08336e32008-08-18 02:01:21 +00002093 static PyObject *functools_reduce = NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002094
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002095 if (PyErr_WarnPy3k("reduce() not supported in 3.x; "
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002096 "use functools.reduce()", 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002097 return NULL;
2098
Benjamin Peterson08336e32008-08-18 02:01:21 +00002099 if (functools_reduce == NULL) {
2100 PyObject *functools = PyImport_ImportModule("functools");
2101 if (functools == NULL)
2102 return NULL;
2103 functools_reduce = PyObject_GetAttrString(functools, "reduce");
2104 Py_DECREF(functools);
2105 if (functools_reduce == NULL)
2106 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002107 }
Benjamin Peterson08336e32008-08-18 02:01:21 +00002108 return PyObject_Call(functools_reduce, args, NULL);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002109}
2110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002111PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002112"reduce(function, sequence[, initial]) -> value\n\
2113\n\
2114Apply a function of two arguments cumulatively to the items of a sequence,\n\
2115from left to right, so as to reduce the sequence to a single value.\n\
2116For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
2117((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
2118of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002119sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002120
2121
Guido van Rossum79f25d91997-04-29 20:08:16 +00002122static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002123builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002124{
Benjamin Peterson9f4f4812008-04-27 03:01:45 +00002125 if (PyErr_WarnPy3k("In 3.x, reload() is renamed to imp.reload()",
Benjamin Petersonf19a7b92008-04-27 18:40:21 +00002126 1) < 0)
Neal Norwitzdf25efe2007-05-23 06:58:36 +00002127 return NULL;
2128
Guido van Rossum79f25d91997-04-29 20:08:16 +00002129 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002130}
2131
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002132PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002133"reload(module) -> module\n\
2134\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002135Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002136
2137
Guido van Rossum79f25d91997-04-29 20:08:16 +00002138static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002139builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002140{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002141 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002142}
2143
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002144PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002145"repr(object) -> string\n\
2146\n\
2147Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002148For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002149
2150
Guido van Rossum79f25d91997-04-29 20:08:16 +00002151static PyObject *
Georg Brandlccadf842006-03-31 18:54:53 +00002152builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002153{
Mark Dickinsonf2637242009-11-09 17:45:40 +00002154 double number, abs_number, abs_result;
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002155 double f;
2156 int ndigits = 0;
2157 int i;
Georg Brandlccadf842006-03-31 18:54:53 +00002158 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002159
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002160 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
2161 kwlist, &number, &ndigits))
2162 return NULL;
2163 f = 1.0;
2164 i = abs(ndigits);
2165 while (--i >= 0)
2166 f = f*10.0;
2167 if (ndigits < 0)
2168 number /= f;
2169 else
2170 number *= f;
Mark Dickinsonf2637242009-11-09 17:45:40 +00002171
2172 /* round `number` to nearest integer, rounding halves away from zero */
2173 abs_number = fabs(number);
2174 abs_result = floor(abs_number);
2175 if (abs_number - abs_result >= 0.5)
2176 abs_result += 1.0;
2177 number = copysign(abs_result, number);
2178
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002179 if (ndigits < 0)
2180 number *= f;
2181 else
2182 number /= f;
2183 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002184}
2185
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002186PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002187"round(number[, ndigits]) -> floating point number\n\
2188\n\
2189Round a number to a given precision in decimal digits (default 0 digits).\n\
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00002190This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002191
Raymond Hettinger64958a12003-12-17 20:43:33 +00002192static PyObject *
2193builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2194{
2195 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
2196 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00002197 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002198 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002199
Neal Norwitz6f0d4792005-12-15 06:40:36 +00002200 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00002201 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
2202 kwlist, &seq, &compare, &keyfunc, &reverse))
2203 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002204
2205 newlist = PySequence_List(seq);
2206 if (newlist == NULL)
2207 return NULL;
2208
2209 callable = PyObject_GetAttrString(newlist, "sort");
2210 if (callable == NULL) {
2211 Py_DECREF(newlist);
2212 return NULL;
2213 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002214
Raymond Hettinger64958a12003-12-17 20:43:33 +00002215 newargs = PyTuple_GetSlice(args, 1, 4);
2216 if (newargs == NULL) {
2217 Py_DECREF(newlist);
2218 Py_DECREF(callable);
2219 return NULL;
2220 }
2221
2222 v = PyObject_Call(callable, newargs, kwds);
2223 Py_DECREF(newargs);
2224 Py_DECREF(callable);
2225 if (v == NULL) {
2226 Py_DECREF(newlist);
2227 return NULL;
2228 }
2229 Py_DECREF(v);
2230 return newlist;
2231}
2232
2233PyDoc_STRVAR(sorted_doc,
2234"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002235
Guido van Rossum79f25d91997-04-29 20:08:16 +00002236static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002237builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002238{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002239 PyObject *v = NULL;
2240 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002241
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002242 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002243 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002244 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002245 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002246 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002247 if (!PyErr_Occurred())
2248 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002249 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002250 }
2251 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002252 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002253 }
2254 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002255 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002256 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002257 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002258 "vars() argument must have __dict__ attribute");
2259 return NULL;
2260 }
2261 }
2262 return d;
2263}
2264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002265PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002266"vars([object]) -> dictionary\n\
2267\n\
2268Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002269With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002270
Alex Martellia70b1912003-04-22 08:12:33 +00002271
2272static PyObject*
2273builtin_sum(PyObject *self, PyObject *args)
2274{
2275 PyObject *seq;
2276 PyObject *result = NULL;
2277 PyObject *temp, *item, *iter;
2278
Raymond Hettinger5cf63942003-10-25 06:41:37 +00002279 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00002280 return NULL;
2281
2282 iter = PyObject_GetIter(seq);
2283 if (iter == NULL)
2284 return NULL;
2285
2286 if (result == NULL) {
2287 result = PyInt_FromLong(0);
2288 if (result == NULL) {
2289 Py_DECREF(iter);
2290 return NULL;
2291 }
2292 } else {
2293 /* reject string values for 'start' parameter */
2294 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
2295 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002296 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00002297 Py_DECREF(iter);
2298 return NULL;
2299 }
Alex Martelli41c9f882003-04-22 09:24:48 +00002300 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00002301 }
2302
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002303#ifndef SLOW_SUM
2304 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2305 Assumes all inputs are the same type. If the assumption fails, default
2306 to the more general routine.
2307 */
2308 if (PyInt_CheckExact(result)) {
2309 long i_result = PyInt_AS_LONG(result);
2310 Py_DECREF(result);
2311 result = NULL;
2312 while(result == NULL) {
2313 item = PyIter_Next(iter);
2314 if (item == NULL) {
2315 Py_DECREF(iter);
2316 if (PyErr_Occurred())
2317 return NULL;
2318 return PyInt_FromLong(i_result);
2319 }
2320 if (PyInt_CheckExact(item)) {
2321 long b = PyInt_AS_LONG(item);
2322 long x = i_result + b;
2323 if ((x^i_result) >= 0 || (x^b) >= 0) {
2324 i_result = x;
2325 Py_DECREF(item);
2326 continue;
2327 }
2328 }
2329 /* Either overflowed or is not an int. Restore real objects and process normally */
2330 result = PyInt_FromLong(i_result);
2331 temp = PyNumber_Add(result, item);
2332 Py_DECREF(result);
2333 Py_DECREF(item);
2334 result = temp;
2335 if (result == NULL) {
2336 Py_DECREF(iter);
2337 return NULL;
2338 }
2339 }
2340 }
2341
2342 if (PyFloat_CheckExact(result)) {
2343 double f_result = PyFloat_AS_DOUBLE(result);
2344 Py_DECREF(result);
2345 result = NULL;
2346 while(result == NULL) {
2347 item = PyIter_Next(iter);
2348 if (item == NULL) {
2349 Py_DECREF(iter);
2350 if (PyErr_Occurred())
2351 return NULL;
2352 return PyFloat_FromDouble(f_result);
2353 }
2354 if (PyFloat_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002355 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002356 f_result += PyFloat_AS_DOUBLE(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002357 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002358 Py_DECREF(item);
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002359 continue;
2360 }
2361 if (PyInt_CheckExact(item)) {
Raymond Hettinger65856602008-05-30 06:37:27 +00002362 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
Raymond Hettinger3a8daf52007-10-24 02:05:51 +00002363 f_result += (double)PyInt_AS_LONG(item);
2364 PyFPE_END_PROTECT(f_result)
Raymond Hettingera45c4872007-10-25 02:26:58 +00002365 Py_DECREF(item);
Raymond Hettinger3f8caa32007-10-24 01:28:33 +00002366 continue;
2367 }
2368 result = PyFloat_FromDouble(f_result);
2369 temp = PyNumber_Add(result, item);
2370 Py_DECREF(result);
2371 Py_DECREF(item);
2372 result = temp;
2373 if (result == NULL) {
2374 Py_DECREF(iter);
2375 return NULL;
2376 }
2377 }
2378 }
2379#endif
2380
Alex Martellia70b1912003-04-22 08:12:33 +00002381 for(;;) {
2382 item = PyIter_Next(iter);
2383 if (item == NULL) {
2384 /* error, or end-of-sequence */
2385 if (PyErr_Occurred()) {
2386 Py_DECREF(result);
2387 result = NULL;
2388 }
2389 break;
2390 }
Alex Martellia253e182003-10-25 23:24:14 +00002391 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002392 Py_DECREF(result);
2393 Py_DECREF(item);
2394 result = temp;
2395 if (result == NULL)
2396 break;
2397 }
2398 Py_DECREF(iter);
2399 return result;
2400}
2401
2402PyDoc_STRVAR(sum_doc,
Georg Brandl8134d062006-10-12 12:33:07 +00002403"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002404\n\
2405Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Georg Brandl8134d062006-10-12 12:33:07 +00002406of parameter 'start' (which defaults to 0). When the sequence is\n\
2407empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002408
2409
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002410static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002411builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002412{
2413 PyObject *inst;
2414 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002415 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002416
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002417 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002418 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002419
Guido van Rossum823649d2001-03-21 18:40:58 +00002420 retval = PyObject_IsInstance(inst, cls);
2421 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002422 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002423 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002424}
2425
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002426PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002427"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002428\n\
2429Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002430With a type as second argument, return whether that is the object's type.\n\
2431The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002432isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002433
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002434
2435static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002436builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002437{
2438 PyObject *derived;
2439 PyObject *cls;
2440 int retval;
2441
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002442 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002443 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002444
Guido van Rossum823649d2001-03-21 18:40:58 +00002445 retval = PyObject_IsSubclass(derived, cls);
2446 if (retval < 0)
2447 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002448 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002449}
2450
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002451PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002452"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002453\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002454Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2455When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2456is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002457
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002458
Barry Warsawbd599b52000-08-03 15:45:29 +00002459static PyObject*
2460builtin_zip(PyObject *self, PyObject *args)
2461{
2462 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002463 const Py_ssize_t itemsize = PySequence_Length(args);
2464 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00002465 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002466 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002467
Raymond Hettingereaef6152003-08-02 07:42:57 +00002468 if (itemsize == 0)
2469 return PyList_New(0);
2470
Barry Warsawbd599b52000-08-03 15:45:29 +00002471 /* args must be a tuple */
2472 assert(PyTuple_Check(args));
2473
Tim Peters39a86c22002-05-12 07:19:38 +00002474 /* Guess at result length: the shortest of the input lengths.
2475 If some argument refuses to say, we refuse to guess too, lest
2476 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002477 len = -1; /* unknown */
2478 for (i = 0; i < itemsize; ++i) {
2479 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger4e2f7142007-12-06 00:56:53 +00002480 Py_ssize_t thislen = _PyObject_LengthHint(item, -1);
Tim Peters39a86c22002-05-12 07:19:38 +00002481 if (thislen < 0) {
Tim Peters39a86c22002-05-12 07:19:38 +00002482 len = -1;
2483 break;
2484 }
Tim Peters67d687a2002-04-29 21:27:32 +00002485 else if (len < 0 || thislen < len)
2486 len = thislen;
2487 }
2488
Tim Peters8572b4f2001-05-06 01:05:02 +00002489 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002490 if (len < 0)
2491 len = 10; /* arbitrary */
2492 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002493 return NULL;
2494
Tim Peters8572b4f2001-05-06 01:05:02 +00002495 /* obtain iterators */
2496 itlist = PyTuple_New(itemsize);
2497 if (itlist == NULL)
2498 goto Fail_ret;
2499 for (i = 0; i < itemsize; ++i) {
2500 PyObject *item = PyTuple_GET_ITEM(args, i);
2501 PyObject *it = PyObject_GetIter(item);
2502 if (it == NULL) {
2503 if (PyErr_ExceptionMatches(PyExc_TypeError))
2504 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00002505 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00002506 i+1);
2507 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002508 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002509 PyTuple_SET_ITEM(itlist, i, it);
2510 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002511
Tim Peters8572b4f2001-05-06 01:05:02 +00002512 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002513 for (i = 0; ; ++i) {
2514 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002515 PyObject *next = PyTuple_New(itemsize);
2516 if (!next)
2517 goto Fail_ret_itlist;
2518
Tim Peters67d687a2002-04-29 21:27:32 +00002519 for (j = 0; j < itemsize; j++) {
2520 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002521 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002522 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002523 if (PyErr_Occurred()) {
2524 Py_DECREF(ret);
2525 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002526 }
2527 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002528 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002529 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002530 }
Tim Peters67d687a2002-04-29 21:27:32 +00002531 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002532 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002533
Tim Peters67d687a2002-04-29 21:27:32 +00002534 if (i < len)
2535 PyList_SET_ITEM(ret, i, next);
2536 else {
2537 int status = PyList_Append(ret, next);
2538 Py_DECREF(next);
2539 ++len;
2540 if (status < 0)
2541 goto Fail_ret_itlist;
2542 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002543 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002544
Tim Peters67d687a2002-04-29 21:27:32 +00002545Done:
2546 if (ret != NULL && i < len) {
2547 /* The list is too big. */
2548 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2549 return NULL;
2550 }
2551 return ret;
2552
Tim Peters8572b4f2001-05-06 01:05:02 +00002553Fail_ret_itlist:
2554 Py_DECREF(itlist);
2555Fail_ret:
2556 Py_DECREF(ret);
2557 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002558}
2559
2560
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002561PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002562"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2563\n\
2564Return a list of tuples, where each tuple contains the i-th element\n\
2565from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002566in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002567
2568
Guido van Rossum79f25d91997-04-29 20:08:16 +00002569static PyMethodDef builtin_methods[] = {
Neal Norwitz92e212f2006-04-03 04:48:37 +00002570 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002571 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002572 {"all", builtin_all, METH_O, all_doc},
2573 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002574 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Eric Smith3cd81942008-02-22 16:30:22 +00002575 {"bin", builtin_bin, METH_O, bin_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002576 {"callable", builtin_callable, METH_O, callable_doc},
2577 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2578 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2579 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
Georg Brandl5240d742007-03-13 20:46:32 +00002580 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002581 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2582 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2583 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2584 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2585 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2586 {"filter", builtin_filter, METH_VARARGS, filter_doc},
Eric Smitha9f7d622008-02-17 19:46:49 +00002587 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002588 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2589 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2590 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2591 {"hash", builtin_hash, METH_O, hash_doc},
2592 {"hex", builtin_hex, METH_O, hex_doc},
2593 {"id", builtin_id, METH_O, id_doc},
2594 {"input", builtin_input, METH_VARARGS, input_doc},
2595 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2596 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2597 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2598 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2599 {"len", builtin_len, METH_O, len_doc},
2600 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2601 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002602 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2603 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandl28e08732008-04-30 19:47:09 +00002604 {"next", builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002605 {"oct", builtin_oct, METH_O, oct_doc},
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002606 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002607 {"ord", builtin_ord, METH_O, ord_doc},
2608 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Eric Smith7c478942008-03-18 23:45:49 +00002609 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002610 {"range", builtin_range, METH_VARARGS, range_doc},
2611 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2612 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2613 {"reload", builtin_reload, METH_O, reload_doc},
2614 {"repr", builtin_repr, METH_O, repr_doc},
Georg Brandlccadf842006-03-31 18:54:53 +00002615 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002616 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002617 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002618 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002619#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002620 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002621#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002622 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002623 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002624 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002625};
2626
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002627PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002628"Built-in functions, exceptions, and other objects.\n\
2629\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002630Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002631
Guido van Rossum25ce5661997-08-02 03:10:38 +00002632PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002633_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002634{
Fred Drake5550de32000-06-20 04:54:19 +00002635 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002636 mod = Py_InitModule4("__builtin__", builtin_methods,
2637 builtin_doc, (PyObject *)NULL,
2638 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002639 if (mod == NULL)
2640 return NULL;
2641 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002642
Tim Peters7571a0f2003-03-23 17:52:28 +00002643#ifdef Py_TRACE_REFS
2644 /* __builtin__ exposes a number of statically allocated objects
2645 * that, before this code was added in 2.3, never showed up in
2646 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2647 * result, programs leaking references to None and False (etc)
2648 * couldn't be diagnosed by examining sys.getobjects(0).
2649 */
2650#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2651#else
2652#define ADD_TO_ALL(OBJECT) (void)0
2653#endif
2654
Tim Peters4b7625e2001-09-13 21:37:17 +00002655#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002656 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2657 return NULL; \
2658 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002659
2660 SETBUILTIN("None", Py_None);
2661 SETBUILTIN("Ellipsis", Py_Ellipsis);
2662 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002663 SETBUILTIN("False", Py_False);
2664 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002665 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002666 SETBUILTIN("bool", &PyBool_Type);
Travis E. Oliphant3781aef2008-03-18 04:44:57 +00002667 /* SETBUILTIN("memoryview", &PyMemoryView_Type); */
Christian Heimes3497f942008-05-26 12:29:14 +00002668 SETBUILTIN("bytearray", &PyByteArray_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002669 SETBUILTIN("bytes", &PyString_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002670 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002671 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002672#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002673 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002674#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002675 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002676 SETBUILTIN("enumerate", &PyEnum_Type);
Neal Norwitzc4edb0e2006-05-02 04:43:14 +00002677 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002678 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002679 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002680 SETBUILTIN("property", &PyProperty_Type);
2681 SETBUILTIN("int", &PyInt_Type);
2682 SETBUILTIN("list", &PyList_Type);
2683 SETBUILTIN("long", &PyLong_Type);
2684 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002685 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002686 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002687 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002688 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002689 SETBUILTIN("str", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002690 SETBUILTIN("super", &PySuper_Type);
2691 SETBUILTIN("tuple", &PyTuple_Type);
2692 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002693 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002694#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002695 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002696#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002697 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002698 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2699 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002700 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002701 }
2702 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002703
Guido van Rossum25ce5661997-08-02 03:10:38 +00002704 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002705#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002706#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002707}
2708
Guido van Rossume77a7571993-11-03 15:01:26 +00002709/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002710
Guido van Rossum79f25d91997-04-29 20:08:16 +00002711static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002712filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002713{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002714 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002715 Py_ssize_t i, j;
2716 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002717
Guido van Rossumb7b45621995-08-04 04:07:45 +00002718 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002719 if (PyTuple_CheckExact(tuple))
2720 Py_INCREF(tuple);
2721 else
2722 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002723 return tuple;
2724 }
2725
Guido van Rossum79f25d91997-04-29 20:08:16 +00002726 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002727 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002728
Guido van Rossum12d12c51993-10-26 17:58:25 +00002729 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002730 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002731 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002732
Walter Dörwald8dd19322003-02-10 17:36:40 +00002733 if (tuple->ob_type->tp_as_sequence &&
2734 tuple->ob_type->tp_as_sequence->sq_item) {
2735 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002736 if (item == NULL)
2737 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002738 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002739 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002740 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002741 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002742 if (func == Py_None) {
2743 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002744 good = item;
2745 }
2746 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002747 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002748 if (arg == NULL) {
2749 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002750 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002751 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002752 good = PyEval_CallObject(func, arg);
2753 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002754 if (good == NULL) {
2755 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002756 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002757 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002758 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002759 ok = PyObject_IsTrue(good);
2760 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002761 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002762 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002763 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002764 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002765 else
2766 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002767 }
2768
Tim Peters4324aa32001-05-28 22:30:08 +00002769 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002770 return NULL;
2771
Guido van Rossum12d12c51993-10-26 17:58:25 +00002772 return result;
2773
Guido van Rossum12d12c51993-10-26 17:58:25 +00002774Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002775 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002776 return NULL;
2777}
2778
2779
Guido van Rossume77a7571993-11-03 15:01:26 +00002780/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002781
Guido van Rossum79f25d91997-04-29 20:08:16 +00002782static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002783filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002784{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002785 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002786 Py_ssize_t i, j;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002787 Py_ssize_t len = PyString_Size(strobj);
Martin v. Löwis18e16552006-02-15 17:27:45 +00002788 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002789
Guido van Rossum79f25d91997-04-29 20:08:16 +00002790 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002791 /* If it's a real string we can return the original,
2792 * as no character is ever false and __getitem__
2793 * does return this character. If it's a subclass
2794 * we must go through the __getitem__ loop */
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002795 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002796 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002797 return strobj;
2798 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002799 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002800 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002801 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002802
Guido van Rossum12d12c51993-10-26 17:58:25 +00002803 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002804 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002805 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002806
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002807 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2808 if (item == NULL)
2809 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002810 if (func==Py_None) {
2811 ok = 1;
2812 } else {
2813 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002814 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002815 if (arg == NULL) {
2816 Py_DECREF(item);
2817 goto Fail_1;
2818 }
2819 good = PyEval_CallObject(func, arg);
2820 Py_DECREF(arg);
2821 if (good == NULL) {
2822 Py_DECREF(item);
2823 goto Fail_1;
2824 }
2825 ok = PyObject_IsTrue(good);
2826 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002827 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002828 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002829 Py_ssize_t reslen;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002830 if (!PyString_Check(item)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002831 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2832 " __getitem__ returned different type");
2833 Py_DECREF(item);
2834 goto Fail_1;
2835 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002836 reslen = PyString_GET_SIZE(item);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002837 if (reslen == 1) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002838 PyString_AS_STRING(result)[j++] =
2839 PyString_AS_STRING(item)[0];
Walter Dörwald903f1e02003-02-04 16:28:00 +00002840 } else {
2841 /* do we need more space? */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002842 Py_ssize_t need = j;
2843
2844 /* calculate space requirements while checking for overflow */
2845 if (need > PY_SSIZE_T_MAX - reslen) {
2846 Py_DECREF(item);
2847 goto Fail_1;
2848 }
2849
2850 need += reslen;
2851
2852 if (need > PY_SSIZE_T_MAX - len) {
2853 Py_DECREF(item);
2854 goto Fail_1;
2855 }
2856
2857 need += len;
2858
2859 if (need <= i) {
2860 Py_DECREF(item);
2861 goto Fail_1;
2862 }
2863
2864 need = need - i - 1;
2865
2866 assert(need >= 0);
2867 assert(outlen >= 0);
2868
Walter Dörwald903f1e02003-02-04 16:28:00 +00002869 if (need > outlen) {
2870 /* overallocate, to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002871 if (outlen > PY_SSIZE_T_MAX / 2) {
2872 Py_DECREF(item);
2873 return NULL;
2874 }
2875
2876 if (need<2*outlen) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002877 need = 2*outlen;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002878 }
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002879 if (_PyString_Resize(&result, need)) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002880 Py_DECREF(item);
2881 return NULL;
2882 }
2883 outlen = need;
2884 }
2885 memcpy(
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002886 PyString_AS_STRING(result) + j,
2887 PyString_AS_STRING(item),
Walter Dörwald903f1e02003-02-04 16:28:00 +00002888 reslen
2889 );
2890 j += reslen;
2891 }
2892 }
Tim Peters388ed082001-04-07 20:34:48 +00002893 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002894 }
2895
Walter Dörwald903f1e02003-02-04 16:28:00 +00002896 if (j < outlen)
Gregory P. Smithdd96db62008-06-09 04:58:54 +00002897 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002898
Guido van Rossum12d12c51993-10-26 17:58:25 +00002899 return result;
2900
Guido van Rossum12d12c51993-10-26 17:58:25 +00002901Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002902 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002903 return NULL;
2904}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002905
2906#ifdef Py_USING_UNICODE
2907/* Helper for filter(): filter a Unicode object through a function */
2908
2909static PyObject *
2910filterunicode(PyObject *func, PyObject *strobj)
2911{
2912 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002913 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002914 Py_ssize_t len = PyUnicode_GetSize(strobj);
2915 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002916
2917 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002918 /* If it's a real string we can return the original,
2919 * as no character is ever false and __getitem__
2920 * does return this character. If it's a subclass
2921 * we must go through the __getitem__ loop */
2922 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002923 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002924 return strobj;
2925 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002926 }
2927 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2928 return NULL;
2929
2930 for (i = j = 0; i < len; ++i) {
2931 PyObject *item, *arg, *good;
2932 int ok;
2933
2934 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2935 if (item == NULL)
2936 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002937 if (func == Py_None) {
2938 ok = 1;
2939 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002940 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002941 if (arg == NULL) {
2942 Py_DECREF(item);
2943 goto Fail_1;
2944 }
2945 good = PyEval_CallObject(func, arg);
2946 Py_DECREF(arg);
2947 if (good == NULL) {
2948 Py_DECREF(item);
2949 goto Fail_1;
2950 }
2951 ok = PyObject_IsTrue(good);
2952 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002953 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002954 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002955 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002956 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002957 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002958 "can't filter unicode to unicode:"
2959 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002960 Py_DECREF(item);
2961 goto Fail_1;
2962 }
2963 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002964 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002965 PyUnicode_AS_UNICODE(result)[j++] =
2966 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002967 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002968 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002969 Py_ssize_t need = j + reslen + len - i - 1;
Gregory P. Smith9d534572008-06-11 07:41:16 +00002970
2971 /* check that didnt overflow */
2972 if ((j > PY_SSIZE_T_MAX - reslen) ||
2973 ((j + reslen) > PY_SSIZE_T_MAX - len) ||
2974 ((j + reslen + len) < i) ||
2975 ((j + reslen + len - i) <= 0)) {
2976 Py_DECREF(item);
2977 return NULL;
2978 }
2979
2980 assert(need >= 0);
2981 assert(outlen >= 0);
2982
Walter Dörwald903f1e02003-02-04 16:28:00 +00002983 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002984 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002985 to avoid reallocations */
Gregory P. Smith9d534572008-06-11 07:41:16 +00002986 if (need < 2 * outlen) {
2987 if (outlen > PY_SSIZE_T_MAX / 2) {
2988 Py_DECREF(item);
2989 return NULL;
2990 } else {
2991 need = 2 * outlen;
2992 }
2993 }
2994
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002995 if (PyUnicode_Resize(
2996 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002997 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002998 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002999 }
3000 outlen = need;
3001 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00003002 memcpy(PyUnicode_AS_UNICODE(result) + j,
3003 PyUnicode_AS_UNICODE(item),
3004 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00003005 j += reslen;
3006 }
3007 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00003008 Py_DECREF(item);
3009 }
3010
Walter Dörwald903f1e02003-02-04 16:28:00 +00003011 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00003012 PyUnicode_Resize(&result, j);
3013
3014 return result;
3015
3016Fail_1:
3017 Py_DECREF(result);
3018 return NULL;
3019}
3020#endif