blob: f63e27adc63b95037a185dd4c1cbe4f8523b591b [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#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 Hammond26cffde42001-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 Hammond26cffde42001-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 Hammond26cffde42001-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 *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000035builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000036{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000037 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000038 PyObject *globals = NULL;
39 PyObject *locals = NULL;
40 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041
Guido van Rossum79f25d91997-04-29 20:08:16 +000042 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000043 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000045 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046}
47
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000048PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000049"__import__(name, globals, locals, fromlist) -> module\n\
50\n\
51Import a module. The globals are only used to determine the context;\n\
52they are not modified. The locals are currently unused. The fromlist\n\
53should be a list of names to emulate ``from name import ...'', or an\n\
54empty list to emulate ``import name''.\n\
55When importing a module from a package, note that __import__('A.B', ...)\n\
56returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000057fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000058
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000061builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000062{
Guido van Rossum09df08a1998-05-22 00:51:39 +000063 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000064}
65
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000066PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000067"abs(number) -> number\n\
68\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000069Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000070
Raymond Hettinger96229b12005-03-11 06:49:40 +000071static PyObject *
72builtin_all(PyObject *self, PyObject *v)
73{
74 PyObject *it, *item;
75
76 it = PyObject_GetIter(v);
77 if (it == NULL)
78 return NULL;
79
80 while ((item = PyIter_Next(it)) != NULL) {
81 int cmp = PyObject_IsTrue(item);
82 Py_DECREF(item);
83 if (cmp < 0) {
84 Py_DECREF(it);
85 return NULL;
86 }
87 if (cmp == 0) {
88 Py_DECREF(it);
89 Py_RETURN_FALSE;
90 }
91 }
92 Py_DECREF(it);
93 if (PyErr_Occurred())
94 return NULL;
95 Py_RETURN_TRUE;
96}
97
98PyDoc_STRVAR(all_doc,
99"all(iterable) -> bool\n\
100\n\
101Return True if bool(x) is True for all values x in the iterable.");
102
103static PyObject *
104builtin_any(PyObject *self, PyObject *v)
105{
106 PyObject *it, *item;
107
108 it = PyObject_GetIter(v);
109 if (it == NULL)
110 return NULL;
111
112 while ((item = PyIter_Next(it)) != NULL) {
113 int cmp = PyObject_IsTrue(item);
114 Py_DECREF(item);
115 if (cmp < 0) {
116 Py_DECREF(it);
117 return NULL;
118 }
119 if (cmp == 1) {
120 Py_DECREF(it);
121 Py_RETURN_TRUE;
122 }
123 }
124 Py_DECREF(it);
125 if (PyErr_Occurred())
126 return NULL;
127 Py_RETURN_FALSE;
128}
129
130PyDoc_STRVAR(any_doc,
131"any(iterable) -> bool\n\
132\n\
133Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000134
Guido van Rossum79f25d91997-04-29 20:08:16 +0000135static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000136builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000137{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000138 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000139 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000140
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000141 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000142 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000143 if (alist != NULL) {
144 if (!PyTuple_Check(alist)) {
145 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000146 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000147 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000148 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000149 return NULL;
150 }
151 t = PySequence_Tuple(alist);
152 if (t == NULL)
153 return NULL;
154 alist = t;
155 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000156 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000157 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +0000158 PyErr_Format(PyExc_TypeError,
159 "apply() arg 3 expected dictionary, found %s",
160 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000161 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000162 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000163 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
164 finally:
165 Py_XDECREF(t);
166 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000167}
168
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000169PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000170"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000171\n\
Fred Drake7b912121999-12-23 14:16:55 +0000172Call a callable object with positional arguments taken from the tuple args,\n\
173and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000174Note that classes are callable, as are instances with a __call__() method.\n\
175\n\
176Deprecated since release 2.3. Instead, use the extended call syntax:\n\
177 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000178
179
Guido van Rossum79f25d91997-04-29 20:08:16 +0000180static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000181builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000182{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000183 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000184}
185
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000186PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000187"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000188\n\
189Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000190Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000191
192
Guido van Rossum79f25d91997-04-29 20:08:16 +0000193static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000194builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000195{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000196 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000197 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000198 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000199
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000200 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000201 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000202
Tim Peters0e57abf2001-05-02 07:39:38 +0000203 /* Strings and tuples return a result of the same type. */
204 if (PyString_Check(seq))
205 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000206#ifdef Py_USING_UNICODE
207 if (PyUnicode_Check(seq))
208 return filterunicode(func, seq);
209#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000210 if (PyTuple_Check(seq))
211 return filtertuple(func, seq);
212
Georg Brandle35b6572005-07-19 22:20:20 +0000213 /* Pre-allocate argument list tuple. */
214 arg = PyTuple_New(1);
215 if (arg == NULL)
216 return NULL;
217
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 /* Get iterator. */
219 it = PyObject_GetIter(seq);
220 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000221 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000222
223 /* Guess a result list size. */
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000224 len = PyObject_Size(seq);
225 if (len < 0) {
226 PyErr_Clear();
227 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000228 }
229
Tim Peters0e57abf2001-05-02 07:39:38 +0000230 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000231 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000232 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000233 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000234 result = seq;
235 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000236 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000237 result = PyList_New(len);
238 if (result == NULL)
239 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000240 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000241
Tim Peters0e57abf2001-05-02 07:39:38 +0000242 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000243 j = 0;
244 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000245 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000246 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000247
Tim Peters0e57abf2001-05-02 07:39:38 +0000248 item = PyIter_Next(it);
249 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000250 if (PyErr_Occurred())
251 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000252 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000253 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000254
Neil Schemenauer68973552003-08-14 20:37:34 +0000255 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000256 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000257 }
258 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000259 PyObject *good;
260 PyTuple_SET_ITEM(arg, 0, item);
261 good = PyObject_Call(func, arg, NULL);
262 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000263 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000264 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000265 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000266 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000267 ok = PyObject_IsTrue(good);
268 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000269 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000270 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000271 if (j < len)
272 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000273 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000274 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000275 Py_DECREF(item);
276 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000277 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000278 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000279 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000280 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000281 else
282 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000283 }
284
Guido van Rossum12d12c51993-10-26 17:58:25 +0000285
Tim Peters0e57abf2001-05-02 07:39:38 +0000286 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000287 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000288 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000289
Tim Peters3c6b1482001-05-21 08:07:05 +0000290 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000291 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000292 return result;
293
Tim Peters0e57abf2001-05-02 07:39:38 +0000294Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000295 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000296Fail_it:
297 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000298Fail_arg:
299 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000300 return NULL;
301}
302
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000303PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000304"filter(function or None, sequence) -> list, tuple, or string\n"
305"\n"
306"Return those items of sequence for which function(item) is true. If\n"
307"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000308"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000309
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000311builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000312{
313 long x;
314 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000315
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000317 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000318 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000319 PyErr_SetString(PyExc_ValueError,
320 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000321 return NULL;
322 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000323 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000324 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000325}
326
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000327PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000328"chr(i) -> character\n\
329\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000330Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000331
332
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000333#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000335builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000336{
337 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000338
339 if (!PyArg_ParseTuple(args, "l:unichr", &x))
340 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000341
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000342 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000343}
344
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000345PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000346"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000347\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000348Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000349#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000350
351
352static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000353builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000354{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000355 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000356 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000357
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000358 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000359 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000360 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000361 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000362 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000363}
364
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000365PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000366"cmp(x, y) -> integer\n\
367\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000368Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000369
370
Guido van Rossum79f25d91997-04-29 20:08:16 +0000371static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000372builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000373{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374 PyObject *v, *w;
375 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000376
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000377 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000378 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000380 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000381 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382 Py_DECREF(v);
383 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000384 return res;
385}
386
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000387PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000388"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000389\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000390Return a tuple consisting of the two numeric arguments converted to\n\
391a common type, using the same rules as used by arithmetic operations.\n\
392If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000393
Guido van Rossum79f25d91997-04-29 20:08:16 +0000394static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000395builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000396{
397 char *str;
398 char *filename;
399 char *startstr;
400 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000401 int dont_inherit = 0;
402 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000403 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000404 PyObject *result, *cmd, *tmp = NULL;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000405 int length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000406
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000407 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000408 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000409 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000410
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000411 cf.cf_flags = supplied_flags;
412
413#ifdef Py_USING_UNICODE
414 if (PyUnicode_Check(cmd)) {
415 tmp = PyUnicode_AsUTF8String(cmd);
416 if (tmp == NULL)
417 return NULL;
418 cmd = tmp;
419 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
420 }
421#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000422 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
423 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000424 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000425 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000426 "compile() expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000427 return NULL;
428 }
429
Guido van Rossum5b722181993-03-30 17:46:03 +0000430 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000431 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000432 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000433 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000434 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000435 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000436 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000437 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000438 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000439 return NULL;
440 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000441
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000442 if (supplied_flags &
443 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
444 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000445 PyErr_SetString(PyExc_ValueError,
446 "compile(): unrecognised flags");
447 return NULL;
448 }
449 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
450
Tim Peters6cd6a822001-08-17 22:11:27 +0000451 if (!dont_inherit) {
452 PyEval_MergeCompilerFlags(&cf);
453 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000454 result = Py_CompileStringFlags(str, filename, start, &cf);
455 Py_XDECREF(tmp);
456 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000457}
458
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000459PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000460"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000461\n\
462Compile the source string (a Python module, statement or expression)\n\
463into a code object that can be executed by the exec statement or eval().\n\
464The filename will be used for run-time error messages.\n\
465The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000466single (interactive) statement, or 'eval' to compile an expression.\n\
467The flags argument, if present, controls which future statements influence\n\
468the compilation of the code.\n\
469The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
470the effects of any future statements in effect in the code calling\n\
471compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000472in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000473
Guido van Rossum79f25d91997-04-29 20:08:16 +0000474static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000475builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000476{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000477 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000478
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000479 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000480 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000481 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000482}
483
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000484PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000485"dir([object]) -> list of strings\n"
486"\n"
487"Return an alphabetized list of names comprising (some of) the attributes\n"
488"of the given object, and of attributes reachable from it:\n"
489"\n"
490"No argument: the names in the current scope.\n"
491"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000492"Type or class object: its attributes, and recursively the attributes of\n"
493" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000494"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000495" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000496
Guido van Rossum79f25d91997-04-29 20:08:16 +0000497static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000498builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000499{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000501
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000502 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000503 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000504 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000505}
506
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000507PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000508"divmod(x, y) -> (div, mod)\n\
509\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000510Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000511
512
Guido van Rossum79f25d91997-04-29 20:08:16 +0000513static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000514builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000515{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000516 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000517 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000518 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000519 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000520
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000521 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000522 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000523 if (locals != Py_None && !PyMapping_Check(locals)) {
524 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000525 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000526 }
527 if (globals != Py_None && !PyDict_Check(globals)) {
528 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
529 "globals must be a real dict; try eval(expr, {}, mapping)"
530 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000531 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000532 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000533 if (globals == Py_None) {
534 globals = PyEval_GetGlobals();
535 if (locals == Py_None)
536 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000537 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000539 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000540
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
542 if (PyDict_SetItemString(globals, "__builtins__",
543 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000544 return NULL;
545 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000546
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000547 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000548 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000549 PyErr_SetString(PyExc_TypeError,
550 "code object passed to eval() may not contain free variables");
551 return NULL;
552 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000553 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000554 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000555
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000556 if (!PyString_Check(cmd) &&
557 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000558 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000559 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000560 return NULL;
561 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000562 cf.cf_flags = 0;
563
564#ifdef Py_USING_UNICODE
565 if (PyUnicode_Check(cmd)) {
566 tmp = PyUnicode_AsUTF8String(cmd);
567 if (tmp == NULL)
568 return NULL;
569 cmd = tmp;
570 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
571 }
572#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000573 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000574 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575 while (*str == ' ' || *str == '\t')
576 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000577
Tim Peters9fa96be2001-08-17 23:04:59 +0000578 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000579 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
580 Py_XDECREF(tmp);
581 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000582}
583
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000584PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000585"eval(source[, globals[, locals]]) -> value\n\
586\n\
587Evaluate the source in the context of globals and locals.\n\
588The source may be a string representing a Python expression\n\
589or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000590The globals must be a dictionary and locals can be any mappping,\n\
591defaulting to the current globals and locals.\n\
592If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000593
594
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000596builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000597{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000598 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000599 PyObject *globals = Py_None, *locals = Py_None;
600 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000601 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000602 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000603 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000604
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000605 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000607 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000608 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000609 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000610 if (locals != Py_None && !PyMapping_Check(locals)) {
611 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
612 return NULL;
613 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614 if (globals == Py_None) {
615 globals = PyEval_GetGlobals();
616 if (locals == Py_None)
617 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000618 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000620 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000621 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
622 if (PyDict_SetItemString(globals, "__builtins__",
623 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000624 return NULL;
625 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000626
627 exists = 0;
628 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000629#if defined(PLAN9)
630 {
631 Dir *d;
632
633 if ((d = dirstat(filename))!=nil) {
634 if(d->mode & DMDIR)
635 werrstr("is a directory");
636 else
637 exists = 1;
638 free(d);
639 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000640 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000641#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000642 if (object_exists(filename)) {
643 if (isdir(filename))
644 errno = EISDIR;
645 else
646 exists = 1;
647 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000648#else /* standard Posix */
649 {
650 struct stat s;
651 if (stat(filename, &s) == 0) {
652 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000653# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000654 errno = EOS2ERR;
655# else
656 errno = EISDIR;
657# endif
658 else
659 exists = 1;
660 }
661 }
662#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000663
664 if (exists) {
665 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000666 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000667 Py_END_ALLOW_THREADS
668
669 if (fp == NULL) {
670 exists = 0;
671 }
672 }
673
674 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000675 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000676 return NULL;
677 }
Tim Peters5ba58662001-07-16 02:29:45 +0000678 cf.cf_flags = 0;
679 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000680 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000681 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000682 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000683 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000684 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000685 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000686}
687
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000688PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000689"execfile(filename[, globals[, locals]])\n\
690\n\
691Read and execute a Python script from a file.\n\
692The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000693globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000694
695
Guido van Rossum79f25d91997-04-29 20:08:16 +0000696static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000697builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000698{
Guido van Rossum950ff291998-06-29 13:38:57 +0000699 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000700 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000701
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000702 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000703 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000704#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000705 if (PyUnicode_Check(name)) {
706 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
707 if (name == NULL)
708 return NULL;
709 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000710#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000711
712 if (!PyString_Check(name)) {
713 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000714 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000715 return NULL;
716 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000717 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000718 if (result == NULL && dflt != NULL &&
719 PyErr_ExceptionMatches(PyExc_AttributeError))
720 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000721 PyErr_Clear();
722 Py_INCREF(dflt);
723 result = dflt;
724 }
725 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000726}
727
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000728PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000729"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000730\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000731Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
732When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000733exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000734
735
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000737builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000738{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000739 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000740
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 d = PyEval_GetGlobals();
742 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000743 return d;
744}
745
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000746PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000747"globals() -> dictionary\n\
748\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000749Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000750
751
Guido van Rossum79f25d91997-04-29 20:08:16 +0000752static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000753builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000754{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000755 PyObject *v;
756 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000757
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000758 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000759 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000760#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000761 if (PyUnicode_Check(name)) {
762 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
763 if (name == NULL)
764 return NULL;
765 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000766#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000767
768 if (!PyString_Check(name)) {
769 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000770 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000771 return NULL;
772 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000773 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000774 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000776 Py_INCREF(Py_False);
777 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000778 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000780 Py_INCREF(Py_True);
781 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000782}
783
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000784PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000785"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000786\n\
787Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000788(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000789
790
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000792builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000793{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000794 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000795}
796
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000797PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000798"id(object) -> integer\n\
799\n\
800Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000801simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000802
803
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000805builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000806{
807 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 PyObject *it; /* the iterator object */
809 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000810 } sequence;
811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000813 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000814 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000815 register int i, j;
816
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000818 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819 PyErr_SetString(PyExc_TypeError,
820 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000821 return NULL;
822 }
823
Guido van Rossum79f25d91997-04-29 20:08:16 +0000824 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000825 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000826
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000827 if (func == Py_None && n == 1) {
828 /* map(None, S) is the same as list(S). */
829 return PySequence_List(PyTuple_GetItem(args, 1));
830 }
831
Tim Peters4e9afdc2001-05-03 23:54:49 +0000832 /* Get space for sequence descriptors. Must NULL out the iterator
833 * pointers so that jumping to Fail_2 later doesn't see trash.
834 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000835 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
836 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000837 return NULL;
838 }
839 for (i = 0; i < n; ++i) {
840 seqs[i].it = (PyObject*)NULL;
841 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000842 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000843
Tim Peters4e9afdc2001-05-03 23:54:49 +0000844 /* Do a first pass to obtain iterators for the arguments, and set len
845 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000846 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000847 len = 0;
848 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
849 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000850 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000851
Tim Peters4e9afdc2001-05-03 23:54:49 +0000852 /* Get iterator. */
853 curseq = PyTuple_GetItem(args, i+1);
854 sqp->it = PyObject_GetIter(curseq);
855 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000856 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000857 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000858 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000859 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000861 goto Fail_2;
862 }
863
Tim Peters4e9afdc2001-05-03 23:54:49 +0000864 /* Update len. */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000865 curlen = PyObject_Size(curseq);
866 if (curlen < 0) {
867 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000868 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000869 }
870 if (curlen > len)
871 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000872 }
873
Tim Peters4e9afdc2001-05-03 23:54:49 +0000874 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000875 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876 goto Fail_2;
877
Tim Peters4e9afdc2001-05-03 23:54:49 +0000878 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000879 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000881 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000882
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000884 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000885 else if ((alist = PyTuple_New(n)) == NULL)
886 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000887
888 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000889 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 Py_INCREF(Py_None);
891 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000892 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000893 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000894 item = PyIter_Next(sqp->it);
895 if (item)
896 ++numactive;
897 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000898 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000899 Py_XDECREF(alist);
900 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000901 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000902 Py_INCREF(Py_None);
903 item = Py_None;
904 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000905 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000906 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000907 if (alist)
908 PyTuple_SET_ITEM(alist, j, item);
909 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000910 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000911 }
912
Guido van Rossum32120311995-07-10 13:52:21 +0000913 if (!alist)
914 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000915
Tim Peters4e9afdc2001-05-03 23:54:49 +0000916 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000917 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000918 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000919 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000920
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000922 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000923 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 value = PyEval_CallObject(func, alist);
925 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000926 if (value == NULL)
927 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000928 }
929 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000930 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000931 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000932 if (status < 0)
933 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000934 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000935 else if (PyList_SetItem(result, i, value) < 0)
936 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000937 }
938
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000939 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
940 goto Fail_1;
941
Tim Peters4e9afdc2001-05-03 23:54:49 +0000942 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000943
Guido van Rossum12d12c51993-10-26 17:58:25 +0000944Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000946Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000947 result = NULL;
948Succeed:
949 assert(seqs);
950 for (i = 0; i < n; ++i)
951 Py_XDECREF(seqs[i].it);
952 PyMem_DEL(seqs);
953 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000954}
955
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000956PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000957"map(function, sequence[, sequence, ...]) -> list\n\
958\n\
959Return a list of the results of applying the function to the items of\n\
960the argument sequence(s). If more than one sequence is given, the\n\
961function is called with an argument list consisting of the corresponding\n\
962item of each sequence, substituting None for missing values when not all\n\
963sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000964the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000965
966
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000968builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000969{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970 PyObject *v;
971 PyObject *name;
972 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000973
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000974 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000975 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000976 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000977 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000978 Py_INCREF(Py_None);
979 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000980}
981
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000982PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000983"setattr(object, name, value)\n\
984\n\
985Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000986``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000987
988
Guido van Rossum79f25d91997-04-29 20:08:16 +0000989static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000990builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000991{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 PyObject *v;
993 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000994
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000995 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000996 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000997 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000998 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 Py_INCREF(Py_None);
1000 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001001}
1002
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001003PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001004"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001005\n\
1006Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001007``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001008
1009
Guido van Rossum79f25d91997-04-29 20:08:16 +00001010static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001011builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001012{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001013 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001014
Guido van Rossum79f25d91997-04-29 20:08:16 +00001015 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001016 if (x == -1)
1017 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001018 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001019}
1020
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001021PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001022"hash(object) -> integer\n\
1023\n\
1024Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001025the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001026
1027
Guido van Rossum79f25d91997-04-29 20:08:16 +00001028static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001029builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001030{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001031 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001032 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001033
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001034 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001035 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001036 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001037 "hex() argument can't be converted to hex");
1038 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001039 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001040 res = (*nb->nb_hex)(v);
1041 if (res && !PyString_Check(res)) {
1042 PyErr_Format(PyExc_TypeError,
1043 "__hex__ returned non-string (type %.200s)",
1044 res->ob_type->tp_name);
1045 Py_DECREF(res);
1046 return NULL;
1047 }
1048 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001049}
1050
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001051PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001052"hex(number) -> string\n\
1053\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001054Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055
1056
Tim Petersdbd9ba62000-07-09 03:09:57 +00001057static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001058
Guido van Rossum79f25d91997-04-29 20:08:16 +00001059static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001060builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001061{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001062 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001063 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064 PyObject *res;
1065 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001066 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001067
1068 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001069 if (line == NULL)
1070 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001071 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001072 return NULL;
1073 while (*str == ' ' || *str == '\t')
1074 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075 globals = PyEval_GetGlobals();
1076 locals = PyEval_GetLocals();
1077 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1078 if (PyDict_SetItemString(globals, "__builtins__",
1079 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001080 return NULL;
1081 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001082 cf.cf_flags = 0;
1083 PyEval_MergeCompilerFlags(&cf);
1084 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001086 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001087}
1088
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001089PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001090"input([prompt]) -> value\n\
1091\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001092Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001093
1094
Guido van Rossume8811f81997-02-14 15:48:05 +00001095static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001096builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001097{
1098 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001099 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001100 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001101 if (!PyString_CheckExact(s)) {
1102 PyErr_SetString(PyExc_TypeError,
1103 "can't intern subclass of string");
1104 return NULL;
1105 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001106 Py_INCREF(s);
1107 PyString_InternInPlace(&s);
1108 return s;
1109}
1110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001111PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001112"intern(string) -> string\n\
1113\n\
1114``Intern'' the given string. This enters the string in the (global)\n\
1115table of interned strings whose purpose is to speed up dictionary lookups.\n\
1116Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001117same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001118
1119
Guido van Rossum79f25d91997-04-29 20:08:16 +00001120static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001121builtin_iter(PyObject *self, PyObject *args)
1122{
1123 PyObject *v, *w = NULL;
1124
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001125 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001126 return NULL;
1127 if (w == NULL)
1128 return PyObject_GetIter(v);
1129 if (!PyCallable_Check(v)) {
1130 PyErr_SetString(PyExc_TypeError,
1131 "iter(v, w): v must be callable");
1132 return NULL;
1133 }
1134 return PyCallIter_New(v, w);
1135}
1136
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001137PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001138"iter(collection) -> iterator\n\
1139iter(callable, sentinel) -> iterator\n\
1140\n\
1141Get an iterator from an object. In the first form, the argument must\n\
1142supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001143In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001144
1145
1146static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001147builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001148{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001149 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001150
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001151 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001152 if (res < 0 && PyErr_Occurred())
1153 return NULL;
1154 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001155}
1156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001157PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001158"len(object) -> integer\n\
1159\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001160Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001161
1162
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001164builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001165{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001167
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168 d = PyEval_GetLocals();
1169 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001170 return d;
1171}
1172
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001173PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001174"locals() -> dictionary\n\
1175\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001176Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001177
1178
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001180min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001181{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001182 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001183 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001184
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001186 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001187 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001188 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001189
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001190 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1191 keyfunc = PyDict_GetItemString(kwds, "key");
1192 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1193 PyErr_Format(PyExc_TypeError,
1194 "%s() got an unexpected keyword argument", name);
1195 return NULL;
1196 }
1197 }
1198
Tim Petersc3074532001-05-03 07:00:32 +00001199 it = PyObject_GetIter(v);
1200 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001201 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001202
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001203 maxitem = NULL; /* the result */
1204 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001205 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001206 /* get the value from the key function */
1207 if (keyfunc != NULL) {
1208 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1209 if (val == NULL)
1210 goto Fail_it_item;
1211 }
1212 /* no key function; the value is the item */
1213 else {
1214 val = item;
1215 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001216 }
Tim Petersc3074532001-05-03 07:00:32 +00001217
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001218 /* maximum value and item are unset; set them */
1219 if (maxval == NULL) {
1220 maxitem = item;
1221 maxval = val;
1222 }
1223 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001224 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001225 int cmp = PyObject_RichCompareBool(val, maxval, op);
1226 if (cmp < 0)
1227 goto Fail_it_item_and_val;
1228 else if (cmp > 0) {
1229 Py_DECREF(maxval);
1230 Py_DECREF(maxitem);
1231 maxval = val;
1232 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001233 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001234 else {
1235 Py_DECREF(item);
1236 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001237 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001238 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001239 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001240 if (PyErr_Occurred())
1241 goto Fail_it;
1242 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001243 PyErr_Format(PyExc_ValueError,
1244 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001245 assert(maxitem == NULL);
1246 }
1247 else
1248 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001249 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001250 return maxitem;
1251
1252Fail_it_item_and_val:
1253 Py_DECREF(val);
1254Fail_it_item:
1255 Py_DECREF(item);
1256Fail_it:
1257 Py_XDECREF(maxval);
1258 Py_XDECREF(maxitem);
1259 Py_DECREF(it);
1260 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261}
1262
Guido van Rossum79f25d91997-04-29 20:08:16 +00001263static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001264builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001265{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001266 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001267}
1268
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001269PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001270"min(iterable[, key=func]) -> value\n\
1271min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001272\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001273With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001274With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001275
1276
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001278builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001279{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001280 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281}
1282
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001283PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001284"max(iterable[, key=func]) -> value\n\
1285max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001286\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001287With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001288With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001289
1290
Guido van Rossum79f25d91997-04-29 20:08:16 +00001291static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001292builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001293{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001294 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001295 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001296
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001297 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1298 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001299 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001300 "oct() argument can't be converted to oct");
1301 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001302 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001303 res = (*nb->nb_oct)(v);
1304 if (res && !PyString_Check(res)) {
1305 PyErr_Format(PyExc_TypeError,
1306 "__oct__ returned non-string (type %.200s)",
1307 res->ob_type->tp_name);
1308 Py_DECREF(res);
1309 return NULL;
1310 }
1311 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001312}
1313
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001314PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001315"oct(number) -> string\n\
1316\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001317Return the octal representation of an integer or long integer.");
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_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322{
Guido van Rossum09095f32000-03-10 23:00:52 +00001323 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001324 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001325
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001326 if (PyString_Check(obj)) {
1327 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001328 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001329 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001330 return PyInt_FromLong(ord);
1331 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001332#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001333 } else if (PyUnicode_Check(obj)) {
1334 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001335 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001336 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001337 return PyInt_FromLong(ord);
1338 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001339#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001340 } else {
1341 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001342 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001343 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001344 return NULL;
1345 }
1346
Guido van Rossumad991772001-01-12 16:03:05 +00001347 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001348 "ord() expected a character, "
1349 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001350 size);
1351 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001352}
1353
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001354PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001355"ord(c) -> integer\n\
1356\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001357Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001358
1359
Guido van Rossum79f25d91997-04-29 20:08:16 +00001360static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001361builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001362{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001363 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001364
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001365 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001366 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001367 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001368}
1369
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001370PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001371"pow(x, y[, z]) -> number\n\
1372\n\
1373With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001374equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001375
1376
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001377
1378/* Return number of items in range (lo, hi, step), when arguments are
1379 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1380 * & only if the true value is too large to fit in a signed long.
1381 * Arguments MUST return 1 with either PyInt_Check() or
1382 * PyLong_Check(). Return -1 when there is an error.
1383 */
1384static long
1385get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1386{
1387 /* -------------------------------------------------------------
1388 Algorithm is equal to that of get_len_of_range(), but it operates
1389 on PyObjects (which are assumed to be PyLong or PyInt objects).
1390 ---------------------------------------------------------------*/
1391 long n;
1392 PyObject *diff = NULL;
1393 PyObject *one = NULL;
1394 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1395 /* holds sub-expression evaluations */
1396
1397 /* if (lo >= hi), return length of 0. */
1398 if (PyObject_Compare(lo, hi) >= 0)
1399 return 0;
1400
1401 if ((one = PyLong_FromLong(1L)) == NULL)
1402 goto Fail;
1403
1404 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1405 goto Fail;
1406
1407 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1408 goto Fail;
1409
1410 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1411 goto Fail;
1412
1413 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1414 goto Fail;
1415
1416 n = PyLong_AsLong(tmp3);
1417 if (PyErr_Occurred()) { /* Check for Overflow */
1418 PyErr_Clear();
1419 goto Fail;
1420 }
1421
1422 Py_DECREF(tmp3);
1423 Py_DECREF(tmp2);
1424 Py_DECREF(diff);
1425 Py_DECREF(tmp1);
1426 Py_DECREF(one);
1427 return n;
1428
1429 Fail:
1430 Py_XDECREF(tmp3);
1431 Py_XDECREF(tmp2);
1432 Py_XDECREF(diff);
1433 Py_XDECREF(tmp1);
1434 Py_XDECREF(one);
1435 return -1;
1436}
1437
1438/* An extension of builtin_range() that handles the case when PyLong
1439 * arguments are given. */
1440static PyObject *
1441handle_range_longs(PyObject *self, PyObject *args)
1442{
1443 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001444 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001445 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001446
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001447 PyObject *curnum = NULL;
1448 PyObject *v = NULL;
1449 long bign;
1450 int i, n;
1451 int cmp_result;
1452
Tim Peters874e1f72003-04-13 22:13:08 +00001453 PyObject *zero = PyLong_FromLong(0);
1454
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001455 if (zero == NULL)
1456 return NULL;
1457
Tim Peters874e1f72003-04-13 22:13:08 +00001458 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1459 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001460 return NULL;
1461 }
1462
Tim Peters874e1f72003-04-13 22:13:08 +00001463 /* Figure out which way we were called, supply defaults, and be
1464 * sure to incref everything so that the decrefs at the end
1465 * are correct.
1466 */
1467 assert(ilow != NULL);
1468 if (ihigh == NULL) {
1469 /* only 1 arg -- it's the upper limit */
1470 ihigh = ilow;
1471 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001472 }
Tim Peters874e1f72003-04-13 22:13:08 +00001473 assert(ihigh != NULL);
1474 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001475
Tim Peters874e1f72003-04-13 22:13:08 +00001476 /* ihigh correct now; do ilow */
1477 if (ilow == NULL)
1478 ilow = zero;
1479 Py_INCREF(ilow);
1480
1481 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001482 if (istep == NULL) {
1483 istep = PyLong_FromLong(1L);
1484 if (istep == NULL)
1485 goto Fail;
1486 }
1487 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001488 Py_INCREF(istep);
1489 }
1490
Tim Peters874e1f72003-04-13 22:13:08 +00001491 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001492 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001493 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001494 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001495 goto Fail;
1496 }
1497
Tim Peters874e1f72003-04-13 22:13:08 +00001498 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001499 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001500 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001501 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001502 goto Fail;
1503 }
1504
1505 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001506 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001507 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001508 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001509 goto Fail;
1510 }
1511
1512 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1513 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001514 if (cmp_result == 0) {
1515 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001516 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001517 goto Fail;
1518 }
1519
1520 if (cmp_result > 0)
1521 bign = get_len_of_range_longs(ilow, ihigh, istep);
1522 else {
1523 PyObject *neg_istep = PyNumber_Negative(istep);
1524 if (neg_istep == NULL)
1525 goto Fail;
1526 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1527 Py_DECREF(neg_istep);
1528 }
1529
1530 n = (int)bign;
1531 if (bign < 0 || (long)n != bign) {
1532 PyErr_SetString(PyExc_OverflowError,
1533 "range() result has too many items");
1534 goto Fail;
1535 }
1536
1537 v = PyList_New(n);
1538 if (v == NULL)
1539 goto Fail;
1540
1541 curnum = ilow;
1542 Py_INCREF(curnum);
1543
1544 for (i = 0; i < n; i++) {
1545 PyObject *w = PyNumber_Long(curnum);
1546 PyObject *tmp_num;
1547 if (w == NULL)
1548 goto Fail;
1549
1550 PyList_SET_ITEM(v, i, w);
1551
1552 tmp_num = PyNumber_Add(curnum, istep);
1553 if (tmp_num == NULL)
1554 goto Fail;
1555
1556 Py_DECREF(curnum);
1557 curnum = tmp_num;
1558 }
Tim Peters874e1f72003-04-13 22:13:08 +00001559 Py_DECREF(ilow);
1560 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001561 Py_DECREF(istep);
1562 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001563 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001564 return v;
1565
1566 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001567 Py_DECREF(ilow);
1568 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001569 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001570 Py_DECREF(zero);
1571 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001572 Py_XDECREF(v);
1573 return NULL;
1574}
1575
Guido van Rossum124eff01999-02-23 16:11:01 +00001576/* Return number of items in range/xrange (lo, hi, step). step > 0
1577 * required. Return a value < 0 if & only if the true value is too
1578 * large to fit in a signed long.
1579 */
1580static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001581get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001582{
1583 /* -------------------------------------------------------------
1584 If lo >= hi, the range is empty.
1585 Else if n values are in the range, the last one is
1586 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1587 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1588 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1589 the RHS is non-negative and so truncation is the same as the
1590 floor. Letting M be the largest positive long, the worst case
1591 for the RHS numerator is hi=M, lo=-M-1, and then
1592 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1593 precision to compute the RHS exactly.
1594 ---------------------------------------------------------------*/
1595 long n = 0;
1596 if (lo < hi) {
1597 unsigned long uhi = (unsigned long)hi;
1598 unsigned long ulo = (unsigned long)lo;
1599 unsigned long diff = uhi - ulo - 1;
1600 n = (long)(diff / (unsigned long)step + 1);
1601 }
1602 return n;
1603}
1604
Guido van Rossum79f25d91997-04-29 20:08:16 +00001605static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001606builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001607{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001608 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001609 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001610 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001611
Guido van Rossum79f25d91997-04-29 20:08:16 +00001612 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001613
Guido van Rossum79f25d91997-04-29 20:08:16 +00001614 if (PyTuple_Size(args) <= 1) {
1615 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001616 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001617 &ihigh)) {
1618 PyErr_Clear();
1619 return handle_range_longs(self, args);
1620 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001621 }
1622 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001623 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001624 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001625 &ilow, &ihigh, &istep)) {
1626 PyErr_Clear();
1627 return handle_range_longs(self, args);
1628 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001629 }
1630 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001631 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001632 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001633 return NULL;
1634 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001635 if (istep > 0)
1636 bign = get_len_of_range(ilow, ihigh, istep);
1637 else
1638 bign = get_len_of_range(ihigh, ilow, -istep);
1639 n = (int)bign;
1640 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001641 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001642 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001643 return NULL;
1644 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001645 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001646 if (v == NULL)
1647 return NULL;
1648 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001649 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001650 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001651 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001652 return NULL;
1653 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001654 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001655 ilow += istep;
1656 }
1657 return v;
1658}
1659
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001660PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001661"range([start,] stop[, step]) -> list of integers\n\
1662\n\
1663Return a list containing an arithmetic progression of integers.\n\
1664range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1665When step is given, it specifies the increment (or decrement).\n\
1666For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001667These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001668
1669
Guido van Rossum79f25d91997-04-29 20:08:16 +00001670static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001671builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001672{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001673 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001674 PyObject *fin = PySys_GetObject("stdin");
1675 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001676
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001677 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001678 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001679
1680 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001681 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001682 return NULL;
1683 }
1684 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001685 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001686 return NULL;
1687 }
1688 if (PyFile_SoftSpace(fout, 0)) {
1689 if (PyFile_WriteString(" ", fout) != 0)
1690 return NULL;
1691 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001692 if (PyFile_Check(fin) && PyFile_Check(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001693 && isatty(fileno(PyFile_AsFile(fin)))
1694 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001695 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001696 char *prompt;
1697 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001698 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001699 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001700 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001701 if (po == NULL)
1702 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001703 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001704 if (prompt == NULL)
1705 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001706 }
1707 else {
1708 po = NULL;
1709 prompt = "";
1710 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001711 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001712 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001714 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001715 if (!PyErr_Occurred())
1716 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001717 return NULL;
1718 }
1719 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001721 result = NULL;
1722 }
1723 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001724 size_t len = strlen(s);
1725 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001726 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001727 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001728 result = NULL;
1729 }
1730 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001731 result = PyString_FromStringAndSize(s,
1732 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001733 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001734 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001735 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001736 return result;
1737 }
Guido van Rossum90933611991-06-07 16:10:43 +00001738 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001739 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001740 return NULL;
1741 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001742 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001743}
1744
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001745PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001746"raw_input([prompt]) -> string\n\
1747\n\
1748Read a string from standard input. The trailing newline is stripped.\n\
1749If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1750On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001751is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001752
1753
Guido van Rossum79f25d91997-04-29 20:08:16 +00001754static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001755builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001756{
Tim Peters15d81ef2001-05-04 04:39:21 +00001757 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001758
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001759 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001760 return NULL;
1761 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001763
Tim Peters15d81ef2001-05-04 04:39:21 +00001764 it = PyObject_GetIter(seq);
1765 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001767 "reduce() arg 2 must support iteration");
1768 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001769 return NULL;
1770 }
1771
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001773 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001774
Tim Peters15d81ef2001-05-04 04:39:21 +00001775 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001776 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001777
1778 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 Py_DECREF(args);
1780 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001781 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001782 }
1783
Tim Peters15d81ef2001-05-04 04:39:21 +00001784 op2 = PyIter_Next(it);
1785 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001786 if (PyErr_Occurred())
1787 goto Fail;
1788 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001789 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001790
Guido van Rossum2d951851994-08-29 12:52:16 +00001791 if (result == NULL)
1792 result = op2;
1793 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001794 PyTuple_SetItem(args, 0, result);
1795 PyTuple_SetItem(args, 1, op2);
1796 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001797 goto Fail;
1798 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001799 }
1800
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001802
Guido van Rossum2d951851994-08-29 12:52:16 +00001803 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001805 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001806
Tim Peters15d81ef2001-05-04 04:39:21 +00001807 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001808 return result;
1809
Guido van Rossum2d951851994-08-29 12:52:16 +00001810Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 Py_XDECREF(args);
1812 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001813 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001814 return NULL;
1815}
1816
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001817PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001818"reduce(function, sequence[, initial]) -> value\n\
1819\n\
1820Apply a function of two arguments cumulatively to the items of a sequence,\n\
1821from left to right, so as to reduce the sequence to a single value.\n\
1822For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1823((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1824of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001825sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001826
1827
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001829builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001830{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001832}
1833
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001834PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001835"reload(module) -> module\n\
1836\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001837Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001838
1839
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001841builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001842{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001843 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001844}
1845
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001846PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001847"repr(object) -> string\n\
1848\n\
1849Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001850For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001851
1852
Guido van Rossum79f25d91997-04-29 20:08:16 +00001853static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001854builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001855{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001856 double x;
1857 double f;
1858 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001859 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001860
Guido van Rossum79f25d91997-04-29 20:08:16 +00001861 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001862 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001863 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001864 i = abs(ndigits);
1865 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001866 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001867 if (ndigits < 0)
1868 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001869 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001870 x *= f;
1871 if (x >= 0.0)
1872 x = floor(x + 0.5);
1873 else
1874 x = ceil(x - 0.5);
1875 if (ndigits < 0)
1876 x *= f;
1877 else
1878 x /= f;
1879 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001880}
1881
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001882PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001883"round(number[, ndigits]) -> floating point number\n\
1884\n\
1885Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001886This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001887
Raymond Hettinger64958a12003-12-17 20:43:33 +00001888static PyObject *
1889builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1890{
1891 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1892 PyObject *callable;
1893 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1894 long reverse;
1895
1896 if (args != NULL) {
1897 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1898 kwlist, &seq, &compare, &keyfunc, &reverse))
1899 return NULL;
1900 }
1901
1902 newlist = PySequence_List(seq);
1903 if (newlist == NULL)
1904 return NULL;
1905
1906 callable = PyObject_GetAttrString(newlist, "sort");
1907 if (callable == NULL) {
1908 Py_DECREF(newlist);
1909 return NULL;
1910 }
1911
1912 newargs = PyTuple_GetSlice(args, 1, 4);
1913 if (newargs == NULL) {
1914 Py_DECREF(newlist);
1915 Py_DECREF(callable);
1916 return NULL;
1917 }
1918
1919 v = PyObject_Call(callable, newargs, kwds);
1920 Py_DECREF(newargs);
1921 Py_DECREF(callable);
1922 if (v == NULL) {
1923 Py_DECREF(newlist);
1924 return NULL;
1925 }
1926 Py_DECREF(v);
1927 return newlist;
1928}
1929
1930PyDoc_STRVAR(sorted_doc,
1931"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001932
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001934builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001935{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001936 PyObject *v = NULL;
1937 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001938
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001939 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001940 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001941 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001942 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001943 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001944 if (!PyErr_Occurred())
1945 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001946 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001947 }
1948 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001949 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001950 }
1951 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001952 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001953 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001955 "vars() argument must have __dict__ attribute");
1956 return NULL;
1957 }
1958 }
1959 return d;
1960}
1961
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001962PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001963"vars([object]) -> dictionary\n\
1964\n\
1965Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001966With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001967
Alex Martellia70b1912003-04-22 08:12:33 +00001968
1969static PyObject*
1970builtin_sum(PyObject *self, PyObject *args)
1971{
1972 PyObject *seq;
1973 PyObject *result = NULL;
1974 PyObject *temp, *item, *iter;
1975
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001976 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001977 return NULL;
1978
1979 iter = PyObject_GetIter(seq);
1980 if (iter == NULL)
1981 return NULL;
1982
1983 if (result == NULL) {
1984 result = PyInt_FromLong(0);
1985 if (result == NULL) {
1986 Py_DECREF(iter);
1987 return NULL;
1988 }
1989 } else {
1990 /* reject string values for 'start' parameter */
1991 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1992 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001993 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001994 Py_DECREF(iter);
1995 return NULL;
1996 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001997 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001998 }
1999
2000 for(;;) {
2001 item = PyIter_Next(iter);
2002 if (item == NULL) {
2003 /* error, or end-of-sequence */
2004 if (PyErr_Occurred()) {
2005 Py_DECREF(result);
2006 result = NULL;
2007 }
2008 break;
2009 }
Alex Martellia253e182003-10-25 23:24:14 +00002010 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00002011 Py_DECREF(result);
2012 Py_DECREF(item);
2013 result = temp;
2014 if (result == NULL)
2015 break;
2016 }
2017 Py_DECREF(iter);
2018 return result;
2019}
2020
2021PyDoc_STRVAR(sum_doc,
2022"sum(sequence, start=0) -> value\n\
2023\n\
2024Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
2025of parameter 'start'. When the sequence is empty, returns start.");
2026
2027
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002028static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002029builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002030{
2031 PyObject *inst;
2032 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002033 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002034
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002035 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002036 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002037
Guido van Rossum823649d2001-03-21 18:40:58 +00002038 retval = PyObject_IsInstance(inst, cls);
2039 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002040 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002041 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002042}
2043
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002044PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002045"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002046\n\
2047Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002048With a type as second argument, return whether that is the object's type.\n\
2049The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002050isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002051
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002052
2053static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002054builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002055{
2056 PyObject *derived;
2057 PyObject *cls;
2058 int retval;
2059
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00002060 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002061 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002062
Guido van Rossum823649d2001-03-21 18:40:58 +00002063 retval = PyObject_IsSubclass(derived, cls);
2064 if (retval < 0)
2065 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002066 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002067}
2068
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002069PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002070"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002071\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002072Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2073When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2074is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002075
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002076
Barry Warsawbd599b52000-08-03 15:45:29 +00002077static PyObject*
2078builtin_zip(PyObject *self, PyObject *args)
2079{
2080 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00002081 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002082 int i;
2083 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00002084 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002085
Raymond Hettingereaef6152003-08-02 07:42:57 +00002086 if (itemsize == 0)
2087 return PyList_New(0);
2088
Barry Warsawbd599b52000-08-03 15:45:29 +00002089 /* args must be a tuple */
2090 assert(PyTuple_Check(args));
2091
Tim Peters39a86c22002-05-12 07:19:38 +00002092 /* Guess at result length: the shortest of the input lengths.
2093 If some argument refuses to say, we refuse to guess too, lest
2094 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002095 len = -1; /* unknown */
2096 for (i = 0; i < itemsize; ++i) {
2097 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00002098 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00002099 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00002100 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00002101 len = -1;
2102 break;
2103 }
Tim Peters67d687a2002-04-29 21:27:32 +00002104 else if (len < 0 || thislen < len)
2105 len = thislen;
2106 }
2107
Tim Peters8572b4f2001-05-06 01:05:02 +00002108 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002109 if (len < 0)
2110 len = 10; /* arbitrary */
2111 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002112 return NULL;
2113
Tim Peters8572b4f2001-05-06 01:05:02 +00002114 /* obtain iterators */
2115 itlist = PyTuple_New(itemsize);
2116 if (itlist == NULL)
2117 goto Fail_ret;
2118 for (i = 0; i < itemsize; ++i) {
2119 PyObject *item = PyTuple_GET_ITEM(args, i);
2120 PyObject *it = PyObject_GetIter(item);
2121 if (it == NULL) {
2122 if (PyErr_ExceptionMatches(PyExc_TypeError))
2123 PyErr_Format(PyExc_TypeError,
2124 "zip argument #%d must support iteration",
2125 i+1);
2126 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002127 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002128 PyTuple_SET_ITEM(itlist, i, it);
2129 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002130
Tim Peters8572b4f2001-05-06 01:05:02 +00002131 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002132 for (i = 0; ; ++i) {
2133 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002134 PyObject *next = PyTuple_New(itemsize);
2135 if (!next)
2136 goto Fail_ret_itlist;
2137
Tim Peters67d687a2002-04-29 21:27:32 +00002138 for (j = 0; j < itemsize; j++) {
2139 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002140 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002141 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002142 if (PyErr_Occurred()) {
2143 Py_DECREF(ret);
2144 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002145 }
2146 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002147 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002148 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002149 }
Tim Peters67d687a2002-04-29 21:27:32 +00002150 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002151 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002152
Tim Peters67d687a2002-04-29 21:27:32 +00002153 if (i < len)
2154 PyList_SET_ITEM(ret, i, next);
2155 else {
2156 int status = PyList_Append(ret, next);
2157 Py_DECREF(next);
2158 ++len;
2159 if (status < 0)
2160 goto Fail_ret_itlist;
2161 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002162 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002163
Tim Peters67d687a2002-04-29 21:27:32 +00002164Done:
2165 if (ret != NULL && i < len) {
2166 /* The list is too big. */
2167 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2168 return NULL;
2169 }
2170 return ret;
2171
Tim Peters8572b4f2001-05-06 01:05:02 +00002172Fail_ret_itlist:
2173 Py_DECREF(itlist);
2174Fail_ret:
2175 Py_DECREF(ret);
2176 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002177}
2178
2179
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002180PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002181"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2182\n\
2183Return a list of tuples, where each tuple contains the i-th element\n\
2184from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002185in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002186
2187
Guido van Rossum79f25d91997-04-29 20:08:16 +00002188static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002189 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2190 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002191 {"all", builtin_all, METH_O, all_doc},
2192 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002193 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002194 {"callable", builtin_callable, METH_O, callable_doc},
2195 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2196 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2197 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2198 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2199 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2200 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2201 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2202 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2203 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2204 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2205 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2206 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2207 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2208 {"hash", builtin_hash, METH_O, hash_doc},
2209 {"hex", builtin_hex, METH_O, hex_doc},
2210 {"id", builtin_id, METH_O, id_doc},
2211 {"input", builtin_input, METH_VARARGS, input_doc},
2212 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2213 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2214 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2215 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2216 {"len", builtin_len, METH_O, len_doc},
2217 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2218 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002219 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2220 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002221 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002222 {"ord", builtin_ord, METH_O, ord_doc},
2223 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2224 {"range", builtin_range, METH_VARARGS, range_doc},
2225 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2226 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2227 {"reload", builtin_reload, METH_O, reload_doc},
2228 {"repr", builtin_repr, METH_O, repr_doc},
2229 {"round", builtin_round, METH_VARARGS, round_doc},
2230 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002231 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002232 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002233#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002234 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002235#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002236 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002237 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002238 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002239};
2240
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002241PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002242"Built-in functions, exceptions, and other objects.\n\
2243\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002244Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002245
Guido van Rossum25ce5661997-08-02 03:10:38 +00002246PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002247_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002248{
Fred Drake5550de32000-06-20 04:54:19 +00002249 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002250 mod = Py_InitModule4("__builtin__", builtin_methods,
2251 builtin_doc, (PyObject *)NULL,
2252 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002253 if (mod == NULL)
2254 return NULL;
2255 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002256
Tim Peters7571a0f2003-03-23 17:52:28 +00002257#ifdef Py_TRACE_REFS
2258 /* __builtin__ exposes a number of statically allocated objects
2259 * that, before this code was added in 2.3, never showed up in
2260 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2261 * result, programs leaking references to None and False (etc)
2262 * couldn't be diagnosed by examining sys.getobjects(0).
2263 */
2264#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2265#else
2266#define ADD_TO_ALL(OBJECT) (void)0
2267#endif
2268
Tim Peters4b7625e2001-09-13 21:37:17 +00002269#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002270 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2271 return NULL; \
2272 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002273
2274 SETBUILTIN("None", Py_None);
2275 SETBUILTIN("Ellipsis", Py_Ellipsis);
2276 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002277 SETBUILTIN("False", Py_False);
2278 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002279 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002280 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002281 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002282 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002283#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002284 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002285#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002286 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002287 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002288 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002289 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002290 SETBUILTIN("property", &PyProperty_Type);
2291 SETBUILTIN("int", &PyInt_Type);
2292 SETBUILTIN("list", &PyList_Type);
2293 SETBUILTIN("long", &PyLong_Type);
2294 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002295 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002296 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002297 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002298 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2299 SETBUILTIN("str", &PyString_Type);
2300 SETBUILTIN("super", &PySuper_Type);
2301 SETBUILTIN("tuple", &PyTuple_Type);
2302 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002303 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002304
2305 /* Note that open() is just an alias of file(). */
2306 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002307 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002308#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002309 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002310#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002311 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002312 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2313 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002314 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002315 }
2316 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002317
Guido van Rossum25ce5661997-08-02 03:10:38 +00002318 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002319#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002320#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002321}
2322
Guido van Rossume77a7571993-11-03 15:01:26 +00002323/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002324
Guido van Rossum79f25d91997-04-29 20:08:16 +00002325static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002326filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002327{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002328 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002329 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002330 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002331
Guido van Rossumb7b45621995-08-04 04:07:45 +00002332 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002333 if (PyTuple_CheckExact(tuple))
2334 Py_INCREF(tuple);
2335 else
2336 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002337 return tuple;
2338 }
2339
Guido van Rossum79f25d91997-04-29 20:08:16 +00002340 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002341 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002342
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002344 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002345 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002346
Walter Dörwald8dd19322003-02-10 17:36:40 +00002347 if (tuple->ob_type->tp_as_sequence &&
2348 tuple->ob_type->tp_as_sequence->sq_item) {
2349 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002350 if (item == NULL)
2351 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002352 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002353 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002354 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002355 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002356 if (func == Py_None) {
2357 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002358 good = item;
2359 }
2360 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002361 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002362 if (arg == NULL) {
2363 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002364 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002365 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002366 good = PyEval_CallObject(func, arg);
2367 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002368 if (good == NULL) {
2369 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002370 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002371 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002372 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002373 ok = PyObject_IsTrue(good);
2374 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002375 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002376 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002377 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002378 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002379 else
2380 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381 }
2382
Tim Peters4324aa32001-05-28 22:30:08 +00002383 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002384 return NULL;
2385
Guido van Rossum12d12c51993-10-26 17:58:25 +00002386 return result;
2387
Guido van Rossum12d12c51993-10-26 17:58:25 +00002388Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002389 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002390 return NULL;
2391}
2392
2393
Guido van Rossume77a7571993-11-03 15:01:26 +00002394/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002395
Guido van Rossum79f25d91997-04-29 20:08:16 +00002396static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002397filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002398{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002399 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002400 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002401 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002402 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002403
Guido van Rossum79f25d91997-04-29 20:08:16 +00002404 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002405 /* If it's a real string we can return the original,
2406 * as no character is ever false and __getitem__
2407 * does return this character. If it's a subclass
2408 * we must go through the __getitem__ loop */
2409 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002410 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002411 return strobj;
2412 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002413 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002414 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002415 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002416
Guido van Rossum12d12c51993-10-26 17:58:25 +00002417 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002418 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002419 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002420
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002421 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2422 if (item == NULL)
2423 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002424 if (func==Py_None) {
2425 ok = 1;
2426 } else {
2427 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002428 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002429 if (arg == NULL) {
2430 Py_DECREF(item);
2431 goto Fail_1;
2432 }
2433 good = PyEval_CallObject(func, arg);
2434 Py_DECREF(arg);
2435 if (good == NULL) {
2436 Py_DECREF(item);
2437 goto Fail_1;
2438 }
2439 ok = PyObject_IsTrue(good);
2440 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002441 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002442 if (ok) {
2443 int reslen;
2444 if (!PyString_Check(item)) {
2445 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2446 " __getitem__ returned different type");
2447 Py_DECREF(item);
2448 goto Fail_1;
2449 }
2450 reslen = PyString_GET_SIZE(item);
2451 if (reslen == 1) {
2452 PyString_AS_STRING(result)[j++] =
2453 PyString_AS_STRING(item)[0];
2454 } else {
2455 /* do we need more space? */
2456 int need = j + reslen + len-i-1;
2457 if (need > outlen) {
2458 /* overallocate, to avoid reallocations */
2459 if (need<2*outlen)
2460 need = 2*outlen;
2461 if (_PyString_Resize(&result, need)) {
2462 Py_DECREF(item);
2463 return NULL;
2464 }
2465 outlen = need;
2466 }
2467 memcpy(
2468 PyString_AS_STRING(result) + j,
2469 PyString_AS_STRING(item),
2470 reslen
2471 );
2472 j += reslen;
2473 }
2474 }
Tim Peters388ed082001-04-07 20:34:48 +00002475 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002476 }
2477
Walter Dörwald903f1e02003-02-04 16:28:00 +00002478 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002479 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002480
Guido van Rossum12d12c51993-10-26 17:58:25 +00002481 return result;
2482
Guido van Rossum12d12c51993-10-26 17:58:25 +00002483Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002484 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002485 return NULL;
2486}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002487
2488#ifdef Py_USING_UNICODE
2489/* Helper for filter(): filter a Unicode object through a function */
2490
2491static PyObject *
2492filterunicode(PyObject *func, PyObject *strobj)
2493{
2494 PyObject *result;
2495 register int i, j;
2496 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002497 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002498
2499 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002500 /* If it's a real string we can return the original,
2501 * as no character is ever false and __getitem__
2502 * does return this character. If it's a subclass
2503 * we must go through the __getitem__ loop */
2504 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002505 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002506 return strobj;
2507 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002508 }
2509 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2510 return NULL;
2511
2512 for (i = j = 0; i < len; ++i) {
2513 PyObject *item, *arg, *good;
2514 int ok;
2515
2516 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2517 if (item == NULL)
2518 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002519 if (func == Py_None) {
2520 ok = 1;
2521 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002522 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002523 if (arg == NULL) {
2524 Py_DECREF(item);
2525 goto Fail_1;
2526 }
2527 good = PyEval_CallObject(func, arg);
2528 Py_DECREF(arg);
2529 if (good == NULL) {
2530 Py_DECREF(item);
2531 goto Fail_1;
2532 }
2533 ok = PyObject_IsTrue(good);
2534 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002535 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002536 if (ok) {
2537 int reslen;
2538 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002539 PyErr_SetString(PyExc_TypeError,
2540 "can't filter unicode to unicode:"
2541 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002542 Py_DECREF(item);
2543 goto Fail_1;
2544 }
2545 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002546 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002547 PyUnicode_AS_UNICODE(result)[j++] =
2548 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002549 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002550 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002551 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002552 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002553 /* overallocate,
2554 to avoid reallocations */
2555 if (need < 2 * outlen)
2556 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002557 if (PyUnicode_Resize(
2558 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002559 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002560 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002561 }
2562 outlen = need;
2563 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002564 memcpy(PyUnicode_AS_UNICODE(result) + j,
2565 PyUnicode_AS_UNICODE(item),
2566 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002567 j += reslen;
2568 }
2569 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002570 Py_DECREF(item);
2571 }
2572
Walter Dörwald903f1e02003-02-04 16:28:00 +00002573 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002574 PyUnicode_Resize(&result, j);
2575
2576 return result;
2577
2578Fail_1:
2579 Py_DECREF(result);
2580 return NULL;
2581}
2582#endif