blob: ec3c5fc0a046650392b307e7767a20967449fccb [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 Rossum1a2c5cb1996-12-10 15:37:36 +000012#ifdef HAVE_UNISTD_H
13#include <unistd.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*/
Fredrik Lundh5b979352001-06-26 17:46:10 +000019#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
21#else
22const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
23#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000024
Guido van Rossum12d12c51993-10-26 17:58:25 +000025/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000026static PyObject *filterstring(PyObject *, PyObject *);
27static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000031{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000033 PyObject *globals = NULL;
34 PyObject *locals = NULL;
35 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000038 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000040 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041}
42
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000043static char import_doc[] =
44"__import__(name, globals, locals, fromlist) -> module\n\
45\n\
46Import a module. The globals are only used to determine the context;\n\
47they are not modified. The locals are currently unused. The fromlist\n\
48should be a list of names to emulate ``from name import ...'', or an\n\
49empty list to emulate ``import name''.\n\
50When importing a module from a package, note that __import__('A.B', ...)\n\
51returns package A when fromlist is empty, but its submodule B when\n\
52fromlist is not empty.";
53
Guido van Rossum1ae940a1995-01-02 19:04:15 +000054
Guido van Rossum79f25d91997-04-29 20:08:16 +000055static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000056builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057{
Guido van Rossum79f25d91997-04-29 20:08:16 +000058 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000061 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000062 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000063}
64
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065static char abs_doc[] =
66"abs(number) -> number\n\
67\n\
68Return the absolute value of the argument.";
69
70
Guido van Rossum79f25d91997-04-29 20:08:16 +000071static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000072builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000073{
Guido van Rossum79f25d91997-04-29 20:08:16 +000074 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000075 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000076
Guido van Rossum79f25d91997-04-29 20:08:16 +000077 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000078 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000079 if (alist != NULL) {
80 if (!PyTuple_Check(alist)) {
81 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000082 PyErr_Format(PyExc_TypeError,
83 "apply() arg 2 expect sequence, found %s",
84 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000085 return NULL;
86 }
87 t = PySequence_Tuple(alist);
88 if (t == NULL)
89 return NULL;
90 alist = t;
91 }
Guido van Rossum2d951851994-08-29 12:52:16 +000092 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000093 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000094 PyErr_Format(PyExc_TypeError,
95 "apply() arg 3 expected dictionary, found %s",
96 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000097 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000098 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000099 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
100 finally:
101 Py_XDECREF(t);
102 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000103}
104
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000105static char apply_doc[] =
Fred Drakef1fbc622001-01-12 17:05:05 +0000106"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000107\n\
Fred Drake7b912121999-12-23 14:16:55 +0000108Call a callable object with positional arguments taken from the tuple args,\n\
109and keyword arguments taken from the optional dictionary kwargs.\n\
110Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000111
112
Guido van Rossum79f25d91997-04-29 20:08:16 +0000113static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000114builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000115{
116 PyObject *ob;
117 int offset = 0;
118 int size = Py_END_OF_BUFFER;
119
120 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
121 return NULL;
122 return PyBuffer_FromObject(ob, offset, size);
123}
124
125static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000126"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000127\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000128Create a new buffer object which references the given object.\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000129The buffer will reference a slice of the target object from the\n\
130start of the object (or at the specified offset). The slice will\n\
131extend to the end of the target object (or with the specified size).";
132
133
134static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000135builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000136{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000137 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000138
Guido van Rossum79f25d91997-04-29 20:08:16 +0000139 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000140 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000141 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000142}
143
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000144static char callable_doc[] =
145"callable(object) -> Boolean\n\
146\n\
147Return whether the object is callable (i.e., some kind of function).\n\
148Note that classes are callable, as are instances with a __call__() method.";
149
150
Guido van Rossum79f25d91997-04-29 20:08:16 +0000151static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000152builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000153{
Tim Peters0e57abf2001-05-02 07:39:38 +0000154 PyObject *func, *seq, *result, *it;
155 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000156 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000157
Guido van Rossum79f25d91997-04-29 20:08:16 +0000158 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000159 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000160
Tim Peters0e57abf2001-05-02 07:39:38 +0000161 /* Strings and tuples return a result of the same type. */
162 if (PyString_Check(seq))
163 return filterstring(func, seq);
164 if (PyTuple_Check(seq))
165 return filtertuple(func, seq);
166
167 /* Get iterator. */
168 it = PyObject_GetIter(seq);
169 if (it == NULL)
170 return NULL;
171
172 /* Guess a result list size. */
173 len = -1; /* unknown */
174 if (PySequence_Check(seq) &&
175 seq->ob_type->tp_as_sequence->sq_length) {
176 len = PySequence_Size(seq);
177 if (len < 0)
178 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000179 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000180 if (len < 0)
181 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000182
Tim Peters0e57abf2001-05-02 07:39:38 +0000183 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000184 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000185 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000186 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000187 result = seq;
188 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000189 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000190 result = PyList_New(len);
191 if (result == NULL)
192 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000193 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000194
Tim Peters0e57abf2001-05-02 07:39:38 +0000195 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000196 j = 0;
197 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000198 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000199 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000200
Tim Peters0e57abf2001-05-02 07:39:38 +0000201 item = PyIter_Next(it);
202 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000203 if (PyErr_Occurred())
204 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000205 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000206 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000207
Guido van Rossum79f25d91997-04-29 20:08:16 +0000208 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000209 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000210 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000211 }
212 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000213 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 if (arg == NULL) {
215 Py_DECREF(item);
216 goto Fail_result_it;
217 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000218 good = PyEval_CallObject(func, arg);
219 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000220 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000221 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000222 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000223 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000224 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000225 ok = PyObject_IsTrue(good);
226 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000227 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000228 if (j < len)
229 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000230 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000231 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000232 Py_DECREF(item);
233 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000234 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000235 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000236 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000237 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000238 else
239 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000240 }
241
Guido van Rossum12d12c51993-10-26 17:58:25 +0000242
Tim Peters0e57abf2001-05-02 07:39:38 +0000243 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000244 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000245 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246
Tim Peters3c6b1482001-05-21 08:07:05 +0000247 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000248 return result;
249
Tim Peters0e57abf2001-05-02 07:39:38 +0000250Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000251 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000252Fail_it:
253 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000254 return NULL;
255}
256
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000257static char filter_doc[] =
258"filter(function, sequence) -> list\n\
259\n\
260Return a list containing those items of sequence for which function(item)\n\
261is true. If function is None, return a list of items that are true.";
262
263
Guido van Rossum79f25d91997-04-29 20:08:16 +0000264static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000265builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000266{
267 long x;
268 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000269
Guido van Rossum79f25d91997-04-29 20:08:16 +0000270 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000271 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000272 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000273 PyErr_SetString(PyExc_ValueError,
274 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000275 return NULL;
276 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000277 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000278 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000279}
280
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000281static char chr_doc[] =
282"chr(i) -> character\n\
283\n\
284Return a string of one character with ordinal i; 0 <= i < 256.";
285
286
Guido van Rossum79f25d91997-04-29 20:08:16 +0000287static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000288builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000289{
290 long x;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000291 Py_UNICODE s[2];
Guido van Rossum09095f32000-03-10 23:00:52 +0000292
293 if (!PyArg_ParseTuple(args, "l:unichr", &x))
294 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000295
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000296#ifdef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000297 if (x < 0 || x > 0x10ffff) {
Guido van Rossum09095f32000-03-10 23:00:52 +0000298 PyErr_SetString(PyExc_ValueError,
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000299 "unichr() arg not in range(0x110000) "
300 "(wide Python build)");
Guido van Rossum09095f32000-03-10 23:00:52 +0000301 return NULL;
302 }
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000303#else
304 if (x < 0 || x > 0xffff) {
305 PyErr_SetString(PyExc_ValueError,
306 "unichr() arg not in range(0x10000) "
307 "(narrow Python build)");
308 return NULL;
309 }
310#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000311
312 if (x <= 0xffff) {
313 /* UCS-2 character */
314 s[0] = (Py_UNICODE) x;
315 return PyUnicode_FromUnicode(s, 1);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000316 }
317 else {
Fredrik Lundh8f455852001-06-27 18:59:43 +0000318#ifndef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000319 /* UCS-4 character. store as two surrogate characters */
320 x -= 0x10000L;
321 s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
322 s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
323 return PyUnicode_FromUnicode(s, 2);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000324#else
325 s[0] = (Py_UNICODE)x;
326 return PyUnicode_FromUnicode(s, 1);
Martin v. Löwis0ba70cc2001-06-26 22:22:37 +0000327#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000328 }
Guido van Rossum09095f32000-03-10 23:00:52 +0000329}
330
331static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000332"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000333\n\
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000334Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000335
336
337static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000338builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000339{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000340 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000341 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000342
Guido van Rossum79f25d91997-04-29 20:08:16 +0000343 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000344 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000345 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000346 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000347 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000348}
349
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000350static char cmp_doc[] =
351"cmp(x, y) -> integer\n\
352\n\
353Return negative if x<y, zero if x==y, positive if x>y.";
354
355
Guido van Rossum79f25d91997-04-29 20:08:16 +0000356static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000357builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000358{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000359 PyObject *v, *w;
360 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000361
Guido van Rossum79f25d91997-04-29 20:08:16 +0000362 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000363 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000364 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000365 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000366 res = Py_BuildValue("(OO)", v, w);
367 Py_DECREF(v);
368 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000369 return res;
370}
371
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000372static char coerce_doc[] =
373"coerce(x, y) -> None or (x1, y1)\n\
374\n\
375When x and y can be coerced to values of the same type, return a tuple\n\
376containing the coerced values. When they can't be coerced, return None.";
377
378
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000380builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000381{
382 char *str;
383 char *filename;
384 char *startstr;
385 int start;
Tim Peters5ba58662001-07-16 02:29:45 +0000386 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000387
Guido van Rossum79f25d91997-04-29 20:08:16 +0000388 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000389 return NULL;
390 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000391 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000392 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000393 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000394 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000395 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000396 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000398 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000399 return NULL;
400 }
Tim Peters5ba58662001-07-16 02:29:45 +0000401 cf.cf_flags = 0;
402 if (PyEval_MergeCompilerFlags(&cf))
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000403 return Py_CompileStringFlags(str, filename, start, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000404 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000405 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000406}
407
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000408static char compile_doc[] =
409"compile(source, filename, mode) -> code object\n\
410\n\
411Compile the source string (a Python module, statement or expression)\n\
412into a code object that can be executed by the exec statement or eval().\n\
413The filename will be used for run-time error messages.\n\
414The mode must be 'exec' to compile a module, 'single' to compile a\n\
415single (interactive) statement, or 'eval' to compile an expression.";
416
417
Guido van Rossum79f25d91997-04-29 20:08:16 +0000418static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000419builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000420{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000421 static char *attrlist[] = {"__members__", "__methods__", NULL};
422 PyObject *v = NULL, *l = NULL, *m = NULL;
423 PyObject *d, *x;
424 int i;
425 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000426
Guido van Rossum79f25d91997-04-29 20:08:16 +0000427 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000428 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000429 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000430 x = PyEval_GetLocals();
431 if (x == NULL)
432 goto error;
433 l = PyMapping_Keys(x);
434 if (l == NULL)
435 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000436 }
437 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000439 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000440 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000441 else {
442 l = PyMapping_Keys(d);
443 if (l == NULL)
444 PyErr_Clear();
445 Py_DECREF(d);
446 }
447 if (l == NULL) {
448 l = PyList_New(0);
449 if (l == NULL)
450 goto error;
451 }
452 for (s = attrlist; *s != NULL; s++) {
453 m = PyObject_GetAttrString(v, *s);
454 if (m == NULL) {
455 PyErr_Clear();
456 continue;
457 }
458 for (i = 0; ; i++) {
459 x = PySequence_GetItem(m, i);
460 if (x == NULL) {
461 PyErr_Clear();
462 break;
463 }
464 if (PyList_Append(l, x) != 0) {
465 Py_DECREF(x);
466 Py_DECREF(m);
467 goto error;
468 }
469 Py_DECREF(x);
470 }
471 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000472 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000473 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000474 if (PyList_Sort(l) != 0)
475 goto error;
476 return l;
477 error:
478 Py_XDECREF(l);
479 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000480}
481
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000482static char dir_doc[] =
483"dir([object]) -> list of strings\n\
484\n\
485Return an alphabetized list of names comprising (some of) the attributes\n\
486of the given object. Without an argument, the names in the current scope\n\
487are listed. With an instance argument, only the instance attributes are\n\
488returned. With a class argument, attributes of the base class are not\n\
489returned. For other types or arguments, this may list members or methods.";
490
491
Guido van Rossum79f25d91997-04-29 20:08:16 +0000492static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000493builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000494{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000495 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000496
Guido van Rossum79f25d91997-04-29 20:08:16 +0000497 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000498 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000499 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000500}
501
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000502static char divmod_doc[] =
503"divmod(x, y) -> (div, mod)\n\
504\n\
505Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
506
507
Guido van Rossum79f25d91997-04-29 20:08:16 +0000508static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000509builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000510{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000511 PyObject *cmd;
512 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000513 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000514
Guido van Rossum79f25d91997-04-29 20:08:16 +0000515 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000516 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000517 &PyDict_Type, &globals,
518 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000519 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000520 if (globals == Py_None) {
521 globals = PyEval_GetGlobals();
522 if (locals == Py_None)
523 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000524 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000525 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000526 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
528 if (PyDict_SetItemString(globals, "__builtins__",
529 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000530 return NULL;
531 }
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000532 if (PyCode_Check(cmd)) {
533 if (PyTuple_GET_SIZE(((PyCodeObject *)cmd)->co_freevars) > 0) {
534 PyErr_SetString(PyExc_TypeError,
535 "code object passed to eval() may not contain free variables");
536 return NULL;
537 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000539 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000540 if (!PyString_Check(cmd) &&
541 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000542 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000543 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000544 return NULL;
545 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000546 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000547 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548 while (*str == ' ' || *str == '\t')
549 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000550 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000551}
552
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000553static char eval_doc[] =
554"eval(source[, globals[, locals]]) -> value\n\
555\n\
556Evaluate the source in the context of globals and locals.\n\
557The source may be a string representing a Python expression\n\
558or a code object as returned by compile().\n\
559The globals and locals are dictionaries, defaulting to the current\n\
560globals and locals. If only globals is given, locals defaults to it.";
561
562
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000564builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000565{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000566 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000567 PyObject *globals = Py_None, *locals = Py_None;
568 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000569 FILE* fp;
Tim Peters5ba58662001-07-16 02:29:45 +0000570 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571
Guido van Rossum79f25d91997-04-29 20:08:16 +0000572 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 &PyDict_Type, &globals,
575 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000576 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000577 if (globals == Py_None) {
578 globals = PyEval_GetGlobals();
579 if (locals == Py_None)
580 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000581 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000582 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000583 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
585 if (PyDict_SetItemString(globals, "__builtins__",
586 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000587 return NULL;
588 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000592 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000593 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000594 return NULL;
595 }
Tim Peters5ba58662001-07-16 02:29:45 +0000596 cf.cf_flags = 0;
597 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000598 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000599 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000600 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000601 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000602 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000603 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000604}
605
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000606static char execfile_doc[] =
607"execfile(filename[, globals[, locals]])\n\
608\n\
609Read and execute a Python script from a file.\n\
610The globals and locals are dictionaries, defaulting to the current\n\
611globals and locals. If only globals is given, locals defaults to it.";
612
613
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000615builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000616{
Guido van Rossum950ff291998-06-29 13:38:57 +0000617 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000618 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000619
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000620 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000621 return NULL;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000622 if (PyUnicode_Check(name)) {
623 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
624 if (name == NULL)
625 return NULL;
626 }
627
628 if (!PyString_Check(name)) {
629 PyErr_SetString(PyExc_TypeError,
630 "attribute name must be string");
631 return NULL;
632 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000633 result = PyObject_GetAttr(v, name);
634 if (result == NULL && dflt != NULL) {
635 PyErr_Clear();
636 Py_INCREF(dflt);
637 result = dflt;
638 }
639 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000640}
641
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000642static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000643"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000644\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000645Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
646When a default argument is given, it is returned when the attribute doesn't\n\
647exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000648
649
Guido van Rossum79f25d91997-04-29 20:08:16 +0000650static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000651builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000652{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000653 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000654
Guido van Rossum43713e52000-02-29 13:59:29 +0000655 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000656 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000657 d = PyEval_GetGlobals();
658 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000659 return d;
660}
661
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000662static char globals_doc[] =
663"globals() -> dictionary\n\
664\n\
665Return the dictionary containing the current scope's global variables.";
666
667
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000669builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000670{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671 PyObject *v;
672 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000673
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000674 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000675 return NULL;
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000676 if (PyUnicode_Check(name)) {
677 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
678 if (name == NULL)
679 return NULL;
680 }
681
682 if (!PyString_Check(name)) {
683 PyErr_SetString(PyExc_TypeError,
684 "attribute name must be string");
685 return NULL;
686 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000687 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000688 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000690 Py_INCREF(Py_False);
691 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000692 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000694 Py_INCREF(Py_True);
695 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000696}
697
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000698static char hasattr_doc[] =
699"hasattr(object, name) -> Boolean\n\
700\n\
701Return whether the object has an attribute with the given name.\n\
702(This is done by calling getattr(object, name) and catching exceptions.)";
703
704
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000706builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000707{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000711 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000712 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000713}
714
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000715static char id_doc[] =
716"id(object) -> integer\n\
717\n\
718Return the identity of an object. This is guaranteed to be unique among\n\
719simultaneously existing objects. (Hint: it's the object's memory address.)";
720
721
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000723builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000724{
725 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000726 PyObject *it; /* the iterator object */
727 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000728 } sequence;
729
Guido van Rossum79f25d91997-04-29 20:08:16 +0000730 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000731 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000732 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000733 register int i, j;
734
Guido van Rossum79f25d91997-04-29 20:08:16 +0000735 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737 PyErr_SetString(PyExc_TypeError,
738 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000739 return NULL;
740 }
741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000744
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000745 if (func == Py_None && n == 1) {
746 /* map(None, S) is the same as list(S). */
747 return PySequence_List(PyTuple_GetItem(args, 1));
748 }
749
Tim Peters4e9afdc2001-05-03 23:54:49 +0000750 /* Get space for sequence descriptors. Must NULL out the iterator
751 * pointers so that jumping to Fail_2 later doesn't see trash.
752 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
754 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000755 return NULL;
756 }
757 for (i = 0; i < n; ++i) {
758 seqs[i].it = (PyObject*)NULL;
759 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000760 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000761
Tim Peters4e9afdc2001-05-03 23:54:49 +0000762 /* Do a first pass to obtain iterators for the arguments, and set len
763 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000764 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000765 len = 0;
766 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
767 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000768 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000769
Tim Peters4e9afdc2001-05-03 23:54:49 +0000770 /* Get iterator. */
771 curseq = PyTuple_GetItem(args, i+1);
772 sqp->it = PyObject_GetIter(curseq);
773 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000774 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000775 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000776 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000777 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000779 goto Fail_2;
780 }
781
Tim Peters4e9afdc2001-05-03 23:54:49 +0000782 /* Update len. */
783 curlen = -1; /* unknown */
784 if (PySequence_Check(curseq) &&
785 curseq->ob_type->tp_as_sequence->sq_length) {
786 curlen = PySequence_Size(curseq);
787 if (curlen < 0)
788 PyErr_Clear();
789 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000790 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000791 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000792 if (curlen > len)
793 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000794 }
795
Tim Peters4e9afdc2001-05-03 23:54:49 +0000796 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000798 goto Fail_2;
799
Tim Peters4e9afdc2001-05-03 23:54:49 +0000800 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000801 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000802 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000803 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000804
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000806 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000807 else if ((alist = PyTuple_New(n)) == NULL)
808 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000809
810 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000811 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 Py_INCREF(Py_None);
813 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000814 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000815 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000816 item = PyIter_Next(sqp->it);
817 if (item)
818 ++numactive;
819 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000820 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000821 Py_XDECREF(alist);
822 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000823 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000824 Py_INCREF(Py_None);
825 item = Py_None;
826 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000827 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000828 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000829 if (alist)
830 PyTuple_SET_ITEM(alist, j, item);
831 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000832 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000833 }
834
Guido van Rossum32120311995-07-10 13:52:21 +0000835 if (!alist)
836 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000837
Tim Peters4e9afdc2001-05-03 23:54:49 +0000838 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000840 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000841 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000842
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000844 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000845 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 value = PyEval_CallObject(func, alist);
847 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000848 if (value == NULL)
849 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000850 }
851 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000852 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000853 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000854 if (status < 0)
855 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000856 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000857 else if (PyList_SetItem(result, i, value) < 0)
858 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000859 }
860
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000861 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
862 goto Fail_1;
863
Tim Peters4e9afdc2001-05-03 23:54:49 +0000864 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000865
Guido van Rossum12d12c51993-10-26 17:58:25 +0000866Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000868Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000869 result = NULL;
870Succeed:
871 assert(seqs);
872 for (i = 0; i < n; ++i)
873 Py_XDECREF(seqs[i].it);
874 PyMem_DEL(seqs);
875 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876}
877
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000878static char map_doc[] =
879"map(function, sequence[, sequence, ...]) -> list\n\
880\n\
881Return a list of the results of applying the function to the items of\n\
882the argument sequence(s). If more than one sequence is given, the\n\
883function is called with an argument list consisting of the corresponding\n\
884item of each sequence, substituting None for missing values when not all\n\
885sequences have the same length. If the function is None, return a list of\n\
886the items of the sequence (or a list of tuples if more than one sequence).";
887
888
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000890builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000891{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 PyObject *v;
893 PyObject *name;
894 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000895
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000896 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000897 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000898 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000899 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900 Py_INCREF(Py_None);
901 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000902}
903
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904static char setattr_doc[] =
905"setattr(object, name, value)\n\
906\n\
907Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
908``x.y = v''.";
909
910
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000912builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000913{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914 PyObject *v;
915 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000917 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000918 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000919 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000920 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 Py_INCREF(Py_None);
922 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000923}
924
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000925static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +0000926"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000927\n\
928Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
929``del x.y''.";
930
931
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000933builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000934{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000936 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000939 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000941 if (x == -1)
942 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000944}
945
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000946static char hash_doc[] =
947"hash(object) -> integer\n\
948\n\
949Return a hash value for the object. Two objects with the same value have\n\
950the same hash value. The reverse is not necessarily true, but likely.";
951
952
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000954builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000955{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000956 PyObject *v;
957 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000958
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000960 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +0000961
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000962 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000963 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000965 "hex() argument can't be converted to hex");
966 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000967 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000968 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000969}
970
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000971static char hex_doc[] =
972"hex(number) -> string\n\
973\n\
974Return the hexadecimal representation of an integer or long integer.";
975
976
Tim Petersdbd9ba62000-07-09 03:09:57 +0000977static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000978
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000980builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000981{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000983 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 PyObject *res;
985 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986
987 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000988 if (line == NULL)
989 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991 return NULL;
992 while (*str == ' ' || *str == '\t')
993 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 globals = PyEval_GetGlobals();
995 locals = PyEval_GetLocals();
996 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
997 if (PyDict_SetItemString(globals, "__builtins__",
998 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000999 return NULL;
1000 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001001 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001004}
1005
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001006static char input_doc[] =
1007"input([prompt]) -> value\n\
1008\n\
1009Equivalent to eval(raw_input(prompt)).";
1010
1011
Guido van Rossume8811f81997-02-14 15:48:05 +00001012static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001013builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001014{
1015 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001016 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001017 return NULL;
1018 Py_INCREF(s);
1019 PyString_InternInPlace(&s);
1020 return s;
1021}
1022
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001023static char intern_doc[] =
1024"intern(string) -> string\n\
1025\n\
1026``Intern'' the given string. This enters the string in the (global)\n\
1027table of interned strings whose purpose is to speed up dictionary lookups.\n\
1028Return the string itself or the previously interned string object with the\n\
1029same value.";
1030
1031
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001033builtin_iter(PyObject *self, PyObject *args)
1034{
1035 PyObject *v, *w = NULL;
1036
1037 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1038 return NULL;
1039 if (w == NULL)
1040 return PyObject_GetIter(v);
1041 if (!PyCallable_Check(v)) {
1042 PyErr_SetString(PyExc_TypeError,
1043 "iter(v, w): v must be callable");
1044 return NULL;
1045 }
1046 return PyCallIter_New(v, w);
1047}
1048
1049static char iter_doc[] =
1050"iter(collection) -> iterator\n\
1051iter(callable, sentinel) -> iterator\n\
1052\n\
1053Get an iterator from an object. In the first form, the argument must\n\
1054supply its own iterator, or be a sequence.\n\
1055In the second form, the callable is called until it returns the sentinel.";
1056
1057
1058static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001059builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001060{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001061 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001062 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001063
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001065 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001066 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001067 if (res < 0 && PyErr_Occurred())
1068 return NULL;
1069 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001070}
1071
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001072static char len_doc[] =
1073"len(object) -> integer\n\
1074\n\
1075Return the number of items of a sequence or mapping.";
1076
1077
Guido van Rossum79f25d91997-04-29 20:08:16 +00001078static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001079builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001080{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001081 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001082
Guido van Rossum09df08a1998-05-22 00:51:39 +00001083 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001084
Guido van Rossum09df08a1998-05-22 00:51:39 +00001085 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1086 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001087
Guido van Rossum09df08a1998-05-22 00:51:39 +00001088 /* This swapping of stop and start is to maintain similarity with
1089 range(). */
1090 if (stop == NULL) {
1091 stop = start;
1092 start = NULL;
1093 }
1094 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001095}
1096
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001097static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001098"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001099\n\
1100Create a slice object. This is used for slicing by the Numeric extensions.";
1101
1102
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001104builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001105{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001107
Guido van Rossum43713e52000-02-29 13:59:29 +00001108 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001109 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110 d = PyEval_GetLocals();
1111 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001112 return d;
1113}
1114
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001115static char locals_doc[] =
1116"locals() -> dictionary\n\
1117\n\
1118Return the dictionary containing the current scope's local variables.";
1119
1120
Guido van Rossum79f25d91997-04-29 20:08:16 +00001121static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001122min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001123{
Tim Petersc3074532001-05-03 07:00:32 +00001124 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001125
Guido van Rossum79f25d91997-04-29 20:08:16 +00001126 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001127 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001128 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001129 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001130
1131 it = PyObject_GetIter(v);
1132 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001133 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001134
1135 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001136 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001137 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001138 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001139 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001140 Py_XDECREF(w);
1141 Py_DECREF(it);
1142 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001143 }
Tim Petersc3074532001-05-03 07:00:32 +00001144 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001145 }
Tim Petersc3074532001-05-03 07:00:32 +00001146
Guido van Rossum2d951851994-08-29 12:52:16 +00001147 if (w == NULL)
1148 w = x;
1149 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001150 int cmp = PyObject_RichCompareBool(x, w, op);
1151 if (cmp > 0) {
1152 Py_DECREF(w);
1153 w = x;
1154 }
1155 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001156 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001157 Py_DECREF(w);
1158 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001159 return NULL;
1160 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001161 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001163 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001164 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001165 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001166 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001167 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001168 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001169 return w;
1170}
1171
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001173builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001174{
Guido van Rossum53451b32001-01-17 15:47:24 +00001175 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001176}
1177
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001178static char min_doc[] =
1179"min(sequence) -> value\n\
1180min(a, b, c, ...) -> value\n\
1181\n\
1182With a single sequence argument, return its smallest item.\n\
1183With two or more arguments, return the smallest argument.";
1184
1185
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001187builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001188{
Guido van Rossum53451b32001-01-17 15:47:24 +00001189 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001190}
1191
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001192static char max_doc[] =
1193"max(sequence) -> value\n\
1194max(a, b, c, ...) -> value\n\
1195\n\
1196With a single sequence argument, return its largest item.\n\
1197With two or more arguments, return the largest argument.";
1198
1199
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001201builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001202{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203 PyObject *v;
1204 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001205
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001207 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001208 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1209 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001210 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001211 "oct() argument can't be converted to oct");
1212 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001213 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001214 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001215}
1216
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001217static char oct_doc[] =
1218"oct(number) -> string\n\
1219\n\
1220Return the octal representation of an integer or long integer.";
1221
1222
Guido van Rossum79f25d91997-04-29 20:08:16 +00001223static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001224builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001225{
Mark Hammondef8b6542001-05-13 08:04:26 +00001226 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001227 char *mode = "r";
1228 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001230
Mark Hammondef8b6542001-05-13 08:04:26 +00001231 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1232 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001233 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001234 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001235 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001236 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001238 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001239}
1240
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001241static char open_doc[] =
1242"open(filename[, mode[, buffering]]) -> file object\n\
1243\n\
1244Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1245writing or appending. The file will be created if it doesn't exist\n\
1246when opened for writing or appending; it will be truncated when\n\
1247opened for writing. Add a 'b' to the mode for binary files.\n\
1248Add a '+' to the mode to allow simultaneous reading and writing.\n\
1249If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1250buffered, and larger numbers specify the buffer size.";
1251
1252
Guido van Rossum79f25d91997-04-29 20:08:16 +00001253static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001254builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001255{
Guido van Rossum09095f32000-03-10 23:00:52 +00001256 PyObject *obj;
1257 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001258 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001259
Guido van Rossum09095f32000-03-10 23:00:52 +00001260 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001262
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001263 if (PyString_Check(obj)) {
1264 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001265 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001266 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001267 return PyInt_FromLong(ord);
1268 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001269 } else if (PyUnicode_Check(obj)) {
1270 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001271 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001272 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001273 return PyInt_FromLong(ord);
1274 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001275 } else {
1276 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001277 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001278 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001279 return NULL;
1280 }
1281
Guido van Rossumad991772001-01-12 16:03:05 +00001282 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001283 "ord() expected a character, "
1284 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001285 size);
1286 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001287}
1288
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001289static char ord_doc[] =
1290"ord(c) -> integer\n\
1291\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001292Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001293
1294
Guido van Rossum79f25d91997-04-29 20:08:16 +00001295static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001296builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001297{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001298 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001299
Guido van Rossum79f25d91997-04-29 20:08:16 +00001300 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001301 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001302 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001303}
1304
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001305static char pow_doc[] =
1306"pow(x, y[, z]) -> number\n\
1307\n\
1308With two arguments, equivalent to x**y. With three arguments,\n\
1309equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1310
1311
Guido van Rossum124eff01999-02-23 16:11:01 +00001312/* Return number of items in range/xrange (lo, hi, step). step > 0
1313 * required. Return a value < 0 if & only if the true value is too
1314 * large to fit in a signed long.
1315 */
1316static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001317get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001318{
1319 /* -------------------------------------------------------------
1320 If lo >= hi, the range is empty.
1321 Else if n values are in the range, the last one is
1322 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1323 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1324 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1325 the RHS is non-negative and so truncation is the same as the
1326 floor. Letting M be the largest positive long, the worst case
1327 for the RHS numerator is hi=M, lo=-M-1, and then
1328 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1329 precision to compute the RHS exactly.
1330 ---------------------------------------------------------------*/
1331 long n = 0;
1332 if (lo < hi) {
1333 unsigned long uhi = (unsigned long)hi;
1334 unsigned long ulo = (unsigned long)lo;
1335 unsigned long diff = uhi - ulo - 1;
1336 n = (long)(diff / (unsigned long)step + 1);
1337 }
1338 return n;
1339}
1340
Guido van Rossum79f25d91997-04-29 20:08:16 +00001341static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001342builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001343{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001345 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001346 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001347
Guido van Rossum79f25d91997-04-29 20:08:16 +00001348 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001349
Guido van Rossum79f25d91997-04-29 20:08:16 +00001350 if (PyTuple_Size(args) <= 1) {
1351 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001352 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001353 &ihigh))
1354 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001355 }
1356 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001357 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001358 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001359 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001360 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001361 }
1362 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001363 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001364 return NULL;
1365 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001366 if (istep > 0)
1367 bign = get_len_of_range(ilow, ihigh, istep);
1368 else
1369 bign = get_len_of_range(ihigh, ilow, -istep);
1370 n = (int)bign;
1371 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001372 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001373 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001374 return NULL;
1375 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001377 if (v == NULL)
1378 return NULL;
1379 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001380 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001381 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001382 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001383 return NULL;
1384 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001385 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001386 ilow += istep;
1387 }
1388 return v;
1389}
1390
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001391static char range_doc[] =
1392"range([start,] stop[, step]) -> list of integers\n\
1393\n\
1394Return a list containing an arithmetic progression of integers.\n\
1395range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1396When step is given, it specifies the increment (or decrement).\n\
1397For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1398These are exactly the valid indices for a list of 4 elements.";
1399
1400
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001402builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001403{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001404 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001405 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001406
Guido van Rossum79f25d91997-04-29 20:08:16 +00001407 if (PyTuple_Size(args) <= 1) {
1408 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001409 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001410 &ihigh))
1411 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001412 }
1413 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001414 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001415 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001416 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001417 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001418 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001419 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001420 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001421 return NULL;
1422 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001423 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001424 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001425 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001426 n = get_len_of_range(ihigh, ilow, -istep);
1427 if (n < 0) {
1428 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001429 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001430 return NULL;
1431 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001432 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001433}
1434
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001435static char xrange_doc[] =
1436"xrange([start,] stop[, step]) -> xrange object\n\
1437\n\
1438Like range(), but instead of returning a list, returns an object that\n\
1439generates the numbers in the range on demand. This is slightly slower\n\
1440than range() but more memory efficient.";
1441
1442
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001444builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001445{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001446 PyObject *v = NULL;
1447 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001448
Guido van Rossum79f25d91997-04-29 20:08:16 +00001449 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001450 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001451 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1452 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001453 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001454 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001455 char *prompt;
1456 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001457 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001458 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001460 if (po == NULL)
1461 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001463 if (prompt == NULL)
1464 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001465 }
1466 else {
1467 po = NULL;
1468 prompt = "";
1469 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001470 s = PyOS_Readline(prompt);
1471 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001472 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001473 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001474 return NULL;
1475 }
1476 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001477 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001478 result = NULL;
1479 }
1480 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001481 size_t len = strlen(s);
1482 if (len > INT_MAX) {
1483 PyErr_SetString(PyExc_OverflowError, "input too long");
1484 result = NULL;
1485 }
1486 else {
1487 result = PyString_FromStringAndSize(s, (int)(len-1));
1488 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001489 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001490 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001491 return result;
1492 }
Guido van Rossum90933611991-06-07 16:10:43 +00001493 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001494 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001495 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001497 return NULL;
1498 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001499 if (Py_FlushLine() != 0 ||
1500 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001501 return NULL;
1502 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001503 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001504 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001506 return NULL;
1507 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001508 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001509}
1510
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001511static char raw_input_doc[] =
1512"raw_input([prompt]) -> string\n\
1513\n\
1514Read a string from standard input. The trailing newline is stripped.\n\
1515If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1516On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1517is printed without a trailing newline before reading.";
1518
1519
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001521builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001522{
Tim Peters15d81ef2001-05-04 04:39:21 +00001523 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001524
Guido van Rossum79f25d91997-04-29 20:08:16 +00001525 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001526 return NULL;
1527 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001528 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001529
Tim Peters15d81ef2001-05-04 04:39:21 +00001530 it = PyObject_GetIter(seq);
1531 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001533 "reduce() arg 2 must support iteration");
1534 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001535 return NULL;
1536 }
1537
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001539 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001540
Tim Peters15d81ef2001-05-04 04:39:21 +00001541 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001543
1544 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001545 Py_DECREF(args);
1546 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001547 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001548 }
1549
Tim Peters15d81ef2001-05-04 04:39:21 +00001550 op2 = PyIter_Next(it);
1551 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001552 if (PyErr_Occurred())
1553 goto Fail;
1554 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001555 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001556
Guido van Rossum2d951851994-08-29 12:52:16 +00001557 if (result == NULL)
1558 result = op2;
1559 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001560 PyTuple_SetItem(args, 0, result);
1561 PyTuple_SetItem(args, 1, op2);
1562 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001563 goto Fail;
1564 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001565 }
1566
Guido van Rossum79f25d91997-04-29 20:08:16 +00001567 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001568
Guido van Rossum2d951851994-08-29 12:52:16 +00001569 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001570 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001571 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001572
Tim Peters15d81ef2001-05-04 04:39:21 +00001573 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001574 return result;
1575
Guido van Rossum2d951851994-08-29 12:52:16 +00001576Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001577 Py_XDECREF(args);
1578 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001579 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001580 return NULL;
1581}
1582
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001583static char reduce_doc[] =
1584"reduce(function, sequence[, initial]) -> value\n\
1585\n\
1586Apply a function of two arguments cumulatively to the items of a sequence,\n\
1587from left to right, so as to reduce the sequence to a single value.\n\
1588For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1589((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1590of the sequence in the calculation, and serves as a default when the\n\
1591sequence is empty.";
1592
1593
Guido van Rossum79f25d91997-04-29 20:08:16 +00001594static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001595builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001596{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001597 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001598
Guido van Rossum79f25d91997-04-29 20:08:16 +00001599 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001600 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001601 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001602}
1603
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001604static char reload_doc[] =
1605"reload(module) -> module\n\
1606\n\
1607Reload the module. The module must have been successfully imported before.";
1608
1609
Guido van Rossum79f25d91997-04-29 20:08:16 +00001610static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001611builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001612{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001613 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001614
Guido van Rossum79f25d91997-04-29 20:08:16 +00001615 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001616 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001617 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001618}
1619
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001620static char repr_doc[] =
1621"repr(object) -> string\n\
1622\n\
1623Return the canonical string representation of the object.\n\
1624For most object types, eval(repr(object)) == object.";
1625
1626
Guido van Rossum79f25d91997-04-29 20:08:16 +00001627static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001628builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001629{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001630 double x;
1631 double f;
1632 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001633 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001634
Guido van Rossum79f25d91997-04-29 20:08:16 +00001635 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001636 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001637 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001638 i = abs(ndigits);
1639 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001640 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001641 if (ndigits < 0)
1642 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001643 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001644 x *= f;
1645 if (x >= 0.0)
1646 x = floor(x + 0.5);
1647 else
1648 x = ceil(x - 0.5);
1649 if (ndigits < 0)
1650 x *= f;
1651 else
1652 x /= f;
1653 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001654}
1655
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001656static char round_doc[] =
1657"round(number[, ndigits]) -> floating point number\n\
1658\n\
1659Round a number to a given precision in decimal digits (default 0 digits).\n\
1660This always returns a floating point number. Precision may be negative.";
1661
1662
Guido van Rossum79f25d91997-04-29 20:08:16 +00001663static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001664builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001665{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001666 PyObject *v = NULL;
1667 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001668
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001670 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001671 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001672 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001673 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001674 if (!PyErr_Occurred())
1675 PyErr_SetString(PyExc_SystemError,
1676 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001677 }
1678 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001679 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001680 }
1681 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001682 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001683 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001684 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001685 "vars() argument must have __dict__ attribute");
1686 return NULL;
1687 }
1688 }
1689 return d;
1690}
1691
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001692static char vars_doc[] =
1693"vars([object]) -> dictionary\n\
1694\n\
1695Without arguments, equivalent to locals().\n\
1696With an argument, equivalent to object.__dict__.";
1697
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001698static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001699builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001700{
1701 PyObject *inst;
1702 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001703 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001704
Guido van Rossum43713e52000-02-29 13:59:29 +00001705 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001706 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001707
Guido van Rossum823649d2001-03-21 18:40:58 +00001708 retval = PyObject_IsInstance(inst, cls);
1709 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001710 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001711 return PyInt_FromLong(retval);
1712}
1713
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001714static char isinstance_doc[] =
1715"isinstance(object, class-or-type) -> Boolean\n\
1716\n\
1717Return whether an object is an instance of a class or of a subclass thereof.\n\
1718With a type as second argument, return whether that is the object's type.";
1719
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001720
1721static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001722builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001723{
1724 PyObject *derived;
1725 PyObject *cls;
1726 int retval;
1727
Guido van Rossum43713e52000-02-29 13:59:29 +00001728 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001729 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001730
Guido van Rossum823649d2001-03-21 18:40:58 +00001731 retval = PyObject_IsSubclass(derived, cls);
1732 if (retval < 0)
1733 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001734 return PyInt_FromLong(retval);
1735}
1736
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001737static char issubclass_doc[] =
1738"issubclass(C, B) -> Boolean\n\
1739\n\
1740Return whether class C is a subclass (i.e., a derived class) of class B.";
1741
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001742
Barry Warsawbd599b52000-08-03 15:45:29 +00001743static PyObject*
1744builtin_zip(PyObject *self, PyObject *args)
1745{
1746 PyObject *ret;
1747 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001748 int i;
1749 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00001750
1751 if (itemsize < 1) {
1752 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001753 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001754 return NULL;
1755 }
1756 /* args must be a tuple */
1757 assert(PyTuple_Check(args));
1758
Tim Peters8572b4f2001-05-06 01:05:02 +00001759 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00001760 if ((ret = PyList_New(0)) == NULL)
1761 return NULL;
1762
Tim Peters8572b4f2001-05-06 01:05:02 +00001763 /* obtain iterators */
1764 itlist = PyTuple_New(itemsize);
1765 if (itlist == NULL)
1766 goto Fail_ret;
1767 for (i = 0; i < itemsize; ++i) {
1768 PyObject *item = PyTuple_GET_ITEM(args, i);
1769 PyObject *it = PyObject_GetIter(item);
1770 if (it == NULL) {
1771 if (PyErr_ExceptionMatches(PyExc_TypeError))
1772 PyErr_Format(PyExc_TypeError,
1773 "zip argument #%d must support iteration",
1774 i+1);
1775 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001776 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001777 PyTuple_SET_ITEM(itlist, i, it);
1778 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001779
Tim Peters8572b4f2001-05-06 01:05:02 +00001780 /* build result into ret list */
1781 for (;;) {
1782 int status;
1783 PyObject *next = PyTuple_New(itemsize);
1784 if (!next)
1785 goto Fail_ret_itlist;
1786
1787 for (i = 0; i < itemsize; i++) {
1788 PyObject *it = PyTuple_GET_ITEM(itlist, i);
1789 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001790 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001791 if (PyErr_Occurred()) {
1792 Py_DECREF(ret);
1793 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001794 }
1795 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001796 Py_DECREF(itlist);
1797 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00001798 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001799 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001800 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001801
1802 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00001803 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001804 if (status < 0)
1805 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001806 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001807
1808Fail_ret_itlist:
1809 Py_DECREF(itlist);
1810Fail_ret:
1811 Py_DECREF(ret);
1812 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001813}
1814
1815
1816static char zip_doc[] =
1817"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1818\n\
1819Return a list of tuples, where each tuple contains the i-th element\n\
1820from each of the argument sequences. The returned list is truncated\n\
1821in length to the length of the shortest argument sequence.";
1822
1823
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001825 {"__import__", builtin___import__, 1, import_doc},
1826 {"abs", builtin_abs, 1, abs_doc},
1827 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00001828 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001829 {"callable", builtin_callable, 1, callable_doc},
1830 {"chr", builtin_chr, 1, chr_doc},
1831 {"cmp", builtin_cmp, 1, cmp_doc},
1832 {"coerce", builtin_coerce, 1, coerce_doc},
1833 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001834 {"delattr", builtin_delattr, 1, delattr_doc},
1835 {"dir", builtin_dir, 1, dir_doc},
1836 {"divmod", builtin_divmod, 1, divmod_doc},
1837 {"eval", builtin_eval, 1, eval_doc},
1838 {"execfile", builtin_execfile, 1, execfile_doc},
1839 {"filter", builtin_filter, 1, filter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001840 {"getattr", builtin_getattr, 1, getattr_doc},
1841 {"globals", builtin_globals, 1, globals_doc},
1842 {"hasattr", builtin_hasattr, 1, hasattr_doc},
1843 {"hash", builtin_hash, 1, hash_doc},
1844 {"hex", builtin_hex, 1, hex_doc},
1845 {"id", builtin_id, 1, id_doc},
1846 {"input", builtin_input, 1, input_doc},
1847 {"intern", builtin_intern, 1, intern_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001848 {"isinstance", builtin_isinstance, 1, isinstance_doc},
1849 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001850 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001851 {"len", builtin_len, 1, len_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001852 {"locals", builtin_locals, 1, locals_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001853 {"map", builtin_map, 1, map_doc},
1854 {"max", builtin_max, 1, max_doc},
1855 {"min", builtin_min, 1, min_doc},
1856 {"oct", builtin_oct, 1, oct_doc},
1857 {"open", builtin_open, 1, open_doc},
1858 {"ord", builtin_ord, 1, ord_doc},
1859 {"pow", builtin_pow, 1, pow_doc},
1860 {"range", builtin_range, 1, range_doc},
1861 {"raw_input", builtin_raw_input, 1, raw_input_doc},
1862 {"reduce", builtin_reduce, 1, reduce_doc},
1863 {"reload", builtin_reload, 1, reload_doc},
1864 {"repr", builtin_repr, 1, repr_doc},
1865 {"round", builtin_round, 1, round_doc},
1866 {"setattr", builtin_setattr, 1, setattr_doc},
1867 {"slice", builtin_slice, 1, slice_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00001868 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001869 {"vars", builtin_vars, 1, vars_doc},
1870 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00001871 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001872 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001873};
1874
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001875static char builtin_doc[] =
1876"Built-in functions, exceptions, and other objects.\n\
1877\n\
1878Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
1879
Guido van Rossum25ce5661997-08-02 03:10:38 +00001880PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001881_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001882{
Fred Drake5550de32000-06-20 04:54:19 +00001883 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001884 mod = Py_InitModule4("__builtin__", builtin_methods,
1885 builtin_doc, (PyObject *)NULL,
1886 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001887 if (mod == NULL)
1888 return NULL;
1889 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001890 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
1891 return NULL;
1892 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
1893 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001894 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00001895 Py_NotImplemented) < 0)
1896 return NULL;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001897 if (PyDict_SetItemString(dict, "classmethod",
1898 (PyObject *) &PyClassMethod_Type) < 0)
1899 return NULL;
1900#ifndef WITHOUT_COMPLEX
1901 if (PyDict_SetItemString(dict, "complex",
1902 (PyObject *) &PyComplex_Type) < 0)
1903 return NULL;
1904#endif
1905 if (PyDict_SetItemString(dict, "dictionary",
1906 (PyObject *) &PyDict_Type) < 0)
1907 return NULL;
1908 if (PyDict_SetItemString(dict, "float",
1909 (PyObject *) &PyFloat_Type) < 0)
1910 return NULL;
1911 if (PyDict_SetItemString(dict, "int", (PyObject *) &PyInt_Type) < 0)
1912 return NULL;
1913 if (PyDict_SetItemString(dict, "list", (PyObject *) &PyList_Type) < 0)
1914 return NULL;
1915 if (PyDict_SetItemString(dict, "long", (PyObject *) &PyLong_Type) < 0)
1916 return NULL;
1917 if (PyDict_SetItemString(dict, "object",
1918 (PyObject *) &PyBaseObject_Type) < 0)
1919 return NULL;
1920 if (PyDict_SetItemString(dict, "staticmethod",
1921 (PyObject *) &PyStaticMethod_Type) < 0)
1922 return NULL;
1923 if (PyDict_SetItemString(dict, "str", (PyObject *) &PyString_Type) < 0)
1924 return NULL;
1925 if (PyDict_SetItemString(dict, "tuple",
1926 (PyObject *) &PyTuple_Type) < 0)
1927 return NULL;
1928 if (PyDict_SetItemString(dict, "type", (PyObject *) &PyType_Type) < 0)
1929 return NULL;
1930 if (PyDict_SetItemString(dict, "unicode",
1931 (PyObject *) &PyUnicode_Type) < 0)
1932 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001933 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
1934 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1935 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001936 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001937 }
1938 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001939
Guido van Rossum25ce5661997-08-02 03:10:38 +00001940 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001941}
1942
Guido van Rossume77a7571993-11-03 15:01:26 +00001943/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001944
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001946filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001947{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001949 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001950 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001951
Guido van Rossumb7b45621995-08-04 04:07:45 +00001952 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001954 return tuple;
1955 }
1956
Guido van Rossum79f25d91997-04-29 20:08:16 +00001957 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001958 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001959
Guido van Rossum12d12c51993-10-26 17:58:25 +00001960 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001962 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001963
Guido van Rossum79f25d91997-04-29 20:08:16 +00001964 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001965 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001966 if (func == Py_None) {
1967 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001968 good = item;
1969 }
1970 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001972 if (arg == NULL)
1973 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 good = PyEval_CallObject(func, arg);
1975 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001976 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001977 goto Fail_1;
1978 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 ok = PyObject_IsTrue(good);
1980 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001981 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982 Py_INCREF(item);
1983 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001984 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001985 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001986 }
1987
Tim Peters4324aa32001-05-28 22:30:08 +00001988 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001989 return NULL;
1990
Guido van Rossum12d12c51993-10-26 17:58:25 +00001991 return result;
1992
Guido van Rossum12d12c51993-10-26 17:58:25 +00001993Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001995 return NULL;
1996}
1997
1998
Guido van Rossume77a7571993-11-03 15:01:26 +00001999/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002000
Guido van Rossum79f25d91997-04-29 20:08:16 +00002001static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002002filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002003{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002004 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002005 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002006 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002007
Guido van Rossum79f25d91997-04-29 20:08:16 +00002008 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002009 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002010 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002011 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002012 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002013 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002014 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002015
Guido van Rossum12d12c51993-10-26 17:58:25 +00002016 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002017 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002018 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002019
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002020 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2021 if (item == NULL)
2022 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002023 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002024 if (arg == NULL) {
2025 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002026 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002027 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002028 good = PyEval_CallObject(func, arg);
2029 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002030 if (good == NULL) {
2031 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002032 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002033 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002034 ok = PyObject_IsTrue(good);
2035 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002036 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002037 PyString_AS_STRING((PyStringObject *)result)[j++] =
2038 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002039 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002040 }
2041
Guido van Rossum79f25d91997-04-29 20:08:16 +00002042 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002043 return NULL;
2044
Guido van Rossum12d12c51993-10-26 17:58:25 +00002045 return result;
2046
Guido van Rossum12d12c51993-10-26 17:58:25 +00002047Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002048 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002049 return NULL;
2050}