blob: 7a53065a9d1880f0aea5090e7985b4292d68fd3f [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 Rossume2ae77b2001-10-24 20:42:55 +000012#ifdef RISCOS
13#include "unixstuff.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*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000019#if defined(MS_WINDOWS) && 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
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000043PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000044"__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\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000052fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000053
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
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000061PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000062"abs(number) -> number\n\
63\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000064Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065
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
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000101PyDoc_STRVAR(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\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000106Note 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 *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000110builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000111{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000112 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000113}
114
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000115PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000116"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000117\n\
118Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000119Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000120
121
Guido van Rossum79f25d91997-04-29 20:08:16 +0000122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000123builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000124{
Tim Peters0e57abf2001-05-02 07:39:38 +0000125 PyObject *func, *seq, *result, *it;
126 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000127 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000128
Guido van Rossum79f25d91997-04-29 20:08:16 +0000129 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000130 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000131
Tim Peters0e57abf2001-05-02 07:39:38 +0000132 /* Strings and tuples return a result of the same type. */
133 if (PyString_Check(seq))
134 return filterstring(func, seq);
135 if (PyTuple_Check(seq))
136 return filtertuple(func, seq);
137
138 /* Get iterator. */
139 it = PyObject_GetIter(seq);
140 if (it == NULL)
141 return NULL;
142
143 /* Guess a result list size. */
144 len = -1; /* unknown */
145 if (PySequence_Check(seq) &&
146 seq->ob_type->tp_as_sequence->sq_length) {
147 len = PySequence_Size(seq);
148 if (len < 0)
149 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000150 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000151 if (len < 0)
152 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000153
Tim Peters0e57abf2001-05-02 07:39:38 +0000154 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000155 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000156 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000157 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000158 result = seq;
159 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000160 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000161 result = PyList_New(len);
162 if (result == NULL)
163 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000164 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000165
Tim Peters0e57abf2001-05-02 07:39:38 +0000166 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000167 j = 0;
168 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000169 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000170 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000171
Tim Peters0e57abf2001-05-02 07:39:38 +0000172 item = PyIter_Next(it);
173 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000174 if (PyErr_Occurred())
175 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000176 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000177 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000178
Guido van Rossum79f25d91997-04-29 20:08:16 +0000179 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000180 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000181 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000182 }
183 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000184 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000185 if (arg == NULL) {
186 Py_DECREF(item);
187 goto Fail_result_it;
188 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000189 good = PyEval_CallObject(func, arg);
190 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000191 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000192 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000193 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000194 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000195 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000196 ok = PyObject_IsTrue(good);
197 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000198 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000199 if (j < len)
200 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000201 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000202 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000203 Py_DECREF(item);
204 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000205 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000206 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000207 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000208 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000209 else
210 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000211 }
212
Guido van Rossum12d12c51993-10-26 17:58:25 +0000213
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000215 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000217
Tim Peters3c6b1482001-05-21 08:07:05 +0000218 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000219 return result;
220
Tim Peters0e57abf2001-05-02 07:39:38 +0000221Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000222 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000223Fail_it:
224 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000225 return NULL;
226}
227
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000228PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000229"filter(function or None, sequence) -> list, tuple, or string\n"
230"\n"
231"Return those items of sequence for which function(item) is true. If\n"
232"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000233"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000234
Guido van Rossum79f25d91997-04-29 20:08:16 +0000235static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000236builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000237{
238 long x;
239 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000240
Guido van Rossum79f25d91997-04-29 20:08:16 +0000241 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000242 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000243 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000244 PyErr_SetString(PyExc_ValueError,
245 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000246 return NULL;
247 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000248 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000249 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000250}
251
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000252PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000253"chr(i) -> character\n\
254\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000255Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000256
257
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000258#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000259static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000260builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000261{
262 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000263
264 if (!PyArg_ParseTuple(args, "l:unichr", &x))
265 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000266
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000267 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000268}
269
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000270PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000271"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000272\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000273Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000274#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000275
276
277static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000278builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000279{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000280 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000281 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000282
Guido van Rossum79f25d91997-04-29 20:08:16 +0000283 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000284 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000285 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000286 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000287 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000288}
289
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000290PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000291"cmp(x, y) -> integer\n\
292\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000293Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000294
295
Guido van Rossum79f25d91997-04-29 20:08:16 +0000296static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000297builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000298{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000299 PyObject *v, *w;
300 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000301
Guido van Rossum79f25d91997-04-29 20:08:16 +0000302 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000303 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000304 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000305 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000306 res = Py_BuildValue("(OO)", v, w);
307 Py_DECREF(v);
308 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000309 return res;
310}
311
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000312PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000313"coerce(x, y) -> None or (x1, y1)\n\
314\n\
315When x and y can be coerced to values of the same type, return a tuple\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000316containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000317
318
Guido van Rossum79f25d91997-04-29 20:08:16 +0000319static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000320builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000321{
322 char *str;
323 char *filename;
324 char *startstr;
325 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000326 int dont_inherit = 0;
327 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000328 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000329
Tim Peters67d687a2002-04-29 21:27:32 +0000330 if (!PyArg_ParseTuple(args, "sss|ii:compile", &str, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000331 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000332 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000333
Guido van Rossum5b722181993-03-30 17:46:03 +0000334 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000335 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000336 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000337 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000338 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000339 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000340 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000341 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000342 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000343 return NULL;
344 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000345
346 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
347 PyErr_SetString(PyExc_ValueError,
348 "compile(): unrecognised flags");
349 return NULL;
350 }
351 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
352
353 cf.cf_flags = supplied_flags;
354 if (!dont_inherit) {
355 PyEval_MergeCompilerFlags(&cf);
356 }
357 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000358}
359
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000360PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000361"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000362\n\
363Compile the source string (a Python module, statement or expression)\n\
364into a code object that can be executed by the exec statement or eval().\n\
365The filename will be used for run-time error messages.\n\
366The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000367single (interactive) statement, or 'eval' to compile an expression.\n\
368The flags argument, if present, controls which future statements influence\n\
369the compilation of the code.\n\
370The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
371the effects of any future statements in effect in the code calling\n\
372compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000373in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000374
Guido van Rossum79f25d91997-04-29 20:08:16 +0000375static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000376builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000377{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000378 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000379
Tim Peters5d2b77c2001-09-03 05:47:38 +0000380 if (!PyArg_ParseTuple(args, "|O:dir", &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000381 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000382 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000383}
384
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000385PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000386"dir([object]) -> list of strings\n"
387"\n"
388"Return an alphabetized list of names comprising (some of) the attributes\n"
389"of the given object, and of attributes reachable from it:\n"
390"\n"
391"No argument: the names in the current scope.\n"
392"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000393"Type or class object: its attributes, and recursively the attributes of\n"
394" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000395"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000396" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000397
Guido van Rossum79f25d91997-04-29 20:08:16 +0000398static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000399builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000400{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000401 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000402
Guido van Rossum79f25d91997-04-29 20:08:16 +0000403 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000404 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000405 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000406}
407
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000408PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000409"divmod(x, y) -> (div, mod)\n\
410\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000411Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000412
413
Guido van Rossum79f25d91997-04-29 20:08:16 +0000414static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000415builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000416{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417 PyObject *cmd;
418 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000419 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000420 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000421
Guido van Rossum79f25d91997-04-29 20:08:16 +0000422 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000423 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000424 &PyDict_Type, &globals,
425 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000426 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000427 if (globals == Py_None) {
428 globals = PyEval_GetGlobals();
429 if (locals == Py_None)
430 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000431 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000432 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000433 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000434
Guido van Rossum79f25d91997-04-29 20:08:16 +0000435 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
436 if (PyDict_SetItemString(globals, "__builtins__",
437 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000438 return NULL;
439 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000440
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000441 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000442 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000443 PyErr_SetString(PyExc_TypeError,
444 "code object passed to eval() may not contain free variables");
445 return NULL;
446 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000447 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000448 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000449
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000450 if (!PyString_Check(cmd) &&
451 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000452 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000453 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000454 return NULL;
455 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000456 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000457 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000458 while (*str == ' ' || *str == '\t')
459 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000460
461 cf.cf_flags = 0;
462 (void)PyEval_MergeCompilerFlags(&cf);
463 return PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000464}
465
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000466PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000467"eval(source[, globals[, locals]]) -> value\n\
468\n\
469Evaluate the source in the context of globals and locals.\n\
470The source may be a string representing a Python expression\n\
471or a code object as returned by compile().\n\
472The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000473globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000474
475
Guido van Rossum79f25d91997-04-29 20:08:16 +0000476static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000477builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000478{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000479 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000480 PyObject *globals = Py_None, *locals = Py_None;
481 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000482 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000483 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000484 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000485
Guido van Rossum79f25d91997-04-29 20:08:16 +0000486 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000487 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000488 &PyDict_Type, &globals,
489 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000490 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000491 if (globals == Py_None) {
492 globals = PyEval_GetGlobals();
493 if (locals == Py_None)
494 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000495 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000496 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000497 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000498 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
499 if (PyDict_SetItemString(globals, "__builtins__",
500 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000501 return NULL;
502 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000503
504 exists = 0;
505 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000506#if defined(PLAN9)
507 {
508 Dir *d;
509
510 if ((d = dirstat(filename))!=nil) {
511 if(d->mode & DMDIR)
512 werrstr("is a directory");
513 else
514 exists = 1;
515 free(d);
516 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000517 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000518#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000519 if (object_exists(filename)) {
520 if (isdir(filename))
521 errno = EISDIR;
522 else
523 exists = 1;
524 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000525#else /* standard Posix */
526 {
527 struct stat s;
528 if (stat(filename, &s) == 0) {
529 if (S_ISDIR(s.st_mode))
530# if defined(PY_OS2) && defined(PYCC_VACPP)
531 errno = EOS2ERR;
532# else
533 errno = EISDIR;
534# endif
535 else
536 exists = 1;
537 }
538 }
539#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000540
541 if (exists) {
542 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000543 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000544 Py_END_ALLOW_THREADS
545
546 if (fp == NULL) {
547 exists = 0;
548 }
549 }
550
551 if (!exists) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000553 return NULL;
554 }
Tim Peters5ba58662001-07-16 02:29:45 +0000555 cf.cf_flags = 0;
556 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000557 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000558 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000559 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000560 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000561 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000562 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000563}
564
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000565PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000566"execfile(filename[, globals[, locals]])\n\
567\n\
568Read and execute a Python script from a file.\n\
569The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000570globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000571
572
Guido van Rossum79f25d91997-04-29 20:08:16 +0000573static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000574builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000575{
Guido van Rossum950ff291998-06-29 13:38:57 +0000576 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000577 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000578
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000579 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000580 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000581#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000582 if (PyUnicode_Check(name)) {
583 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
584 if (name == NULL)
585 return NULL;
586 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000587#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000588
589 if (!PyString_Check(name)) {
590 PyErr_SetString(PyExc_TypeError,
591 "attribute name must be string");
592 return NULL;
593 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000594 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000595 if (result == NULL && dflt != NULL &&
596 PyErr_ExceptionMatches(PyExc_AttributeError))
597 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000598 PyErr_Clear();
599 Py_INCREF(dflt);
600 result = dflt;
601 }
602 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000603}
604
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000605PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000606"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000607\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000608Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
609When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000610exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000611
612
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000614builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000615{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000616 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000617
Guido van Rossum79f25d91997-04-29 20:08:16 +0000618 d = PyEval_GetGlobals();
619 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000620 return d;
621}
622
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000623PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000624"globals() -> dictionary\n\
625\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000626Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000627
628
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000630builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000631{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632 PyObject *v;
633 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000634
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000635 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000636 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000637#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000638 if (PyUnicode_Check(name)) {
639 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
640 if (name == NULL)
641 return NULL;
642 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000643#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000644
645 if (!PyString_Check(name)) {
646 PyErr_SetString(PyExc_TypeError,
647 "attribute name must be string");
648 return NULL;
649 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000650 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000651 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000652 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000653 Py_INCREF(Py_False);
654 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000655 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000657 Py_INCREF(Py_True);
658 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000659}
660
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000661PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000662"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000663\n\
664Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000665(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000666
667
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000669builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000670{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000671 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000672}
673
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000674PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000675"id(object) -> integer\n\
676\n\
677Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000678simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000679
680
Guido van Rossum79f25d91997-04-29 20:08:16 +0000681static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000682builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000683{
684 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000685 PyObject *it; /* the iterator object */
686 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000687 } sequence;
688
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000690 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000691 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000692 register int i, j;
693
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000695 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000696 PyErr_SetString(PyExc_TypeError,
697 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000698 return NULL;
699 }
700
Guido van Rossum79f25d91997-04-29 20:08:16 +0000701 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000702 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000703
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000704 if (func == Py_None && n == 1) {
705 /* map(None, S) is the same as list(S). */
706 return PySequence_List(PyTuple_GetItem(args, 1));
707 }
708
Tim Peters4e9afdc2001-05-03 23:54:49 +0000709 /* Get space for sequence descriptors. Must NULL out the iterator
710 * pointers so that jumping to Fail_2 later doesn't see trash.
711 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
713 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000714 return NULL;
715 }
716 for (i = 0; i < n; ++i) {
717 seqs[i].it = (PyObject*)NULL;
718 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000719 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000720
Tim Peters4e9afdc2001-05-03 23:54:49 +0000721 /* Do a first pass to obtain iterators for the arguments, and set len
722 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000723 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000724 len = 0;
725 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
726 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000727 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000728
Tim Peters4e9afdc2001-05-03 23:54:49 +0000729 /* Get iterator. */
730 curseq = PyTuple_GetItem(args, i+1);
731 sqp->it = PyObject_GetIter(curseq);
732 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000733 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000734 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000735 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000736 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000738 goto Fail_2;
739 }
740
Tim Peters4e9afdc2001-05-03 23:54:49 +0000741 /* Update len. */
742 curlen = -1; /* unknown */
743 if (PySequence_Check(curseq) &&
744 curseq->ob_type->tp_as_sequence->sq_length) {
745 curlen = PySequence_Size(curseq);
746 if (curlen < 0)
747 PyErr_Clear();
748 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000749 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000750 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000751 if (curlen > len)
752 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000753 }
754
Tim Peters4e9afdc2001-05-03 23:54:49 +0000755 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000757 goto Fail_2;
758
Tim Peters4e9afdc2001-05-03 23:54:49 +0000759 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000760 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000762 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000763
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000765 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000766 else if ((alist = PyTuple_New(n)) == NULL)
767 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000768
769 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000770 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000771 Py_INCREF(Py_None);
772 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000773 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000774 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000775 item = PyIter_Next(sqp->it);
776 if (item)
777 ++numactive;
778 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000779 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000780 Py_XDECREF(alist);
781 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000782 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000783 Py_INCREF(Py_None);
784 item = Py_None;
785 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000786 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000787 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000788 if (alist)
789 PyTuple_SET_ITEM(alist, j, item);
790 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000791 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000792 }
793
Guido van Rossum32120311995-07-10 13:52:21 +0000794 if (!alist)
795 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000796
Tim Peters4e9afdc2001-05-03 23:54:49 +0000797 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000799 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000800 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000801
Guido van Rossum79f25d91997-04-29 20:08:16 +0000802 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000803 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000804 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 value = PyEval_CallObject(func, alist);
806 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000807 if (value == NULL)
808 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000809 }
810 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000811 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000812 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000813 if (status < 0)
814 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000815 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000816 else if (PyList_SetItem(result, i, value) < 0)
817 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000818 }
819
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000820 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
821 goto Fail_1;
822
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000824
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000826 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000827Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000828 result = NULL;
829Succeed:
830 assert(seqs);
831 for (i = 0; i < n; ++i)
832 Py_XDECREF(seqs[i].it);
833 PyMem_DEL(seqs);
834 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000835}
836
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000837PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000838"map(function, sequence[, sequence, ...]) -> list\n\
839\n\
840Return a list of the results of applying the function to the items of\n\
841the argument sequence(s). If more than one sequence is given, the\n\
842function is called with an argument list consisting of the corresponding\n\
843item of each sequence, substituting None for missing values when not all\n\
844sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000845the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000846
847
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000849builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000850{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000851 PyObject *v;
852 PyObject *name;
853 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000855 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000856 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000857 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000858 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859 Py_INCREF(Py_None);
860 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000861}
862
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000863PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000864"setattr(object, name, value)\n\
865\n\
866Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000867``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000868
869
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000871builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000872{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 PyObject *v;
874 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000875
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000876 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000877 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000878 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000879 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 Py_INCREF(Py_None);
881 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000882}
883
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000884PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000885"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000886\n\
887Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000888``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000889
890
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000892builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000893{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000895
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000897 if (x == -1)
898 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000900}
901
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000902PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000903"hash(object) -> integer\n\
904\n\
905Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000906the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000907
908
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000910builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000911{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000913
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000914 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000915 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000917 "hex() argument can't be converted to hex");
918 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000919 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000920 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000921}
922
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000923PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000924"hex(number) -> string\n\
925\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000926Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000927
928
Tim Petersdbd9ba62000-07-09 03:09:57 +0000929static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000930
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000932builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000933{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000935 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 PyObject *res;
937 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000938
939 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000940 if (line == NULL)
941 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943 return NULL;
944 while (*str == ' ' || *str == '\t')
945 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000946 globals = PyEval_GetGlobals();
947 locals = PyEval_GetLocals();
948 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
949 if (PyDict_SetItemString(globals, "__builtins__",
950 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000951 return NULL;
952 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000953 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000954 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000955 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000956}
957
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000959"input([prompt]) -> value\n\
960\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000961Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000962
963
Guido van Rossume8811f81997-02-14 15:48:05 +0000964static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000965builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +0000966{
967 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +0000968 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +0000969 return NULL;
970 Py_INCREF(s);
971 PyString_InternInPlace(&s);
972 return s;
973}
974
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976"intern(string) -> string\n\
977\n\
978``Intern'' the given string. This enters the string in the (global)\n\
979table of interned strings whose purpose is to speed up dictionary lookups.\n\
980Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000981same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000982
983
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000985builtin_iter(PyObject *self, PyObject *args)
986{
987 PyObject *v, *w = NULL;
988
989 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
990 return NULL;
991 if (w == NULL)
992 return PyObject_GetIter(v);
993 if (!PyCallable_Check(v)) {
994 PyErr_SetString(PyExc_TypeError,
995 "iter(v, w): v must be callable");
996 return NULL;
997 }
998 return PyCallIter_New(v, w);
999}
1000
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001001PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001002"iter(collection) -> iterator\n\
1003iter(callable, sentinel) -> iterator\n\
1004\n\
1005Get an iterator from an object. In the first form, the argument must\n\
1006supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001007In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001008
1009
1010static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001011builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001012{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001013 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001014
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001015 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001016 if (res < 0 && PyErr_Occurred())
1017 return NULL;
1018 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001019}
1020
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001021PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001022"len(object) -> integer\n\
1023\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001024Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001025
1026
Guido van Rossum79f25d91997-04-29 20:08:16 +00001027static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001028builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001029{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001030 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001031
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032 d = PyEval_GetLocals();
1033 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001034 return d;
1035}
1036
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001037PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001038"locals() -> dictionary\n\
1039\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001040Return the dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001041
1042
Guido van Rossum79f25d91997-04-29 20:08:16 +00001043static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001044min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001045{
Tim Petersc3074532001-05-03 07:00:32 +00001046 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001047
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001049 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001050 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001051 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001052
Tim Petersc3074532001-05-03 07:00:32 +00001053 it = PyObject_GetIter(v);
1054 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001055 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001056
1057 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001058 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001059 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001060 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001061 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001062 Py_XDECREF(w);
1063 Py_DECREF(it);
1064 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001065 }
Tim Petersc3074532001-05-03 07:00:32 +00001066 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001067 }
Tim Petersc3074532001-05-03 07:00:32 +00001068
Guido van Rossum2d951851994-08-29 12:52:16 +00001069 if (w == NULL)
1070 w = x;
1071 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001072 int cmp = PyObject_RichCompareBool(x, w, op);
1073 if (cmp > 0) {
1074 Py_DECREF(w);
1075 w = x;
1076 }
1077 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001078 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001079 Py_DECREF(w);
1080 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001081 return NULL;
1082 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001083 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001085 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001086 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001087 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001088 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001089 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001090 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001091 return w;
1092}
1093
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001095builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001096{
Guido van Rossum53451b32001-01-17 15:47:24 +00001097 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001098}
1099
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001100PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001101"min(sequence) -> value\n\
1102min(a, b, c, ...) -> value\n\
1103\n\
1104With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001105With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001106
1107
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001109builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001110{
Guido van Rossum53451b32001-01-17 15:47:24 +00001111 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001112}
1113
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001114PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001115"max(sequence) -> value\n\
1116max(a, b, c, ...) -> value\n\
1117\n\
1118With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001119With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001123builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001124{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001126
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001127 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1128 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001130 "oct() argument can't be converted to oct");
1131 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001132 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001133 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001134}
1135
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001136PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001137"oct(number) -> string\n\
1138\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001140
1141
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001143builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001144{
Guido van Rossum09095f32000-03-10 23:00:52 +00001145 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001146 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001147
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001148 if (PyString_Check(obj)) {
1149 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001150 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001151 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001152 return PyInt_FromLong(ord);
1153 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001154#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001155 } else if (PyUnicode_Check(obj)) {
1156 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001157 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001158 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001159 return PyInt_FromLong(ord);
1160 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001161#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001162 } else {
1163 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001164 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001165 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001166 return NULL;
1167 }
1168
Guido van Rossumad991772001-01-12 16:03:05 +00001169 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001170 "ord() expected a character, "
1171 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001172 size);
1173 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001174}
1175
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001176PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001177"ord(c) -> integer\n\
1178\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001179Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001180
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001183builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001184{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001185 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001188 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001189 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001190}
1191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193"pow(x, y[, z]) -> number\n\
1194\n\
1195With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001196equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001197
1198
Guido van Rossum124eff01999-02-23 16:11:01 +00001199/* Return number of items in range/xrange (lo, hi, step). step > 0
1200 * required. Return a value < 0 if & only if the true value is too
1201 * large to fit in a signed long.
1202 */
1203static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001204get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001205{
1206 /* -------------------------------------------------------------
1207 If lo >= hi, the range is empty.
1208 Else if n values are in the range, the last one is
1209 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1210 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1211 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1212 the RHS is non-negative and so truncation is the same as the
1213 floor. Letting M be the largest positive long, the worst case
1214 for the RHS numerator is hi=M, lo=-M-1, and then
1215 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1216 precision to compute the RHS exactly.
1217 ---------------------------------------------------------------*/
1218 long n = 0;
1219 if (lo < hi) {
1220 unsigned long uhi = (unsigned long)hi;
1221 unsigned long ulo = (unsigned long)lo;
1222 unsigned long diff = uhi - ulo - 1;
1223 n = (long)(diff / (unsigned long)step + 1);
1224 }
1225 return n;
1226}
1227
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001229builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001230{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001231 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001232 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001233 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001234
Guido van Rossum79f25d91997-04-29 20:08:16 +00001235 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001236
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237 if (PyTuple_Size(args) <= 1) {
1238 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001239 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001240 &ihigh))
1241 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001242 }
1243 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001244 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001245 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001246 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001247 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001248 }
1249 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001250 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001251 return NULL;
1252 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001253 if (istep > 0)
1254 bign = get_len_of_range(ilow, ihigh, istep);
1255 else
1256 bign = get_len_of_range(ihigh, ilow, -istep);
1257 n = (int)bign;
1258 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001259 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001260 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001261 return NULL;
1262 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001263 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001264 if (v == NULL)
1265 return NULL;
1266 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001267 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001268 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001269 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001270 return NULL;
1271 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001272 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001273 ilow += istep;
1274 }
1275 return v;
1276}
1277
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001278PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001279"range([start,] stop[, step]) -> list of integers\n\
1280\n\
1281Return a list containing an arithmetic progression of integers.\n\
1282range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1283When step is given, it specifies the increment (or decrement).\n\
1284For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001285These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001286
1287
Guido van Rossum79f25d91997-04-29 20:08:16 +00001288static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001289builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001290{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001291 PyObject *v = NULL;
1292 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001293
Guido van Rossum79f25d91997-04-29 20:08:16 +00001294 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001295 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001296 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1297 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001298 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001299 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001300 char *prompt;
1301 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001302 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001303 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001304 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001305 if (po == NULL)
1306 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001307 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001308 if (prompt == NULL)
1309 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001310 }
1311 else {
1312 po = NULL;
1313 prompt = "";
1314 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315 s = PyOS_Readline(prompt);
1316 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001317 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001319 return NULL;
1320 }
1321 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001322 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001323 result = NULL;
1324 }
1325 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001326 size_t len = strlen(s);
1327 if (len > INT_MAX) {
1328 PyErr_SetString(PyExc_OverflowError, "input too long");
1329 result = NULL;
1330 }
1331 else {
1332 result = PyString_FromStringAndSize(s, (int)(len-1));
1333 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001334 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001335 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001336 return result;
1337 }
Guido van Rossum90933611991-06-07 16:10:43 +00001338 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001339 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001340 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001341 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001342 return NULL;
1343 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001344 if (Py_FlushLine() != 0 ||
1345 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001346 return NULL;
1347 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001348 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001349 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001350 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001351 return NULL;
1352 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001353 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001354}
1355
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001356PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001357"raw_input([prompt]) -> string\n\
1358\n\
1359Read a string from standard input. The trailing newline is stripped.\n\
1360If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1361On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001362is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001363
1364
Guido van Rossum79f25d91997-04-29 20:08:16 +00001365static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001366builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001367{
Tim Peters15d81ef2001-05-04 04:39:21 +00001368 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001369
Guido van Rossum79f25d91997-04-29 20:08:16 +00001370 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001371 return NULL;
1372 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001374
Tim Peters15d81ef2001-05-04 04:39:21 +00001375 it = PyObject_GetIter(seq);
1376 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001378 "reduce() arg 2 must support iteration");
1379 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001380 return NULL;
1381 }
1382
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001384 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001385
Tim Peters15d81ef2001-05-04 04:39:21 +00001386 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001387 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001388
1389 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001390 Py_DECREF(args);
1391 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001392 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001393 }
1394
Tim Peters15d81ef2001-05-04 04:39:21 +00001395 op2 = PyIter_Next(it);
1396 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001397 if (PyErr_Occurred())
1398 goto Fail;
1399 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001400 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001401
Guido van Rossum2d951851994-08-29 12:52:16 +00001402 if (result == NULL)
1403 result = op2;
1404 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001405 PyTuple_SetItem(args, 0, result);
1406 PyTuple_SetItem(args, 1, op2);
1407 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001408 goto Fail;
1409 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001410 }
1411
Guido van Rossum79f25d91997-04-29 20:08:16 +00001412 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001413
Guido van Rossum2d951851994-08-29 12:52:16 +00001414 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001416 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001417
Tim Peters15d81ef2001-05-04 04:39:21 +00001418 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001419 return result;
1420
Guido van Rossum2d951851994-08-29 12:52:16 +00001421Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001422 Py_XDECREF(args);
1423 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001424 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001425 return NULL;
1426}
1427
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001428PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001429"reduce(function, sequence[, initial]) -> value\n\
1430\n\
1431Apply a function of two arguments cumulatively to the items of a sequence,\n\
1432from left to right, so as to reduce the sequence to a single value.\n\
1433For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1434((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1435of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001436sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001437
1438
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001440builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001441{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001442 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001443}
1444
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001445PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001446"reload(module) -> module\n\
1447\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001448Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449
1450
Guido van Rossum79f25d91997-04-29 20:08:16 +00001451static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001452builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001453{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001454 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001455}
1456
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001457PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001458"repr(object) -> string\n\
1459\n\
1460Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001461For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001462
1463
Guido van Rossum79f25d91997-04-29 20:08:16 +00001464static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001465builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001466{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001467 double x;
1468 double f;
1469 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001470 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001471
Guido van Rossum79f25d91997-04-29 20:08:16 +00001472 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001473 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001474 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001475 i = abs(ndigits);
1476 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001477 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001478 if (ndigits < 0)
1479 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001480 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001481 x *= f;
1482 if (x >= 0.0)
1483 x = floor(x + 0.5);
1484 else
1485 x = ceil(x - 0.5);
1486 if (ndigits < 0)
1487 x *= f;
1488 else
1489 x /= f;
1490 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001491}
1492
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001493PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001494"round(number[, ndigits]) -> floating point number\n\
1495\n\
1496Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001497This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001498
1499
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001501builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001502{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001503 PyObject *v = NULL;
1504 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001505
Guido van Rossum79f25d91997-04-29 20:08:16 +00001506 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001507 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001508 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001510 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001511 if (!PyErr_Occurred())
1512 PyErr_SetString(PyExc_SystemError,
1513 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001514 }
1515 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001516 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001517 }
1518 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001519 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001520 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001521 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001522 "vars() argument must have __dict__ attribute");
1523 return NULL;
1524 }
1525 }
1526 return d;
1527}
1528
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001529PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001530"vars([object]) -> dictionary\n\
1531\n\
1532Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001533With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001534
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001535static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001536builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001537{
1538 PyObject *inst;
1539 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001540 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001541
Guido van Rossum43713e52000-02-29 13:59:29 +00001542 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001543 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001544
Guido van Rossum823649d2001-03-21 18:40:58 +00001545 retval = PyObject_IsInstance(inst, cls);
1546 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001547 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001548 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001549}
1550
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001551PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001552"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001553\n\
1554Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001555With a type as second argument, return whether that is the object's type.\n\
1556The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001557isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001558
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001559
1560static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001561builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001562{
1563 PyObject *derived;
1564 PyObject *cls;
1565 int retval;
1566
Guido van Rossum43713e52000-02-29 13:59:29 +00001567 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001568 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001569
Guido van Rossum823649d2001-03-21 18:40:58 +00001570 retval = PyObject_IsSubclass(derived, cls);
1571 if (retval < 0)
1572 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001573 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001574}
1575
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001576PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001577"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001578\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001579Return whether class C is a subclass (i.e., a derived class) of class B.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001580
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001581
Barry Warsawbd599b52000-08-03 15:45:29 +00001582static PyObject*
1583builtin_zip(PyObject *self, PyObject *args)
1584{
1585 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001586 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001587 int i;
1588 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001589 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001590
1591 if (itemsize < 1) {
1592 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001593 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001594 return NULL;
1595 }
1596 /* args must be a tuple */
1597 assert(PyTuple_Check(args));
1598
Tim Peters39a86c22002-05-12 07:19:38 +00001599 /* Guess at result length: the shortest of the input lengths.
1600 If some argument refuses to say, we refuse to guess too, lest
1601 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001602 len = -1; /* unknown */
1603 for (i = 0; i < itemsize; ++i) {
1604 PyObject *item = PyTuple_GET_ITEM(args, i);
1605 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001606 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001607 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001608 len = -1;
1609 break;
1610 }
Tim Peters67d687a2002-04-29 21:27:32 +00001611 else if (len < 0 || thislen < len)
1612 len = thislen;
1613 }
1614
Tim Peters8572b4f2001-05-06 01:05:02 +00001615 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001616 if (len < 0)
1617 len = 10; /* arbitrary */
1618 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001619 return NULL;
1620
Tim Peters8572b4f2001-05-06 01:05:02 +00001621 /* obtain iterators */
1622 itlist = PyTuple_New(itemsize);
1623 if (itlist == NULL)
1624 goto Fail_ret;
1625 for (i = 0; i < itemsize; ++i) {
1626 PyObject *item = PyTuple_GET_ITEM(args, i);
1627 PyObject *it = PyObject_GetIter(item);
1628 if (it == NULL) {
1629 if (PyErr_ExceptionMatches(PyExc_TypeError))
1630 PyErr_Format(PyExc_TypeError,
1631 "zip argument #%d must support iteration",
1632 i+1);
1633 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001634 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001635 PyTuple_SET_ITEM(itlist, i, it);
1636 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001637
Tim Peters8572b4f2001-05-06 01:05:02 +00001638 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001639 for (i = 0; ; ++i) {
1640 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001641 PyObject *next = PyTuple_New(itemsize);
1642 if (!next)
1643 goto Fail_ret_itlist;
1644
Tim Peters67d687a2002-04-29 21:27:32 +00001645 for (j = 0; j < itemsize; j++) {
1646 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001647 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001648 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001649 if (PyErr_Occurred()) {
1650 Py_DECREF(ret);
1651 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001652 }
1653 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001654 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001655 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001656 }
Tim Peters67d687a2002-04-29 21:27:32 +00001657 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001658 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001659
Tim Peters67d687a2002-04-29 21:27:32 +00001660 if (i < len)
1661 PyList_SET_ITEM(ret, i, next);
1662 else {
1663 int status = PyList_Append(ret, next);
1664 Py_DECREF(next);
1665 ++len;
1666 if (status < 0)
1667 goto Fail_ret_itlist;
1668 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001669 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001670
Tim Peters67d687a2002-04-29 21:27:32 +00001671Done:
1672 if (ret != NULL && i < len) {
1673 /* The list is too big. */
1674 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1675 return NULL;
1676 }
1677 return ret;
1678
Tim Peters8572b4f2001-05-06 01:05:02 +00001679Fail_ret_itlist:
1680 Py_DECREF(itlist);
1681Fail_ret:
1682 Py_DECREF(ret);
1683 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001684}
1685
1686
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001687PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001688"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1689\n\
1690Return a list of tuples, where each tuple contains the i-th element\n\
1691from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001692in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001693
1694
Guido van Rossum79f25d91997-04-29 20:08:16 +00001695static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001696 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1697 {"abs", builtin_abs, METH_O, abs_doc},
1698 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001699 {"callable", builtin_callable, METH_O, callable_doc},
1700 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1701 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1702 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1703 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1704 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1705 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1706 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1707 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1708 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1709 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1710 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1711 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1712 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1713 {"hash", builtin_hash, METH_O, hash_doc},
1714 {"hex", builtin_hex, METH_O, hex_doc},
1715 {"id", builtin_id, METH_O, id_doc},
1716 {"input", builtin_input, METH_VARARGS, input_doc},
1717 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1718 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1719 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1720 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1721 {"len", builtin_len, METH_O, len_doc},
1722 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1723 {"map", builtin_map, METH_VARARGS, map_doc},
1724 {"max", builtin_max, METH_VARARGS, max_doc},
1725 {"min", builtin_min, METH_VARARGS, min_doc},
1726 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001727 {"ord", builtin_ord, METH_O, ord_doc},
1728 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1729 {"range", builtin_range, METH_VARARGS, range_doc},
1730 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1731 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1732 {"reload", builtin_reload, METH_O, reload_doc},
1733 {"repr", builtin_repr, METH_O, repr_doc},
1734 {"round", builtin_round, METH_VARARGS, round_doc},
1735 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001736#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001737 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001738#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001739 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001740 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001741 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001742};
1743
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001744PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001745"Built-in functions, exceptions, and other objects.\n\
1746\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001747Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001748
Guido van Rossum25ce5661997-08-02 03:10:38 +00001749PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001750_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001751{
Fred Drake5550de32000-06-20 04:54:19 +00001752 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001753 mod = Py_InitModule4("__builtin__", builtin_methods,
1754 builtin_doc, (PyObject *)NULL,
1755 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001756 if (mod == NULL)
1757 return NULL;
1758 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001759
1760#define SETBUILTIN(NAME, OBJECT) \
1761 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1762 return NULL
1763
1764 SETBUILTIN("None", Py_None);
1765 SETBUILTIN("Ellipsis", Py_Ellipsis);
1766 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001767 SETBUILTIN("False", Py_False);
1768 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001769 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001770 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001771 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001772 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001773#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001774 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001775#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001776 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001777 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001778 SETBUILTIN("float", &PyFloat_Type);
1779 SETBUILTIN("property", &PyProperty_Type);
1780 SETBUILTIN("int", &PyInt_Type);
1781 SETBUILTIN("list", &PyList_Type);
1782 SETBUILTIN("long", &PyLong_Type);
1783 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001784 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001785 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1786 SETBUILTIN("str", &PyString_Type);
1787 SETBUILTIN("super", &PySuper_Type);
1788 SETBUILTIN("tuple", &PyTuple_Type);
1789 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001790 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001791
1792 /* Note that open() is just an alias of file(). */
1793 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001794 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001795#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001796 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001797#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001798 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001799 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1800 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001801 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001802 }
1803 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001804
Guido van Rossum25ce5661997-08-02 03:10:38 +00001805 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001806#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001807}
1808
Guido van Rossume77a7571993-11-03 15:01:26 +00001809/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001810
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001812filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001813{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001815 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001816 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001817
Guido van Rossumb7b45621995-08-04 04:07:45 +00001818 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001820 return tuple;
1821 }
1822
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001824 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001825
Guido van Rossum12d12c51993-10-26 17:58:25 +00001826 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001828 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001829
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001831 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001832 if (func == Py_None) {
1833 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001834 good = item;
1835 }
1836 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001838 if (arg == NULL)
1839 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 good = PyEval_CallObject(func, arg);
1841 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001842 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001843 goto Fail_1;
1844 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001845 ok = PyObject_IsTrue(good);
1846 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001847 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001848 Py_INCREF(item);
1849 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001850 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001851 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001852 }
1853
Tim Peters4324aa32001-05-28 22:30:08 +00001854 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001855 return NULL;
1856
Guido van Rossum12d12c51993-10-26 17:58:25 +00001857 return result;
1858
Guido van Rossum12d12c51993-10-26 17:58:25 +00001859Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001860 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001861 return NULL;
1862}
1863
1864
Guido van Rossume77a7571993-11-03 15:01:26 +00001865/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001866
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001868filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001869{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001871 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001873
Guido van Rossum79f25d91997-04-29 20:08:16 +00001874 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00001875 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00001877 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001878 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001880 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001881
Guido van Rossum12d12c51993-10-26 17:58:25 +00001882 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001884 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001886 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1887 if (item == NULL)
1888 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00001890 if (arg == NULL) {
1891 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001892 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001893 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894 good = PyEval_CallObject(func, arg);
1895 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00001896 if (good == NULL) {
1897 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001898 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001899 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001900 ok = PyObject_IsTrue(good);
1901 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001902 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001903 PyString_AS_STRING((PyStringObject *)result)[j++] =
1904 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00001905 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001906 }
1907
Tim Peters5de98422002-04-27 18:44:32 +00001908 if (j < len)
1909 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001910
Guido van Rossum12d12c51993-10-26 17:58:25 +00001911 return result;
1912
Guido van Rossum12d12c51993-10-26 17:58:25 +00001913Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001915 return NULL;
1916}