blob: 55c71d39e60d4cc79c55ee760d06656a1a2c3a8d [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000012#ifdef HAVE_UNISTD_H
13#include <unistd.h>
14#endif
15
Mark Hammond26cffde42001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Fredrik Lundh5b979352001-06-26 17:46:10 +000019#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
21#else
22const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
23#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000024
Guido van Rossum12d12c51993-10-26 17:58:25 +000025/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000026static PyObject *filterstring(PyObject *, PyObject *);
27static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000031{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000033 PyObject *globals = NULL;
34 PyObject *locals = NULL;
35 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000038 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000040 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041}
42
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000043static char import_doc[] =
44"__import__(name, globals, locals, fromlist) -> module\n\
45\n\
46Import a module. The globals are only used to determine the context;\n\
47they are not modified. The locals are currently unused. The fromlist\n\
48should be a list of names to emulate ``from name import ...'', or an\n\
49empty list to emulate ``import name''.\n\
50When importing a module from a package, note that __import__('A.B', ...)\n\
51returns package A when fromlist is empty, but its submodule B when\n\
52fromlist is not empty.";
53
Guido van Rossum1ae940a1995-01-02 19:04:15 +000054
Guido van Rossum79f25d91997-04-29 20:08:16 +000055static PyObject *
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
Guido van Rossum79f25d91997-04-29 20:08:16 +0000429static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000430builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000431{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000432 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000433
Tim Peters5d2b77c2001-09-03 05:47:38 +0000434 if (!PyArg_ParseTuple(args, "|O:dir", &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000435 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000436 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000437}
438
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000439static char dir_doc[] =
Tim Peters5d2b77c2001-09-03 05:47:38 +0000440"dir([object]) -> list of strings\n"
441"\n"
442"Return an alphabetized list of names comprising (some of) the attributes\n"
443"of the given object, and of attributes reachable from it:\n"
444"\n"
445"No argument: the names in the current scope.\n"
446"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000447"Type or class object: its attributes, and recursively the attributes of\n"
448" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000449"Otherwise: its attributes, its class's attributes, and recursively the\n"
450" attributes of its class's base classes.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000451
Guido van Rossum79f25d91997-04-29 20:08:16 +0000452static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000453builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000454{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000455 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000456
Guido van Rossum79f25d91997-04-29 20:08:16 +0000457 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000458 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000459 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000460}
461
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000462static char divmod_doc[] =
463"divmod(x, y) -> (div, mod)\n\
464\n\
465Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
466
467
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000469builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000470{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000471 PyObject *cmd;
472 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000473 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000474 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000475
Guido van Rossum79f25d91997-04-29 20:08:16 +0000476 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000477 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000478 &PyDict_Type, &globals,
479 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000480 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000481 if (globals == Py_None) {
482 globals = PyEval_GetGlobals();
483 if (locals == Py_None)
484 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000485 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000486 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000487 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000488
Guido van Rossum79f25d91997-04-29 20:08:16 +0000489 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
490 if (PyDict_SetItemString(globals, "__builtins__",
491 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000492 return NULL;
493 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000494
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000495 if (PyCode_Check(cmd)) {
496 if (PyTuple_GET_SIZE(((PyCodeObject *)cmd)->co_freevars) > 0) {
497 PyErr_SetString(PyExc_TypeError,
498 "code object passed to eval() may not contain free variables");
499 return NULL;
500 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000501 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000502 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000503
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000504 if (!PyString_Check(cmd) &&
505 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000506 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000507 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000508 return NULL;
509 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000510 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000511 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512 while (*str == ' ' || *str == '\t')
513 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000514
515 cf.cf_flags = 0;
516 (void)PyEval_MergeCompilerFlags(&cf);
517 return PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000518}
519
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000520static char eval_doc[] =
521"eval(source[, globals[, locals]]) -> value\n\
522\n\
523Evaluate the source in the context of globals and locals.\n\
524The source may be a string representing a Python expression\n\
525or a code object as returned by compile().\n\
526The globals and locals are dictionaries, defaulting to the current\n\
527globals and locals. If only globals is given, locals defaults to it.";
528
529
Guido van Rossum79f25d91997-04-29 20:08:16 +0000530static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000531builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000532{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534 PyObject *globals = Py_None, *locals = Py_None;
535 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000536 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000537 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000538 int exists;
539 struct stat s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000542 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000543 &PyDict_Type, &globals,
544 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000545 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546 if (globals == Py_None) {
547 globals = PyEval_GetGlobals();
548 if (locals == Py_None)
549 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000550 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000552 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000553 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
554 if (PyDict_SetItemString(globals, "__builtins__",
555 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000556 return NULL;
557 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000558
559 exists = 0;
560 /* Test for existence or directory. */
561 if (!stat(filename, &s)) {
Martin v. Löwisf9836ba2001-08-08 10:28:06 +0000562 if (S_ISDIR(s.st_mode))
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000563 errno = EISDIR;
564 else
565 exists = 1;
566 }
567
568 if (exists) {
569 Py_BEGIN_ALLOW_THREADS
570 fp = fopen(filename, "r");
571 Py_END_ALLOW_THREADS
572
573 if (fp == NULL) {
574 exists = 0;
575 }
576 }
577
578 if (!exists) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000580 return NULL;
581 }
Tim Peters5ba58662001-07-16 02:29:45 +0000582 cf.cf_flags = 0;
583 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000584 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000585 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000586 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000587 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000588 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000590}
591
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000592static char execfile_doc[] =
593"execfile(filename[, globals[, locals]])\n\
594\n\
595Read and execute a Python script from a file.\n\
596The globals and locals are dictionaries, defaulting to the current\n\
597globals and locals. If only globals is given, locals defaults to it.";
598
599
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000601builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000602{
Guido van Rossum950ff291998-06-29 13:38:57 +0000603 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000604 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000605
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000606 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000607 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000608#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000609 if (PyUnicode_Check(name)) {
610 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
611 if (name == NULL)
612 return NULL;
613 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000614#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000615
616 if (!PyString_Check(name)) {
617 PyErr_SetString(PyExc_TypeError,
618 "attribute name must be string");
619 return NULL;
620 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000621 result = PyObject_GetAttr(v, name);
622 if (result == NULL && dflt != NULL) {
623 PyErr_Clear();
624 Py_INCREF(dflt);
625 result = dflt;
626 }
627 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000628}
629
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000630static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000631"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000632\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000633Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
634When a default argument is given, it is returned when the attribute doesn't\n\
635exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000636
637
Guido van Rossum79f25d91997-04-29 20:08:16 +0000638static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000639builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000640{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000642
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643 d = PyEval_GetGlobals();
644 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000645 return d;
646}
647
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000648static char globals_doc[] =
649"globals() -> dictionary\n\
650\n\
651Return the dictionary containing the current scope's global variables.";
652
653
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000655builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000656{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000657 PyObject *v;
658 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000659
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000660 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000661 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000662#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000663 if (PyUnicode_Check(name)) {
664 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
665 if (name == NULL)
666 return NULL;
667 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000668#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000669
670 if (!PyString_Check(name)) {
671 PyErr_SetString(PyExc_TypeError,
672 "attribute name must be string");
673 return NULL;
674 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000675 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000676 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000678 Py_INCREF(Py_False);
679 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000680 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000681 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000682 Py_INCREF(Py_True);
683 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000684}
685
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000686static char hasattr_doc[] =
687"hasattr(object, name) -> Boolean\n\
688\n\
689Return whether the object has an attribute with the given name.\n\
690(This is done by calling getattr(object, name) and catching exceptions.)";
691
692
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000694builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000695{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000696 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000697}
698
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000699static char id_doc[] =
700"id(object) -> integer\n\
701\n\
702Return the identity of an object. This is guaranteed to be unique among\n\
703simultaneously existing objects. (Hint: it's the object's memory address.)";
704
705
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000707builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000708{
709 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000710 PyObject *it; /* the iterator object */
711 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000712 } sequence;
713
Guido van Rossum79f25d91997-04-29 20:08:16 +0000714 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000715 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000716 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000717 register int i, j;
718
Guido van Rossum79f25d91997-04-29 20:08:16 +0000719 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000720 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000721 PyErr_SetString(PyExc_TypeError,
722 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000723 return NULL;
724 }
725
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000728
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000729 if (func == Py_None && n == 1) {
730 /* map(None, S) is the same as list(S). */
731 return PySequence_List(PyTuple_GetItem(args, 1));
732 }
733
Tim Peters4e9afdc2001-05-03 23:54:49 +0000734 /* Get space for sequence descriptors. Must NULL out the iterator
735 * pointers so that jumping to Fail_2 later doesn't see trash.
736 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
738 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000739 return NULL;
740 }
741 for (i = 0; i < n; ++i) {
742 seqs[i].it = (PyObject*)NULL;
743 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000744 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000745
Tim Peters4e9afdc2001-05-03 23:54:49 +0000746 /* Do a first pass to obtain iterators for the arguments, and set len
747 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000748 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000749 len = 0;
750 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
751 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000752 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000753
Tim Peters4e9afdc2001-05-03 23:54:49 +0000754 /* Get iterator. */
755 curseq = PyTuple_GetItem(args, i+1);
756 sqp->it = PyObject_GetIter(curseq);
757 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000758 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000759 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000760 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000761 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000762 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000763 goto Fail_2;
764 }
765
Tim Peters4e9afdc2001-05-03 23:54:49 +0000766 /* Update len. */
767 curlen = -1; /* unknown */
768 if (PySequence_Check(curseq) &&
769 curseq->ob_type->tp_as_sequence->sq_length) {
770 curlen = PySequence_Size(curseq);
771 if (curlen < 0)
772 PyErr_Clear();
773 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000774 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000775 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000776 if (curlen > len)
777 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000778 }
779
Tim Peters4e9afdc2001-05-03 23:54:49 +0000780 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000781 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000782 goto Fail_2;
783
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000785 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000786 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000787 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000788
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000790 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000791 else if ((alist = PyTuple_New(n)) == NULL)
792 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000793
794 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000795 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000796 Py_INCREF(Py_None);
797 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000798 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000799 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000800 item = PyIter_Next(sqp->it);
801 if (item)
802 ++numactive;
803 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000804 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000805 Py_XDECREF(alist);
806 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000807 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 Py_INCREF(Py_None);
809 item = Py_None;
810 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000811 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000812 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000813 if (alist)
814 PyTuple_SET_ITEM(alist, j, item);
815 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000816 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000817 }
818
Guido van Rossum32120311995-07-10 13:52:21 +0000819 if (!alist)
820 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000821
Tim Peters4e9afdc2001-05-03 23:54:49 +0000822 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000823 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000824 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000826
Guido van Rossum79f25d91997-04-29 20:08:16 +0000827 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000828 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000829 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000830 value = PyEval_CallObject(func, alist);
831 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000832 if (value == NULL)
833 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000834 }
835 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000836 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000837 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000838 if (status < 0)
839 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000840 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000841 else if (PyList_SetItem(result, i, value) < 0)
842 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000843 }
844
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000845 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
846 goto Fail_1;
847
Tim Peters4e9afdc2001-05-03 23:54:49 +0000848 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000849
Guido van Rossum12d12c51993-10-26 17:58:25 +0000850Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000851 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000852Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000853 result = NULL;
854Succeed:
855 assert(seqs);
856 for (i = 0; i < n; ++i)
857 Py_XDECREF(seqs[i].it);
858 PyMem_DEL(seqs);
859 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000860}
861
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000862static char map_doc[] =
863"map(function, sequence[, sequence, ...]) -> list\n\
864\n\
865Return a list of the results of applying the function to the items of\n\
866the argument sequence(s). If more than one sequence is given, the\n\
867function is called with an argument list consisting of the corresponding\n\
868item of each sequence, substituting None for missing values when not all\n\
869sequences have the same length. If the function is None, return a list of\n\
870the items of the sequence (or a list of tuples if more than one sequence).";
871
872
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000874builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000875{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876 PyObject *v;
877 PyObject *name;
878 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000879
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000880 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000881 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000883 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 Py_INCREF(Py_None);
885 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000886}
887
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000888static char setattr_doc[] =
889"setattr(object, name, value)\n\
890\n\
891Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
892``x.y = v''.";
893
894
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000896builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000897{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000898 PyObject *v;
899 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000900
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000901 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000902 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000904 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905 Py_INCREF(Py_None);
906 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000907}
908
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000909static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +0000910"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000911\n\
912Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
913``del x.y''.";
914
915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000917builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000918{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000919 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000920
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000922 if (x == -1)
923 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000925}
926
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000927static char hash_doc[] =
928"hash(object) -> integer\n\
929\n\
930Return a hash value for the object. Two objects with the same value have\n\
931the same hash value. The reverse is not necessarily true, but likely.";
932
933
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000935builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000936{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000938
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000939 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000940 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000942 "hex() argument can't be converted to hex");
943 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000944 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000945 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000946}
947
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000948static char hex_doc[] =
949"hex(number) -> string\n\
950\n\
951Return the hexadecimal representation of an integer or long integer.";
952
953
Tim Petersdbd9ba62000-07-09 03:09:57 +0000954static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000955
Guido van Rossum79f25d91997-04-29 20:08:16 +0000956static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000957builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000958{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000960 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961 PyObject *res;
962 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000963
964 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000965 if (line == NULL)
966 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000968 return NULL;
969 while (*str == ' ' || *str == '\t')
970 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 globals = PyEval_GetGlobals();
972 locals = PyEval_GetLocals();
973 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
974 if (PyDict_SetItemString(globals, "__builtins__",
975 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000976 return NULL;
977 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000978 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000980 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000981}
982
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000983static char input_doc[] =
984"input([prompt]) -> value\n\
985\n\
986Equivalent to eval(raw_input(prompt)).";
987
988
Guido van Rossume8811f81997-02-14 15:48:05 +0000989static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000990builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +0000991{
992 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +0000993 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +0000994 return NULL;
995 Py_INCREF(s);
996 PyString_InternInPlace(&s);
997 return s;
998}
999
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001000static char intern_doc[] =
1001"intern(string) -> string\n\
1002\n\
1003``Intern'' the given string. This enters the string in the (global)\n\
1004table of interned strings whose purpose is to speed up dictionary lookups.\n\
1005Return the string itself or the previously interned string object with the\n\
1006same value.";
1007
1008
Guido van Rossum79f25d91997-04-29 20:08:16 +00001009static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001010builtin_iter(PyObject *self, PyObject *args)
1011{
1012 PyObject *v, *w = NULL;
1013
1014 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1015 return NULL;
1016 if (w == NULL)
1017 return PyObject_GetIter(v);
1018 if (!PyCallable_Check(v)) {
1019 PyErr_SetString(PyExc_TypeError,
1020 "iter(v, w): v must be callable");
1021 return NULL;
1022 }
1023 return PyCallIter_New(v, w);
1024}
1025
1026static char iter_doc[] =
1027"iter(collection) -> iterator\n\
1028iter(callable, sentinel) -> iterator\n\
1029\n\
1030Get an iterator from an object. In the first form, the argument must\n\
1031supply its own iterator, or be a sequence.\n\
1032In the second form, the callable is called until it returns the sentinel.";
1033
1034
1035static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001036builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001037{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001038 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001039
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001040 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001041 if (res < 0 && PyErr_Occurred())
1042 return NULL;
1043 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001044}
1045
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001046static char len_doc[] =
1047"len(object) -> integer\n\
1048\n\
1049Return the number of items of a sequence or mapping.";
1050
1051
Guido van Rossum79f25d91997-04-29 20:08:16 +00001052static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001053builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001054{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001055 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001056
Guido van Rossum09df08a1998-05-22 00:51:39 +00001057 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001058
Guido van Rossum09df08a1998-05-22 00:51:39 +00001059 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1060 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001061
Guido van Rossum09df08a1998-05-22 00:51:39 +00001062 /* This swapping of stop and start is to maintain similarity with
1063 range(). */
1064 if (stop == NULL) {
1065 stop = start;
1066 start = NULL;
1067 }
1068 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001069}
1070
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001071static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001072"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073\n\
1074Create a slice object. This is used for slicing by the Numeric extensions.";
1075
1076
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001078builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001079{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001081
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082 d = PyEval_GetLocals();
1083 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001084 return d;
1085}
1086
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001087static char locals_doc[] =
1088"locals() -> dictionary\n\
1089\n\
1090Return the dictionary containing the current scope's local variables.";
1091
1092
Guido van Rossum79f25d91997-04-29 20:08:16 +00001093static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001094min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001095{
Tim Petersc3074532001-05-03 07:00:32 +00001096 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001097
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001099 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001101 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001102
1103 it = PyObject_GetIter(v);
1104 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001105 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001106
1107 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001108 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001109 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001110 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001111 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001112 Py_XDECREF(w);
1113 Py_DECREF(it);
1114 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001115 }
Tim Petersc3074532001-05-03 07:00:32 +00001116 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001117 }
Tim Petersc3074532001-05-03 07:00:32 +00001118
Guido van Rossum2d951851994-08-29 12:52:16 +00001119 if (w == NULL)
1120 w = x;
1121 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001122 int cmp = PyObject_RichCompareBool(x, w, op);
1123 if (cmp > 0) {
1124 Py_DECREF(w);
1125 w = x;
1126 }
1127 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001128 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001129 Py_DECREF(w);
1130 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001131 return NULL;
1132 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001133 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001135 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001136 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001137 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001139 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001140 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001141 return w;
1142}
1143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001145builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001146{
Guido van Rossum53451b32001-01-17 15:47:24 +00001147 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001148}
1149
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001150static char min_doc[] =
1151"min(sequence) -> value\n\
1152min(a, b, c, ...) -> value\n\
1153\n\
1154With a single sequence argument, return its smallest item.\n\
1155With two or more arguments, return the smallest argument.";
1156
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001159builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001160{
Guido van Rossum53451b32001-01-17 15:47:24 +00001161 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001162}
1163
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001164static char max_doc[] =
1165"max(sequence) -> value\n\
1166max(a, b, c, ...) -> value\n\
1167\n\
1168With a single sequence argument, return its largest item.\n\
1169With two or more arguments, return the largest argument.";
1170
1171
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001173builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001174{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001176
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001177 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1178 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001180 "oct() argument can't be converted to oct");
1181 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001182 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001183 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001184}
1185
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186static char oct_doc[] =
1187"oct(number) -> string\n\
1188\n\
1189Return the octal representation of an integer or long integer.";
1190
1191
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001193builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001194{
Mark Hammondef8b6542001-05-13 08:04:26 +00001195 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001196 char *mode = "r";
1197 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199
Mark Hammondef8b6542001-05-13 08:04:26 +00001200 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1201 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001202 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001204 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001205 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001207 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001208}
1209
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001210static char open_doc[] =
1211"open(filename[, mode[, buffering]]) -> file object\n\
1212\n\
1213Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1214writing or appending. The file will be created if it doesn't exist\n\
1215when opened for writing or appending; it will be truncated when\n\
1216opened for writing. Add a 'b' to the mode for binary files.\n\
1217Add a '+' to the mode to allow simultaneous reading and writing.\n\
1218If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1219buffered, and larger numbers specify the buffer size.";
1220
1221
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001223builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001224{
Guido van Rossum09095f32000-03-10 23:00:52 +00001225 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001226 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001227
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001228 if (PyString_Check(obj)) {
1229 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001230 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001231 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001232 return PyInt_FromLong(ord);
1233 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001234#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001235 } else if (PyUnicode_Check(obj)) {
1236 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001237 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001238 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001239 return PyInt_FromLong(ord);
1240 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001241#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001242 } else {
1243 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001244 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001245 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001246 return NULL;
1247 }
1248
Guido van Rossumad991772001-01-12 16:03:05 +00001249 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001250 "ord() expected a character, "
1251 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001252 size);
1253 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001254}
1255
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001256static char ord_doc[] =
1257"ord(c) -> integer\n\
1258\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001259Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001260
1261
Guido van Rossum79f25d91997-04-29 20:08:16 +00001262static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001263builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001264{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001265 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001266
Guido van Rossum79f25d91997-04-29 20:08:16 +00001267 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001268 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001269 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001270}
1271
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001272static char pow_doc[] =
1273"pow(x, y[, z]) -> number\n\
1274\n\
1275With two arguments, equivalent to x**y. With three arguments,\n\
1276equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1277
1278
Guido van Rossum124eff01999-02-23 16:11:01 +00001279/* Return number of items in range/xrange (lo, hi, step). step > 0
1280 * required. Return a value < 0 if & only if the true value is too
1281 * large to fit in a signed long.
1282 */
1283static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001284get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001285{
1286 /* -------------------------------------------------------------
1287 If lo >= hi, the range is empty.
1288 Else if n values are in the range, the last one is
1289 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1290 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1291 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1292 the RHS is non-negative and so truncation is the same as the
1293 floor. Letting M be the largest positive long, the worst case
1294 for the RHS numerator is hi=M, lo=-M-1, and then
1295 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1296 precision to compute the RHS exactly.
1297 ---------------------------------------------------------------*/
1298 long n = 0;
1299 if (lo < hi) {
1300 unsigned long uhi = (unsigned long)hi;
1301 unsigned long ulo = (unsigned long)lo;
1302 unsigned long diff = uhi - ulo - 1;
1303 n = (long)(diff / (unsigned long)step + 1);
1304 }
1305 return n;
1306}
1307
Guido van Rossum79f25d91997-04-29 20:08:16 +00001308static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001309builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001310{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001311 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001312 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001313 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001314
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001316
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317 if (PyTuple_Size(args) <= 1) {
1318 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001319 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001320 &ihigh))
1321 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322 }
1323 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001324 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001325 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001326 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001327 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001328 }
1329 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001330 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001331 return NULL;
1332 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001333 if (istep > 0)
1334 bign = get_len_of_range(ilow, ihigh, istep);
1335 else
1336 bign = get_len_of_range(ihigh, ilow, -istep);
1337 n = (int)bign;
1338 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001339 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001340 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001341 return NULL;
1342 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001343 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001344 if (v == NULL)
1345 return NULL;
1346 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001347 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001348 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001349 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001350 return NULL;
1351 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001352 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001353 ilow += istep;
1354 }
1355 return v;
1356}
1357
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001358static char range_doc[] =
1359"range([start,] stop[, step]) -> list of integers\n\
1360\n\
1361Return a list containing an arithmetic progression of integers.\n\
1362range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1363When step is given, it specifies the increment (or decrement).\n\
1364For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1365These are exactly the valid indices for a list of 4 elements.";
1366
1367
Guido van Rossum79f25d91997-04-29 20:08:16 +00001368static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001369builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001370{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001371 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001372 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001373
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 if (PyTuple_Size(args) <= 1) {
1375 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001376 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001377 &ihigh))
1378 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001379 }
1380 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001381 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001382 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001383 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001384 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001385 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001386 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001387 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001388 return NULL;
1389 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001390 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001391 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001392 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001393 n = get_len_of_range(ihigh, ilow, -istep);
1394 if (n < 0) {
1395 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001396 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001397 return NULL;
1398 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001399 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001400}
1401
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001402static char xrange_doc[] =
1403"xrange([start,] stop[, step]) -> xrange object\n\
1404\n\
1405Like range(), but instead of returning a list, returns an object that\n\
1406generates the numbers in the range on demand. This is slightly slower\n\
1407than range() but more memory efficient.";
1408
1409
Guido van Rossum79f25d91997-04-29 20:08:16 +00001410static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001411builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001412{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001413 PyObject *v = NULL;
1414 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001415
Guido van Rossum79f25d91997-04-29 20:08:16 +00001416 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001417 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001418 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1419 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001420 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001421 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001422 char *prompt;
1423 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001424 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001425 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001427 if (po == NULL)
1428 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001430 if (prompt == NULL)
1431 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001432 }
1433 else {
1434 po = NULL;
1435 prompt = "";
1436 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001437 s = PyOS_Readline(prompt);
1438 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001439 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001440 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001441 return NULL;
1442 }
1443 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001444 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001445 result = NULL;
1446 }
1447 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001448 size_t len = strlen(s);
1449 if (len > INT_MAX) {
1450 PyErr_SetString(PyExc_OverflowError, "input too long");
1451 result = NULL;
1452 }
1453 else {
1454 result = PyString_FromStringAndSize(s, (int)(len-1));
1455 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001456 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001457 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001458 return result;
1459 }
Guido van Rossum90933611991-06-07 16:10:43 +00001460 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001461 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001462 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001463 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001464 return NULL;
1465 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001466 if (Py_FlushLine() != 0 ||
1467 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001468 return NULL;
1469 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001470 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001471 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001472 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001473 return NULL;
1474 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001475 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001476}
1477
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001478static char raw_input_doc[] =
1479"raw_input([prompt]) -> string\n\
1480\n\
1481Read a string from standard input. The trailing newline is stripped.\n\
1482If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1483On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1484is printed without a trailing newline before reading.";
1485
1486
Guido van Rossum79f25d91997-04-29 20:08:16 +00001487static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001488builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001489{
Tim Peters15d81ef2001-05-04 04:39:21 +00001490 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001491
Guido van Rossum79f25d91997-04-29 20:08:16 +00001492 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001493 return NULL;
1494 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001495 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001496
Tim Peters15d81ef2001-05-04 04:39:21 +00001497 it = PyObject_GetIter(seq);
1498 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001499 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001500 "reduce() arg 2 must support iteration");
1501 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001502 return NULL;
1503 }
1504
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001506 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001507
Tim Peters15d81ef2001-05-04 04:39:21 +00001508 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001510
1511 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001512 Py_DECREF(args);
1513 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001514 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001515 }
1516
Tim Peters15d81ef2001-05-04 04:39:21 +00001517 op2 = PyIter_Next(it);
1518 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001519 if (PyErr_Occurred())
1520 goto Fail;
1521 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001522 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001523
Guido van Rossum2d951851994-08-29 12:52:16 +00001524 if (result == NULL)
1525 result = op2;
1526 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001527 PyTuple_SetItem(args, 0, result);
1528 PyTuple_SetItem(args, 1, op2);
1529 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001530 goto Fail;
1531 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001532 }
1533
Guido van Rossum79f25d91997-04-29 20:08:16 +00001534 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001535
Guido van Rossum2d951851994-08-29 12:52:16 +00001536 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001537 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001538 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001539
Tim Peters15d81ef2001-05-04 04:39:21 +00001540 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001541 return result;
1542
Guido van Rossum2d951851994-08-29 12:52:16 +00001543Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 Py_XDECREF(args);
1545 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001546 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001547 return NULL;
1548}
1549
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001550static char reduce_doc[] =
1551"reduce(function, sequence[, initial]) -> value\n\
1552\n\
1553Apply a function of two arguments cumulatively to the items of a sequence,\n\
1554from left to right, so as to reduce the sequence to a single value.\n\
1555For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1556((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1557of the sequence in the calculation, and serves as a default when the\n\
1558sequence is empty.";
1559
1560
Guido van Rossum79f25d91997-04-29 20:08:16 +00001561static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001562builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001563{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001564 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001565}
1566
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001567static char reload_doc[] =
1568"reload(module) -> module\n\
1569\n\
1570Reload the module. The module must have been successfully imported before.";
1571
1572
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001574builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001575{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001576 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001577}
1578
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001579static char repr_doc[] =
1580"repr(object) -> string\n\
1581\n\
1582Return the canonical string representation of the object.\n\
1583For most object types, eval(repr(object)) == object.";
1584
1585
Guido van Rossum79f25d91997-04-29 20:08:16 +00001586static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001587builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001588{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001589 double x;
1590 double f;
1591 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001592 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001593
Guido van Rossum79f25d91997-04-29 20:08:16 +00001594 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001595 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001596 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001597 i = abs(ndigits);
1598 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001599 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001600 if (ndigits < 0)
1601 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001602 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001603 x *= f;
1604 if (x >= 0.0)
1605 x = floor(x + 0.5);
1606 else
1607 x = ceil(x - 0.5);
1608 if (ndigits < 0)
1609 x *= f;
1610 else
1611 x /= f;
1612 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001613}
1614
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001615static char round_doc[] =
1616"round(number[, ndigits]) -> floating point number\n\
1617\n\
1618Round a number to a given precision in decimal digits (default 0 digits).\n\
1619This always returns a floating point number. Precision may be negative.";
1620
1621
Guido van Rossum79f25d91997-04-29 20:08:16 +00001622static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001623builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001624{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625 PyObject *v = NULL;
1626 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001627
Guido van Rossum79f25d91997-04-29 20:08:16 +00001628 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001629 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001630 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001632 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001633 if (!PyErr_Occurred())
1634 PyErr_SetString(PyExc_SystemError,
1635 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001636 }
1637 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001638 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001639 }
1640 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001641 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001642 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001643 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001644 "vars() argument must have __dict__ attribute");
1645 return NULL;
1646 }
1647 }
1648 return d;
1649}
1650
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001651static char vars_doc[] =
1652"vars([object]) -> dictionary\n\
1653\n\
1654Without arguments, equivalent to locals().\n\
1655With an argument, equivalent to object.__dict__.";
1656
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001657static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001658builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001659{
1660 PyObject *inst;
1661 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001662 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001663
Guido van Rossum43713e52000-02-29 13:59:29 +00001664 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001665 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001666
Guido van Rossum823649d2001-03-21 18:40:58 +00001667 retval = PyObject_IsInstance(inst, cls);
1668 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001669 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001670 return PyInt_FromLong(retval);
1671}
1672
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001673static char isinstance_doc[] =
1674"isinstance(object, class-or-type) -> Boolean\n\
1675\n\
1676Return whether an object is an instance of a class or of a subclass thereof.\n\
1677With a type as second argument, return whether that is the object's type.";
1678
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001679
1680static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001681builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001682{
1683 PyObject *derived;
1684 PyObject *cls;
1685 int retval;
1686
Guido van Rossum43713e52000-02-29 13:59:29 +00001687 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001688 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001689
Guido van Rossum823649d2001-03-21 18:40:58 +00001690 retval = PyObject_IsSubclass(derived, cls);
1691 if (retval < 0)
1692 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001693 return PyInt_FromLong(retval);
1694}
1695
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001696static char issubclass_doc[] =
1697"issubclass(C, B) -> Boolean\n\
1698\n\
1699Return whether class C is a subclass (i.e., a derived class) of class B.";
1700
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001701
Barry Warsawbd599b52000-08-03 15:45:29 +00001702static PyObject*
1703builtin_zip(PyObject *self, PyObject *args)
1704{
1705 PyObject *ret;
1706 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001707 int i;
1708 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00001709
1710 if (itemsize < 1) {
1711 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001712 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001713 return NULL;
1714 }
1715 /* args must be a tuple */
1716 assert(PyTuple_Check(args));
1717
Tim Peters8572b4f2001-05-06 01:05:02 +00001718 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00001719 if ((ret = PyList_New(0)) == NULL)
1720 return NULL;
1721
Tim Peters8572b4f2001-05-06 01:05:02 +00001722 /* obtain iterators */
1723 itlist = PyTuple_New(itemsize);
1724 if (itlist == NULL)
1725 goto Fail_ret;
1726 for (i = 0; i < itemsize; ++i) {
1727 PyObject *item = PyTuple_GET_ITEM(args, i);
1728 PyObject *it = PyObject_GetIter(item);
1729 if (it == NULL) {
1730 if (PyErr_ExceptionMatches(PyExc_TypeError))
1731 PyErr_Format(PyExc_TypeError,
1732 "zip argument #%d must support iteration",
1733 i+1);
1734 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001735 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001736 PyTuple_SET_ITEM(itlist, i, it);
1737 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001738
Tim Peters8572b4f2001-05-06 01:05:02 +00001739 /* build result into ret list */
1740 for (;;) {
1741 int status;
1742 PyObject *next = PyTuple_New(itemsize);
1743 if (!next)
1744 goto Fail_ret_itlist;
1745
1746 for (i = 0; i < itemsize; i++) {
1747 PyObject *it = PyTuple_GET_ITEM(itlist, i);
1748 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001749 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001750 if (PyErr_Occurred()) {
1751 Py_DECREF(ret);
1752 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001753 }
1754 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001755 Py_DECREF(itlist);
1756 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00001757 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001758 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001759 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001760
1761 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00001762 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001763 if (status < 0)
1764 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001765 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001766
1767Fail_ret_itlist:
1768 Py_DECREF(itlist);
1769Fail_ret:
1770 Py_DECREF(ret);
1771 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001772}
1773
1774
1775static char zip_doc[] =
1776"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1777\n\
1778Return a list of tuples, where each tuple contains the i-th element\n\
1779from each of the argument sequences. The returned list is truncated\n\
1780in length to the length of the shortest argument sequence.";
1781
1782
Guido van Rossum79f25d91997-04-29 20:08:16 +00001783static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001784 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1785 {"abs", builtin_abs, METH_O, abs_doc},
1786 {"apply", builtin_apply, METH_VARARGS, apply_doc},
1787 {"buffer", builtin_buffer, METH_VARARGS, buffer_doc},
1788 {"callable", builtin_callable, METH_O, callable_doc},
1789 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1790 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1791 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1792 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1793 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1794 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1795 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1796 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1797 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1798 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1799 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1800 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1801 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1802 {"hash", builtin_hash, METH_O, hash_doc},
1803 {"hex", builtin_hex, METH_O, hex_doc},
1804 {"id", builtin_id, METH_O, id_doc},
1805 {"input", builtin_input, METH_VARARGS, input_doc},
1806 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1807 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1808 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1809 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1810 {"len", builtin_len, METH_O, len_doc},
1811 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1812 {"map", builtin_map, METH_VARARGS, map_doc},
1813 {"max", builtin_max, METH_VARARGS, max_doc},
1814 {"min", builtin_min, METH_VARARGS, min_doc},
1815 {"oct", builtin_oct, METH_O, oct_doc},
1816 {"open", builtin_open, METH_VARARGS, open_doc},
1817 {"ord", builtin_ord, METH_O, ord_doc},
1818 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1819 {"range", builtin_range, METH_VARARGS, range_doc},
1820 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1821 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1822 {"reload", builtin_reload, METH_O, reload_doc},
1823 {"repr", builtin_repr, METH_O, repr_doc},
1824 {"round", builtin_round, METH_VARARGS, round_doc},
1825 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
1826 {"slice", builtin_slice, METH_VARARGS, slice_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001827#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001828 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001829#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001830 {"vars", builtin_vars, METH_VARARGS, vars_doc},
1831 {"xrange", builtin_xrange, METH_VARARGS, xrange_doc},
1832 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001833 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001834};
1835
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001836static char builtin_doc[] =
1837"Built-in functions, exceptions, and other objects.\n\
1838\n\
1839Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
1840
Guido van Rossum25ce5661997-08-02 03:10:38 +00001841PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001842_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001843{
Fred Drake5550de32000-06-20 04:54:19 +00001844 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001845 mod = Py_InitModule4("__builtin__", builtin_methods,
1846 builtin_doc, (PyObject *)NULL,
1847 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001848 if (mod == NULL)
1849 return NULL;
1850 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001851 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
1852 return NULL;
1853 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
1854 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001855 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00001856 Py_NotImplemented) < 0)
1857 return NULL;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001858 if (PyDict_SetItemString(dict, "classmethod",
1859 (PyObject *) &PyClassMethod_Type) < 0)
1860 return NULL;
1861#ifndef WITHOUT_COMPLEX
1862 if (PyDict_SetItemString(dict, "complex",
1863 (PyObject *) &PyComplex_Type) < 0)
1864 return NULL;
1865#endif
1866 if (PyDict_SetItemString(dict, "dictionary",
1867 (PyObject *) &PyDict_Type) < 0)
1868 return NULL;
1869 if (PyDict_SetItemString(dict, "float",
1870 (PyObject *) &PyFloat_Type) < 0)
1871 return NULL;
Guido van Rossum29a62dd2001-08-23 21:40:38 +00001872 if (PyDict_SetItemString(dict, "getset",
1873 (PyObject *) &PyGetSet_Type) < 0)
1874 return NULL;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001875 if (PyDict_SetItemString(dict, "int", (PyObject *) &PyInt_Type) < 0)
1876 return NULL;
1877 if (PyDict_SetItemString(dict, "list", (PyObject *) &PyList_Type) < 0)
1878 return NULL;
1879 if (PyDict_SetItemString(dict, "long", (PyObject *) &PyLong_Type) < 0)
1880 return NULL;
1881 if (PyDict_SetItemString(dict, "object",
1882 (PyObject *) &PyBaseObject_Type) < 0)
1883 return NULL;
1884 if (PyDict_SetItemString(dict, "staticmethod",
1885 (PyObject *) &PyStaticMethod_Type) < 0)
1886 return NULL;
1887 if (PyDict_SetItemString(dict, "str", (PyObject *) &PyString_Type) < 0)
1888 return NULL;
Guido van Rossumf5cb3572001-08-24 16:52:18 +00001889 if (PyDict_SetItemString(dict, "super",
1890 (PyObject *) &PySuper_Type) < 0)
1891 return NULL;
Tim Peters6d6c1a32001-08-02 04:15:00 +00001892 if (PyDict_SetItemString(dict, "tuple",
1893 (PyObject *) &PyTuple_Type) < 0)
1894 return NULL;
1895 if (PyDict_SetItemString(dict, "type", (PyObject *) &PyType_Type) < 0)
1896 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001897#ifdef Py_USING_UNICODE
Tim Peters6d6c1a32001-08-02 04:15:00 +00001898 if (PyDict_SetItemString(dict, "unicode",
1899 (PyObject *) &PyUnicode_Type) < 0)
1900 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001901#endif
Fred Drake5550de32000-06-20 04:54:19 +00001902 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
1903 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1904 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001905 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001906 }
1907 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001908
Guido van Rossum25ce5661997-08-02 03:10:38 +00001909 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001910}
1911
Guido van Rossume77a7571993-11-03 15:01:26 +00001912/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001913
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001915filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001916{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001917 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001918 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001919 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001920
Guido van Rossumb7b45621995-08-04 04:07:45 +00001921 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001923 return tuple;
1924 }
1925
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001927 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001928
Guido van Rossum12d12c51993-10-26 17:58:25 +00001929 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001930 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001931 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001932
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001934 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001935 if (func == Py_None) {
1936 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001937 good = item;
1938 }
1939 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001940 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001941 if (arg == NULL)
1942 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001943 good = PyEval_CallObject(func, arg);
1944 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001945 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001946 goto Fail_1;
1947 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 ok = PyObject_IsTrue(good);
1949 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001950 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 Py_INCREF(item);
1952 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001953 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001954 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001955 }
1956
Tim Peters4324aa32001-05-28 22:30:08 +00001957 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001958 return NULL;
1959
Guido van Rossum12d12c51993-10-26 17:58:25 +00001960 return result;
1961
Guido van Rossum12d12c51993-10-26 17:58:25 +00001962Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001963 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001964 return NULL;
1965}
1966
1967
Guido van Rossume77a7571993-11-03 15:01:26 +00001968/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001969
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001971filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001972{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001974 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001976
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00001978 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00001980 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001981 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001983 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001984
Guido van Rossum12d12c51993-10-26 17:58:25 +00001985 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001987 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001988
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001989 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1990 if (item == NULL)
1991 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00001993 if (arg == NULL) {
1994 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001995 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001996 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997 good = PyEval_CallObject(func, arg);
1998 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00001999 if (good == NULL) {
2000 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002001 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002002 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002003 ok = PyObject_IsTrue(good);
2004 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002005 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002006 PyString_AS_STRING((PyStringObject *)result)[j++] =
2007 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002008 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002009 }
2010
Guido van Rossum79f25d91997-04-29 20:08:16 +00002011 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002012 return NULL;
2013
Guido van Rossum12d12c51993-10-26 17:58:25 +00002014 return result;
2015
Guido van Rossum12d12c51993-10-26 17:58:25 +00002016Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002017 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002018 return NULL;
2019}