blob: fec7554f32c7b981c8fa74fc114e4f36f48a2fac [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;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000263 Py_UNICODE s[2];
Guido van Rossum09095f32000-03-10 23:00:52 +0000264
265 if (!PyArg_ParseTuple(args, "l:unichr", &x))
266 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000267
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000268#ifdef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000269 if (x < 0 || x > 0x10ffff) {
Guido van Rossum09095f32000-03-10 23:00:52 +0000270 PyErr_SetString(PyExc_ValueError,
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000271 "unichr() arg not in range(0x110000) "
272 "(wide Python build)");
Guido van Rossum09095f32000-03-10 23:00:52 +0000273 return NULL;
274 }
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000275#else
276 if (x < 0 || x > 0xffff) {
277 PyErr_SetString(PyExc_ValueError,
278 "unichr() arg not in range(0x10000) "
279 "(narrow Python build)");
280 return NULL;
281 }
282#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000283
284 if (x <= 0xffff) {
285 /* UCS-2 character */
286 s[0] = (Py_UNICODE) x;
287 return PyUnicode_FromUnicode(s, 1);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000288 }
289 else {
Fredrik Lundh8f455852001-06-27 18:59:43 +0000290#ifndef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000291 /* UCS-4 character. store as two surrogate characters */
292 x -= 0x10000L;
293 s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
294 s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
295 return PyUnicode_FromUnicode(s, 2);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000296#else
297 s[0] = (Py_UNICODE)x;
298 return PyUnicode_FromUnicode(s, 1);
Martin v. Löwis0ba70cc2001-06-26 22:22:37 +0000299#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000300 }
Guido van Rossum09095f32000-03-10 23:00:52 +0000301}
302
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000303PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000304"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000305\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000306Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000307#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000308
309
310static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000311builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000312{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000313 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000314 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000315
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000317 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000318 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000319 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000320 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000321}
322
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000323PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000324"cmp(x, y) -> integer\n\
325\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000326Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000327
328
Guido van Rossum79f25d91997-04-29 20:08:16 +0000329static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000330builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000331{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000332 PyObject *v, *w;
333 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000334
Guido van Rossum79f25d91997-04-29 20:08:16 +0000335 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000336 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000337 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000338 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000339 res = Py_BuildValue("(OO)", v, w);
340 Py_DECREF(v);
341 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000342 return res;
343}
344
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000345PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000346"coerce(x, y) -> None or (x1, y1)\n\
347\n\
348When 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 +0000349containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000350
351
Guido van Rossum79f25d91997-04-29 20:08:16 +0000352static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000353builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000354{
355 char *str;
356 char *filename;
357 char *startstr;
358 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000359 int dont_inherit = 0;
360 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000361 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000362
Tim Peters67d687a2002-04-29 21:27:32 +0000363 if (!PyArg_ParseTuple(args, "sss|ii:compile", &str, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000364 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000365 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000366
Guido van Rossum5b722181993-03-30 17:46:03 +0000367 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000368 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000369 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000370 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000371 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000372 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000373 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000375 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000376 return NULL;
377 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000378
379 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
380 PyErr_SetString(PyExc_ValueError,
381 "compile(): unrecognised flags");
382 return NULL;
383 }
384 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
385
386 cf.cf_flags = supplied_flags;
387 if (!dont_inherit) {
388 PyEval_MergeCompilerFlags(&cf);
389 }
390 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000391}
392
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000393PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000394"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000395\n\
396Compile the source string (a Python module, statement or expression)\n\
397into a code object that can be executed by the exec statement or eval().\n\
398The filename will be used for run-time error messages.\n\
399The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000400single (interactive) statement, or 'eval' to compile an expression.\n\
401The flags argument, if present, controls which future statements influence\n\
402the compilation of the code.\n\
403The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
404the effects of any future statements in effect in the code calling\n\
405compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000406in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000407
Guido van Rossum79f25d91997-04-29 20:08:16 +0000408static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000409builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000410{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000411 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000412
Tim Peters5d2b77c2001-09-03 05:47:38 +0000413 if (!PyArg_ParseTuple(args, "|O:dir", &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000414 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000415 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000416}
417
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000418PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000419"dir([object]) -> list of strings\n"
420"\n"
421"Return an alphabetized list of names comprising (some of) the attributes\n"
422"of the given object, and of attributes reachable from it:\n"
423"\n"
424"No argument: the names in the current scope.\n"
425"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000426"Type or class object: its attributes, and recursively the attributes of\n"
427" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000428"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000429" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000430
Guido van Rossum79f25d91997-04-29 20:08:16 +0000431static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000432builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000433{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000434 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000435
Guido van Rossum79f25d91997-04-29 20:08:16 +0000436 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000437 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000438 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000439}
440
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000441PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000442"divmod(x, y) -> (div, mod)\n\
443\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000444Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000445
446
Guido van Rossum79f25d91997-04-29 20:08:16 +0000447static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000448builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000449{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000450 PyObject *cmd;
451 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000452 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000453 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000454
Guido van Rossum79f25d91997-04-29 20:08:16 +0000455 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000456 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000457 &PyDict_Type, &globals,
458 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000459 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 if (globals == Py_None) {
461 globals = PyEval_GetGlobals();
462 if (locals == Py_None)
463 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000464 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000465 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000466 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000467
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
469 if (PyDict_SetItemString(globals, "__builtins__",
470 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000471 return NULL;
472 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000473
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000474 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000475 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000476 PyErr_SetString(PyExc_TypeError,
477 "code object passed to eval() may not contain free variables");
478 return NULL;
479 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000480 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000481 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000482
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000483 if (!PyString_Check(cmd) &&
484 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000486 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000487 return NULL;
488 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000489 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000490 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000491 while (*str == ' ' || *str == '\t')
492 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000493
494 cf.cf_flags = 0;
495 (void)PyEval_MergeCompilerFlags(&cf);
496 return PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000497}
498
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000499PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000500"eval(source[, globals[, locals]]) -> value\n\
501\n\
502Evaluate the source in the context of globals and locals.\n\
503The source may be a string representing a Python expression\n\
504or a code object as returned by compile().\n\
505The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000506globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000507
508
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000510builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000511{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000513 PyObject *globals = Py_None, *locals = Py_None;
514 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000515 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000516 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000517 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000518
Guido van Rossum79f25d91997-04-29 20:08:16 +0000519 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000520 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000521 &PyDict_Type, &globals,
522 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000523 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524 if (globals == Py_None) {
525 globals = PyEval_GetGlobals();
526 if (locals == Py_None)
527 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000528 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000529 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000530 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000531 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
532 if (PyDict_SetItemString(globals, "__builtins__",
533 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000534 return NULL;
535 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000536
537 exists = 0;
538 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000539#if defined(PLAN9)
540 {
541 Dir *d;
542
543 if ((d = dirstat(filename))!=nil) {
544 if(d->mode & DMDIR)
545 werrstr("is a directory");
546 else
547 exists = 1;
548 free(d);
549 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000550 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000551#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000552 if (object_exists(filename)) {
553 if (isdir(filename))
554 errno = EISDIR;
555 else
556 exists = 1;
557 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000558#else /* standard Posix */
559 {
560 struct stat s;
561 if (stat(filename, &s) == 0) {
562 if (S_ISDIR(s.st_mode))
563# if defined(PY_OS2) && defined(PYCC_VACPP)
564 errno = EOS2ERR;
565# else
566 errno = EISDIR;
567# endif
568 else
569 exists = 1;
570 }
571 }
572#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000573
574 if (exists) {
575 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000576 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000577 Py_END_ALLOW_THREADS
578
579 if (fp == NULL) {
580 exists = 0;
581 }
582 }
583
584 if (!exists) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000585 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000586 return NULL;
587 }
Tim Peters5ba58662001-07-16 02:29:45 +0000588 cf.cf_flags = 0;
589 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000590 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000591 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000592 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000593 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000594 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000596}
597
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000598PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000599"execfile(filename[, globals[, locals]])\n\
600\n\
601Read and execute a Python script from a file.\n\
602The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000603globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000604
605
Guido van Rossum79f25d91997-04-29 20:08:16 +0000606static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000607builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000608{
Guido van Rossum950ff291998-06-29 13:38:57 +0000609 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000611
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000612 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000613 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000614#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000615 if (PyUnicode_Check(name)) {
616 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
617 if (name == NULL)
618 return NULL;
619 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000620#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000621
622 if (!PyString_Check(name)) {
623 PyErr_SetString(PyExc_TypeError,
624 "attribute name must be string");
625 return NULL;
626 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000627 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000628 if (result == NULL && dflt != NULL &&
629 PyErr_ExceptionMatches(PyExc_AttributeError))
630 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000631 PyErr_Clear();
632 Py_INCREF(dflt);
633 result = dflt;
634 }
635 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000636}
637
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000638PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000639"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000640\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000641Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
642When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000643exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000644
645
Guido van Rossum79f25d91997-04-29 20:08:16 +0000646static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000647builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000648{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000649 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000650
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 d = PyEval_GetGlobals();
652 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000653 return d;
654}
655
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000656PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000657"globals() -> dictionary\n\
658\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000659Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000660
661
Guido van Rossum79f25d91997-04-29 20:08:16 +0000662static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000663builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000664{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665 PyObject *v;
666 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000667
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000668 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000669 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000670#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000671 if (PyUnicode_Check(name)) {
672 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
673 if (name == NULL)
674 return NULL;
675 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000676#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000677
678 if (!PyString_Check(name)) {
679 PyErr_SetString(PyExc_TypeError,
680 "attribute name must be string");
681 return NULL;
682 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000683 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000684 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000685 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000686 Py_INCREF(Py_False);
687 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000688 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000690 Py_INCREF(Py_True);
691 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000692}
693
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000694PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000695"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000696\n\
697Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000698(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000699
700
Guido van Rossum79f25d91997-04-29 20:08:16 +0000701static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000702builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000703{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000704 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000705}
706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000707PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000708"id(object) -> integer\n\
709\n\
710Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000711simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000712
713
Guido van Rossum79f25d91997-04-29 20:08:16 +0000714static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000715builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000716{
717 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000718 PyObject *it; /* the iterator object */
719 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000720 } sequence;
721
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000723 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000724 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000725 register int i, j;
726
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729 PyErr_SetString(PyExc_TypeError,
730 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000731 return NULL;
732 }
733
Guido van Rossum79f25d91997-04-29 20:08:16 +0000734 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000736
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000737 if (func == Py_None && n == 1) {
738 /* map(None, S) is the same as list(S). */
739 return PySequence_List(PyTuple_GetItem(args, 1));
740 }
741
Tim Peters4e9afdc2001-05-03 23:54:49 +0000742 /* Get space for sequence descriptors. Must NULL out the iterator
743 * pointers so that jumping to Fail_2 later doesn't see trash.
744 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
746 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000747 return NULL;
748 }
749 for (i = 0; i < n; ++i) {
750 seqs[i].it = (PyObject*)NULL;
751 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000752 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000753
Tim Peters4e9afdc2001-05-03 23:54:49 +0000754 /* Do a first pass to obtain iterators for the arguments, and set len
755 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000756 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000757 len = 0;
758 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
759 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000760 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000761
Tim Peters4e9afdc2001-05-03 23:54:49 +0000762 /* Get iterator. */
763 curseq = PyTuple_GetItem(args, i+1);
764 sqp->it = PyObject_GetIter(curseq);
765 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000766 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000767 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000768 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000769 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000771 goto Fail_2;
772 }
773
Tim Peters4e9afdc2001-05-03 23:54:49 +0000774 /* Update len. */
775 curlen = -1; /* unknown */
776 if (PySequence_Check(curseq) &&
777 curseq->ob_type->tp_as_sequence->sq_length) {
778 curlen = PySequence_Size(curseq);
779 if (curlen < 0)
780 PyErr_Clear();
781 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000782 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000783 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000784 if (curlen > len)
785 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000786 }
787
Tim Peters4e9afdc2001-05-03 23:54:49 +0000788 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000790 goto Fail_2;
791
Tim Peters4e9afdc2001-05-03 23:54:49 +0000792 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000793 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000794 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000795 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000796
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000798 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000799 else if ((alist = PyTuple_New(n)) == NULL)
800 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000801
802 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000803 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 Py_INCREF(Py_None);
805 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000806 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000807 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 item = PyIter_Next(sqp->it);
809 if (item)
810 ++numactive;
811 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000812 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000813 Py_XDECREF(alist);
814 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000815 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000816 Py_INCREF(Py_None);
817 item = Py_None;
818 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000819 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000820 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000821 if (alist)
822 PyTuple_SET_ITEM(alist, j, item);
823 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000824 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825 }
826
Guido van Rossum32120311995-07-10 13:52:21 +0000827 if (!alist)
828 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000829
Tim Peters4e9afdc2001-05-03 23:54:49 +0000830 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000831 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000832 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000833 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000834
Guido van Rossum79f25d91997-04-29 20:08:16 +0000835 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000836 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000837 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 value = PyEval_CallObject(func, alist);
839 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000840 if (value == NULL)
841 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000842 }
843 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000844 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000845 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000846 if (status < 0)
847 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000848 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000849 else if (PyList_SetItem(result, i, value) < 0)
850 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000851 }
852
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000853 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
854 goto Fail_1;
855
Tim Peters4e9afdc2001-05-03 23:54:49 +0000856 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000857
Guido van Rossum12d12c51993-10-26 17:58:25 +0000858Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000860Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000861 result = NULL;
862Succeed:
863 assert(seqs);
864 for (i = 0; i < n; ++i)
865 Py_XDECREF(seqs[i].it);
866 PyMem_DEL(seqs);
867 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000868}
869
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000870PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000871"map(function, sequence[, sequence, ...]) -> list\n\
872\n\
873Return a list of the results of applying the function to the items of\n\
874the argument sequence(s). If more than one sequence is given, the\n\
875function is called with an argument list consisting of the corresponding\n\
876item of each sequence, substituting None for missing values when not all\n\
877sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000878the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879
880
Guido van Rossum79f25d91997-04-29 20:08:16 +0000881static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000882builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000883{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 PyObject *v;
885 PyObject *name;
886 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000887
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000888 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000889 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000891 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 Py_INCREF(Py_None);
893 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000894}
895
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000896PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000897"setattr(object, name, value)\n\
898\n\
899Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000900``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000901
902
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000904builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000905{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000906 PyObject *v;
907 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000908
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000909 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000910 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000912 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913 Py_INCREF(Py_None);
914 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000915}
916
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000918"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919\n\
920Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000921``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922
923
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000925builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000926{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000927 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000928
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000930 if (x == -1)
931 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000933}
934
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000935PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000936"hash(object) -> integer\n\
937\n\
938Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000939the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000940
941
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000943builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000944{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000946
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000947 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000948 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000950 "hex() argument can't be converted to hex");
951 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000952 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000953 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000954}
955
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000956PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000957"hex(number) -> string\n\
958\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000959Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000960
961
Tim Petersdbd9ba62000-07-09 03:09:57 +0000962static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000963
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000965builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000966{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000968 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 PyObject *res;
970 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000971
972 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000973 if (line == NULL)
974 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000975 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000976 return NULL;
977 while (*str == ' ' || *str == '\t')
978 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979 globals = PyEval_GetGlobals();
980 locals = PyEval_GetLocals();
981 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
982 if (PyDict_SetItemString(globals, "__builtins__",
983 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000984 return NULL;
985 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000986 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000988 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000989}
990
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000991PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000992"input([prompt]) -> value\n\
993\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000994Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000995
996
Guido van Rossume8811f81997-02-14 15:48:05 +0000997static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000998builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +0000999{
1000 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001001 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001002 return NULL;
1003 Py_INCREF(s);
1004 PyString_InternInPlace(&s);
1005 return s;
1006}
1007
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001008PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001009"intern(string) -> string\n\
1010\n\
1011``Intern'' the given string. This enters the string in the (global)\n\
1012table of interned strings whose purpose is to speed up dictionary lookups.\n\
1013Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001014same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001015
1016
Guido van Rossum79f25d91997-04-29 20:08:16 +00001017static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001018builtin_iter(PyObject *self, PyObject *args)
1019{
1020 PyObject *v, *w = NULL;
1021
1022 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1023 return NULL;
1024 if (w == NULL)
1025 return PyObject_GetIter(v);
1026 if (!PyCallable_Check(v)) {
1027 PyErr_SetString(PyExc_TypeError,
1028 "iter(v, w): v must be callable");
1029 return NULL;
1030 }
1031 return PyCallIter_New(v, w);
1032}
1033
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001034PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001035"iter(collection) -> iterator\n\
1036iter(callable, sentinel) -> iterator\n\
1037\n\
1038Get an iterator from an object. In the first form, the argument must\n\
1039supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001040In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001041
1042
1043static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001044builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001045{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001046 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001047
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001048 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001049 if (res < 0 && PyErr_Occurred())
1050 return NULL;
1051 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001052}
1053
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001054PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055"len(object) -> integer\n\
1056\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001057Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001058
1059
Guido van Rossum79f25d91997-04-29 20:08:16 +00001060static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001061builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001062{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001063 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001064
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065 d = PyEval_GetLocals();
1066 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001067 return d;
1068}
1069
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001070PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001071"locals() -> dictionary\n\
1072\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001073Return the dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001074
1075
Guido van Rossum79f25d91997-04-29 20:08:16 +00001076static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001077min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001078{
Tim Petersc3074532001-05-03 07:00:32 +00001079 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001080
Guido van Rossum79f25d91997-04-29 20:08:16 +00001081 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001082 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001084 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001085
Tim Petersc3074532001-05-03 07:00:32 +00001086 it = PyObject_GetIter(v);
1087 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001088 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001089
1090 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001091 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001092 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001093 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001094 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001095 Py_XDECREF(w);
1096 Py_DECREF(it);
1097 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001098 }
Tim Petersc3074532001-05-03 07:00:32 +00001099 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001100 }
Tim Petersc3074532001-05-03 07:00:32 +00001101
Guido van Rossum2d951851994-08-29 12:52:16 +00001102 if (w == NULL)
1103 w = x;
1104 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001105 int cmp = PyObject_RichCompareBool(x, w, op);
1106 if (cmp > 0) {
1107 Py_DECREF(w);
1108 w = x;
1109 }
1110 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001111 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001112 Py_DECREF(w);
1113 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001114 return NULL;
1115 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001116 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001118 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001119 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001120 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001121 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001122 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001123 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001124 return w;
1125}
1126
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001128builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001129{
Guido van Rossum53451b32001-01-17 15:47:24 +00001130 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001131}
1132
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001133PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001134"min(sequence) -> value\n\
1135min(a, b, c, ...) -> value\n\
1136\n\
1137With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001138With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001139
1140
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001142builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001143{
Guido van Rossum53451b32001-01-17 15:47:24 +00001144 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001145}
1146
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001147PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001148"max(sequence) -> value\n\
1149max(a, b, c, ...) -> value\n\
1150\n\
1151With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001152With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001153
1154
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001156builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001157{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001159
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001160 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1161 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001163 "oct() argument can't be converted to oct");
1164 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001165 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001166 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001167}
1168
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001169PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001170"oct(number) -> string\n\
1171\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001172Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001173
1174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001176builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001177{
Guido van Rossum09095f32000-03-10 23:00:52 +00001178 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001179 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001180
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001181 if (PyString_Check(obj)) {
1182 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001183 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001184 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001185 return PyInt_FromLong(ord);
1186 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001187#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001188 } else if (PyUnicode_Check(obj)) {
1189 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001190 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001191 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001192 return PyInt_FromLong(ord);
1193 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001194#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001195 } else {
1196 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001197 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001198 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001199 return NULL;
1200 }
1201
Guido van Rossumad991772001-01-12 16:03:05 +00001202 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001203 "ord() expected a character, "
1204 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001205 size);
1206 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001207}
1208
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001209PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001210"ord(c) -> integer\n\
1211\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001212Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001213
1214
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001216builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001217{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001218 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001219
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001221 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001222 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001223}
1224
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001225PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226"pow(x, y[, z]) -> number\n\
1227\n\
1228With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001229equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001230
1231
Guido van Rossum124eff01999-02-23 16:11:01 +00001232/* Return number of items in range/xrange (lo, hi, step). step > 0
1233 * required. Return a value < 0 if & only if the true value is too
1234 * large to fit in a signed long.
1235 */
1236static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001237get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001238{
1239 /* -------------------------------------------------------------
1240 If lo >= hi, the range is empty.
1241 Else if n values are in the range, the last one is
1242 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1243 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1244 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1245 the RHS is non-negative and so truncation is the same as the
1246 floor. Letting M be the largest positive long, the worst case
1247 for the RHS numerator is hi=M, lo=-M-1, and then
1248 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1249 precision to compute the RHS exactly.
1250 ---------------------------------------------------------------*/
1251 long n = 0;
1252 if (lo < hi) {
1253 unsigned long uhi = (unsigned long)hi;
1254 unsigned long ulo = (unsigned long)lo;
1255 unsigned long diff = uhi - ulo - 1;
1256 n = (long)(diff / (unsigned long)step + 1);
1257 }
1258 return n;
1259}
1260
Guido van Rossum79f25d91997-04-29 20:08:16 +00001261static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001262builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001263{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001264 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001265 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001266 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001267
Guido van Rossum79f25d91997-04-29 20:08:16 +00001268 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001269
Guido van Rossum79f25d91997-04-29 20:08:16 +00001270 if (PyTuple_Size(args) <= 1) {
1271 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001272 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001273 &ihigh))
1274 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001275 }
1276 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001278 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001279 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001280 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281 }
1282 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001283 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001284 return NULL;
1285 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001286 if (istep > 0)
1287 bign = get_len_of_range(ilow, ihigh, istep);
1288 else
1289 bign = get_len_of_range(ihigh, ilow, -istep);
1290 n = (int)bign;
1291 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001292 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001293 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001294 return NULL;
1295 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001296 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001297 if (v == NULL)
1298 return NULL;
1299 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001300 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001301 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001302 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001303 return NULL;
1304 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001305 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001306 ilow += istep;
1307 }
1308 return v;
1309}
1310
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001311PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001312"range([start,] stop[, step]) -> list of integers\n\
1313\n\
1314Return a list containing an arithmetic progression of integers.\n\
1315range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1316When step is given, it specifies the increment (or decrement).\n\
1317For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001318These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001319
1320
Guido van Rossum79f25d91997-04-29 20:08:16 +00001321static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001322builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001323{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001324 PyObject *v = NULL;
1325 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001326
Guido van Rossum79f25d91997-04-29 20:08:16 +00001327 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001328 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001329 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1330 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001331 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001333 char *prompt;
1334 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001335 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001336 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001337 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001338 if (po == NULL)
1339 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001340 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001341 if (prompt == NULL)
1342 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001343 }
1344 else {
1345 po = NULL;
1346 prompt = "";
1347 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001348 s = PyOS_Readline(prompt);
1349 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001350 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001351 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001352 return NULL;
1353 }
1354 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001355 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001356 result = NULL;
1357 }
1358 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001359 size_t len = strlen(s);
1360 if (len > INT_MAX) {
1361 PyErr_SetString(PyExc_OverflowError, "input too long");
1362 result = NULL;
1363 }
1364 else {
1365 result = PyString_FromStringAndSize(s, (int)(len-1));
1366 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001367 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001368 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001369 return result;
1370 }
Guido van Rossum90933611991-06-07 16:10:43 +00001371 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001372 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001373 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001375 return NULL;
1376 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001377 if (Py_FlushLine() != 0 ||
1378 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001379 return NULL;
1380 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001381 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001382 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001384 return NULL;
1385 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001386 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001387}
1388
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001389PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001390"raw_input([prompt]) -> string\n\
1391\n\
1392Read a string from standard input. The trailing newline is stripped.\n\
1393If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1394On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001395is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001396
1397
Guido van Rossum79f25d91997-04-29 20:08:16 +00001398static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001399builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001400{
Tim Peters15d81ef2001-05-04 04:39:21 +00001401 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001402
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001404 return NULL;
1405 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001406 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001407
Tim Peters15d81ef2001-05-04 04:39:21 +00001408 it = PyObject_GetIter(seq);
1409 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001410 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001411 "reduce() arg 2 must support iteration");
1412 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001413 return NULL;
1414 }
1415
Guido van Rossum79f25d91997-04-29 20:08:16 +00001416 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001417 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001418
Tim Peters15d81ef2001-05-04 04:39:21 +00001419 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001420 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001421
1422 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423 Py_DECREF(args);
1424 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001425 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001426 }
1427
Tim Peters15d81ef2001-05-04 04:39:21 +00001428 op2 = PyIter_Next(it);
1429 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001430 if (PyErr_Occurred())
1431 goto Fail;
1432 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001433 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001434
Guido van Rossum2d951851994-08-29 12:52:16 +00001435 if (result == NULL)
1436 result = op2;
1437 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001438 PyTuple_SetItem(args, 0, result);
1439 PyTuple_SetItem(args, 1, op2);
1440 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001441 goto Fail;
1442 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001443 }
1444
Guido van Rossum79f25d91997-04-29 20:08:16 +00001445 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001446
Guido van Rossum2d951851994-08-29 12:52:16 +00001447 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001448 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001449 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001450
Tim Peters15d81ef2001-05-04 04:39:21 +00001451 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001452 return result;
1453
Guido van Rossum2d951851994-08-29 12:52:16 +00001454Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001455 Py_XDECREF(args);
1456 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001457 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001458 return NULL;
1459}
1460
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001461PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001462"reduce(function, sequence[, initial]) -> value\n\
1463\n\
1464Apply a function of two arguments cumulatively to the items of a sequence,\n\
1465from left to right, so as to reduce the sequence to a single value.\n\
1466For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1467((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1468of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001469sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001470
1471
Guido van Rossum79f25d91997-04-29 20:08:16 +00001472static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001473builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001474{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001475 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001476}
1477
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001478PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001479"reload(module) -> module\n\
1480\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001481Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001482
1483
Guido van Rossum79f25d91997-04-29 20:08:16 +00001484static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001485builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001486{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001487 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001488}
1489
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001490PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001491"repr(object) -> string\n\
1492\n\
1493Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001494For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001495
1496
Guido van Rossum79f25d91997-04-29 20:08:16 +00001497static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001498builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001499{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001500 double x;
1501 double f;
1502 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001503 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001504
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001506 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001507 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001508 i = abs(ndigits);
1509 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001510 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001511 if (ndigits < 0)
1512 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001513 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001514 x *= f;
1515 if (x >= 0.0)
1516 x = floor(x + 0.5);
1517 else
1518 x = ceil(x - 0.5);
1519 if (ndigits < 0)
1520 x *= f;
1521 else
1522 x /= f;
1523 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001524}
1525
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001526PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001527"round(number[, ndigits]) -> floating point number\n\
1528\n\
1529Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001530This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001531
1532
Guido van Rossum79f25d91997-04-29 20:08:16 +00001533static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001534builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001535{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001536 PyObject *v = NULL;
1537 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001538
Guido van Rossum79f25d91997-04-29 20:08:16 +00001539 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001540 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001541 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001543 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 if (!PyErr_Occurred())
1545 PyErr_SetString(PyExc_SystemError,
1546 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001547 }
1548 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001549 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001550 }
1551 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001552 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001553 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001554 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001555 "vars() argument must have __dict__ attribute");
1556 return NULL;
1557 }
1558 }
1559 return d;
1560}
1561
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001562PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001563"vars([object]) -> dictionary\n\
1564\n\
1565Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001566With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001567
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001568static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001569builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001570{
1571 PyObject *inst;
1572 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001573 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001574
Guido van Rossum43713e52000-02-29 13:59:29 +00001575 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001576 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001577
Guido van Rossum823649d2001-03-21 18:40:58 +00001578 retval = PyObject_IsInstance(inst, cls);
1579 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001580 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001581 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001582}
1583
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001584PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001585"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001586\n\
1587Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001588With a type as second argument, return whether that is the object's type.\n\
1589The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001590isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001591
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001592
1593static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001594builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001595{
1596 PyObject *derived;
1597 PyObject *cls;
1598 int retval;
1599
Guido van Rossum43713e52000-02-29 13:59:29 +00001600 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001601 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001602
Guido van Rossum823649d2001-03-21 18:40:58 +00001603 retval = PyObject_IsSubclass(derived, cls);
1604 if (retval < 0)
1605 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001606 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001607}
1608
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001609PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001610"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001611\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001612Return whether class C is a subclass (i.e., a derived class) of class B.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001613
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001614
Barry Warsawbd599b52000-08-03 15:45:29 +00001615static PyObject*
1616builtin_zip(PyObject *self, PyObject *args)
1617{
1618 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001619 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001620 int i;
1621 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001622 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001623
1624 if (itemsize < 1) {
1625 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001626 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001627 return NULL;
1628 }
1629 /* args must be a tuple */
1630 assert(PyTuple_Check(args));
1631
Tim Peters39a86c22002-05-12 07:19:38 +00001632 /* Guess at result length: the shortest of the input lengths.
1633 If some argument refuses to say, we refuse to guess too, lest
1634 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001635 len = -1; /* unknown */
1636 for (i = 0; i < itemsize; ++i) {
1637 PyObject *item = PyTuple_GET_ITEM(args, i);
1638 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001639 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001640 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001641 len = -1;
1642 break;
1643 }
Tim Peters67d687a2002-04-29 21:27:32 +00001644 else if (len < 0 || thislen < len)
1645 len = thislen;
1646 }
1647
Tim Peters8572b4f2001-05-06 01:05:02 +00001648 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001649 if (len < 0)
1650 len = 10; /* arbitrary */
1651 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001652 return NULL;
1653
Tim Peters8572b4f2001-05-06 01:05:02 +00001654 /* obtain iterators */
1655 itlist = PyTuple_New(itemsize);
1656 if (itlist == NULL)
1657 goto Fail_ret;
1658 for (i = 0; i < itemsize; ++i) {
1659 PyObject *item = PyTuple_GET_ITEM(args, i);
1660 PyObject *it = PyObject_GetIter(item);
1661 if (it == NULL) {
1662 if (PyErr_ExceptionMatches(PyExc_TypeError))
1663 PyErr_Format(PyExc_TypeError,
1664 "zip argument #%d must support iteration",
1665 i+1);
1666 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001667 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001668 PyTuple_SET_ITEM(itlist, i, it);
1669 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001670
Tim Peters8572b4f2001-05-06 01:05:02 +00001671 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001672 for (i = 0; ; ++i) {
1673 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001674 PyObject *next = PyTuple_New(itemsize);
1675 if (!next)
1676 goto Fail_ret_itlist;
1677
Tim Peters67d687a2002-04-29 21:27:32 +00001678 for (j = 0; j < itemsize; j++) {
1679 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001680 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001681 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001682 if (PyErr_Occurred()) {
1683 Py_DECREF(ret);
1684 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001685 }
1686 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001687 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001688 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001689 }
Tim Peters67d687a2002-04-29 21:27:32 +00001690 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001691 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001692
Tim Peters67d687a2002-04-29 21:27:32 +00001693 if (i < len)
1694 PyList_SET_ITEM(ret, i, next);
1695 else {
1696 int status = PyList_Append(ret, next);
1697 Py_DECREF(next);
1698 ++len;
1699 if (status < 0)
1700 goto Fail_ret_itlist;
1701 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001702 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001703
Tim Peters67d687a2002-04-29 21:27:32 +00001704Done:
1705 if (ret != NULL && i < len) {
1706 /* The list is too big. */
1707 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1708 return NULL;
1709 }
1710 return ret;
1711
Tim Peters8572b4f2001-05-06 01:05:02 +00001712Fail_ret_itlist:
1713 Py_DECREF(itlist);
1714Fail_ret:
1715 Py_DECREF(ret);
1716 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001717}
1718
1719
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001720PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001721"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1722\n\
1723Return a list of tuples, where each tuple contains the i-th element\n\
1724from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001725in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001726
1727
Guido van Rossum79f25d91997-04-29 20:08:16 +00001728static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001729 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1730 {"abs", builtin_abs, METH_O, abs_doc},
1731 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001732 {"callable", builtin_callable, METH_O, callable_doc},
1733 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1734 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1735 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1736 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1737 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1738 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1739 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1740 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1741 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1742 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1743 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1744 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1745 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1746 {"hash", builtin_hash, METH_O, hash_doc},
1747 {"hex", builtin_hex, METH_O, hex_doc},
1748 {"id", builtin_id, METH_O, id_doc},
1749 {"input", builtin_input, METH_VARARGS, input_doc},
1750 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1751 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1752 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1753 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1754 {"len", builtin_len, METH_O, len_doc},
1755 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1756 {"map", builtin_map, METH_VARARGS, map_doc},
1757 {"max", builtin_max, METH_VARARGS, max_doc},
1758 {"min", builtin_min, METH_VARARGS, min_doc},
1759 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001760 {"ord", builtin_ord, METH_O, ord_doc},
1761 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1762 {"range", builtin_range, METH_VARARGS, range_doc},
1763 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1764 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1765 {"reload", builtin_reload, METH_O, reload_doc},
1766 {"repr", builtin_repr, METH_O, repr_doc},
1767 {"round", builtin_round, METH_VARARGS, round_doc},
1768 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001769#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001770 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001771#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001772 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001773 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001774 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001775};
1776
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001777PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001778"Built-in functions, exceptions, and other objects.\n\
1779\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001780Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001781
Guido van Rossum25ce5661997-08-02 03:10:38 +00001782PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001783_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001784{
Fred Drake5550de32000-06-20 04:54:19 +00001785 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001786 mod = Py_InitModule4("__builtin__", builtin_methods,
1787 builtin_doc, (PyObject *)NULL,
1788 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001789 if (mod == NULL)
1790 return NULL;
1791 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001792
1793#define SETBUILTIN(NAME, OBJECT) \
1794 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1795 return NULL
1796
1797 SETBUILTIN("None", Py_None);
1798 SETBUILTIN("Ellipsis", Py_Ellipsis);
1799 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001800 SETBUILTIN("False", Py_False);
1801 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001802 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001803 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001804 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001805 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001806#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001807 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001808#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001809 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001810 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001811 SETBUILTIN("float", &PyFloat_Type);
1812 SETBUILTIN("property", &PyProperty_Type);
1813 SETBUILTIN("int", &PyInt_Type);
1814 SETBUILTIN("list", &PyList_Type);
1815 SETBUILTIN("long", &PyLong_Type);
1816 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001817 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001818 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1819 SETBUILTIN("str", &PyString_Type);
1820 SETBUILTIN("super", &PySuper_Type);
1821 SETBUILTIN("tuple", &PyTuple_Type);
1822 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001823 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001824
1825 /* Note that open() is just an alias of file(). */
1826 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001827 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001828#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001829 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001830#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001831 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001832 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1833 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001834 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001835 }
1836 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001837
Guido van Rossum25ce5661997-08-02 03:10:38 +00001838 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001839#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001840}
1841
Guido van Rossume77a7571993-11-03 15:01:26 +00001842/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001843
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001845filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001846{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001848 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001850
Guido van Rossumb7b45621995-08-04 04:07:45 +00001851 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001852 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001853 return tuple;
1854 }
1855
Guido van Rossum79f25d91997-04-29 20:08:16 +00001856 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001857 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001858
Guido van Rossum12d12c51993-10-26 17:58:25 +00001859 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001860 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001861 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001862
Guido van Rossum79f25d91997-04-29 20:08:16 +00001863 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001864 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865 if (func == Py_None) {
1866 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001867 good = item;
1868 }
1869 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001871 if (arg == NULL)
1872 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001873 good = PyEval_CallObject(func, arg);
1874 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001875 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001876 goto Fail_1;
1877 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001878 ok = PyObject_IsTrue(good);
1879 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001880 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881 Py_INCREF(item);
1882 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001883 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001884 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885 }
1886
Tim Peters4324aa32001-05-28 22:30:08 +00001887 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001888 return NULL;
1889
Guido van Rossum12d12c51993-10-26 17:58:25 +00001890 return result;
1891
Guido van Rossum12d12c51993-10-26 17:58:25 +00001892Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001893 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001894 return NULL;
1895}
1896
1897
Guido van Rossume77a7571993-11-03 15:01:26 +00001898/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001899
Guido van Rossum79f25d91997-04-29 20:08:16 +00001900static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001901filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001902{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001903 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001904 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001905 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001906
Guido van Rossum79f25d91997-04-29 20:08:16 +00001907 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00001908 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001909 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00001910 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001911 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001913 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001914
Guido van Rossum12d12c51993-10-26 17:58:25 +00001915 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001917 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001918
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001919 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1920 if (item == NULL)
1921 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00001923 if (arg == NULL) {
1924 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001925 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001926 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001927 good = PyEval_CallObject(func, arg);
1928 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00001929 if (good == NULL) {
1930 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001931 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001932 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 ok = PyObject_IsTrue(good);
1934 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001935 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001936 PyString_AS_STRING((PyStringObject *)result)[j++] =
1937 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00001938 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001939 }
1940
Tim Peters5de98422002-04-27 18:44:32 +00001941 if (j < len)
1942 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001943
Guido van Rossum12d12c51993-10-26 17:58:25 +00001944 return result;
1945
Guido van Rossum12d12c51993-10-26 17:58:25 +00001946Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001947 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001948 return NULL;
1949}