blob: 5f5ae4ca427cdba3ede9431e590fa0c11d19ba0a [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
Guido van Rossume2ae77b2001-10-24 20:42:55 +000016#ifdef RISCOS
17#include "unixstuff.h"
18#endif
19
Mark Hammond26cffde42001-05-14 12:17:34 +000020/* The default encoding used by the platform file system APIs
21 Can remain NULL for all platforms that don't have such a concept
22*/
Fredrik Lundh5b979352001-06-26 17:46:10 +000023#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000024const char *Py_FileSystemDefaultEncoding = "mbcs";
25#else
26const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
27#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000028
Guido van Rossum12d12c51993-10-26 17:58:25 +000029/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000030static PyObject *filterstring(PyObject *, PyObject *);
31static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000034builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 PyObject *globals = NULL;
38 PyObject *locals = NULL;
39 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000040
Guido van Rossum79f25d91997-04-29 20:08:16 +000041 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000042 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000044 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000045}
46
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000047static char import_doc[] =
48"__import__(name, globals, locals, fromlist) -> module\n\
49\n\
50Import a module. The globals are only used to determine the context;\n\
51they are not modified. The locals are currently unused. The fromlist\n\
52should be a list of names to emulate ``from name import ...'', or an\n\
53empty list to emulate ``import name''.\n\
54When importing a module from a package, note that __import__('A.B', ...)\n\
55returns package A when fromlist is empty, but its submodule B when\n\
56fromlist is not empty.";
57
Guido van Rossum1ae940a1995-01-02 19:04:15 +000058
Guido van Rossum79f25d91997-04-29 20:08:16 +000059static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000060builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000061{
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 *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000135builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000136{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000137 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000138}
139
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000140static char callable_doc[] =
141"callable(object) -> Boolean\n\
142\n\
143Return whether the object is callable (i.e., some kind of function).\n\
144Note that classes are callable, as are instances with a __call__() method.";
145
146
Guido van Rossum79f25d91997-04-29 20:08:16 +0000147static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000148builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000149{
Tim Peters0e57abf2001-05-02 07:39:38 +0000150 PyObject *func, *seq, *result, *it;
151 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000152 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000153
Guido van Rossum79f25d91997-04-29 20:08:16 +0000154 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000155 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000156
Tim Peters0e57abf2001-05-02 07:39:38 +0000157 /* Strings and tuples return a result of the same type. */
158 if (PyString_Check(seq))
159 return filterstring(func, seq);
160 if (PyTuple_Check(seq))
161 return filtertuple(func, seq);
162
163 /* Get iterator. */
164 it = PyObject_GetIter(seq);
165 if (it == NULL)
166 return NULL;
167
168 /* Guess a result list size. */
169 len = -1; /* unknown */
170 if (PySequence_Check(seq) &&
171 seq->ob_type->tp_as_sequence->sq_length) {
172 len = PySequence_Size(seq);
173 if (len < 0)
174 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000175 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000176 if (len < 0)
177 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000178
Tim Peters0e57abf2001-05-02 07:39:38 +0000179 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000180 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000181 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000182 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000183 result = seq;
184 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000185 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000186 result = PyList_New(len);
187 if (result == NULL)
188 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000189 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000190
Tim Peters0e57abf2001-05-02 07:39:38 +0000191 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000192 j = 0;
193 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000194 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000195 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000196
Tim Peters0e57abf2001-05-02 07:39:38 +0000197 item = PyIter_Next(it);
198 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000199 if (PyErr_Occurred())
200 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000201 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000202 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000203
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000205 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000206 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000207 }
208 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000209 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000210 if (arg == NULL) {
211 Py_DECREF(item);
212 goto Fail_result_it;
213 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000214 good = PyEval_CallObject(func, arg);
215 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000216 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000217 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000219 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000220 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000221 ok = PyObject_IsTrue(good);
222 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000223 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000224 if (j < len)
225 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000226 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000227 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000228 Py_DECREF(item);
229 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000230 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000231 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000232 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000233 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000234 else
235 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000236 }
237
Guido van Rossum12d12c51993-10-26 17:58:25 +0000238
Tim Peters0e57abf2001-05-02 07:39:38 +0000239 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000240 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000241 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000242
Tim Peters3c6b1482001-05-21 08:07:05 +0000243 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000244 return result;
245
Tim Peters0e57abf2001-05-02 07:39:38 +0000246Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000247 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000248Fail_it:
249 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000250 return NULL;
251}
252
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000253static char filter_doc[] =
254"filter(function, sequence) -> list\n\
255\n\
256Return a list containing those items of sequence for which function(item)\n\
257is true. If function is None, return a list of items that are true.";
258
259
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000261builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000262{
263 long x;
264 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000265
Guido van Rossum79f25d91997-04-29 20:08:16 +0000266 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000267 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000268 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000269 PyErr_SetString(PyExc_ValueError,
270 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000271 return NULL;
272 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000273 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000274 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000275}
276
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000277static char chr_doc[] =
278"chr(i) -> character\n\
279\n\
280Return a string of one character with ordinal i; 0 <= i < 256.";
281
282
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000283#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000284static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000285builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000286{
287 long x;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000288 Py_UNICODE s[2];
Guido van Rossum09095f32000-03-10 23:00:52 +0000289
290 if (!PyArg_ParseTuple(args, "l:unichr", &x))
291 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000292
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000293#ifdef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000294 if (x < 0 || x > 0x10ffff) {
Guido van Rossum09095f32000-03-10 23:00:52 +0000295 PyErr_SetString(PyExc_ValueError,
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000296 "unichr() arg not in range(0x110000) "
297 "(wide Python build)");
Guido van Rossum09095f32000-03-10 23:00:52 +0000298 return NULL;
299 }
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000300#else
301 if (x < 0 || x > 0xffff) {
302 PyErr_SetString(PyExc_ValueError,
303 "unichr() arg not in range(0x10000) "
304 "(narrow Python build)");
305 return NULL;
306 }
307#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000308
309 if (x <= 0xffff) {
310 /* UCS-2 character */
311 s[0] = (Py_UNICODE) x;
312 return PyUnicode_FromUnicode(s, 1);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000313 }
314 else {
Fredrik Lundh8f455852001-06-27 18:59:43 +0000315#ifndef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000316 /* UCS-4 character. store as two surrogate characters */
317 x -= 0x10000L;
318 s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
319 s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
320 return PyUnicode_FromUnicode(s, 2);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000321#else
322 s[0] = (Py_UNICODE)x;
323 return PyUnicode_FromUnicode(s, 1);
Martin v. Löwis0ba70cc2001-06-26 22:22:37 +0000324#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000325 }
Guido van Rossum09095f32000-03-10 23:00:52 +0000326}
327
328static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000329"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000330\n\
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000331Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.";
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000332#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000333
334
335static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000336builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000337{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000338 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000339 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000340
Guido van Rossum79f25d91997-04-29 20:08:16 +0000341 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000342 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000343 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000344 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000345 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000346}
347
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000348static char cmp_doc[] =
349"cmp(x, y) -> integer\n\
350\n\
351Return negative if x<y, zero if x==y, positive if x>y.";
352
353
Guido van Rossum79f25d91997-04-29 20:08:16 +0000354static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000355builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000356{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000357 PyObject *v, *w;
358 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000359
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000361 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000362 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000363 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000364 res = Py_BuildValue("(OO)", v, w);
365 Py_DECREF(v);
366 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000367 return res;
368}
369
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000370static char coerce_doc[] =
371"coerce(x, y) -> None or (x1, y1)\n\
372\n\
373When x and y can be coerced to values of the same type, return a tuple\n\
374containing the coerced values. When they can't be coerced, return None.";
375
376
Guido van Rossum79f25d91997-04-29 20:08:16 +0000377static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000378builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000379{
380 char *str;
381 char *filename;
382 char *startstr;
383 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000384 int dont_inherit = 0;
385 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000386 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000387
Tim Peters6cd6a822001-08-17 22:11:27 +0000388 if (!PyArg_ParseTuple(args, "sss|ii:compile", &str, &filename,
389 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000390 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000391
Guido van Rossum5b722181993-03-30 17:46:03 +0000392 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000393 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000394 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000395 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000396 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000397 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000398 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000399 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000400 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000401 return NULL;
402 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000403
404 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
405 PyErr_SetString(PyExc_ValueError,
406 "compile(): unrecognised flags");
407 return NULL;
408 }
409 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
410
411 cf.cf_flags = supplied_flags;
412 if (!dont_inherit) {
413 PyEval_MergeCompilerFlags(&cf);
414 }
415 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000416}
417
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000418static char compile_doc[] =
Tim Peters6cd6a822001-08-17 22:11:27 +0000419"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000420\n\
421Compile the source string (a Python module, statement or expression)\n\
422into a code object that can be executed by the exec statement or eval().\n\
423The filename will be used for run-time error messages.\n\
424The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000425single (interactive) statement, or 'eval' to compile an expression.\n\
426The flags argument, if present, controls which future statements influence\n\
427the compilation of the code.\n\
428The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
429the effects of any future statements in effect in the code calling\n\
430compile; if absent or zero these statements do influence the compilation,\n\
431in addition to any features explicitly specified.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000432
Guido van Rossum79f25d91997-04-29 20:08:16 +0000433static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000434builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000435{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000436 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437
Tim Peters5d2b77c2001-09-03 05:47:38 +0000438 if (!PyArg_ParseTuple(args, "|O:dir", &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000439 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000440 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000441}
442
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000443static char dir_doc[] =
Tim Peters5d2b77c2001-09-03 05:47:38 +0000444"dir([object]) -> list of strings\n"
445"\n"
446"Return an alphabetized list of names comprising (some of) the attributes\n"
447"of the given object, and of attributes reachable from it:\n"
448"\n"
449"No argument: the names in the current scope.\n"
450"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000451"Type or class object: its attributes, and recursively the attributes of\n"
452" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000453"Otherwise: its attributes, its class's attributes, and recursively the\n"
454" attributes of its class's base classes.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000455
Guido van Rossum79f25d91997-04-29 20:08:16 +0000456static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000457builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000458{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000460
Guido van Rossum79f25d91997-04-29 20:08:16 +0000461 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000462 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000463 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000464}
465
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000466static char divmod_doc[] =
467"divmod(x, y) -> (div, mod)\n\
468\n\
469Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
470
471
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000473builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000474{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475 PyObject *cmd;
476 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000477 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000478 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000479
Guido van Rossum79f25d91997-04-29 20:08:16 +0000480 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000481 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000482 &PyDict_Type, &globals,
483 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000484 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485 if (globals == Py_None) {
486 globals = PyEval_GetGlobals();
487 if (locals == Py_None)
488 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000489 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000490 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000491 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000492
Guido van Rossum79f25d91997-04-29 20:08:16 +0000493 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
494 if (PyDict_SetItemString(globals, "__builtins__",
495 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000496 return NULL;
497 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000498
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000499 if (PyCode_Check(cmd)) {
500 if (PyTuple_GET_SIZE(((PyCodeObject *)cmd)->co_freevars) > 0) {
501 PyErr_SetString(PyExc_TypeError,
502 "code object passed to eval() may not contain free variables");
503 return NULL;
504 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000505 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000506 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000507
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000508 if (!PyString_Check(cmd) &&
509 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000510 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000511 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000512 return NULL;
513 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000514 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000515 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000516 while (*str == ' ' || *str == '\t')
517 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000518
519 cf.cf_flags = 0;
520 (void)PyEval_MergeCompilerFlags(&cf);
521 return PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000522}
523
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000524static char eval_doc[] =
525"eval(source[, globals[, locals]]) -> value\n\
526\n\
527Evaluate the source in the context of globals and locals.\n\
528The source may be a string representing a Python expression\n\
529or a code object as returned by compile().\n\
530The globals and locals are dictionaries, defaulting to the current\n\
531globals and locals. If only globals is given, locals defaults to it.";
532
533
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000535builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000536{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000537 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538 PyObject *globals = Py_None, *locals = Py_None;
539 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000540 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000541 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000542 int exists;
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000543#ifndef RISCOS
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000544 struct stat s;
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000545#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546
Guido van Rossum79f25d91997-04-29 20:08:16 +0000547 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000549 &PyDict_Type, &globals,
550 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000551 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552 if (globals == Py_None) {
553 globals = PyEval_GetGlobals();
554 if (locals == Py_None)
555 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000556 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000557 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000558 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
560 if (PyDict_SetItemString(globals, "__builtins__",
561 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000562 return NULL;
563 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000564
565 exists = 0;
566 /* Test for existence or directory. */
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000567#ifndef RISCOS
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000568 if (!stat(filename, &s)) {
Martin v. Löwisf9836ba2001-08-08 10:28:06 +0000569 if (S_ISDIR(s.st_mode))
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000570 errno = EISDIR;
571 else
572 exists = 1;
573 }
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000574#else
575 if (object_exists(filename)) {
576 if (isdir(filename))
577 errno = EISDIR;
578 else
579 exists = 1;
580 }
581#endif /* RISCOS */
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000582
583 if (exists) {
584 Py_BEGIN_ALLOW_THREADS
585 fp = fopen(filename, "r");
586 Py_END_ALLOW_THREADS
587
588 if (fp == NULL) {
589 exists = 0;
590 }
591 }
592
593 if (!exists) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000595 return NULL;
596 }
Tim Peters5ba58662001-07-16 02:29:45 +0000597 cf.cf_flags = 0;
598 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000599 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000600 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000601 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000602 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000603 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000604 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000605}
606
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000607static char execfile_doc[] =
608"execfile(filename[, globals[, locals]])\n\
609\n\
610Read and execute a Python script from a file.\n\
611The globals and locals are dictionaries, defaulting to the current\n\
612globals and locals. If only globals is given, locals defaults to it.";
613
614
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000616builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000617{
Guido van Rossum950ff291998-06-29 13:38:57 +0000618 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000621 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000622 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000623#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000624 if (PyUnicode_Check(name)) {
625 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
626 if (name == NULL)
627 return NULL;
628 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000629#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000630
631 if (!PyString_Check(name)) {
632 PyErr_SetString(PyExc_TypeError,
633 "attribute name must be string");
634 return NULL;
635 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000636 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000637 if (result == NULL && dflt != NULL &&
638 PyErr_ExceptionMatches(PyExc_AttributeError))
639 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000640 PyErr_Clear();
641 Py_INCREF(dflt);
642 result = dflt;
643 }
644 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000645}
646
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000647static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000648"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000649\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000650Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
651When a default argument is given, it is returned when the attribute doesn't\n\
652exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000653
654
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000656builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000657{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000658 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000659
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660 d = PyEval_GetGlobals();
661 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000662 return d;
663}
664
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000665static char globals_doc[] =
666"globals() -> dictionary\n\
667\n\
668Return the dictionary containing the current scope's global variables.";
669
670
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000672builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000673{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 PyObject *v;
675 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000676
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000677 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000678 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000679#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000680 if (PyUnicode_Check(name)) {
681 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
682 if (name == NULL)
683 return NULL;
684 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000685#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000686
687 if (!PyString_Check(name)) {
688 PyErr_SetString(PyExc_TypeError,
689 "attribute name must be string");
690 return NULL;
691 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000693 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000695 Py_INCREF(Py_False);
696 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000697 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000699 Py_INCREF(Py_True);
700 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000701}
702
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000703static char hasattr_doc[] =
704"hasattr(object, name) -> Boolean\n\
705\n\
706Return whether the object has an attribute with the given name.\n\
707(This is done by calling getattr(object, name) and catching exceptions.)";
708
709
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000711builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000712{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000713 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000714}
715
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000716static char id_doc[] =
717"id(object) -> integer\n\
718\n\
719Return the identity of an object. This is guaranteed to be unique among\n\
720simultaneously existing objects. (Hint: it's the object's memory address.)";
721
722
Guido van Rossum79f25d91997-04-29 20:08:16 +0000723static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000724builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000725{
726 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000727 PyObject *it; /* the iterator object */
728 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000729 } sequence;
730
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000732 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000734 register int i, j;
735
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738 PyErr_SetString(PyExc_TypeError,
739 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000740 return NULL;
741 }
742
Guido van Rossum79f25d91997-04-29 20:08:16 +0000743 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000744 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000745
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000746 if (func == Py_None && n == 1) {
747 /* map(None, S) is the same as list(S). */
748 return PySequence_List(PyTuple_GetItem(args, 1));
749 }
750
Tim Peters4e9afdc2001-05-03 23:54:49 +0000751 /* Get space for sequence descriptors. Must NULL out the iterator
752 * pointers so that jumping to Fail_2 later doesn't see trash.
753 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
755 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000756 return NULL;
757 }
758 for (i = 0; i < n; ++i) {
759 seqs[i].it = (PyObject*)NULL;
760 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000761 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000762
Tim Peters4e9afdc2001-05-03 23:54:49 +0000763 /* Do a first pass to obtain iterators for the arguments, and set len
764 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000765 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000766 len = 0;
767 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
768 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000769 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000770
Tim Peters4e9afdc2001-05-03 23:54:49 +0000771 /* Get iterator. */
772 curseq = PyTuple_GetItem(args, i+1);
773 sqp->it = PyObject_GetIter(curseq);
774 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000775 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000776 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000777 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000778 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000780 goto Fail_2;
781 }
782
Tim Peters4e9afdc2001-05-03 23:54:49 +0000783 /* Update len. */
784 curlen = -1; /* unknown */
785 if (PySequence_Check(curseq) &&
786 curseq->ob_type->tp_as_sequence->sq_length) {
787 curlen = PySequence_Size(curseq);
788 if (curlen < 0)
789 PyErr_Clear();
790 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000791 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000792 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000793 if (curlen > len)
794 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000795 }
796
Tim Peters4e9afdc2001-05-03 23:54:49 +0000797 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000799 goto Fail_2;
800
Tim Peters4e9afdc2001-05-03 23:54:49 +0000801 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000802 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000804 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000805
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000807 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 else if ((alist = PyTuple_New(n)) == NULL)
809 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000810
811 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000812 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 Py_INCREF(Py_None);
814 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000815 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000816 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000817 item = PyIter_Next(sqp->it);
818 if (item)
819 ++numactive;
820 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000821 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000822 Py_XDECREF(alist);
823 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000824 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000825 Py_INCREF(Py_None);
826 item = Py_None;
827 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000828 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000829 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000830 if (alist)
831 PyTuple_SET_ITEM(alist, j, item);
832 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000833 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000834 }
835
Guido van Rossum32120311995-07-10 13:52:21 +0000836 if (!alist)
837 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000838
Tim Peters4e9afdc2001-05-03 23:54:49 +0000839 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000841 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000842 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000843
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000845 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000846 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 value = PyEval_CallObject(func, alist);
848 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000849 if (value == NULL)
850 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000851 }
852 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000853 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000854 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000855 if (status < 0)
856 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000857 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000858 else if (PyList_SetItem(result, i, value) < 0)
859 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000860 }
861
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000862 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
863 goto Fail_1;
864
Tim Peters4e9afdc2001-05-03 23:54:49 +0000865 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000866
Guido van Rossum12d12c51993-10-26 17:58:25 +0000867Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000869Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000870 result = NULL;
871Succeed:
872 assert(seqs);
873 for (i = 0; i < n; ++i)
874 Py_XDECREF(seqs[i].it);
875 PyMem_DEL(seqs);
876 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000877}
878
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879static char map_doc[] =
880"map(function, sequence[, sequence, ...]) -> list\n\
881\n\
882Return a list of the results of applying the function to the items of\n\
883the argument sequence(s). If more than one sequence is given, the\n\
884function is called with an argument list consisting of the corresponding\n\
885item of each sequence, substituting None for missing values when not all\n\
886sequences have the same length. If the function is None, return a list of\n\
887the items of the sequence (or a list of tuples if more than one sequence).";
888
889
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000891builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000892{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893 PyObject *v;
894 PyObject *name;
895 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000896
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000897 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000898 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000900 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 Py_INCREF(Py_None);
902 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000903}
904
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000905static char setattr_doc[] =
906"setattr(object, name, value)\n\
907\n\
908Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
909``x.y = v''.";
910
911
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000913builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000914{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 PyObject *v;
916 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000917
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000918 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000919 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000921 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922 Py_INCREF(Py_None);
923 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000924}
925
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000926static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +0000927"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000928\n\
929Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
930``del x.y''.";
931
932
Guido van Rossum79f25d91997-04-29 20:08:16 +0000933static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000934builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000935{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000936 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000939 if (x == -1)
940 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000942}
943
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000944static char hash_doc[] =
945"hash(object) -> integer\n\
946\n\
947Return a hash value for the object. Two objects with the same value have\n\
948the same hash value. The reverse is not necessarily true, but likely.";
949
950
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000952builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000953{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000954 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000955
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000956 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000957 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000959 "hex() argument can't be converted to hex");
960 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000961 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000962 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000963}
964
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000965static char hex_doc[] =
966"hex(number) -> string\n\
967\n\
968Return the hexadecimal representation of an integer or long integer.";
969
970
Tim Petersdbd9ba62000-07-09 03:09:57 +0000971static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000972
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000974builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000975{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000976 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000977 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000978 PyObject *res;
979 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000980
981 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000982 if (line == NULL)
983 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000985 return NULL;
986 while (*str == ' ' || *str == '\t')
987 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 globals = PyEval_GetGlobals();
989 locals = PyEval_GetLocals();
990 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
991 if (PyDict_SetItemString(globals, "__builtins__",
992 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000993 return NULL;
994 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000995 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000997 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000998}
999
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001000static char input_doc[] =
1001"input([prompt]) -> value\n\
1002\n\
1003Equivalent to eval(raw_input(prompt)).";
1004
1005
Guido van Rossume8811f81997-02-14 15:48:05 +00001006static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001007builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001008{
1009 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001010 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001011 return NULL;
1012 Py_INCREF(s);
1013 PyString_InternInPlace(&s);
1014 return s;
1015}
1016
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001017static char intern_doc[] =
1018"intern(string) -> string\n\
1019\n\
1020``Intern'' the given string. This enters the string in the (global)\n\
1021table of interned strings whose purpose is to speed up dictionary lookups.\n\
1022Return the string itself or the previously interned string object with the\n\
1023same value.";
1024
1025
Guido van Rossum79f25d91997-04-29 20:08:16 +00001026static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001027builtin_iter(PyObject *self, PyObject *args)
1028{
1029 PyObject *v, *w = NULL;
1030
1031 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1032 return NULL;
1033 if (w == NULL)
1034 return PyObject_GetIter(v);
1035 if (!PyCallable_Check(v)) {
1036 PyErr_SetString(PyExc_TypeError,
1037 "iter(v, w): v must be callable");
1038 return NULL;
1039 }
1040 return PyCallIter_New(v, w);
1041}
1042
1043static char iter_doc[] =
1044"iter(collection) -> iterator\n\
1045iter(callable, sentinel) -> iterator\n\
1046\n\
1047Get an iterator from an object. In the first form, the argument must\n\
1048supply its own iterator, or be a sequence.\n\
1049In the second form, the callable is called until it returns the sentinel.";
1050
1051
1052static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001053builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001054{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001055 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001056
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001057 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001058 if (res < 0 && PyErr_Occurred())
1059 return NULL;
1060 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001061}
1062
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001063static char len_doc[] =
1064"len(object) -> integer\n\
1065\n\
1066Return the number of items of a sequence or mapping.";
1067
1068
Guido van Rossum79f25d91997-04-29 20:08:16 +00001069static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001070builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001071{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001072 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001073
Guido van Rossum09df08a1998-05-22 00:51:39 +00001074 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001075
Guido van Rossum09df08a1998-05-22 00:51:39 +00001076 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1077 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001078
Guido van Rossum09df08a1998-05-22 00:51:39 +00001079 /* This swapping of stop and start is to maintain similarity with
1080 range(). */
1081 if (stop == NULL) {
1082 stop = start;
1083 start = NULL;
1084 }
1085 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001086}
1087
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001088static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001089"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001090\n\
1091Create a slice object. This is used for slicing by the Numeric extensions.";
1092
1093
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001095builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001096{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001098
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 d = PyEval_GetLocals();
1100 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001101 return d;
1102}
1103
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001104static char locals_doc[] =
1105"locals() -> dictionary\n\
1106\n\
1107Return the dictionary containing the current scope's local variables.";
1108
1109
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001111min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001112{
Tim Petersc3074532001-05-03 07:00:32 +00001113 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001114
Guido van Rossum79f25d91997-04-29 20:08:16 +00001115 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001116 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001118 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001119
1120 it = PyObject_GetIter(v);
1121 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001122 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001123
1124 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001125 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001126 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001127 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001128 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001129 Py_XDECREF(w);
1130 Py_DECREF(it);
1131 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001132 }
Tim Petersc3074532001-05-03 07:00:32 +00001133 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001134 }
Tim Petersc3074532001-05-03 07:00:32 +00001135
Guido van Rossum2d951851994-08-29 12:52:16 +00001136 if (w == NULL)
1137 w = x;
1138 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001139 int cmp = PyObject_RichCompareBool(x, w, op);
1140 if (cmp > 0) {
1141 Py_DECREF(w);
1142 w = x;
1143 }
1144 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001145 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001146 Py_DECREF(w);
1147 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001148 return NULL;
1149 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001150 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001151 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001152 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001153 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001154 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001156 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001157 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158 return w;
1159}
1160
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001162builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001163{
Guido van Rossum53451b32001-01-17 15:47:24 +00001164 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001165}
1166
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001167static char min_doc[] =
1168"min(sequence) -> value\n\
1169min(a, b, c, ...) -> value\n\
1170\n\
1171With a single sequence argument, return its smallest item.\n\
1172With two or more arguments, return the smallest argument.";
1173
1174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001176builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001177{
Guido van Rossum53451b32001-01-17 15:47:24 +00001178 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001179}
1180
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001181static char max_doc[] =
1182"max(sequence) -> value\n\
1183max(a, b, c, ...) -> value\n\
1184\n\
1185With a single sequence argument, return its largest item.\n\
1186With two or more arguments, return the largest argument.";
1187
1188
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001190builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001191{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001193
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001194 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1195 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001196 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001197 "oct() argument can't be converted to oct");
1198 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001199 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001200 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001201}
1202
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001203static char oct_doc[] =
1204"oct(number) -> string\n\
1205\n\
1206Return the octal representation of an integer or long integer.";
1207
1208
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001210builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001211{
Guido van Rossum09095f32000-03-10 23:00:52 +00001212 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001213 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001214
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001215 if (PyString_Check(obj)) {
1216 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001217 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001218 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001219 return PyInt_FromLong(ord);
1220 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001221#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001222 } else if (PyUnicode_Check(obj)) {
1223 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001224 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001225 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001226 return PyInt_FromLong(ord);
1227 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001228#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001229 } else {
1230 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001231 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001232 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001233 return NULL;
1234 }
1235
Guido van Rossumad991772001-01-12 16:03:05 +00001236 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001237 "ord() expected a character, "
1238 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001239 size);
1240 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001241}
1242
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001243static char ord_doc[] =
1244"ord(c) -> integer\n\
1245\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001246Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001247
1248
Guido van Rossum79f25d91997-04-29 20:08:16 +00001249static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001250builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001251{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001252 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001253
Guido van Rossum79f25d91997-04-29 20:08:16 +00001254 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001255 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001256 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001257}
1258
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001259static char pow_doc[] =
1260"pow(x, y[, z]) -> number\n\
1261\n\
1262With two arguments, equivalent to x**y. With three arguments,\n\
1263equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1264
1265
Guido van Rossum124eff01999-02-23 16:11:01 +00001266/* Return number of items in range/xrange (lo, hi, step). step > 0
1267 * required. Return a value < 0 if & only if the true value is too
1268 * large to fit in a signed long.
1269 */
1270static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001271get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001272{
1273 /* -------------------------------------------------------------
1274 If lo >= hi, the range is empty.
1275 Else if n values are in the range, the last one is
1276 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1277 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1278 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1279 the RHS is non-negative and so truncation is the same as the
1280 floor. Letting M be the largest positive long, the worst case
1281 for the RHS numerator is hi=M, lo=-M-1, and then
1282 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1283 precision to compute the RHS exactly.
1284 ---------------------------------------------------------------*/
1285 long n = 0;
1286 if (lo < hi) {
1287 unsigned long uhi = (unsigned long)hi;
1288 unsigned long ulo = (unsigned long)lo;
1289 unsigned long diff = uhi - ulo - 1;
1290 n = (long)(diff / (unsigned long)step + 1);
1291 }
1292 return n;
1293}
1294
Guido van Rossum79f25d91997-04-29 20:08:16 +00001295static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001296builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001297{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001298 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001299 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001301
Guido van Rossum79f25d91997-04-29 20:08:16 +00001302 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001303
Guido van Rossum79f25d91997-04-29 20:08:16 +00001304 if (PyTuple_Size(args) <= 1) {
1305 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001306 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001307 &ihigh))
1308 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001309 }
1310 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001311 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001312 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001313 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001314 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001315 }
1316 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001317 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318 return NULL;
1319 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001320 if (istep > 0)
1321 bign = get_len_of_range(ilow, ihigh, istep);
1322 else
1323 bign = get_len_of_range(ihigh, ilow, -istep);
1324 n = (int)bign;
1325 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001326 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001327 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001328 return NULL;
1329 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001330 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001331 if (v == NULL)
1332 return NULL;
1333 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001334 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001335 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001336 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001337 return NULL;
1338 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001339 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001340 ilow += istep;
1341 }
1342 return v;
1343}
1344
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001345static char range_doc[] =
1346"range([start,] stop[, step]) -> list of integers\n\
1347\n\
1348Return a list containing an arithmetic progression of integers.\n\
1349range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1350When step is given, it specifies the increment (or decrement).\n\
1351For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1352These are exactly the valid indices for a list of 4 elements.";
1353
1354
Guido van Rossum79f25d91997-04-29 20:08:16 +00001355static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001356builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001357{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001358 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001359 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001360
Guido van Rossum79f25d91997-04-29 20:08:16 +00001361 if (PyTuple_Size(args) <= 1) {
1362 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001363 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001364 &ihigh))
1365 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001366 }
1367 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001368 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001369 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001370 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001371 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001372 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001373 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001374 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001375 return NULL;
1376 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001377 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001378 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001379 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001380 n = get_len_of_range(ihigh, ilow, -istep);
1381 if (n < 0) {
1382 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001383 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001384 return NULL;
1385 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001386 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001387}
1388
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001389static char xrange_doc[] =
1390"xrange([start,] stop[, step]) -> xrange object\n\
1391\n\
1392Like range(), but instead of returning a list, returns an object that\n\
1393generates the numbers in the range on demand. This is slightly slower\n\
1394than range() but more memory efficient.";
1395
1396
Guido van Rossum79f25d91997-04-29 20:08:16 +00001397static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001398builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001399{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001400 PyObject *v = NULL;
1401 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001402
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001404 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001405 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1406 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001407 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001408 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001409 char *prompt;
1410 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001411 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001412 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001413 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001414 if (po == NULL)
1415 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001416 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001417 if (prompt == NULL)
1418 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001419 }
1420 else {
1421 po = NULL;
1422 prompt = "";
1423 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001424 s = PyOS_Readline(prompt);
1425 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001426 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001427 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001428 return NULL;
1429 }
1430 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001431 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001432 result = NULL;
1433 }
1434 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001435 size_t len = strlen(s);
1436 if (len > INT_MAX) {
1437 PyErr_SetString(PyExc_OverflowError, "input too long");
1438 result = NULL;
1439 }
1440 else {
1441 result = PyString_FromStringAndSize(s, (int)(len-1));
1442 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001443 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001444 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001445 return result;
1446 }
Guido van Rossum90933611991-06-07 16:10:43 +00001447 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001448 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001449 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001450 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001451 return NULL;
1452 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001453 if (Py_FlushLine() != 0 ||
1454 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001455 return NULL;
1456 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001457 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001458 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001460 return NULL;
1461 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001463}
1464
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001465static char raw_input_doc[] =
1466"raw_input([prompt]) -> string\n\
1467\n\
1468Read a string from standard input. The trailing newline is stripped.\n\
1469If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1470On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1471is printed without a trailing newline before reading.";
1472
1473
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001475builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001476{
Tim Peters15d81ef2001-05-04 04:39:21 +00001477 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001478
Guido van Rossum79f25d91997-04-29 20:08:16 +00001479 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001480 return NULL;
1481 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001483
Tim Peters15d81ef2001-05-04 04:39:21 +00001484 it = PyObject_GetIter(seq);
1485 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001486 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001487 "reduce() arg 2 must support iteration");
1488 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001489 return NULL;
1490 }
1491
Guido van Rossum79f25d91997-04-29 20:08:16 +00001492 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001493 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001494
Tim Peters15d81ef2001-05-04 04:39:21 +00001495 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001497
1498 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001499 Py_DECREF(args);
1500 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001501 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001502 }
1503
Tim Peters15d81ef2001-05-04 04:39:21 +00001504 op2 = PyIter_Next(it);
1505 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001506 if (PyErr_Occurred())
1507 goto Fail;
1508 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001509 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001510
Guido van Rossum2d951851994-08-29 12:52:16 +00001511 if (result == NULL)
1512 result = op2;
1513 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001514 PyTuple_SetItem(args, 0, result);
1515 PyTuple_SetItem(args, 1, op2);
1516 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001517 goto Fail;
1518 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001519 }
1520
Guido van Rossum79f25d91997-04-29 20:08:16 +00001521 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001522
Guido van Rossum2d951851994-08-29 12:52:16 +00001523 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001524 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001525 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001526
Tim Peters15d81ef2001-05-04 04:39:21 +00001527 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001528 return result;
1529
Guido van Rossum2d951851994-08-29 12:52:16 +00001530Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001531 Py_XDECREF(args);
1532 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001533 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001534 return NULL;
1535}
1536
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537static char reduce_doc[] =
1538"reduce(function, sequence[, initial]) -> value\n\
1539\n\
1540Apply a function of two arguments cumulatively to the items of a sequence,\n\
1541from left to right, so as to reduce the sequence to a single value.\n\
1542For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1543((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1544of the sequence in the calculation, and serves as a default when the\n\
1545sequence is empty.";
1546
1547
Guido van Rossum79f25d91997-04-29 20:08:16 +00001548static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001549builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001550{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001551 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001552}
1553
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001554static char reload_doc[] =
1555"reload(module) -> module\n\
1556\n\
1557Reload the module. The module must have been successfully imported before.";
1558
1559
Guido van Rossum79f25d91997-04-29 20:08:16 +00001560static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001561builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001562{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001563 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001564}
1565
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001566static char repr_doc[] =
1567"repr(object) -> string\n\
1568\n\
1569Return the canonical string representation of the object.\n\
1570For most object types, eval(repr(object)) == object.";
1571
1572
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001574builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001575{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001576 double x;
1577 double f;
1578 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001579 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001580
Guido van Rossum79f25d91997-04-29 20:08:16 +00001581 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001582 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001583 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001584 i = abs(ndigits);
1585 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001586 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001587 if (ndigits < 0)
1588 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001589 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001590 x *= f;
1591 if (x >= 0.0)
1592 x = floor(x + 0.5);
1593 else
1594 x = ceil(x - 0.5);
1595 if (ndigits < 0)
1596 x *= f;
1597 else
1598 x /= f;
1599 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001600}
1601
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001602static char round_doc[] =
1603"round(number[, ndigits]) -> floating point number\n\
1604\n\
1605Round a number to a given precision in decimal digits (default 0 digits).\n\
1606This always returns a floating point number. Precision may be negative.";
1607
1608
Guido van Rossum79f25d91997-04-29 20:08:16 +00001609static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001610builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001611{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001612 PyObject *v = NULL;
1613 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001614
Guido van Rossum79f25d91997-04-29 20:08:16 +00001615 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001616 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001617 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001618 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001619 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001620 if (!PyErr_Occurred())
1621 PyErr_SetString(PyExc_SystemError,
1622 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001623 }
1624 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001626 }
1627 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001628 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001629 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001630 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001631 "vars() argument must have __dict__ attribute");
1632 return NULL;
1633 }
1634 }
1635 return d;
1636}
1637
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001638static char vars_doc[] =
1639"vars([object]) -> dictionary\n\
1640\n\
1641Without arguments, equivalent to locals().\n\
1642With an argument, equivalent to object.__dict__.";
1643
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001644static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001645builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001646{
1647 PyObject *inst;
1648 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001649 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001650
Guido van Rossum43713e52000-02-29 13:59:29 +00001651 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001652 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001653
Guido van Rossum823649d2001-03-21 18:40:58 +00001654 retval = PyObject_IsInstance(inst, cls);
1655 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001656 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001657 return PyInt_FromLong(retval);
1658}
1659
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001660static char isinstance_doc[] =
Guido van Rossum03290ec2001-10-07 20:54:12 +00001661"isinstance(object, class-or-type-or-tuple) -> Boolean\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001662\n\
1663Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001664With a type as second argument, return whether that is the object's type.\n\
1665The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
1666isinstance(x, A) or isinstance(x, B) or ... (etc.).";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001667
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001668
1669static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001670builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001671{
1672 PyObject *derived;
1673 PyObject *cls;
1674 int retval;
1675
Guido van Rossum43713e52000-02-29 13:59:29 +00001676 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001677 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001678
Guido van Rossum823649d2001-03-21 18:40:58 +00001679 retval = PyObject_IsSubclass(derived, cls);
1680 if (retval < 0)
1681 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001682 return PyInt_FromLong(retval);
1683}
1684
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001685static char issubclass_doc[] =
1686"issubclass(C, B) -> Boolean\n\
1687\n\
1688Return whether class C is a subclass (i.e., a derived class) of class B.";
1689
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001690
Barry Warsawbd599b52000-08-03 15:45:29 +00001691static PyObject*
1692builtin_zip(PyObject *self, PyObject *args)
1693{
1694 PyObject *ret;
1695 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001696 int i;
1697 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00001698
1699 if (itemsize < 1) {
1700 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001701 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001702 return NULL;
1703 }
1704 /* args must be a tuple */
1705 assert(PyTuple_Check(args));
1706
Tim Peters8572b4f2001-05-06 01:05:02 +00001707 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00001708 if ((ret = PyList_New(0)) == NULL)
1709 return NULL;
1710
Tim Peters8572b4f2001-05-06 01:05:02 +00001711 /* obtain iterators */
1712 itlist = PyTuple_New(itemsize);
1713 if (itlist == NULL)
1714 goto Fail_ret;
1715 for (i = 0; i < itemsize; ++i) {
1716 PyObject *item = PyTuple_GET_ITEM(args, i);
1717 PyObject *it = PyObject_GetIter(item);
1718 if (it == NULL) {
1719 if (PyErr_ExceptionMatches(PyExc_TypeError))
1720 PyErr_Format(PyExc_TypeError,
1721 "zip argument #%d must support iteration",
1722 i+1);
1723 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001724 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001725 PyTuple_SET_ITEM(itlist, i, it);
1726 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001727
Tim Peters8572b4f2001-05-06 01:05:02 +00001728 /* build result into ret list */
1729 for (;;) {
1730 int status;
1731 PyObject *next = PyTuple_New(itemsize);
1732 if (!next)
1733 goto Fail_ret_itlist;
1734
1735 for (i = 0; i < itemsize; i++) {
1736 PyObject *it = PyTuple_GET_ITEM(itlist, i);
1737 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001738 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001739 if (PyErr_Occurred()) {
1740 Py_DECREF(ret);
1741 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001742 }
1743 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001744 Py_DECREF(itlist);
1745 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00001746 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001747 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001748 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001749
1750 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00001751 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001752 if (status < 0)
1753 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001754 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001755
1756Fail_ret_itlist:
1757 Py_DECREF(itlist);
1758Fail_ret:
1759 Py_DECREF(ret);
1760 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001761}
1762
1763
1764static char zip_doc[] =
1765"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1766\n\
1767Return a list of tuples, where each tuple contains the i-th element\n\
1768from each of the argument sequences. The returned list is truncated\n\
1769in length to the length of the shortest argument sequence.";
1770
1771
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001773 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1774 {"abs", builtin_abs, METH_O, abs_doc},
1775 {"apply", builtin_apply, METH_VARARGS, apply_doc},
1776 {"buffer", builtin_buffer, METH_VARARGS, buffer_doc},
1777 {"callable", builtin_callable, METH_O, callable_doc},
1778 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1779 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1780 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1781 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1782 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1783 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1784 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1785 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1786 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1787 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1788 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1789 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1790 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1791 {"hash", builtin_hash, METH_O, hash_doc},
1792 {"hex", builtin_hex, METH_O, hex_doc},
1793 {"id", builtin_id, METH_O, id_doc},
1794 {"input", builtin_input, METH_VARARGS, input_doc},
1795 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1796 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1797 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1798 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1799 {"len", builtin_len, METH_O, len_doc},
1800 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1801 {"map", builtin_map, METH_VARARGS, map_doc},
1802 {"max", builtin_max, METH_VARARGS, max_doc},
1803 {"min", builtin_min, METH_VARARGS, min_doc},
1804 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001805 {"ord", builtin_ord, METH_O, ord_doc},
1806 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1807 {"range", builtin_range, METH_VARARGS, range_doc},
1808 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1809 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1810 {"reload", builtin_reload, METH_O, reload_doc},
1811 {"repr", builtin_repr, METH_O, repr_doc},
1812 {"round", builtin_round, METH_VARARGS, round_doc},
1813 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
1814 {"slice", builtin_slice, METH_VARARGS, slice_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001815#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001816 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001817#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001818 {"vars", builtin_vars, METH_VARARGS, vars_doc},
1819 {"xrange", builtin_xrange, METH_VARARGS, xrange_doc},
1820 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001821 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001822};
1823
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001824static char builtin_doc[] =
1825"Built-in functions, exceptions, and other objects.\n\
1826\n\
1827Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
1828
Guido van Rossum25ce5661997-08-02 03:10:38 +00001829PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001830_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001831{
Fred Drake5550de32000-06-20 04:54:19 +00001832 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001833 mod = Py_InitModule4("__builtin__", builtin_methods,
1834 builtin_doc, (PyObject *)NULL,
1835 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001836 if (mod == NULL)
1837 return NULL;
1838 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001839
1840#define SETBUILTIN(NAME, OBJECT) \
1841 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1842 return NULL
1843
1844 SETBUILTIN("None", Py_None);
1845 SETBUILTIN("Ellipsis", Py_Ellipsis);
1846 SETBUILTIN("NotImplemented", Py_NotImplemented);
1847 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001848#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001849 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001850#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001851 SETBUILTIN("dict", &PyDict_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001852 SETBUILTIN("float", &PyFloat_Type);
1853 SETBUILTIN("property", &PyProperty_Type);
1854 SETBUILTIN("int", &PyInt_Type);
1855 SETBUILTIN("list", &PyList_Type);
1856 SETBUILTIN("long", &PyLong_Type);
1857 SETBUILTIN("object", &PyBaseObject_Type);
1858 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1859 SETBUILTIN("str", &PyString_Type);
1860 SETBUILTIN("super", &PySuper_Type);
1861 SETBUILTIN("tuple", &PyTuple_Type);
1862 SETBUILTIN("type", &PyType_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001863
1864 /* Note that open() is just an alias of file(). */
1865 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001866 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001867#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001868 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001869#endif
Fred Drake5550de32000-06-20 04:54:19 +00001870 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
1871 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1872 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001873 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001874 }
1875 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001876
Guido van Rossum25ce5661997-08-02 03:10:38 +00001877 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001878#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001879}
1880
Guido van Rossume77a7571993-11-03 15:01:26 +00001881/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001882
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001884filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001887 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001888 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001889
Guido van Rossumb7b45621995-08-04 04:07:45 +00001890 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001891 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001892 return tuple;
1893 }
1894
Guido van Rossum79f25d91997-04-29 20:08:16 +00001895 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001896 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001897
Guido van Rossum12d12c51993-10-26 17:58:25 +00001898 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001900 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001901
Guido van Rossum79f25d91997-04-29 20:08:16 +00001902 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001903 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 if (func == Py_None) {
1905 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001906 good = item;
1907 }
1908 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001909 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001910 if (arg == NULL)
1911 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912 good = PyEval_CallObject(func, arg);
1913 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001914 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001915 goto Fail_1;
1916 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001917 ok = PyObject_IsTrue(good);
1918 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001919 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001920 Py_INCREF(item);
1921 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001922 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001923 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001924 }
1925
Tim Peters4324aa32001-05-28 22:30:08 +00001926 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001927 return NULL;
1928
Guido van Rossum12d12c51993-10-26 17:58:25 +00001929 return result;
1930
Guido van Rossum12d12c51993-10-26 17:58:25 +00001931Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001932 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001933 return NULL;
1934}
1935
1936
Guido van Rossume77a7571993-11-03 15:01:26 +00001937/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001938
Guido van Rossum79f25d91997-04-29 20:08:16 +00001939static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001940filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001941{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001942 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001943 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001944 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001945
Guido van Rossum79f25d91997-04-29 20:08:16 +00001946 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00001947 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00001949 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001950 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001952 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001953
Guido van Rossum12d12c51993-10-26 17:58:25 +00001954 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001956 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001957
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001958 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1959 if (item == NULL)
1960 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00001962 if (arg == NULL) {
1963 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001964 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001965 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001966 good = PyEval_CallObject(func, arg);
1967 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00001968 if (good == NULL) {
1969 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001970 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001971 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972 ok = PyObject_IsTrue(good);
1973 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001974 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 PyString_AS_STRING((PyStringObject *)result)[j++] =
1976 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00001977 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001978 }
1979
Guido van Rossum79f25d91997-04-29 20:08:16 +00001980 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001981 return NULL;
1982
Guido van Rossum12d12c51993-10-26 17:58:25 +00001983 return result;
1984
Guido van Rossum12d12c51993-10-26 17:58:25 +00001985Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001987 return NULL;
1988}