blob: fa6816279dfd5d3052bf4a5d5dd629eddadbc7d1 [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;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000571 int exists;
572 struct stat s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000576 &PyDict_Type, &globals,
577 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000578 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 if (globals == Py_None) {
580 globals = PyEval_GetGlobals();
581 if (locals == Py_None)
582 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000583 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000585 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
587 if (PyDict_SetItemString(globals, "__builtins__",
588 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000589 return NULL;
590 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000591
592 exists = 0;
593 /* Test for existence or directory. */
594 if (!stat(filename, &s)) {
Martin v. Löwisf9836ba2001-08-08 10:28:06 +0000595 if (S_ISDIR(s.st_mode))
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000596 errno = EISDIR;
597 else
598 exists = 1;
599 }
600
601 if (exists) {
602 Py_BEGIN_ALLOW_THREADS
603 fp = fopen(filename, "r");
604 Py_END_ALLOW_THREADS
605
606 if (fp == NULL) {
607 exists = 0;
608 }
609 }
610
611 if (!exists) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000613 return NULL;
614 }
Tim Peters5ba58662001-07-16 02:29:45 +0000615 cf.cf_flags = 0;
616 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000617 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000618 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000619 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000620 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000621 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000623}
624
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000625static char execfile_doc[] =
626"execfile(filename[, globals[, locals]])\n\
627\n\
628Read and execute a Python script from a file.\n\
629The globals and locals are dictionaries, defaulting to the current\n\
630globals and locals. If only globals is given, locals defaults to it.";
631
632
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000634builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000635{
Guido van Rossum950ff291998-06-29 13:38:57 +0000636 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000637 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000638
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000639 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000640 return NULL;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000641 if (PyUnicode_Check(name)) {
642 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
643 if (name == NULL)
644 return NULL;
645 }
646
647 if (!PyString_Check(name)) {
648 PyErr_SetString(PyExc_TypeError,
649 "attribute name must be string");
650 return NULL;
651 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000652 result = PyObject_GetAttr(v, name);
653 if (result == NULL && dflt != NULL) {
654 PyErr_Clear();
655 Py_INCREF(dflt);
656 result = dflt;
657 }
658 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000659}
660
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000661static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000662"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000663\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000664Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
665When a default argument is given, it is returned when the attribute doesn't\n\
666exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000667
668
Guido van Rossum79f25d91997-04-29 20:08:16 +0000669static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000670builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000671{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000672 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000673
Guido van Rossum43713e52000-02-29 13:59:29 +0000674 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000675 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000676 d = PyEval_GetGlobals();
677 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000678 return d;
679}
680
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000681static char globals_doc[] =
682"globals() -> dictionary\n\
683\n\
684Return the dictionary containing the current scope's global variables.";
685
686
Guido van Rossum79f25d91997-04-29 20:08:16 +0000687static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000688builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000689{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000690 PyObject *v;
691 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000692
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000693 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000694 return NULL;
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000695 if (PyUnicode_Check(name)) {
696 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
697 if (name == NULL)
698 return NULL;
699 }
700
701 if (!PyString_Check(name)) {
702 PyErr_SetString(PyExc_TypeError,
703 "attribute name must be string");
704 return NULL;
705 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000707 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000709 Py_INCREF(Py_False);
710 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000711 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000713 Py_INCREF(Py_True);
714 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000715}
716
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000717static char hasattr_doc[] =
718"hasattr(object, name) -> Boolean\n\
719\n\
720Return whether the object has an attribute with the given name.\n\
721(This is done by calling getattr(object, name) and catching exceptions.)";
722
723
Guido van Rossum79f25d91997-04-29 20:08:16 +0000724static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000725builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000726{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000730 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000731 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000732}
733
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000734static char id_doc[] =
735"id(object) -> integer\n\
736\n\
737Return the identity of an object. This is guaranteed to be unique among\n\
738simultaneously existing objects. (Hint: it's the object's memory address.)";
739
740
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000742builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000743{
744 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000745 PyObject *it; /* the iterator object */
746 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000747 } sequence;
748
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000750 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000752 register int i, j;
753
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 PyErr_SetString(PyExc_TypeError,
757 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000758 return NULL;
759 }
760
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000763
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000764 if (func == Py_None && n == 1) {
765 /* map(None, S) is the same as list(S). */
766 return PySequence_List(PyTuple_GetItem(args, 1));
767 }
768
Tim Peters4e9afdc2001-05-03 23:54:49 +0000769 /* Get space for sequence descriptors. Must NULL out the iterator
770 * pointers so that jumping to Fail_2 later doesn't see trash.
771 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
773 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000774 return NULL;
775 }
776 for (i = 0; i < n; ++i) {
777 seqs[i].it = (PyObject*)NULL;
778 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000779 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000780
Tim Peters4e9afdc2001-05-03 23:54:49 +0000781 /* Do a first pass to obtain iterators for the arguments, and set len
782 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000783 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 len = 0;
785 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
786 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000787 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000788
Tim Peters4e9afdc2001-05-03 23:54:49 +0000789 /* Get iterator. */
790 curseq = PyTuple_GetItem(args, i+1);
791 sqp->it = PyObject_GetIter(curseq);
792 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000793 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000794 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000795 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000796 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000798 goto Fail_2;
799 }
800
Tim Peters4e9afdc2001-05-03 23:54:49 +0000801 /* Update len. */
802 curlen = -1; /* unknown */
803 if (PySequence_Check(curseq) &&
804 curseq->ob_type->tp_as_sequence->sq_length) {
805 curlen = PySequence_Size(curseq);
806 if (curlen < 0)
807 PyErr_Clear();
808 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000809 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000810 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000811 if (curlen > len)
812 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000813 }
814
Tim Peters4e9afdc2001-05-03 23:54:49 +0000815 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000817 goto Fail_2;
818
Tim Peters4e9afdc2001-05-03 23:54:49 +0000819 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000820 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000821 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000822 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000823
Guido van Rossum79f25d91997-04-29 20:08:16 +0000824 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000825 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000826 else if ((alist = PyTuple_New(n)) == NULL)
827 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000828
829 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000830 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000831 Py_INCREF(Py_None);
832 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000833 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000834 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000835 item = PyIter_Next(sqp->it);
836 if (item)
837 ++numactive;
838 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000839 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000840 Py_XDECREF(alist);
841 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000842 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000843 Py_INCREF(Py_None);
844 item = Py_None;
845 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000846 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000847 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000848 if (alist)
849 PyTuple_SET_ITEM(alist, j, item);
850 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000851 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000852 }
853
Guido van Rossum32120311995-07-10 13:52:21 +0000854 if (!alist)
855 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000856
Tim Peters4e9afdc2001-05-03 23:54:49 +0000857 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000859 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000860 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000861
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000863 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000864 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 value = PyEval_CallObject(func, alist);
866 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000867 if (value == NULL)
868 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000869 }
870 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000871 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000872 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000873 if (status < 0)
874 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000875 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000876 else if (PyList_SetItem(result, i, value) < 0)
877 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000878 }
879
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000880 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
881 goto Fail_1;
882
Tim Peters4e9afdc2001-05-03 23:54:49 +0000883 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000884
Guido van Rossum12d12c51993-10-26 17:58:25 +0000885Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000887Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000888 result = NULL;
889Succeed:
890 assert(seqs);
891 for (i = 0; i < n; ++i)
892 Py_XDECREF(seqs[i].it);
893 PyMem_DEL(seqs);
894 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000895}
896
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000897static char map_doc[] =
898"map(function, sequence[, sequence, ...]) -> list\n\
899\n\
900Return a list of the results of applying the function to the items of\n\
901the argument sequence(s). If more than one sequence is given, the\n\
902function is called with an argument list consisting of the corresponding\n\
903item of each sequence, substituting None for missing values when not all\n\
904sequences have the same length. If the function is None, return a list of\n\
905the items of the sequence (or a list of tuples if more than one sequence).";
906
907
Guido van Rossum79f25d91997-04-29 20:08:16 +0000908static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000909builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000910{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 PyObject *v;
912 PyObject *name;
913 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000914
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000915 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000916 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000917 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000918 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000919 Py_INCREF(Py_None);
920 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000921}
922
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923static char setattr_doc[] =
924"setattr(object, name, value)\n\
925\n\
926Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
927``x.y = v''.";
928
929
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000931builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000932{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000933 PyObject *v;
934 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000935
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000936 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000937 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000939 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 Py_INCREF(Py_None);
941 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000942}
943
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000944static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +0000945"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000946\n\
947Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
948``del x.y''.";
949
950
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000952builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000953{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000954 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000955 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000956
Guido van Rossum79f25d91997-04-29 20:08:16 +0000957 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000958 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000960 if (x == -1)
961 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000962 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000963}
964
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000965static char hash_doc[] =
966"hash(object) -> integer\n\
967\n\
968Return a hash value for the object. Two objects with the same value have\n\
969the same hash value. The reverse is not necessarily true, but likely.";
970
971
Guido van Rossum79f25d91997-04-29 20:08:16 +0000972static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000973builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000974{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000975 PyObject *v;
976 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000977
Guido van Rossum79f25d91997-04-29 20:08:16 +0000978 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000979 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +0000980
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000981 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000982 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000984 "hex() argument can't be converted to hex");
985 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000986 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000987 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000988}
989
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000990static char hex_doc[] =
991"hex(number) -> string\n\
992\n\
993Return the hexadecimal representation of an integer or long integer.";
994
995
Tim Petersdbd9ba62000-07-09 03:09:57 +0000996static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000997
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000999builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001000{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001001 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001002 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003 PyObject *res;
1004 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001005
1006 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001007 if (line == NULL)
1008 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001009 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001010 return NULL;
1011 while (*str == ' ' || *str == '\t')
1012 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 globals = PyEval_GetGlobals();
1014 locals = PyEval_GetLocals();
1015 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1016 if (PyDict_SetItemString(globals, "__builtins__",
1017 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001018 return NULL;
1019 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001020 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001021 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001022 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001023}
1024
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001025static char input_doc[] =
1026"input([prompt]) -> value\n\
1027\n\
1028Equivalent to eval(raw_input(prompt)).";
1029
1030
Guido van Rossume8811f81997-02-14 15:48:05 +00001031static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001032builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001033{
1034 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001035 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001036 return NULL;
1037 Py_INCREF(s);
1038 PyString_InternInPlace(&s);
1039 return s;
1040}
1041
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001042static char intern_doc[] =
1043"intern(string) -> string\n\
1044\n\
1045``Intern'' the given string. This enters the string in the (global)\n\
1046table of interned strings whose purpose is to speed up dictionary lookups.\n\
1047Return the string itself or the previously interned string object with the\n\
1048same value.";
1049
1050
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001052builtin_iter(PyObject *self, PyObject *args)
1053{
1054 PyObject *v, *w = NULL;
1055
1056 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1057 return NULL;
1058 if (w == NULL)
1059 return PyObject_GetIter(v);
1060 if (!PyCallable_Check(v)) {
1061 PyErr_SetString(PyExc_TypeError,
1062 "iter(v, w): v must be callable");
1063 return NULL;
1064 }
1065 return PyCallIter_New(v, w);
1066}
1067
1068static char iter_doc[] =
1069"iter(collection) -> iterator\n\
1070iter(callable, sentinel) -> iterator\n\
1071\n\
1072Get an iterator from an object. In the first form, the argument must\n\
1073supply its own iterator, or be a sequence.\n\
1074In the second form, the callable is called until it returns the sentinel.";
1075
1076
1077static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001078builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001079{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001081 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001082
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001084 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001085 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001086 if (res < 0 && PyErr_Occurred())
1087 return NULL;
1088 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001089}
1090
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091static char len_doc[] =
1092"len(object) -> integer\n\
1093\n\
1094Return the number of items of a sequence or mapping.";
1095
1096
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001098builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001099{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001100 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001101
Guido van Rossum09df08a1998-05-22 00:51:39 +00001102 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001103
Guido van Rossum09df08a1998-05-22 00:51:39 +00001104 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1105 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001106
Guido van Rossum09df08a1998-05-22 00:51:39 +00001107 /* This swapping of stop and start is to maintain similarity with
1108 range(). */
1109 if (stop == NULL) {
1110 stop = start;
1111 start = NULL;
1112 }
1113 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001114}
1115
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001116static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001117"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001118\n\
1119Create a slice object. This is used for slicing by the Numeric extensions.";
1120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001123builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001124{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001126
Guido van Rossum43713e52000-02-29 13:59:29 +00001127 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001128 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 d = PyEval_GetLocals();
1130 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001131 return d;
1132}
1133
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001134static char locals_doc[] =
1135"locals() -> dictionary\n\
1136\n\
1137Return the dictionary containing the current scope's local variables.";
1138
1139
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001141min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001142{
Tim Petersc3074532001-05-03 07:00:32 +00001143 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001144
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001146 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001148 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001149
1150 it = PyObject_GetIter(v);
1151 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001152 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001153
1154 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001155 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001156 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001157 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001158 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001159 Py_XDECREF(w);
1160 Py_DECREF(it);
1161 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001162 }
Tim Petersc3074532001-05-03 07:00:32 +00001163 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001164 }
Tim Petersc3074532001-05-03 07:00:32 +00001165
Guido van Rossum2d951851994-08-29 12:52:16 +00001166 if (w == NULL)
1167 w = x;
1168 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001169 int cmp = PyObject_RichCompareBool(x, w, op);
1170 if (cmp > 0) {
1171 Py_DECREF(w);
1172 w = x;
1173 }
1174 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001175 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001176 Py_DECREF(w);
1177 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001178 return NULL;
1179 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001180 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001182 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001183 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001184 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001186 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001187 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001188 return w;
1189}
1190
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001192builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001193{
Guido van Rossum53451b32001-01-17 15:47:24 +00001194 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001195}
1196
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001197static char min_doc[] =
1198"min(sequence) -> value\n\
1199min(a, b, c, ...) -> value\n\
1200\n\
1201With a single sequence argument, return its smallest item.\n\
1202With two or more arguments, return the smallest argument.";
1203
1204
Guido van Rossum79f25d91997-04-29 20:08:16 +00001205static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001206builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001207{
Guido van Rossum53451b32001-01-17 15:47:24 +00001208 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001209}
1210
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001211static char max_doc[] =
1212"max(sequence) -> value\n\
1213max(a, b, c, ...) -> value\n\
1214\n\
1215With a single sequence argument, return its largest item.\n\
1216With two or more arguments, return the largest argument.";
1217
1218
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001220builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001221{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 PyObject *v;
1223 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001224
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001226 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001227 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1228 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001230 "oct() argument can't be converted to oct");
1231 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001232 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001233 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001234}
1235
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001236static char oct_doc[] =
1237"oct(number) -> string\n\
1238\n\
1239Return the octal representation of an integer or long integer.";
1240
1241
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001243builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001244{
Mark Hammondef8b6542001-05-13 08:04:26 +00001245 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001246 char *mode = "r";
1247 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001248 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001249
Mark Hammondef8b6542001-05-13 08:04:26 +00001250 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1251 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001252 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001253 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001254 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001255 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001256 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001257 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001258}
1259
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001260static char open_doc[] =
1261"open(filename[, mode[, buffering]]) -> file object\n\
1262\n\
1263Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1264writing or appending. The file will be created if it doesn't exist\n\
1265when opened for writing or appending; it will be truncated when\n\
1266opened for writing. Add a 'b' to the mode for binary files.\n\
1267Add a '+' to the mode to allow simultaneous reading and writing.\n\
1268If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1269buffered, and larger numbers specify the buffer size.";
1270
1271
Guido van Rossum79f25d91997-04-29 20:08:16 +00001272static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001273builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001274{
Guido van Rossum09095f32000-03-10 23:00:52 +00001275 PyObject *obj;
1276 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001277 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001278
Guido van Rossum09095f32000-03-10 23:00:52 +00001279 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001280 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001281
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001282 if (PyString_Check(obj)) {
1283 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001284 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001285 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001286 return PyInt_FromLong(ord);
1287 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001288 } else if (PyUnicode_Check(obj)) {
1289 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001290 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001291 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001292 return PyInt_FromLong(ord);
1293 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001294 } else {
1295 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001296 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001297 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001298 return NULL;
1299 }
1300
Guido van Rossumad991772001-01-12 16:03:05 +00001301 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001302 "ord() expected a character, "
1303 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001304 size);
1305 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001306}
1307
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001308static char ord_doc[] =
1309"ord(c) -> integer\n\
1310\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001311Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001312
1313
Guido van Rossum79f25d91997-04-29 20:08:16 +00001314static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001315builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001316{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001317 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001318
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001320 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001321 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001322}
1323
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001324static char pow_doc[] =
1325"pow(x, y[, z]) -> number\n\
1326\n\
1327With two arguments, equivalent to x**y. With three arguments,\n\
1328equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1329
1330
Guido van Rossum124eff01999-02-23 16:11:01 +00001331/* Return number of items in range/xrange (lo, hi, step). step > 0
1332 * required. Return a value < 0 if & only if the true value is too
1333 * large to fit in a signed long.
1334 */
1335static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001336get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001337{
1338 /* -------------------------------------------------------------
1339 If lo >= hi, the range is empty.
1340 Else if n values are in the range, the last one is
1341 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1342 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1343 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1344 the RHS is non-negative and so truncation is the same as the
1345 floor. Letting M be the largest positive long, the worst case
1346 for the RHS numerator is hi=M, lo=-M-1, and then
1347 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1348 precision to compute the RHS exactly.
1349 ---------------------------------------------------------------*/
1350 long n = 0;
1351 if (lo < hi) {
1352 unsigned long uhi = (unsigned long)hi;
1353 unsigned long ulo = (unsigned long)lo;
1354 unsigned long diff = uhi - ulo - 1;
1355 n = (long)(diff / (unsigned long)step + 1);
1356 }
1357 return n;
1358}
1359
Guido van Rossum79f25d91997-04-29 20:08:16 +00001360static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001361builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001362{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001363 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001364 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001365 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001366
Guido van Rossum79f25d91997-04-29 20:08:16 +00001367 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001368
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369 if (PyTuple_Size(args) <= 1) {
1370 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001371 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001372 &ihigh))
1373 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001374 }
1375 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001377 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001378 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001379 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001380 }
1381 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001382 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001383 return NULL;
1384 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001385 if (istep > 0)
1386 bign = get_len_of_range(ilow, ihigh, istep);
1387 else
1388 bign = get_len_of_range(ihigh, ilow, -istep);
1389 n = (int)bign;
1390 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001391 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001392 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001393 return NULL;
1394 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001395 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001396 if (v == NULL)
1397 return NULL;
1398 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001399 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001400 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001402 return NULL;
1403 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001404 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001405 ilow += istep;
1406 }
1407 return v;
1408}
1409
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001410static char range_doc[] =
1411"range([start,] stop[, step]) -> list of integers\n\
1412\n\
1413Return a list containing an arithmetic progression of integers.\n\
1414range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1415When step is given, it specifies the increment (or decrement).\n\
1416For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1417These are exactly the valid indices for a list of 4 elements.";
1418
1419
Guido van Rossum79f25d91997-04-29 20:08:16 +00001420static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001421builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001422{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001423 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001424 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001425
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426 if (PyTuple_Size(args) <= 1) {
1427 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001428 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001429 &ihigh))
1430 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001431 }
1432 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001433 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001434 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001435 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001436 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001437 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001438 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001439 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001440 return NULL;
1441 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001442 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001443 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001444 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001445 n = get_len_of_range(ihigh, ilow, -istep);
1446 if (n < 0) {
1447 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001448 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001449 return NULL;
1450 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001451 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001452}
1453
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001454static char xrange_doc[] =
1455"xrange([start,] stop[, step]) -> xrange object\n\
1456\n\
1457Like range(), but instead of returning a list, returns an object that\n\
1458generates the numbers in the range on demand. This is slightly slower\n\
1459than range() but more memory efficient.";
1460
1461
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001463builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001464{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001465 PyObject *v = NULL;
1466 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001467
Guido van Rossum79f25d91997-04-29 20:08:16 +00001468 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001469 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001470 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1471 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001472 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001473 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001474 char *prompt;
1475 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001476 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001477 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001478 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001479 if (po == NULL)
1480 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001482 if (prompt == NULL)
1483 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001484 }
1485 else {
1486 po = NULL;
1487 prompt = "";
1488 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001489 s = PyOS_Readline(prompt);
1490 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001491 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001492 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001493 return NULL;
1494 }
1495 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001497 result = NULL;
1498 }
1499 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001500 size_t len = strlen(s);
1501 if (len > INT_MAX) {
1502 PyErr_SetString(PyExc_OverflowError, "input too long");
1503 result = NULL;
1504 }
1505 else {
1506 result = PyString_FromStringAndSize(s, (int)(len-1));
1507 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001508 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001509 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001510 return result;
1511 }
Guido van Rossum90933611991-06-07 16:10:43 +00001512 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001513 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001514 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001515 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001516 return NULL;
1517 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001518 if (Py_FlushLine() != 0 ||
1519 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001520 return NULL;
1521 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001522 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001523 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001524 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001525 return NULL;
1526 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001527 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001528}
1529
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001530static char raw_input_doc[] =
1531"raw_input([prompt]) -> string\n\
1532\n\
1533Read a string from standard input. The trailing newline is stripped.\n\
1534If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1535On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1536is printed without a trailing newline before reading.";
1537
1538
Guido van Rossum79f25d91997-04-29 20:08:16 +00001539static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001540builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001541{
Tim Peters15d81ef2001-05-04 04:39:21 +00001542 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001543
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001545 return NULL;
1546 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001547 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001548
Tim Peters15d81ef2001-05-04 04:39:21 +00001549 it = PyObject_GetIter(seq);
1550 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001551 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001552 "reduce() arg 2 must support iteration");
1553 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001554 return NULL;
1555 }
1556
Guido van Rossum79f25d91997-04-29 20:08:16 +00001557 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001558 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001559
Tim Peters15d81ef2001-05-04 04:39:21 +00001560 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001561 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001562
1563 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001564 Py_DECREF(args);
1565 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001566 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001567 }
1568
Tim Peters15d81ef2001-05-04 04:39:21 +00001569 op2 = PyIter_Next(it);
1570 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001571 if (PyErr_Occurred())
1572 goto Fail;
1573 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001574 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001575
Guido van Rossum2d951851994-08-29 12:52:16 +00001576 if (result == NULL)
1577 result = op2;
1578 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001579 PyTuple_SetItem(args, 0, result);
1580 PyTuple_SetItem(args, 1, op2);
1581 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001582 goto Fail;
1583 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001584 }
1585
Guido van Rossum79f25d91997-04-29 20:08:16 +00001586 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001587
Guido van Rossum2d951851994-08-29 12:52:16 +00001588 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001589 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001590 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001591
Tim Peters15d81ef2001-05-04 04:39:21 +00001592 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001593 return result;
1594
Guido van Rossum2d951851994-08-29 12:52:16 +00001595Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001596 Py_XDECREF(args);
1597 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001598 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001599 return NULL;
1600}
1601
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001602static char reduce_doc[] =
1603"reduce(function, sequence[, initial]) -> value\n\
1604\n\
1605Apply a function of two arguments cumulatively to the items of a sequence,\n\
1606from left to right, so as to reduce the sequence to a single value.\n\
1607For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1608((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1609of the sequence in the calculation, and serves as a default when the\n\
1610sequence is empty.";
1611
1612
Guido van Rossum79f25d91997-04-29 20:08:16 +00001613static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001614builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001615{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001616 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001617
Guido van Rossum79f25d91997-04-29 20:08:16 +00001618 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001619 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001620 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001621}
1622
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001623static char reload_doc[] =
1624"reload(module) -> module\n\
1625\n\
1626Reload the module. The module must have been successfully imported before.";
1627
1628
Guido van Rossum79f25d91997-04-29 20:08:16 +00001629static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001630builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001631{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001632 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001633
Guido van Rossum79f25d91997-04-29 20:08:16 +00001634 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001635 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001636 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001637}
1638
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001639static char repr_doc[] =
1640"repr(object) -> string\n\
1641\n\
1642Return the canonical string representation of the object.\n\
1643For most object types, eval(repr(object)) == object.";
1644
1645
Guido van Rossum79f25d91997-04-29 20:08:16 +00001646static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001647builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001648{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001649 double x;
1650 double f;
1651 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001652 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001653
Guido van Rossum79f25d91997-04-29 20:08:16 +00001654 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001655 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001656 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001657 i = abs(ndigits);
1658 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001659 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001660 if (ndigits < 0)
1661 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001662 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001663 x *= f;
1664 if (x >= 0.0)
1665 x = floor(x + 0.5);
1666 else
1667 x = ceil(x - 0.5);
1668 if (ndigits < 0)
1669 x *= f;
1670 else
1671 x /= f;
1672 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001673}
1674
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001675static char round_doc[] =
1676"round(number[, ndigits]) -> floating point number\n\
1677\n\
1678Round a number to a given precision in decimal digits (default 0 digits).\n\
1679This always returns a floating point number. Precision may be negative.";
1680
1681
Guido van Rossum79f25d91997-04-29 20:08:16 +00001682static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001683builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001684{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 PyObject *v = NULL;
1686 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687
Guido van Rossum79f25d91997-04-29 20:08:16 +00001688 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001689 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001690 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001691 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001692 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001693 if (!PyErr_Occurred())
1694 PyErr_SetString(PyExc_SystemError,
1695 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001696 }
1697 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001698 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001699 }
1700 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001702 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001703 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001704 "vars() argument must have __dict__ attribute");
1705 return NULL;
1706 }
1707 }
1708 return d;
1709}
1710
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001711static char vars_doc[] =
1712"vars([object]) -> dictionary\n\
1713\n\
1714Without arguments, equivalent to locals().\n\
1715With an argument, equivalent to object.__dict__.";
1716
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001717static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001718builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001719{
1720 PyObject *inst;
1721 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001722 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001723
Guido van Rossum43713e52000-02-29 13:59:29 +00001724 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001725 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001726
Guido van Rossum823649d2001-03-21 18:40:58 +00001727 retval = PyObject_IsInstance(inst, cls);
1728 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001729 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001730 return PyInt_FromLong(retval);
1731}
1732
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001733static char isinstance_doc[] =
1734"isinstance(object, class-or-type) -> Boolean\n\
1735\n\
1736Return whether an object is an instance of a class or of a subclass thereof.\n\
1737With a type as second argument, return whether that is the object's type.";
1738
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001739
1740static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001741builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001742{
1743 PyObject *derived;
1744 PyObject *cls;
1745 int retval;
1746
Guido van Rossum43713e52000-02-29 13:59:29 +00001747 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001748 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001749
Guido van Rossum823649d2001-03-21 18:40:58 +00001750 retval = PyObject_IsSubclass(derived, cls);
1751 if (retval < 0)
1752 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001753 return PyInt_FromLong(retval);
1754}
1755
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001756static char issubclass_doc[] =
1757"issubclass(C, B) -> Boolean\n\
1758\n\
1759Return whether class C is a subclass (i.e., a derived class) of class B.";
1760
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001761
Barry Warsawbd599b52000-08-03 15:45:29 +00001762static PyObject*
1763builtin_zip(PyObject *self, PyObject *args)
1764{
1765 PyObject *ret;
1766 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001767 int i;
1768 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00001769
1770 if (itemsize < 1) {
1771 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001772 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001773 return NULL;
1774 }
1775 /* args must be a tuple */
1776 assert(PyTuple_Check(args));
1777
Tim Peters8572b4f2001-05-06 01:05:02 +00001778 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00001779 if ((ret = PyList_New(0)) == NULL)
1780 return NULL;
1781
Tim Peters8572b4f2001-05-06 01:05:02 +00001782 /* obtain iterators */
1783 itlist = PyTuple_New(itemsize);
1784 if (itlist == NULL)
1785 goto Fail_ret;
1786 for (i = 0; i < itemsize; ++i) {
1787 PyObject *item = PyTuple_GET_ITEM(args, i);
1788 PyObject *it = PyObject_GetIter(item);
1789 if (it == NULL) {
1790 if (PyErr_ExceptionMatches(PyExc_TypeError))
1791 PyErr_Format(PyExc_TypeError,
1792 "zip argument #%d must support iteration",
1793 i+1);
1794 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001795 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001796 PyTuple_SET_ITEM(itlist, i, it);
1797 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001798
Tim Peters8572b4f2001-05-06 01:05:02 +00001799 /* build result into ret list */
1800 for (;;) {
1801 int status;
1802 PyObject *next = PyTuple_New(itemsize);
1803 if (!next)
1804 goto Fail_ret_itlist;
1805
1806 for (i = 0; i < itemsize; i++) {
1807 PyObject *it = PyTuple_GET_ITEM(itlist, i);
1808 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001809 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001810 if (PyErr_Occurred()) {
1811 Py_DECREF(ret);
1812 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001813 }
1814 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001815 Py_DECREF(itlist);
1816 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00001817 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001818 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001819 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001820
1821 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00001822 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001823 if (status < 0)
1824 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001825 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001826
1827Fail_ret_itlist:
1828 Py_DECREF(itlist);
1829Fail_ret:
1830 Py_DECREF(ret);
1831 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001832}
1833
1834
1835static char zip_doc[] =
1836"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1837\n\
1838Return a list of tuples, where each tuple contains the i-th element\n\
1839from each of the argument sequences. The returned list is truncated\n\
1840in length to the length of the shortest argument sequence.";
1841
1842
Guido van Rossum79f25d91997-04-29 20:08:16 +00001843static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001844 {"__import__", builtin___import__, 1, import_doc},
1845 {"abs", builtin_abs, 1, abs_doc},
1846 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00001847 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001848 {"callable", builtin_callable, 1, callable_doc},
1849 {"chr", builtin_chr, 1, chr_doc},
1850 {"cmp", builtin_cmp, 1, cmp_doc},
1851 {"coerce", builtin_coerce, 1, coerce_doc},
1852 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001853 {"delattr", builtin_delattr, 1, delattr_doc},
1854 {"dir", builtin_dir, 1, dir_doc},
1855 {"divmod", builtin_divmod, 1, divmod_doc},
1856 {"eval", builtin_eval, 1, eval_doc},
1857 {"execfile", builtin_execfile, 1, execfile_doc},
1858 {"filter", builtin_filter, 1, filter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001859 {"getattr", builtin_getattr, 1, getattr_doc},
1860 {"globals", builtin_globals, 1, globals_doc},
1861 {"hasattr", builtin_hasattr, 1, hasattr_doc},
1862 {"hash", builtin_hash, 1, hash_doc},
1863 {"hex", builtin_hex, 1, hex_doc},
1864 {"id", builtin_id, 1, id_doc},
1865 {"input", builtin_input, 1, input_doc},
1866 {"intern", builtin_intern, 1, intern_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001867 {"isinstance", builtin_isinstance, 1, isinstance_doc},
1868 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001869 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001870 {"len", builtin_len, 1, len_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001871 {"locals", builtin_locals, 1, locals_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001872 {"map", builtin_map, 1, map_doc},
1873 {"max", builtin_max, 1, max_doc},
1874 {"min", builtin_min, 1, min_doc},
1875 {"oct", builtin_oct, 1, oct_doc},
1876 {"open", builtin_open, 1, open_doc},
1877 {"ord", builtin_ord, 1, ord_doc},
1878 {"pow", builtin_pow, 1, pow_doc},
1879 {"range", builtin_range, 1, range_doc},
1880 {"raw_input", builtin_raw_input, 1, raw_input_doc},
1881 {"reduce", builtin_reduce, 1, reduce_doc},
1882 {"reload", builtin_reload, 1, reload_doc},
1883 {"repr", builtin_repr, 1, repr_doc},
1884 {"round", builtin_round, 1, round_doc},
1885 {"setattr", builtin_setattr, 1, setattr_doc},
1886 {"slice", builtin_slice, 1, slice_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00001887 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001888 {"vars", builtin_vars, 1, vars_doc},
1889 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00001890 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001891 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001892};
1893
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001894static char builtin_doc[] =
1895"Built-in functions, exceptions, and other objects.\n\
1896\n\
1897Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
1898
Guido van Rossum25ce5661997-08-02 03:10:38 +00001899PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001900_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001901{
Fred Drake5550de32000-06-20 04:54:19 +00001902 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001903 mod = Py_InitModule4("__builtin__", builtin_methods,
1904 builtin_doc, (PyObject *)NULL,
1905 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001906 if (mod == NULL)
1907 return NULL;
1908 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001909 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
1910 return NULL;
1911 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
1912 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001913 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00001914 Py_NotImplemented) < 0)
1915 return NULL;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001916 if (PyDict_SetItemString(dict, "classmethod",
1917 (PyObject *) &PyClassMethod_Type) < 0)
1918 return NULL;
1919#ifndef WITHOUT_COMPLEX
1920 if (PyDict_SetItemString(dict, "complex",
1921 (PyObject *) &PyComplex_Type) < 0)
1922 return NULL;
1923#endif
1924 if (PyDict_SetItemString(dict, "dictionary",
1925 (PyObject *) &PyDict_Type) < 0)
1926 return NULL;
1927 if (PyDict_SetItemString(dict, "float",
1928 (PyObject *) &PyFloat_Type) < 0)
1929 return NULL;
1930 if (PyDict_SetItemString(dict, "int", (PyObject *) &PyInt_Type) < 0)
1931 return NULL;
1932 if (PyDict_SetItemString(dict, "list", (PyObject *) &PyList_Type) < 0)
1933 return NULL;
1934 if (PyDict_SetItemString(dict, "long", (PyObject *) &PyLong_Type) < 0)
1935 return NULL;
1936 if (PyDict_SetItemString(dict, "object",
1937 (PyObject *) &PyBaseObject_Type) < 0)
1938 return NULL;
1939 if (PyDict_SetItemString(dict, "staticmethod",
1940 (PyObject *) &PyStaticMethod_Type) < 0)
1941 return NULL;
1942 if (PyDict_SetItemString(dict, "str", (PyObject *) &PyString_Type) < 0)
1943 return NULL;
1944 if (PyDict_SetItemString(dict, "tuple",
1945 (PyObject *) &PyTuple_Type) < 0)
1946 return NULL;
1947 if (PyDict_SetItemString(dict, "type", (PyObject *) &PyType_Type) < 0)
1948 return NULL;
1949 if (PyDict_SetItemString(dict, "unicode",
1950 (PyObject *) &PyUnicode_Type) < 0)
1951 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001952 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
1953 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1954 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001955 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001956 }
1957 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001958
Guido van Rossum25ce5661997-08-02 03:10:38 +00001959 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001960}
1961
Guido van Rossume77a7571993-11-03 15:01:26 +00001962/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001963
Guido van Rossum79f25d91997-04-29 20:08:16 +00001964static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001965filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001966{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001967 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001968 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001970
Guido van Rossumb7b45621995-08-04 04:07:45 +00001971 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001973 return tuple;
1974 }
1975
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001977 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001978
Guido van Rossum12d12c51993-10-26 17:58:25 +00001979 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001980 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001981 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001982
Guido van Rossum79f25d91997-04-29 20:08:16 +00001983 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001984 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 if (func == Py_None) {
1986 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001987 good = item;
1988 }
1989 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001991 if (arg == NULL)
1992 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001993 good = PyEval_CallObject(func, arg);
1994 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001995 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001996 goto Fail_1;
1997 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001998 ok = PyObject_IsTrue(good);
1999 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002000 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002001 Py_INCREF(item);
2002 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002003 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002004 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002005 }
2006
Tim Peters4324aa32001-05-28 22:30:08 +00002007 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002008 return NULL;
2009
Guido van Rossum12d12c51993-10-26 17:58:25 +00002010 return result;
2011
Guido van Rossum12d12c51993-10-26 17:58:25 +00002012Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002013 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002014 return NULL;
2015}
2016
2017
Guido van Rossume77a7571993-11-03 15:01:26 +00002018/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002019
Guido van Rossum79f25d91997-04-29 20:08:16 +00002020static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002021filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002022{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002023 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002024 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002025 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002026
Guido van Rossum79f25d91997-04-29 20:08:16 +00002027 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002028 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002029 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002030 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002031 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002032 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002033 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002034
Guido van Rossum12d12c51993-10-26 17:58:25 +00002035 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002036 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002037 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002038
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002039 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2040 if (item == NULL)
2041 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002042 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002043 if (arg == NULL) {
2044 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002045 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002046 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002047 good = PyEval_CallObject(func, arg);
2048 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002049 if (good == NULL) {
2050 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002051 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002052 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002053 ok = PyObject_IsTrue(good);
2054 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002055 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002056 PyString_AS_STRING((PyStringObject *)result)[j++] =
2057 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002058 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002059 }
2060
Guido van Rossum79f25d91997-04-29 20:08:16 +00002061 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002062 return NULL;
2063
Guido van Rossum12d12c51993-10-26 17:58:25 +00002064 return result;
2065
Guido van Rossum12d12c51993-10-26 17:58:25 +00002066Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002067 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002068 return NULL;
2069}