blob: 9a179a1780beb36671bfe4ec1d5b555d4075c769 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000012#ifdef HAVE_UNISTD_H
13#include <unistd.h>
14#endif
15
Mark Hammond26cffde2001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Fredrik Lundh5b979352001-06-26 17:46:10 +000019#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
21#else
22const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
23#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000024
Guido van Rossum12d12c51993-10-26 17:58:25 +000025/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000026static PyObject *filterstring(PyObject *, PyObject *);
27static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000031{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000033 PyObject *globals = NULL;
34 PyObject *locals = NULL;
35 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000038 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000040 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041}
42
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000043static char import_doc[] =
44"__import__(name, globals, locals, fromlist) -> module\n\
45\n\
46Import a module. The globals are only used to determine the context;\n\
47they are not modified. The locals are currently unused. The fromlist\n\
48should be a list of names to emulate ``from name import ...'', or an\n\
49empty list to emulate ``import name''.\n\
50When importing a module from a package, note that __import__('A.B', ...)\n\
51returns package A when fromlist is empty, but its submodule B when\n\
52fromlist is not empty.";
53
Guido van Rossum1ae940a1995-01-02 19:04:15 +000054
Guido van Rossum79f25d91997-04-29 20:08:16 +000055static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000056builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057{
Guido van Rossum09df08a1998-05-22 00:51:39 +000058 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000059}
60
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000061static char abs_doc[] =
62"abs(number) -> number\n\
63\n\
64Return the absolute value of the argument.";
65
66
Guido van Rossum79f25d91997-04-29 20:08:16 +000067static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000068builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000069{
Guido van Rossum79f25d91997-04-29 20:08:16 +000070 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000071 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000072
Guido van Rossum79f25d91997-04-29 20:08:16 +000073 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000074 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000075 if (alist != NULL) {
76 if (!PyTuple_Check(alist)) {
77 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000078 PyErr_Format(PyExc_TypeError,
79 "apply() arg 2 expect sequence, found %s",
80 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000081 return NULL;
82 }
83 t = PySequence_Tuple(alist);
84 if (t == NULL)
85 return NULL;
86 alist = t;
87 }
Guido van Rossum2d951851994-08-29 12:52:16 +000088 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000089 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000090 PyErr_Format(PyExc_TypeError,
91 "apply() arg 3 expected dictionary, found %s",
92 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000093 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000094 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000095 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
96 finally:
97 Py_XDECREF(t);
98 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +000099}
100
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000101static char apply_doc[] =
Fred Drakef1fbc622001-01-12 17:05:05 +0000102"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000103\n\
Fred Drake7b912121999-12-23 14:16:55 +0000104Call a callable object with positional arguments taken from the tuple args,\n\
105and keyword arguments taken from the optional dictionary kwargs.\n\
106Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000107
108
Guido van Rossum79f25d91997-04-29 20:08:16 +0000109static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000110builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000111{
112 PyObject *ob;
113 int offset = 0;
114 int size = Py_END_OF_BUFFER;
115
116 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
117 return NULL;
118 return PyBuffer_FromObject(ob, offset, size);
119}
120
121static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000122"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000123\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000124Create a new buffer object which references the given object.\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000125The buffer will reference a slice of the target object from the\n\
126start of the object (or at the specified offset). The slice will\n\
127extend to the end of the target object (or with the specified size).";
128
129
130static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000131builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000132{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000133 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000134}
135
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000136static char callable_doc[] =
137"callable(object) -> Boolean\n\
138\n\
139Return whether the object is callable (i.e., some kind of function).\n\
140Note that classes are callable, as are instances with a __call__() method.";
141
142
Guido van Rossum79f25d91997-04-29 20:08:16 +0000143static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000144builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000145{
Tim Peters0e57abf2001-05-02 07:39:38 +0000146 PyObject *func, *seq, *result, *it;
147 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000148 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000149
Guido van Rossum79f25d91997-04-29 20:08:16 +0000150 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000151 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000152
Tim Peters0e57abf2001-05-02 07:39:38 +0000153 /* Strings and tuples return a result of the same type. */
154 if (PyString_Check(seq))
155 return filterstring(func, seq);
156 if (PyTuple_Check(seq))
157 return filtertuple(func, seq);
158
159 /* Get iterator. */
160 it = PyObject_GetIter(seq);
161 if (it == NULL)
162 return NULL;
163
164 /* Guess a result list size. */
165 len = -1; /* unknown */
166 if (PySequence_Check(seq) &&
167 seq->ob_type->tp_as_sequence->sq_length) {
168 len = PySequence_Size(seq);
169 if (len < 0)
170 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000171 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000172 if (len < 0)
173 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000174
Tim Peters0e57abf2001-05-02 07:39:38 +0000175 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000176 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000177 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000178 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000179 result = seq;
180 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000181 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000182 result = PyList_New(len);
183 if (result == NULL)
184 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000185 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000186
Tim Peters0e57abf2001-05-02 07:39:38 +0000187 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000188 j = 0;
189 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000190 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000191 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000192
Tim Peters0e57abf2001-05-02 07:39:38 +0000193 item = PyIter_Next(it);
194 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000195 if (PyErr_Occurred())
196 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000197 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000198 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000199
Guido van Rossum79f25d91997-04-29 20:08:16 +0000200 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000201 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000202 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000203 }
204 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000205 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000206 if (arg == NULL) {
207 Py_DECREF(item);
208 goto Fail_result_it;
209 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000210 good = PyEval_CallObject(func, arg);
211 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000212 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000213 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000215 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000216 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000217 ok = PyObject_IsTrue(good);
218 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000219 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000220 if (j < len)
221 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000222 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000223 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000224 Py_DECREF(item);
225 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000226 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000227 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000228 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000229 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000230 else
231 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000232 }
233
Guido van Rossum12d12c51993-10-26 17:58:25 +0000234
Tim Peters0e57abf2001-05-02 07:39:38 +0000235 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000236 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000237 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000238
Tim Peters3c6b1482001-05-21 08:07:05 +0000239 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000240 return result;
241
Tim Peters0e57abf2001-05-02 07:39:38 +0000242Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000243 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000244Fail_it:
245 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246 return NULL;
247}
248
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000249static char filter_doc[] =
250"filter(function, sequence) -> list\n\
251\n\
252Return a list containing those items of sequence for which function(item)\n\
253is true. If function is None, return a list of items that are true.";
254
255
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000257builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000258{
259 long x;
260 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000261
Guido van Rossum79f25d91997-04-29 20:08:16 +0000262 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000263 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000264 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000265 PyErr_SetString(PyExc_ValueError,
266 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000267 return NULL;
268 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000269 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000270 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000271}
272
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000273static char chr_doc[] =
274"chr(i) -> character\n\
275\n\
276Return a string of one character with ordinal i; 0 <= i < 256.";
277
278
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000279#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000280static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000281builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000282{
283 long x;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000284 Py_UNICODE s[2];
Guido van Rossum09095f32000-03-10 23:00:52 +0000285
286 if (!PyArg_ParseTuple(args, "l:unichr", &x))
287 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000288
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000289#ifdef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000290 if (x < 0 || x > 0x10ffff) {
Guido van Rossum09095f32000-03-10 23:00:52 +0000291 PyErr_SetString(PyExc_ValueError,
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000292 "unichr() arg not in range(0x110000) "
293 "(wide Python build)");
Guido van Rossum09095f32000-03-10 23:00:52 +0000294 return NULL;
295 }
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000296#else
297 if (x < 0 || x > 0xffff) {
298 PyErr_SetString(PyExc_ValueError,
299 "unichr() arg not in range(0x10000) "
300 "(narrow Python build)");
301 return NULL;
302 }
303#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000304
305 if (x <= 0xffff) {
306 /* UCS-2 character */
307 s[0] = (Py_UNICODE) x;
308 return PyUnicode_FromUnicode(s, 1);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000309 }
310 else {
Fredrik Lundh8f455852001-06-27 18:59:43 +0000311#ifndef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000312 /* UCS-4 character. store as two surrogate characters */
313 x -= 0x10000L;
314 s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
315 s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
316 return PyUnicode_FromUnicode(s, 2);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000317#else
318 s[0] = (Py_UNICODE)x;
319 return PyUnicode_FromUnicode(s, 1);
Martin v. Löwis0ba70cc2001-06-26 22:22:37 +0000320#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000321 }
Guido van Rossum09095f32000-03-10 23:00:52 +0000322}
323
324static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000325"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000326\n\
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000327Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.";
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000328#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000329
330
331static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000332builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000333{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000335 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000336
Guido van Rossum79f25d91997-04-29 20:08:16 +0000337 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000338 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000339 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000340 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000341 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000342}
343
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000344static char cmp_doc[] =
345"cmp(x, y) -> integer\n\
346\n\
347Return negative if x<y, zero if x==y, positive if x>y.";
348
349
Guido van Rossum79f25d91997-04-29 20:08:16 +0000350static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000351builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000352{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000353 PyObject *v, *w;
354 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000355
Guido van Rossum79f25d91997-04-29 20:08:16 +0000356 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000357 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000358 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000359 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360 res = Py_BuildValue("(OO)", v, w);
361 Py_DECREF(v);
362 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000363 return res;
364}
365
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000366static char coerce_doc[] =
367"coerce(x, y) -> None or (x1, y1)\n\
368\n\
369When x and y can be coerced to values of the same type, return a tuple\n\
370containing the coerced values. When they can't be coerced, return None.";
371
372
Guido van Rossum79f25d91997-04-29 20:08:16 +0000373static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000374builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000375{
376 char *str;
377 char *filename;
378 char *startstr;
379 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000380 int dont_inherit = 0;
381 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000382 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000383
Tim Peters6cd6a822001-08-17 22:11:27 +0000384 if (!PyArg_ParseTuple(args, "sss|ii:compile", &str, &filename,
385 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000386 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000387
Guido van Rossum5b722181993-03-30 17:46:03 +0000388 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000389 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000390 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000391 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000392 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000393 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000394 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000395 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000396 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000397 return NULL;
398 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000399
400 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
401 PyErr_SetString(PyExc_ValueError,
402 "compile(): unrecognised flags");
403 return NULL;
404 }
405 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
406
407 cf.cf_flags = supplied_flags;
408 if (!dont_inherit) {
409 PyEval_MergeCompilerFlags(&cf);
410 }
411 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000412}
413
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000414static char compile_doc[] =
Tim Peters6cd6a822001-08-17 22:11:27 +0000415"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000416\n\
417Compile the source string (a Python module, statement or expression)\n\
418into a code object that can be executed by the exec statement or eval().\n\
419The filename will be used for run-time error messages.\n\
420The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000421single (interactive) statement, or 'eval' to compile an expression.\n\
422The flags argument, if present, controls which future statements influence\n\
423the compilation of the code.\n\
424The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
425the effects of any future statements in effect in the code calling\n\
426compile; if absent or zero these statements do influence the compilation,\n\
427in addition to any features explicitly specified.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000428
429
Guido van Rossum79f25d91997-04-29 20:08:16 +0000430static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000431builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000432{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000433 static char *attrlist[] = {"__members__", "__methods__", NULL};
434 PyObject *v = NULL, *l = NULL, *m = NULL;
435 PyObject *d, *x;
436 int i;
437 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000438
Guido van Rossum79f25d91997-04-29 20:08:16 +0000439 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000440 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000441 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000442 x = PyEval_GetLocals();
443 if (x == NULL)
444 goto error;
445 l = PyMapping_Keys(x);
446 if (l == NULL)
447 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000448 }
449 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000450 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000451 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000452 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000453 else {
454 l = PyMapping_Keys(d);
455 if (l == NULL)
456 PyErr_Clear();
457 Py_DECREF(d);
458 }
459 if (l == NULL) {
460 l = PyList_New(0);
461 if (l == NULL)
462 goto error;
463 }
464 for (s = attrlist; *s != NULL; s++) {
465 m = PyObject_GetAttrString(v, *s);
466 if (m == NULL) {
467 PyErr_Clear();
468 continue;
469 }
470 for (i = 0; ; i++) {
471 x = PySequence_GetItem(m, i);
472 if (x == NULL) {
473 PyErr_Clear();
474 break;
475 }
476 if (PyList_Append(l, x) != 0) {
477 Py_DECREF(x);
478 Py_DECREF(m);
479 goto error;
480 }
481 Py_DECREF(x);
482 }
483 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000484 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000485 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000486 if (PyList_Sort(l) != 0)
487 goto error;
488 return l;
489 error:
490 Py_XDECREF(l);
491 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000492}
493
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000494static char dir_doc[] =
495"dir([object]) -> list of strings\n\
496\n\
497Return an alphabetized list of names comprising (some of) the attributes\n\
498of the given object. Without an argument, the names in the current scope\n\
499are listed. With an instance argument, only the instance attributes are\n\
500returned. With a class argument, attributes of the base class are not\n\
501returned. For other types or arguments, this may list members or methods.";
502
503
Guido van Rossum79f25d91997-04-29 20:08:16 +0000504static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000505builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000506{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000507 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000508
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000510 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000511 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000512}
513
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000514static char divmod_doc[] =
515"divmod(x, y) -> (div, mod)\n\
516\n\
517Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
518
519
Guido van Rossum79f25d91997-04-29 20:08:16 +0000520static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000521builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000522{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000523 PyObject *cmd;
524 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000525 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000526
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000529 &PyDict_Type, &globals,
530 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 if (globals == Py_None) {
533 globals = PyEval_GetGlobals();
534 if (locals == Py_None)
535 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000536 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000537 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000538 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
540 if (PyDict_SetItemString(globals, "__builtins__",
541 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000542 return NULL;
543 }
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000544 if (PyCode_Check(cmd)) {
545 if (PyTuple_GET_SIZE(((PyCodeObject *)cmd)->co_freevars) > 0) {
546 PyErr_SetString(PyExc_TypeError,
547 "code object passed to eval() may not contain free variables");
548 return NULL;
549 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000550 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000551 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000552 if (!PyString_Check(cmd) &&
553 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000555 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000556 return NULL;
557 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000558 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000559 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000560 while (*str == ' ' || *str == '\t')
561 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000562 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000563}
564
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000565static char eval_doc[] =
566"eval(source[, globals[, locals]]) -> value\n\
567\n\
568Evaluate the source in the context of globals and locals.\n\
569The source may be a string representing a Python expression\n\
570or a code object as returned by compile().\n\
571The globals and locals are dictionaries, defaulting to the current\n\
572globals and locals. If only globals is given, locals defaults to it.";
573
574
Guido van Rossum79f25d91997-04-29 20:08:16 +0000575static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000576builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000577{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000578 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 PyObject *globals = Py_None, *locals = Py_None;
580 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000581 FILE* fp;
Tim Peters5ba58662001-07-16 02:29:45 +0000582 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000583 int exists;
584 struct stat s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000587 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 &PyDict_Type, &globals,
589 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000590 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591 if (globals == Py_None) {
592 globals = PyEval_GetGlobals();
593 if (locals == Py_None)
594 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000595 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000596 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000597 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
599 if (PyDict_SetItemString(globals, "__builtins__",
600 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000601 return NULL;
602 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000603
604 exists = 0;
605 /* Test for existence or directory. */
606 if (!stat(filename, &s)) {
Martin v. Löwisf9836ba2001-08-08 10:28:06 +0000607 if (S_ISDIR(s.st_mode))
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000608 errno = EISDIR;
609 else
610 exists = 1;
611 }
612
613 if (exists) {
614 Py_BEGIN_ALLOW_THREADS
615 fp = fopen(filename, "r");
616 Py_END_ALLOW_THREADS
617
618 if (fp == NULL) {
619 exists = 0;
620 }
621 }
622
623 if (!exists) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000624 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000625 return NULL;
626 }
Tim Peters5ba58662001-07-16 02:29:45 +0000627 cf.cf_flags = 0;
628 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000629 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000630 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000631 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000632 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000633 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000634 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000635}
636
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000637static char execfile_doc[] =
638"execfile(filename[, globals[, locals]])\n\
639\n\
640Read and execute a Python script from a file.\n\
641The globals and locals are dictionaries, defaulting to the current\n\
642globals and locals. If only globals is given, locals defaults to it.";
643
644
Guido van Rossum79f25d91997-04-29 20:08:16 +0000645static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000646builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000647{
Guido van Rossum950ff291998-06-29 13:38:57 +0000648 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000649 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000650
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000651 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000652 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000653#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000654 if (PyUnicode_Check(name)) {
655 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
656 if (name == NULL)
657 return NULL;
658 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000659#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000660
661 if (!PyString_Check(name)) {
662 PyErr_SetString(PyExc_TypeError,
663 "attribute name must be string");
664 return NULL;
665 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000666 result = PyObject_GetAttr(v, name);
667 if (result == NULL && dflt != NULL) {
668 PyErr_Clear();
669 Py_INCREF(dflt);
670 result = dflt;
671 }
672 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000673}
674
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000675static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000676"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000677\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000678Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
679When a default argument is given, it is returned when the attribute doesn't\n\
680exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000681
682
Guido van Rossum79f25d91997-04-29 20:08:16 +0000683static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000684builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000685{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000686 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000687
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688 d = PyEval_GetGlobals();
689 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000690 return d;
691}
692
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000693static char globals_doc[] =
694"globals() -> dictionary\n\
695\n\
696Return the dictionary containing the current scope's global variables.";
697
698
Guido van Rossum79f25d91997-04-29 20:08:16 +0000699static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000700builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000701{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 PyObject *v;
703 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000705 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000706 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000707#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000708 if (PyUnicode_Check(name)) {
709 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
710 if (name == NULL)
711 return NULL;
712 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000713#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000714
715 if (!PyString_Check(name)) {
716 PyErr_SetString(PyExc_TypeError,
717 "attribute name must be string");
718 return NULL;
719 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000721 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000723 Py_INCREF(Py_False);
724 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000725 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000727 Py_INCREF(Py_True);
728 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000729}
730
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731static char hasattr_doc[] =
732"hasattr(object, name) -> Boolean\n\
733\n\
734Return whether the object has an attribute with the given name.\n\
735(This is done by calling getattr(object, name) and catching exceptions.)";
736
737
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000739builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000740{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000741 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000742}
743
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000744static char id_doc[] =
745"id(object) -> integer\n\
746\n\
747Return the identity of an object. This is guaranteed to be unique among\n\
748simultaneously existing objects. (Hint: it's the object's memory address.)";
749
750
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000752builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000753{
754 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000755 PyObject *it; /* the iterator object */
756 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000757 } sequence;
758
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000760 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000761 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000762 register int i, j;
763
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000765 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 PyErr_SetString(PyExc_TypeError,
767 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000768 return NULL;
769 }
770
Guido van Rossum79f25d91997-04-29 20:08:16 +0000771 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000772 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000773
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000774 if (func == Py_None && n == 1) {
775 /* map(None, S) is the same as list(S). */
776 return PySequence_List(PyTuple_GetItem(args, 1));
777 }
778
Tim Peters4e9afdc2001-05-03 23:54:49 +0000779 /* Get space for sequence descriptors. Must NULL out the iterator
780 * pointers so that jumping to Fail_2 later doesn't see trash.
781 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
783 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 return NULL;
785 }
786 for (i = 0; i < n; ++i) {
787 seqs[i].it = (PyObject*)NULL;
788 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000789 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000790
Tim Peters4e9afdc2001-05-03 23:54:49 +0000791 /* Do a first pass to obtain iterators for the arguments, and set len
792 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000793 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000794 len = 0;
795 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
796 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000797 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000798
Tim Peters4e9afdc2001-05-03 23:54:49 +0000799 /* Get iterator. */
800 curseq = PyTuple_GetItem(args, i+1);
801 sqp->it = PyObject_GetIter(curseq);
802 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000803 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000804 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000805 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000806 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000808 goto Fail_2;
809 }
810
Tim Peters4e9afdc2001-05-03 23:54:49 +0000811 /* Update len. */
812 curlen = -1; /* unknown */
813 if (PySequence_Check(curseq) &&
814 curseq->ob_type->tp_as_sequence->sq_length) {
815 curlen = PySequence_Size(curseq);
816 if (curlen < 0)
817 PyErr_Clear();
818 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000819 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000820 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000821 if (curlen > len)
822 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000823 }
824
Tim Peters4e9afdc2001-05-03 23:54:49 +0000825 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000826 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000827 goto Fail_2;
828
Tim Peters4e9afdc2001-05-03 23:54:49 +0000829 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000830 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000831 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000832 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000833
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000835 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000836 else if ((alist = PyTuple_New(n)) == NULL)
837 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000838
839 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000840 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000841 Py_INCREF(Py_None);
842 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000843 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000844 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000845 item = PyIter_Next(sqp->it);
846 if (item)
847 ++numactive;
848 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000849 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000850 Py_XDECREF(alist);
851 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000852 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000853 Py_INCREF(Py_None);
854 item = Py_None;
855 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000856 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000857 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000858 if (alist)
859 PyTuple_SET_ITEM(alist, j, item);
860 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000861 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000862 }
863
Guido van Rossum32120311995-07-10 13:52:21 +0000864 if (!alist)
865 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000866
Tim Peters4e9afdc2001-05-03 23:54:49 +0000867 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000869 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000870 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000871
Guido van Rossum79f25d91997-04-29 20:08:16 +0000872 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000873 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000874 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000875 value = PyEval_CallObject(func, alist);
876 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000877 if (value == NULL)
878 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000879 }
880 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000881 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000882 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000883 if (status < 0)
884 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000885 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000886 else if (PyList_SetItem(result, i, value) < 0)
887 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000888 }
889
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000890 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
891 goto Fail_1;
892
Tim Peters4e9afdc2001-05-03 23:54:49 +0000893 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000894
Guido van Rossum12d12c51993-10-26 17:58:25 +0000895Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000897Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000898 result = NULL;
899Succeed:
900 assert(seqs);
901 for (i = 0; i < n; ++i)
902 Py_XDECREF(seqs[i].it);
903 PyMem_DEL(seqs);
904 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000905}
906
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000907static char map_doc[] =
908"map(function, sequence[, sequence, ...]) -> list\n\
909\n\
910Return a list of the results of applying the function to the items of\n\
911the argument sequence(s). If more than one sequence is given, the\n\
912function is called with an argument list consisting of the corresponding\n\
913item of each sequence, substituting None for missing values when not all\n\
914sequences have the same length. If the function is None, return a list of\n\
915the items of the sequence (or a list of tuples if more than one sequence).";
916
917
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000919builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000920{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 PyObject *v;
922 PyObject *name;
923 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000924
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000925 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000926 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000928 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929 Py_INCREF(Py_None);
930 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000931}
932
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000933static char setattr_doc[] =
934"setattr(object, name, value)\n\
935\n\
936Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
937``x.y = v''.";
938
939
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000941builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000942{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 PyObject *v;
944 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000945
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000946 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000947 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000949 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 Py_INCREF(Py_None);
951 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000952}
953
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000954static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +0000955"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000956\n\
957Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
958``del x.y''.";
959
960
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000962builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000963{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000964 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965
Guido van Rossum79f25d91997-04-29 20:08:16 +0000966 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000967 if (x == -1)
968 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000970}
971
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000972static char hash_doc[] =
973"hash(object) -> integer\n\
974\n\
975Return a hash value for the object. Two objects with the same value have\n\
976the same hash value. The reverse is not necessarily true, but likely.";
977
978
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000980builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000981{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000983
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000984 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000985 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000987 "hex() argument can't be converted to hex");
988 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000989 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000990 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000991}
992
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000993static char hex_doc[] =
994"hex(number) -> string\n\
995\n\
996Return the hexadecimal representation of an integer or long integer.";
997
998
Tim Petersdbd9ba62000-07-09 03:09:57 +0000999static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001000
Guido van Rossum79f25d91997-04-29 20:08:16 +00001001static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001002builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001003{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001005 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 PyObject *res;
1007 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001008
1009 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001010 if (line == NULL)
1011 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001012 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001013 return NULL;
1014 while (*str == ' ' || *str == '\t')
1015 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001016 globals = PyEval_GetGlobals();
1017 locals = PyEval_GetLocals();
1018 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1019 if (PyDict_SetItemString(globals, "__builtins__",
1020 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001021 return NULL;
1022 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001023 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001024 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001025 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001026}
1027
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001028static char input_doc[] =
1029"input([prompt]) -> value\n\
1030\n\
1031Equivalent to eval(raw_input(prompt)).";
1032
1033
Guido van Rossume8811f81997-02-14 15:48:05 +00001034static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001035builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001036{
1037 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001038 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001039 return NULL;
1040 Py_INCREF(s);
1041 PyString_InternInPlace(&s);
1042 return s;
1043}
1044
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001045static char intern_doc[] =
1046"intern(string) -> string\n\
1047\n\
1048``Intern'' the given string. This enters the string in the (global)\n\
1049table of interned strings whose purpose is to speed up dictionary lookups.\n\
1050Return the string itself or the previously interned string object with the\n\
1051same value.";
1052
1053
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001055builtin_iter(PyObject *self, PyObject *args)
1056{
1057 PyObject *v, *w = NULL;
1058
1059 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1060 return NULL;
1061 if (w == NULL)
1062 return PyObject_GetIter(v);
1063 if (!PyCallable_Check(v)) {
1064 PyErr_SetString(PyExc_TypeError,
1065 "iter(v, w): v must be callable");
1066 return NULL;
1067 }
1068 return PyCallIter_New(v, w);
1069}
1070
1071static char iter_doc[] =
1072"iter(collection) -> iterator\n\
1073iter(callable, sentinel) -> iterator\n\
1074\n\
1075Get an iterator from an object. In the first form, the argument must\n\
1076supply its own iterator, or be a sequence.\n\
1077In the second form, the callable is called until it returns the sentinel.";
1078
1079
1080static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001081builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001082{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001083 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001084
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001085 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001086 if (res < 0 && PyErr_Occurred())
1087 return NULL;
1088 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001089}
1090
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091static char len_doc[] =
1092"len(object) -> integer\n\
1093\n\
1094Return the number of items of a sequence or mapping.";
1095
1096
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001098builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001099{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001100 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001101
Guido van Rossum09df08a1998-05-22 00:51:39 +00001102 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001103
Guido van Rossum09df08a1998-05-22 00:51:39 +00001104 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1105 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001106
Guido van Rossum09df08a1998-05-22 00:51:39 +00001107 /* This swapping of stop and start is to maintain similarity with
1108 range(). */
1109 if (stop == NULL) {
1110 stop = start;
1111 start = NULL;
1112 }
1113 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001114}
1115
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001116static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001117"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001118\n\
1119Create a slice object. This is used for slicing by the Numeric extensions.";
1120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001123builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001124{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001126
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 d = PyEval_GetLocals();
1128 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001129 return d;
1130}
1131
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001132static char locals_doc[] =
1133"locals() -> dictionary\n\
1134\n\
1135Return the dictionary containing the current scope's local variables.";
1136
1137
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001139min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001140{
Tim Petersc3074532001-05-03 07:00:32 +00001141 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001142
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001144 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001145 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001146 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001147
1148 it = PyObject_GetIter(v);
1149 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001150 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001151
1152 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001153 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001154 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001155 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001156 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001157 Py_XDECREF(w);
1158 Py_DECREF(it);
1159 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001160 }
Tim Petersc3074532001-05-03 07:00:32 +00001161 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001162 }
Tim Petersc3074532001-05-03 07:00:32 +00001163
Guido van Rossum2d951851994-08-29 12:52:16 +00001164 if (w == NULL)
1165 w = x;
1166 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001167 int cmp = PyObject_RichCompareBool(x, w, op);
1168 if (cmp > 0) {
1169 Py_DECREF(w);
1170 w = x;
1171 }
1172 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001173 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001174 Py_DECREF(w);
1175 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001176 return NULL;
1177 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001178 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001180 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001181 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001182 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001183 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001184 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001185 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001186 return w;
1187}
1188
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001190builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001191{
Guido van Rossum53451b32001-01-17 15:47:24 +00001192 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001193}
1194
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001195static char min_doc[] =
1196"min(sequence) -> value\n\
1197min(a, b, c, ...) -> value\n\
1198\n\
1199With a single sequence argument, return its smallest item.\n\
1200With two or more arguments, return the smallest argument.";
1201
1202
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001204builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001205{
Guido van Rossum53451b32001-01-17 15:47:24 +00001206 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001207}
1208
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209static char max_doc[] =
1210"max(sequence) -> value\n\
1211max(a, b, c, ...) -> value\n\
1212\n\
1213With a single sequence argument, return its largest item.\n\
1214With two or more arguments, return the largest argument.";
1215
1216
Guido van Rossum79f25d91997-04-29 20:08:16 +00001217static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001218builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001219{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001222 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1223 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001224 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001225 "oct() argument can't be converted to oct");
1226 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001227 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001228 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001229}
1230
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001231static char oct_doc[] =
1232"oct(number) -> string\n\
1233\n\
1234Return the octal representation of an integer or long integer.";
1235
1236
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001238builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001239{
Mark Hammondef8b6542001-05-13 08:04:26 +00001240 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001241 char *mode = "r";
1242 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244
Mark Hammondef8b6542001-05-13 08:04:26 +00001245 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1246 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001247 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001248 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001249 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001250 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001251 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001252 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001253}
1254
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001255static char open_doc[] =
1256"open(filename[, mode[, buffering]]) -> file object\n\
1257\n\
1258Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1259writing or appending. The file will be created if it doesn't exist\n\
1260when opened for writing or appending; it will be truncated when\n\
1261opened for writing. Add a 'b' to the mode for binary files.\n\
1262Add a '+' to the mode to allow simultaneous reading and writing.\n\
1263If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1264buffered, and larger numbers specify the buffer size.";
1265
1266
Guido van Rossum79f25d91997-04-29 20:08:16 +00001267static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001268builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001269{
Guido van Rossum09095f32000-03-10 23:00:52 +00001270 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001271 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001272
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001273 if (PyString_Check(obj)) {
1274 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001275 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001276 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001277 return PyInt_FromLong(ord);
1278 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001279#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001280 } else if (PyUnicode_Check(obj)) {
1281 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001282 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001283 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001284 return PyInt_FromLong(ord);
1285 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001286#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001287 } else {
1288 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001289 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001290 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001291 return NULL;
1292 }
1293
Guido van Rossumad991772001-01-12 16:03:05 +00001294 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001295 "ord() expected a character, "
1296 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001297 size);
1298 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001299}
1300
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001301static char ord_doc[] =
1302"ord(c) -> integer\n\
1303\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001304Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001305
1306
Guido van Rossum79f25d91997-04-29 20:08:16 +00001307static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001308builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001309{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001310 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001311
Guido van Rossum79f25d91997-04-29 20:08:16 +00001312 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001313 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001314 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001315}
1316
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001317static char pow_doc[] =
1318"pow(x, y[, z]) -> number\n\
1319\n\
1320With two arguments, equivalent to x**y. With three arguments,\n\
1321equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1322
1323
Guido van Rossum124eff01999-02-23 16:11:01 +00001324/* Return number of items in range/xrange (lo, hi, step). step > 0
1325 * required. Return a value < 0 if & only if the true value is too
1326 * large to fit in a signed long.
1327 */
1328static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001329get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001330{
1331 /* -------------------------------------------------------------
1332 If lo >= hi, the range is empty.
1333 Else if n values are in the range, the last one is
1334 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1335 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1336 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1337 the RHS is non-negative and so truncation is the same as the
1338 floor. Letting M be the largest positive long, the worst case
1339 for the RHS numerator is hi=M, lo=-M-1, and then
1340 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1341 precision to compute the RHS exactly.
1342 ---------------------------------------------------------------*/
1343 long n = 0;
1344 if (lo < hi) {
1345 unsigned long uhi = (unsigned long)hi;
1346 unsigned long ulo = (unsigned long)lo;
1347 unsigned long diff = uhi - ulo - 1;
1348 n = (long)(diff / (unsigned long)step + 1);
1349 }
1350 return n;
1351}
1352
Guido van Rossum79f25d91997-04-29 20:08:16 +00001353static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001354builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001355{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001356 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001357 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001358 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001359
Guido van Rossum79f25d91997-04-29 20:08:16 +00001360 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001361
Guido van Rossum79f25d91997-04-29 20:08:16 +00001362 if (PyTuple_Size(args) <= 1) {
1363 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001364 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001365 &ihigh))
1366 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001367 }
1368 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001370 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001371 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001372 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001373 }
1374 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001375 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001376 return NULL;
1377 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001378 if (istep > 0)
1379 bign = get_len_of_range(ilow, ihigh, istep);
1380 else
1381 bign = get_len_of_range(ihigh, ilow, -istep);
1382 n = (int)bign;
1383 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001384 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001385 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001386 return NULL;
1387 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001388 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001389 if (v == NULL)
1390 return NULL;
1391 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001393 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001394 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001395 return NULL;
1396 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001397 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001398 ilow += istep;
1399 }
1400 return v;
1401}
1402
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001403static char range_doc[] =
1404"range([start,] stop[, step]) -> list of integers\n\
1405\n\
1406Return a list containing an arithmetic progression of integers.\n\
1407range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1408When step is given, it specifies the increment (or decrement).\n\
1409For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1410These are exactly the valid indices for a list of 4 elements.";
1411
1412
Guido van Rossum79f25d91997-04-29 20:08:16 +00001413static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001414builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001415{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001416 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001417 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001418
Guido van Rossum79f25d91997-04-29 20:08:16 +00001419 if (PyTuple_Size(args) <= 1) {
1420 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001421 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001422 &ihigh))
1423 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001424 }
1425 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001427 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001428 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001429 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001430 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001431 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001432 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001433 return NULL;
1434 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001435 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001436 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001437 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001438 n = get_len_of_range(ihigh, ilow, -istep);
1439 if (n < 0) {
1440 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001441 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001442 return NULL;
1443 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001444 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001445}
1446
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001447static char xrange_doc[] =
1448"xrange([start,] stop[, step]) -> xrange object\n\
1449\n\
1450Like range(), but instead of returning a list, returns an object that\n\
1451generates the numbers in the range on demand. This is slightly slower\n\
1452than range() but more memory efficient.";
1453
1454
Guido van Rossum79f25d91997-04-29 20:08:16 +00001455static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001456builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001457{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001458 PyObject *v = NULL;
1459 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001460
Guido van Rossum79f25d91997-04-29 20:08:16 +00001461 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001462 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001463 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1464 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001465 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001466 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001467 char *prompt;
1468 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001469 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001470 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001472 if (po == NULL)
1473 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001475 if (prompt == NULL)
1476 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001477 }
1478 else {
1479 po = NULL;
1480 prompt = "";
1481 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482 s = PyOS_Readline(prompt);
1483 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001484 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001485 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001486 return NULL;
1487 }
1488 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001489 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001490 result = NULL;
1491 }
1492 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001493 size_t len = strlen(s);
1494 if (len > INT_MAX) {
1495 PyErr_SetString(PyExc_OverflowError, "input too long");
1496 result = NULL;
1497 }
1498 else {
1499 result = PyString_FromStringAndSize(s, (int)(len-1));
1500 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001501 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001502 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001503 return result;
1504 }
Guido van Rossum90933611991-06-07 16:10:43 +00001505 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001506 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001507 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001508 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001509 return NULL;
1510 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001511 if (Py_FlushLine() != 0 ||
1512 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001513 return NULL;
1514 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001515 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001516 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001517 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001518 return NULL;
1519 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001521}
1522
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001523static char raw_input_doc[] =
1524"raw_input([prompt]) -> string\n\
1525\n\
1526Read a string from standard input. The trailing newline is stripped.\n\
1527If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1528On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1529is printed without a trailing newline before reading.";
1530
1531
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001533builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001534{
Tim Peters15d81ef2001-05-04 04:39:21 +00001535 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001536
Guido van Rossum79f25d91997-04-29 20:08:16 +00001537 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001538 return NULL;
1539 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001540 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001541
Tim Peters15d81ef2001-05-04 04:39:21 +00001542 it = PyObject_GetIter(seq);
1543 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001545 "reduce() arg 2 must support iteration");
1546 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001547 return NULL;
1548 }
1549
Guido van Rossum79f25d91997-04-29 20:08:16 +00001550 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001551 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001552
Tim Peters15d81ef2001-05-04 04:39:21 +00001553 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001554 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001555
1556 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001557 Py_DECREF(args);
1558 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001559 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001560 }
1561
Tim Peters15d81ef2001-05-04 04:39:21 +00001562 op2 = PyIter_Next(it);
1563 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001564 if (PyErr_Occurred())
1565 goto Fail;
1566 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001567 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001568
Guido van Rossum2d951851994-08-29 12:52:16 +00001569 if (result == NULL)
1570 result = op2;
1571 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001572 PyTuple_SetItem(args, 0, result);
1573 PyTuple_SetItem(args, 1, op2);
1574 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001575 goto Fail;
1576 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001577 }
1578
Guido van Rossum79f25d91997-04-29 20:08:16 +00001579 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001580
Guido van Rossum2d951851994-08-29 12:52:16 +00001581 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001582 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001583 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001584
Tim Peters15d81ef2001-05-04 04:39:21 +00001585 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001586 return result;
1587
Guido van Rossum2d951851994-08-29 12:52:16 +00001588Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001589 Py_XDECREF(args);
1590 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001591 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001592 return NULL;
1593}
1594
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001595static char reduce_doc[] =
1596"reduce(function, sequence[, initial]) -> value\n\
1597\n\
1598Apply a function of two arguments cumulatively to the items of a sequence,\n\
1599from left to right, so as to reduce the sequence to a single value.\n\
1600For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1601((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1602of the sequence in the calculation, and serves as a default when the\n\
1603sequence is empty.";
1604
1605
Guido van Rossum79f25d91997-04-29 20:08:16 +00001606static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001607builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001608{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001609 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001610}
1611
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001612static char reload_doc[] =
1613"reload(module) -> module\n\
1614\n\
1615Reload the module. The module must have been successfully imported before.";
1616
1617
Guido van Rossum79f25d91997-04-29 20:08:16 +00001618static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001619builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001620{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001621 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001622}
1623
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001624static char repr_doc[] =
1625"repr(object) -> string\n\
1626\n\
1627Return the canonical string representation of the object.\n\
1628For most object types, eval(repr(object)) == object.";
1629
1630
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001632builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001633{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001634 double x;
1635 double f;
1636 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001637 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001638
Guido van Rossum79f25d91997-04-29 20:08:16 +00001639 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001640 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001641 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001642 i = abs(ndigits);
1643 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001644 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001645 if (ndigits < 0)
1646 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001647 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001648 x *= f;
1649 if (x >= 0.0)
1650 x = floor(x + 0.5);
1651 else
1652 x = ceil(x - 0.5);
1653 if (ndigits < 0)
1654 x *= f;
1655 else
1656 x /= f;
1657 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001658}
1659
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001660static char round_doc[] =
1661"round(number[, ndigits]) -> floating point number\n\
1662\n\
1663Round a number to a given precision in decimal digits (default 0 digits).\n\
1664This always returns a floating point number. Precision may be negative.";
1665
1666
Guido van Rossum79f25d91997-04-29 20:08:16 +00001667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001668builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001669{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001670 PyObject *v = NULL;
1671 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001672
Guido van Rossum79f25d91997-04-29 20:08:16 +00001673 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001674 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001675 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001676 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001677 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001678 if (!PyErr_Occurred())
1679 PyErr_SetString(PyExc_SystemError,
1680 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001681 }
1682 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001683 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001684 }
1685 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001686 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001687 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001688 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001689 "vars() argument must have __dict__ attribute");
1690 return NULL;
1691 }
1692 }
1693 return d;
1694}
1695
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001696static char vars_doc[] =
1697"vars([object]) -> dictionary\n\
1698\n\
1699Without arguments, equivalent to locals().\n\
1700With an argument, equivalent to object.__dict__.";
1701
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001702static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001703builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001704{
1705 PyObject *inst;
1706 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001707 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001708
Guido van Rossum43713e52000-02-29 13:59:29 +00001709 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001710 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001711
Guido van Rossum823649d2001-03-21 18:40:58 +00001712 retval = PyObject_IsInstance(inst, cls);
1713 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001714 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001715 return PyInt_FromLong(retval);
1716}
1717
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001718static char isinstance_doc[] =
1719"isinstance(object, class-or-type) -> Boolean\n\
1720\n\
1721Return whether an object is an instance of a class or of a subclass thereof.\n\
1722With a type as second argument, return whether that is the object's type.";
1723
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001724
1725static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001726builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001727{
1728 PyObject *derived;
1729 PyObject *cls;
1730 int retval;
1731
Guido van Rossum43713e52000-02-29 13:59:29 +00001732 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001733 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001734
Guido van Rossum823649d2001-03-21 18:40:58 +00001735 retval = PyObject_IsSubclass(derived, cls);
1736 if (retval < 0)
1737 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001738 return PyInt_FromLong(retval);
1739}
1740
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001741static char issubclass_doc[] =
1742"issubclass(C, B) -> Boolean\n\
1743\n\
1744Return whether class C is a subclass (i.e., a derived class) of class B.";
1745
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001746
Barry Warsawbd599b52000-08-03 15:45:29 +00001747static PyObject*
1748builtin_zip(PyObject *self, PyObject *args)
1749{
1750 PyObject *ret;
1751 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001752 int i;
1753 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00001754
1755 if (itemsize < 1) {
1756 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001757 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001758 return NULL;
1759 }
1760 /* args must be a tuple */
1761 assert(PyTuple_Check(args));
1762
Tim Peters8572b4f2001-05-06 01:05:02 +00001763 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00001764 if ((ret = PyList_New(0)) == NULL)
1765 return NULL;
1766
Tim Peters8572b4f2001-05-06 01:05:02 +00001767 /* obtain iterators */
1768 itlist = PyTuple_New(itemsize);
1769 if (itlist == NULL)
1770 goto Fail_ret;
1771 for (i = 0; i < itemsize; ++i) {
1772 PyObject *item = PyTuple_GET_ITEM(args, i);
1773 PyObject *it = PyObject_GetIter(item);
1774 if (it == NULL) {
1775 if (PyErr_ExceptionMatches(PyExc_TypeError))
1776 PyErr_Format(PyExc_TypeError,
1777 "zip argument #%d must support iteration",
1778 i+1);
1779 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001780 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001781 PyTuple_SET_ITEM(itlist, i, it);
1782 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001783
Tim Peters8572b4f2001-05-06 01:05:02 +00001784 /* build result into ret list */
1785 for (;;) {
1786 int status;
1787 PyObject *next = PyTuple_New(itemsize);
1788 if (!next)
1789 goto Fail_ret_itlist;
1790
1791 for (i = 0; i < itemsize; i++) {
1792 PyObject *it = PyTuple_GET_ITEM(itlist, i);
1793 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001794 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001795 if (PyErr_Occurred()) {
1796 Py_DECREF(ret);
1797 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001798 }
1799 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001800 Py_DECREF(itlist);
1801 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00001802 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001803 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001804 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001805
1806 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00001807 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001808 if (status < 0)
1809 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001810 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001811
1812Fail_ret_itlist:
1813 Py_DECREF(itlist);
1814Fail_ret:
1815 Py_DECREF(ret);
1816 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001817}
1818
1819
1820static char zip_doc[] =
1821"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1822\n\
1823Return a list of tuples, where each tuple contains the i-th element\n\
1824from each of the argument sequences. The returned list is truncated\n\
1825in length to the length of the shortest argument sequence.";
1826
1827
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001829 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1830 {"abs", builtin_abs, METH_O, abs_doc},
1831 {"apply", builtin_apply, METH_VARARGS, apply_doc},
1832 {"buffer", builtin_buffer, METH_VARARGS, buffer_doc},
1833 {"callable", builtin_callable, METH_O, callable_doc},
1834 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1835 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1836 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1837 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1838 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1839 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1840 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1841 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1842 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1843 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1844 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1845 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1846 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1847 {"hash", builtin_hash, METH_O, hash_doc},
1848 {"hex", builtin_hex, METH_O, hex_doc},
1849 {"id", builtin_id, METH_O, id_doc},
1850 {"input", builtin_input, METH_VARARGS, input_doc},
1851 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1852 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1853 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1854 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1855 {"len", builtin_len, METH_O, len_doc},
1856 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1857 {"map", builtin_map, METH_VARARGS, map_doc},
1858 {"max", builtin_max, METH_VARARGS, max_doc},
1859 {"min", builtin_min, METH_VARARGS, min_doc},
1860 {"oct", builtin_oct, METH_O, oct_doc},
1861 {"open", builtin_open, METH_VARARGS, open_doc},
1862 {"ord", builtin_ord, METH_O, ord_doc},
1863 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1864 {"range", builtin_range, METH_VARARGS, range_doc},
1865 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1866 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1867 {"reload", builtin_reload, METH_O, reload_doc},
1868 {"repr", builtin_repr, METH_O, repr_doc},
1869 {"round", builtin_round, METH_VARARGS, round_doc},
1870 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
1871 {"slice", builtin_slice, METH_VARARGS, slice_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001872#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001873 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001874#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001875 {"vars", builtin_vars, METH_VARARGS, vars_doc},
1876 {"xrange", builtin_xrange, METH_VARARGS, xrange_doc},
1877 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001878 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001879};
1880
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001881static char builtin_doc[] =
1882"Built-in functions, exceptions, and other objects.\n\
1883\n\
1884Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
1885
Guido van Rossum25ce5661997-08-02 03:10:38 +00001886PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001887_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001888{
Fred Drake5550de32000-06-20 04:54:19 +00001889 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001890 mod = Py_InitModule4("__builtin__", builtin_methods,
1891 builtin_doc, (PyObject *)NULL,
1892 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001893 if (mod == NULL)
1894 return NULL;
1895 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001896 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
1897 return NULL;
1898 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
1899 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001900 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00001901 Py_NotImplemented) < 0)
1902 return NULL;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001903 if (PyDict_SetItemString(dict, "classmethod",
1904 (PyObject *) &PyClassMethod_Type) < 0)
1905 return NULL;
1906#ifndef WITHOUT_COMPLEX
1907 if (PyDict_SetItemString(dict, "complex",
1908 (PyObject *) &PyComplex_Type) < 0)
1909 return NULL;
1910#endif
1911 if (PyDict_SetItemString(dict, "dictionary",
1912 (PyObject *) &PyDict_Type) < 0)
1913 return NULL;
1914 if (PyDict_SetItemString(dict, "float",
1915 (PyObject *) &PyFloat_Type) < 0)
1916 return NULL;
1917 if (PyDict_SetItemString(dict, "int", (PyObject *) &PyInt_Type) < 0)
1918 return NULL;
1919 if (PyDict_SetItemString(dict, "list", (PyObject *) &PyList_Type) < 0)
1920 return NULL;
1921 if (PyDict_SetItemString(dict, "long", (PyObject *) &PyLong_Type) < 0)
1922 return NULL;
1923 if (PyDict_SetItemString(dict, "object",
1924 (PyObject *) &PyBaseObject_Type) < 0)
1925 return NULL;
1926 if (PyDict_SetItemString(dict, "staticmethod",
1927 (PyObject *) &PyStaticMethod_Type) < 0)
1928 return NULL;
1929 if (PyDict_SetItemString(dict, "str", (PyObject *) &PyString_Type) < 0)
1930 return NULL;
1931 if (PyDict_SetItemString(dict, "tuple",
1932 (PyObject *) &PyTuple_Type) < 0)
1933 return NULL;
1934 if (PyDict_SetItemString(dict, "type", (PyObject *) &PyType_Type) < 0)
1935 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001936#ifdef Py_USING_UNICODE
Tim Peters6d6c1a32001-08-02 04:15:00 +00001937 if (PyDict_SetItemString(dict, "unicode",
1938 (PyObject *) &PyUnicode_Type) < 0)
1939 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001940#endif
Fred Drake5550de32000-06-20 04:54:19 +00001941 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
1942 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1943 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001944 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001945 }
1946 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001947
Guido van Rossum25ce5661997-08-02 03:10:38 +00001948 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001949}
1950
Guido van Rossume77a7571993-11-03 15:01:26 +00001951/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001952
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001954filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001955{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001957 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001958 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001959
Guido van Rossumb7b45621995-08-04 04:07:45 +00001960 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001962 return tuple;
1963 }
1964
Guido van Rossum79f25d91997-04-29 20:08:16 +00001965 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001966 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001967
Guido van Rossum12d12c51993-10-26 17:58:25 +00001968 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001970 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001971
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001973 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 if (func == Py_None) {
1975 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001976 good = item;
1977 }
1978 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001980 if (arg == NULL)
1981 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982 good = PyEval_CallObject(func, arg);
1983 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001984 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001985 goto Fail_1;
1986 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001987 ok = PyObject_IsTrue(good);
1988 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001989 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 Py_INCREF(item);
1991 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001992 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001993 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001994 }
1995
Tim Peters4324aa32001-05-28 22:30:08 +00001996 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001997 return NULL;
1998
Guido van Rossum12d12c51993-10-26 17:58:25 +00001999 return result;
2000
Guido van Rossum12d12c51993-10-26 17:58:25 +00002001Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002003 return NULL;
2004}
2005
2006
Guido van Rossume77a7571993-11-03 15:01:26 +00002007/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002008
Guido van Rossum79f25d91997-04-29 20:08:16 +00002009static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002010filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002011{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002012 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002013 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002014 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002015
Guido van Rossum79f25d91997-04-29 20:08:16 +00002016 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002017 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002018 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002019 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002020 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002021 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002022 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002023
Guido van Rossum12d12c51993-10-26 17:58:25 +00002024 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002025 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002026 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002027
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002028 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2029 if (item == NULL)
2030 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002031 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002032 if (arg == NULL) {
2033 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002034 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002035 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002036 good = PyEval_CallObject(func, arg);
2037 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002038 if (good == NULL) {
2039 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002040 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002041 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002042 ok = PyObject_IsTrue(good);
2043 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002044 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002045 PyString_AS_STRING((PyStringObject *)result)[j++] =
2046 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002047 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002048 }
2049
Guido van Rossum79f25d91997-04-29 20:08:16 +00002050 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002051 return NULL;
2052
Guido van Rossum12d12c51993-10-26 17:58:25 +00002053 return result;
2054
Guido van Rossum12d12c51993-10-26 17:58:25 +00002055Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002056 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002057 return NULL;
2058}