blob: 2383b4fdd072ffc1296d0639822ef1e24352a28e [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 *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000027#ifdef Py_USING_UNICODE
28static PyObject *filterunicode(PyObject *, PyObject *);
29#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000030static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000031
Guido van Rossum79f25d91997-04-29 20:08:16 +000032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000033builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000034{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000035 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000036 PyObject *globals = NULL;
37 PyObject *locals = NULL;
38 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039
Guido van Rossum79f25d91997-04-29 20:08:16 +000040 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000041 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000042 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000043 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044}
45
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000046PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000047"__import__(name, globals, locals, fromlist) -> module\n\
48\n\
49Import a module. The globals are only used to determine the context;\n\
50they are not modified. The locals are currently unused. The fromlist\n\
51should be a list of names to emulate ``from name import ...'', or an\n\
52empty list to emulate ``import name''.\n\
53When importing a module from a package, note that __import__('A.B', ...)\n\
54returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000055fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000056
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057
Guido van Rossum79f25d91997-04-29 20:08:16 +000058static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000059builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000060{
Guido van Rossum09df08a1998-05-22 00:51:39 +000061 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000062}
63
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000064PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065"abs(number) -> number\n\
66\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000067Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000068
69
Guido van Rossum79f25d91997-04-29 20:08:16 +000070static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000071builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000072{
Guido van Rossum79f25d91997-04-29 20:08:16 +000073 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000074 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000075
Neal Norwitz94c30c02003-02-03 20:23:33 +000076 PyErr_Warn(PyExc_PendingDeprecationWarning,
77 "use func(*args, **kwargs) instead of "
78 "apply(func, args, kwargs)");
Raymond Hettingerea3fdf42002-12-29 16:33:45 +000079 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000080 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000081 if (alist != NULL) {
82 if (!PyTuple_Check(alist)) {
83 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000084 PyErr_Format(PyExc_TypeError,
85 "apply() arg 2 expect sequence, found %s",
86 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000087 return NULL;
88 }
89 t = PySequence_Tuple(alist);
90 if (t == NULL)
91 return NULL;
92 alist = t;
93 }
Guido van Rossum2d951851994-08-29 12:52:16 +000094 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000095 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000096 PyErr_Format(PyExc_TypeError,
97 "apply() arg 3 expected dictionary, found %s",
98 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000099 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000100 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000101 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
102 finally:
103 Py_XDECREF(t);
104 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000105}
106
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000107PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000108"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000109\n\
Fred Drake7b912121999-12-23 14:16:55 +0000110Call a callable object with positional arguments taken from the tuple args,\n\
111and keyword arguments taken from the optional dictionary kwargs.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000112Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000113
114
Guido van Rossum79f25d91997-04-29 20:08:16 +0000115static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000116builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000117{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000118 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000119}
120
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000121PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000122"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000123\n\
124Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000125Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000126
127
Guido van Rossum79f25d91997-04-29 20:08:16 +0000128static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000129builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000130{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000131 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000132 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000133 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000134
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000135 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000136 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000137
Tim Peters0e57abf2001-05-02 07:39:38 +0000138 /* Strings and tuples return a result of the same type. */
139 if (PyString_Check(seq))
140 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000141#ifdef Py_USING_UNICODE
142 if (PyUnicode_Check(seq))
143 return filterunicode(func, seq);
144#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000145 if (PyTuple_Check(seq))
146 return filtertuple(func, seq);
147
148 /* Get iterator. */
149 it = PyObject_GetIter(seq);
150 if (it == NULL)
151 return NULL;
152
153 /* Guess a result list size. */
154 len = -1; /* unknown */
155 if (PySequence_Check(seq) &&
156 seq->ob_type->tp_as_sequence->sq_length) {
157 len = PySequence_Size(seq);
158 if (len < 0)
159 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000160 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000161 if (len < 0)
162 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000163
Guido van Rossumc7903a12002-08-16 07:04:56 +0000164 /* Pre-allocate argument list tuple. */
165 arg = PyTuple_New(1);
166 if (arg == NULL)
167 goto Fail_arg;
168
Tim Peters0e57abf2001-05-02 07:39:38 +0000169 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000170 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000171 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000172 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000173 result = seq;
174 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000175 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000176 result = PyList_New(len);
177 if (result == NULL)
178 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000179 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000180
Tim Peters0e57abf2001-05-02 07:39:38 +0000181 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000182 j = 0;
183 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000184 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000185 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000186
Tim Peters0e57abf2001-05-02 07:39:38 +0000187 item = PyIter_Next(it);
188 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000189 if (PyErr_Occurred())
190 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000191 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000192 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000193
Guido van Rossum79f25d91997-04-29 20:08:16 +0000194 if (func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000195 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000196 }
197 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000198 PyObject *good;
199 PyTuple_SET_ITEM(arg, 0, item);
200 good = PyObject_Call(func, arg, NULL);
201 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000202 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000203 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000204 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000205 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000206 ok = PyObject_IsTrue(good);
207 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000208 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000209 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000210 if (j < len)
211 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000212 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000213 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000214 Py_DECREF(item);
215 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000217 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000219 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000220 else
221 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000222 }
223
Guido van Rossum12d12c51993-10-26 17:58:25 +0000224
Tim Peters0e57abf2001-05-02 07:39:38 +0000225 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000226 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000227 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000228
Tim Peters3c6b1482001-05-21 08:07:05 +0000229 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000230 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000231 return result;
232
Tim Peters0e57abf2001-05-02 07:39:38 +0000233Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000234 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000235Fail_it:
236 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000237Fail_arg:
238 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000239 return NULL;
240}
241
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000242PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000243"filter(function or None, sequence) -> list, tuple, or string\n"
244"\n"
245"Return those items of sequence for which function(item) is true. If\n"
246"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000247"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000248
Guido van Rossum79f25d91997-04-29 20:08:16 +0000249static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000250builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000251{
252 long x;
253 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000254
Guido van Rossum79f25d91997-04-29 20:08:16 +0000255 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000256 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000257 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000258 PyErr_SetString(PyExc_ValueError,
259 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000260 return NULL;
261 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000262 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000263 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000264}
265
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000266PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267"chr(i) -> character\n\
268\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000270
271
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000272#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000273static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000274builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000275{
276 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000277
278 if (!PyArg_ParseTuple(args, "l:unichr", &x))
279 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000280
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000281 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000282}
283
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000284PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000285"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000286\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000287Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000288#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000289
290
291static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000292builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000293{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000294 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000295 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000296
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000297 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000298 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000299 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000300 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000301 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000302}
303
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000304PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000305"cmp(x, y) -> integer\n\
306\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000307Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000308
309
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000311builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000312{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000313 PyObject *v, *w;
314 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000315
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000316 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000317 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000318 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000319 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000320 res = Py_BuildValue("(OO)", v, w);
321 Py_DECREF(v);
322 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000323 return res;
324}
325
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000326PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000327"coerce(x, y) -> None or (x1, y1)\n\
328\n\
329When 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 +0000330containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000331
332
Guido van Rossum79f25d91997-04-29 20:08:16 +0000333static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000334builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000335{
336 char *str;
337 char *filename;
338 char *startstr;
339 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000340 int dont_inherit = 0;
341 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000342 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000343
Tim Peters67d687a2002-04-29 21:27:32 +0000344 if (!PyArg_ParseTuple(args, "sss|ii:compile", &str, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000345 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000346 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000347
Guido van Rossum5b722181993-03-30 17:46:03 +0000348 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000349 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000350 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000351 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000352 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000353 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000354 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000355 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000356 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000357 return NULL;
358 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000359
360 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
361 PyErr_SetString(PyExc_ValueError,
362 "compile(): unrecognised flags");
363 return NULL;
364 }
365 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
366
367 cf.cf_flags = supplied_flags;
368 if (!dont_inherit) {
369 PyEval_MergeCompilerFlags(&cf);
370 }
371 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000372}
373
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000374PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000375"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000376\n\
377Compile the source string (a Python module, statement or expression)\n\
378into a code object that can be executed by the exec statement or eval().\n\
379The filename will be used for run-time error messages.\n\
380The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000381single (interactive) statement, or 'eval' to compile an expression.\n\
382The flags argument, if present, controls which future statements influence\n\
383the compilation of the code.\n\
384The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
385the effects of any future statements in effect in the code calling\n\
386compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000387in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000388
Guido van Rossum79f25d91997-04-29 20:08:16 +0000389static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000390builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000391{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000392 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000393
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000394 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000395 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000396 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000397}
398
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000399PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000400"dir([object]) -> list of strings\n"
401"\n"
402"Return an alphabetized list of names comprising (some of) the attributes\n"
403"of the given object, and of attributes reachable from it:\n"
404"\n"
405"No argument: the names in the current scope.\n"
406"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000407"Type or class object: its attributes, and recursively the attributes of\n"
408" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000409"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000410" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000411
Guido van Rossum79f25d91997-04-29 20:08:16 +0000412static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000413builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000414{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000415 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000416
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000417 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000418 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000419 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000420}
421
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000422PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000423"divmod(x, y) -> (div, mod)\n\
424\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000425Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000426
427
Guido van Rossum79f25d91997-04-29 20:08:16 +0000428static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000429builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000430{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000431 PyObject *cmd;
432 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000433 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000434 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000435
Guido van Rossum79f25d91997-04-29 20:08:16 +0000436 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438 &PyDict_Type, &globals,
439 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000440 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000441 if (globals == Py_None) {
442 globals = PyEval_GetGlobals();
443 if (locals == Py_None)
444 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000445 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000446 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000447 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000448
Guido van Rossum79f25d91997-04-29 20:08:16 +0000449 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
450 if (PyDict_SetItemString(globals, "__builtins__",
451 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000452 return NULL;
453 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000454
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000455 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000456 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000457 PyErr_SetString(PyExc_TypeError,
458 "code object passed to eval() may not contain free variables");
459 return NULL;
460 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000461 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000462 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000463
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000464 if (!PyString_Check(cmd) &&
465 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000466 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000467 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000468 return NULL;
469 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000470 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000471 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000472 while (*str == ' ' || *str == '\t')
473 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000474
475 cf.cf_flags = 0;
476 (void)PyEval_MergeCompilerFlags(&cf);
477 return PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000478}
479
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000480PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000481"eval(source[, globals[, locals]]) -> value\n\
482\n\
483Evaluate the source in the context of globals and locals.\n\
484The source may be a string representing a Python expression\n\
485or a code object as returned by compile().\n\
486The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000487globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000488
489
Guido van Rossum79f25d91997-04-29 20:08:16 +0000490static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000491builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000492{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000493 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000494 PyObject *globals = Py_None, *locals = Py_None;
495 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000496 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000497 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000498 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000499
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000501 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000502 &PyDict_Type, &globals,
503 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000504 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000505 if (globals == Py_None) {
506 globals = PyEval_GetGlobals();
507 if (locals == Py_None)
508 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000509 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000510 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000511 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000512 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
513 if (PyDict_SetItemString(globals, "__builtins__",
514 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000515 return NULL;
516 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000517
518 exists = 0;
519 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000520#if defined(PLAN9)
521 {
522 Dir *d;
523
524 if ((d = dirstat(filename))!=nil) {
525 if(d->mode & DMDIR)
526 werrstr("is a directory");
527 else
528 exists = 1;
529 free(d);
530 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000531 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000532#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000533 if (object_exists(filename)) {
534 if (isdir(filename))
535 errno = EISDIR;
536 else
537 exists = 1;
538 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000539#else /* standard Posix */
540 {
541 struct stat s;
542 if (stat(filename, &s) == 0) {
543 if (S_ISDIR(s.st_mode))
544# if defined(PY_OS2) && defined(PYCC_VACPP)
545 errno = EOS2ERR;
546# else
547 errno = EISDIR;
548# endif
549 else
550 exists = 1;
551 }
552 }
553#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000554
555 if (exists) {
556 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000557 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000558 Py_END_ALLOW_THREADS
559
560 if (fp == NULL) {
561 exists = 0;
562 }
563 }
564
565 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000566 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000567 return NULL;
568 }
Tim Peters5ba58662001-07-16 02:29:45 +0000569 cf.cf_flags = 0;
570 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000571 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000572 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000573 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000574 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000575 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000577}
578
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000579PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000580"execfile(filename[, globals[, locals]])\n\
581\n\
582Read and execute a Python script from a file.\n\
583The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000584globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000585
586
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000588builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000589{
Guido van Rossum950ff291998-06-29 13:38:57 +0000590 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000592
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000593 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000594 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000595#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000596 if (PyUnicode_Check(name)) {
597 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
598 if (name == NULL)
599 return NULL;
600 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000601#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000602
603 if (!PyString_Check(name)) {
604 PyErr_SetString(PyExc_TypeError,
605 "attribute name must be string");
606 return NULL;
607 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000608 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000609 if (result == NULL && dflt != NULL &&
610 PyErr_ExceptionMatches(PyExc_AttributeError))
611 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000612 PyErr_Clear();
613 Py_INCREF(dflt);
614 result = dflt;
615 }
616 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000617}
618
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000619PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000620"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000621\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000622Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
623When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000624exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000625
626
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000628builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000629{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000630 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000631
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632 d = PyEval_GetGlobals();
633 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000634 return d;
635}
636
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000637PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000638"globals() -> dictionary\n\
639\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000640Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000641
642
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000644builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000645{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000646 PyObject *v;
647 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000649 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000650 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000651#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000652 if (PyUnicode_Check(name)) {
653 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
654 if (name == NULL)
655 return NULL;
656 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000657#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000658
659 if (!PyString_Check(name)) {
660 PyErr_SetString(PyExc_TypeError,
661 "attribute name must be string");
662 return NULL;
663 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000664 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000665 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000667 Py_INCREF(Py_False);
668 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000669 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000670 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000671 Py_INCREF(Py_True);
672 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000673}
674
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000675PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000676"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000677\n\
678Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000679(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000680
681
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000683builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000684{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000685 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000686}
687
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000688PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000689"id(object) -> integer\n\
690\n\
691Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000692simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000693
694
Guido van Rossum79f25d91997-04-29 20:08:16 +0000695static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000696builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000697{
698 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000699 PyObject *it; /* the iterator object */
700 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000701 } sequence;
702
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000704 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000705 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000706 register int i, j;
707
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 PyErr_SetString(PyExc_TypeError,
711 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000712 return NULL;
713 }
714
Guido van Rossum79f25d91997-04-29 20:08:16 +0000715 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000716 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000717
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000718 if (func == Py_None && n == 1) {
719 /* map(None, S) is the same as list(S). */
720 return PySequence_List(PyTuple_GetItem(args, 1));
721 }
722
Tim Peters4e9afdc2001-05-03 23:54:49 +0000723 /* Get space for sequence descriptors. Must NULL out the iterator
724 * pointers so that jumping to Fail_2 later doesn't see trash.
725 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
727 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000728 return NULL;
729 }
730 for (i = 0; i < n; ++i) {
731 seqs[i].it = (PyObject*)NULL;
732 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000733 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000734
Tim Peters4e9afdc2001-05-03 23:54:49 +0000735 /* Do a first pass to obtain iterators for the arguments, and set len
736 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000737 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000738 len = 0;
739 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
740 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000741 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000742
Tim Peters4e9afdc2001-05-03 23:54:49 +0000743 /* Get iterator. */
744 curseq = PyTuple_GetItem(args, i+1);
745 sqp->it = PyObject_GetIter(curseq);
746 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000747 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000748 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000749 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000750 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000752 goto Fail_2;
753 }
754
Tim Peters4e9afdc2001-05-03 23:54:49 +0000755 /* Update len. */
756 curlen = -1; /* unknown */
757 if (PySequence_Check(curseq) &&
758 curseq->ob_type->tp_as_sequence->sq_length) {
759 curlen = PySequence_Size(curseq);
760 if (curlen < 0)
761 PyErr_Clear();
762 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000763 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000764 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000765 if (curlen > len)
766 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000767 }
768
Tim Peters4e9afdc2001-05-03 23:54:49 +0000769 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000771 goto Fail_2;
772
Tim Peters4e9afdc2001-05-03 23:54:49 +0000773 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000774 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000776 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000777
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000779 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000780 else if ((alist = PyTuple_New(n)) == NULL)
781 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000782
783 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 Py_INCREF(Py_None);
786 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000787 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000788 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000789 item = PyIter_Next(sqp->it);
790 if (item)
791 ++numactive;
792 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000793 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000794 Py_XDECREF(alist);
795 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000796 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000797 Py_INCREF(Py_None);
798 item = Py_None;
799 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000800 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000801 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000802 if (alist)
803 PyTuple_SET_ITEM(alist, j, item);
804 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000805 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000806 }
807
Guido van Rossum32120311995-07-10 13:52:21 +0000808 if (!alist)
809 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000810
Tim Peters4e9afdc2001-05-03 23:54:49 +0000811 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000813 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000814 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000815
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000817 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000818 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819 value = PyEval_CallObject(func, alist);
820 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000821 if (value == NULL)
822 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000823 }
824 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000825 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000826 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000827 if (status < 0)
828 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000829 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000830 else if (PyList_SetItem(result, i, value) < 0)
831 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000832 }
833
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000834 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
835 goto Fail_1;
836
Tim Peters4e9afdc2001-05-03 23:54:49 +0000837 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000838
Guido van Rossum12d12c51993-10-26 17:58:25 +0000839Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000841Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000842 result = NULL;
843Succeed:
844 assert(seqs);
845 for (i = 0; i < n; ++i)
846 Py_XDECREF(seqs[i].it);
847 PyMem_DEL(seqs);
848 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000849}
850
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000851PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000852"map(function, sequence[, sequence, ...]) -> list\n\
853\n\
854Return a list of the results of applying the function to the items of\n\
855the argument sequence(s). If more than one sequence is given, the\n\
856function is called with an argument list consisting of the corresponding\n\
857item of each sequence, substituting None for missing values when not all\n\
858sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000859the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000860
861
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000863builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000864{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 PyObject *v;
866 PyObject *name;
867 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000869 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000870 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000872 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 Py_INCREF(Py_None);
874 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000875}
876
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000877PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000878"setattr(object, name, value)\n\
879\n\
880Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000881``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000882
883
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000885builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000886{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887 PyObject *v;
888 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000890 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000891 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000893 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894 Py_INCREF(Py_None);
895 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000896}
897
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000898PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000899"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900\n\
901Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000902``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000903
904
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000906builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000907{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000908 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000909
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000911 if (x == -1)
912 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000914}
915
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000916PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000917"hash(object) -> integer\n\
918\n\
919Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000924builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000925{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000927
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000928 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000929 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000931 "hex() argument can't be converted to hex");
932 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000933 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000934 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000935}
936
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000937PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000938"hex(number) -> string\n\
939\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000940Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000941
942
Tim Petersdbd9ba62000-07-09 03:09:57 +0000943static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000944
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000946builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000947{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000949 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 PyObject *res;
951 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000952
953 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000954 if (line == NULL)
955 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000956 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000957 return NULL;
958 while (*str == ' ' || *str == '\t')
959 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 globals = PyEval_GetGlobals();
961 locals = PyEval_GetLocals();
962 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
963 if (PyDict_SetItemString(globals, "__builtins__",
964 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000965 return NULL;
966 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000967 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000970}
971
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000972PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000973"input([prompt]) -> value\n\
974\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976
977
Guido van Rossume8811f81997-02-14 15:48:05 +0000978static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000979builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +0000980{
981 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +0000982 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +0000983 return NULL;
984 Py_INCREF(s);
985 PyString_InternInPlace(&s);
986 return s;
987}
988
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000989PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000990"intern(string) -> string\n\
991\n\
992``Intern'' the given string. This enters the string in the (global)\n\
993table of interned strings whose purpose is to speed up dictionary lookups.\n\
994Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000995same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000996
997
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000999builtin_iter(PyObject *self, PyObject *args)
1000{
1001 PyObject *v, *w = NULL;
1002
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001003 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001004 return NULL;
1005 if (w == NULL)
1006 return PyObject_GetIter(v);
1007 if (!PyCallable_Check(v)) {
1008 PyErr_SetString(PyExc_TypeError,
1009 "iter(v, w): v must be callable");
1010 return NULL;
1011 }
1012 return PyCallIter_New(v, w);
1013}
1014
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001015PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001016"iter(collection) -> iterator\n\
1017iter(callable, sentinel) -> iterator\n\
1018\n\
1019Get an iterator from an object. In the first form, the argument must\n\
1020supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001021In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001022
1023
1024static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001025builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001026{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001027 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001028
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001029 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001030 if (res < 0 && PyErr_Occurred())
1031 return NULL;
1032 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001033}
1034
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001035PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001036"len(object) -> integer\n\
1037\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001038Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001039
1040
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001042builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001043{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001044 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001045
Guido van Rossum79f25d91997-04-29 20:08:16 +00001046 d = PyEval_GetLocals();
1047 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001048 return d;
1049}
1050
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001051PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001052"locals() -> dictionary\n\
1053\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001054Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055
1056
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001058min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001059{
Tim Petersc3074532001-05-03 07:00:32 +00001060 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061
Guido van Rossum79f25d91997-04-29 20:08:16 +00001062 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001063 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001064 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001065 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001066
Tim Petersc3074532001-05-03 07:00:32 +00001067 it = PyObject_GetIter(v);
1068 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001069 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001070
1071 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001072 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001073 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001074 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001075 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001076 Py_XDECREF(w);
1077 Py_DECREF(it);
1078 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001079 }
Tim Petersc3074532001-05-03 07:00:32 +00001080 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001081 }
Tim Petersc3074532001-05-03 07:00:32 +00001082
Guido van Rossum2d951851994-08-29 12:52:16 +00001083 if (w == NULL)
1084 w = x;
1085 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001086 int cmp = PyObject_RichCompareBool(x, w, op);
1087 if (cmp > 0) {
1088 Py_DECREF(w);
1089 w = x;
1090 }
1091 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001092 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001093 Py_DECREF(w);
1094 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001095 return NULL;
1096 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001097 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001099 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001100 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001101 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001102 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001103 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001104 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001105 return w;
1106}
1107
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001109builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001110{
Guido van Rossum53451b32001-01-17 15:47:24 +00001111 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001112}
1113
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001114PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001115"min(sequence) -> value\n\
1116min(a, b, c, ...) -> value\n\
1117\n\
1118With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001119With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001123builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001124{
Guido van Rossum53451b32001-01-17 15:47:24 +00001125 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001126}
1127
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001128PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001129"max(sequence) -> value\n\
1130max(a, b, c, ...) -> value\n\
1131\n\
1132With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001133With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001134
1135
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001137builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001138{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001140
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001141 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1142 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001144 "oct() argument can't be converted to oct");
1145 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001146 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001147 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001148}
1149
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001150PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001151"oct(number) -> string\n\
1152\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001153Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154
1155
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001157builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158{
Guido van Rossum09095f32000-03-10 23:00:52 +00001159 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001160 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001161
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001162 if (PyString_Check(obj)) {
1163 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001164 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001165 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001166 return PyInt_FromLong(ord);
1167 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001168#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001169 } else if (PyUnicode_Check(obj)) {
1170 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001171 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001172 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001173 return PyInt_FromLong(ord);
1174 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001175#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001176 } else {
1177 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001178 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001179 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001180 return NULL;
1181 }
1182
Guido van Rossumad991772001-01-12 16:03:05 +00001183 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001184 "ord() expected a character, "
1185 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001186 size);
1187 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001188}
1189
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001190PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001191"ord(c) -> integer\n\
1192\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001193Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001194
1195
Guido van Rossum79f25d91997-04-29 20:08:16 +00001196static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001197builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001198{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001199 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001200
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001201 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001202 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001203 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001204}
1205
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001206PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001207"pow(x, y[, z]) -> number\n\
1208\n\
1209With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001210equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001211
1212
Guido van Rossum124eff01999-02-23 16:11:01 +00001213/* Return number of items in range/xrange (lo, hi, step). step > 0
1214 * required. Return a value < 0 if & only if the true value is too
1215 * large to fit in a signed long.
1216 */
1217static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001218get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001219{
1220 /* -------------------------------------------------------------
1221 If lo >= hi, the range is empty.
1222 Else if n values are in the range, the last one is
1223 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1224 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1225 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1226 the RHS is non-negative and so truncation is the same as the
1227 floor. Letting M be the largest positive long, the worst case
1228 for the RHS numerator is hi=M, lo=-M-1, and then
1229 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1230 precision to compute the RHS exactly.
1231 ---------------------------------------------------------------*/
1232 long n = 0;
1233 if (lo < hi) {
1234 unsigned long uhi = (unsigned long)hi;
1235 unsigned long ulo = (unsigned long)lo;
1236 unsigned long diff = uhi - ulo - 1;
1237 n = (long)(diff / (unsigned long)step + 1);
1238 }
1239 return n;
1240}
1241
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001243builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001244{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001245 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001246 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001247 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001248
Guido van Rossum79f25d91997-04-29 20:08:16 +00001249 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001250
Guido van Rossum79f25d91997-04-29 20:08:16 +00001251 if (PyTuple_Size(args) <= 1) {
1252 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001253 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001254 &ihigh))
1255 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001256 }
1257 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001258 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001259 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001260 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001262 }
1263 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001264 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001265 return NULL;
1266 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001267 if (istep > 0)
1268 bign = get_len_of_range(ilow, ihigh, istep);
1269 else
1270 bign = get_len_of_range(ihigh, ilow, -istep);
1271 n = (int)bign;
1272 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001273 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001274 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001275 return NULL;
1276 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001277 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001278 if (v == NULL)
1279 return NULL;
1280 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001281 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001282 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001283 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001284 return NULL;
1285 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001286 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001287 ilow += istep;
1288 }
1289 return v;
1290}
1291
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001292PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001293"range([start,] stop[, step]) -> list of integers\n\
1294\n\
1295Return a list containing an arithmetic progression of integers.\n\
1296range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1297When step is given, it specifies the increment (or decrement).\n\
1298For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001299These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001300
1301
Guido van Rossum79f25d91997-04-29 20:08:16 +00001302static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001303builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001304{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001305 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001306 PyObject *fin = PySys_GetObject("stdin");
1307 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001308
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001309 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001310 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001311
1312 if (fin == NULL) {
1313 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
1314 return NULL;
1315 }
1316 if (fout == NULL) {
1317 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1318 return NULL;
1319 }
1320 if (PyFile_SoftSpace(fout, 0)) {
1321 if (PyFile_WriteString(" ", fout) != 0)
1322 return NULL;
1323 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001324 if (PyFile_Check (fin) && PyFile_Check (fout)
1325 && isatty(fileno(PyFile_AsFile(fin)))
1326 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001327 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001328 char *prompt;
1329 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001330 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001331 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001333 if (po == NULL)
1334 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001335 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001336 if (prompt == NULL)
1337 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001338 }
1339 else {
1340 po = NULL;
1341 prompt = "";
1342 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001343 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1344 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001345 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001346 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001347 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001348 return NULL;
1349 }
1350 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001351 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001352 result = NULL;
1353 }
1354 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001355 size_t len = strlen(s);
1356 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001357 PyErr_SetString(PyExc_OverflowError,
1358 "input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001359 result = NULL;
1360 }
1361 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001362 result = PyString_FromStringAndSize(s,
1363 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001364 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001365 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001366 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001367 return result;
1368 }
Guido van Rossum90933611991-06-07 16:10:43 +00001369 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001370 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001371 return NULL;
1372 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001373 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001374}
1375
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001376PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001377"raw_input([prompt]) -> string\n\
1378\n\
1379Read a string from standard input. The trailing newline is stripped.\n\
1380If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1381On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001382is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001383
1384
Guido van Rossum79f25d91997-04-29 20:08:16 +00001385static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001386builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001387{
Tim Peters15d81ef2001-05-04 04:39:21 +00001388 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001389
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001390 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001391 return NULL;
1392 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001393 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001394
Tim Peters15d81ef2001-05-04 04:39:21 +00001395 it = PyObject_GetIter(seq);
1396 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001397 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001398 "reduce() arg 2 must support iteration");
1399 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001400 return NULL;
1401 }
1402
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001404 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001405
Tim Peters15d81ef2001-05-04 04:39:21 +00001406 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001407 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001408
1409 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001410 Py_DECREF(args);
1411 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001412 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001413 }
1414
Tim Peters15d81ef2001-05-04 04:39:21 +00001415 op2 = PyIter_Next(it);
1416 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001417 if (PyErr_Occurred())
1418 goto Fail;
1419 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001420 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001421
Guido van Rossum2d951851994-08-29 12:52:16 +00001422 if (result == NULL)
1423 result = op2;
1424 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001425 PyTuple_SetItem(args, 0, result);
1426 PyTuple_SetItem(args, 1, op2);
1427 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001428 goto Fail;
1429 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001430 }
1431
Guido van Rossum79f25d91997-04-29 20:08:16 +00001432 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001433
Guido van Rossum2d951851994-08-29 12:52:16 +00001434 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001435 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001436 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001437
Tim Peters15d81ef2001-05-04 04:39:21 +00001438 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001439 return result;
1440
Guido van Rossum2d951851994-08-29 12:52:16 +00001441Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001442 Py_XDECREF(args);
1443 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001444 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001445 return NULL;
1446}
1447
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001448PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449"reduce(function, sequence[, initial]) -> value\n\
1450\n\
1451Apply a function of two arguments cumulatively to the items of a sequence,\n\
1452from left to right, so as to reduce the sequence to a single value.\n\
1453For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1454((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1455of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001456sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001457
1458
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001460builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001461{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001463}
1464
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001465PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001466"reload(module) -> module\n\
1467\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001468Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001469
1470
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001472builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001473{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001475}
1476
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001477PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001478"repr(object) -> string\n\
1479\n\
1480Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001481For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001482
1483
Guido van Rossum79f25d91997-04-29 20:08:16 +00001484static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001485builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001486{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001487 double x;
1488 double f;
1489 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001490 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001491
Guido van Rossum79f25d91997-04-29 20:08:16 +00001492 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001493 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001494 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001495 i = abs(ndigits);
1496 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001497 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001498 if (ndigits < 0)
1499 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001500 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001501 x *= f;
1502 if (x >= 0.0)
1503 x = floor(x + 0.5);
1504 else
1505 x = ceil(x - 0.5);
1506 if (ndigits < 0)
1507 x *= f;
1508 else
1509 x /= f;
1510 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001511}
1512
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001513PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001514"round(number[, ndigits]) -> floating point number\n\
1515\n\
1516Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001517This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001518
1519
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001521builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001522{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001523 PyObject *v = NULL;
1524 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001525
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001526 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001527 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001528 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001529 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001530 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001531 if (!PyErr_Occurred())
1532 PyErr_SetString(PyExc_SystemError,
1533 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001534 }
1535 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001536 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001537 }
1538 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001539 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001540 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001541 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001542 "vars() argument must have __dict__ attribute");
1543 return NULL;
1544 }
1545 }
1546 return d;
1547}
1548
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001549PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001550"vars([object]) -> dictionary\n\
1551\n\
1552Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001553With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001554
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001555static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001556builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001557{
1558 PyObject *inst;
1559 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001560 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001561
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001562 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001563 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001564
Guido van Rossum823649d2001-03-21 18:40:58 +00001565 retval = PyObject_IsInstance(inst, cls);
1566 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001567 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001568 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001569}
1570
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001571PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001572"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001573\n\
1574Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001575With a type as second argument, return whether that is the object's type.\n\
1576The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001577isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001578
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001579
1580static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001581builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001582{
1583 PyObject *derived;
1584 PyObject *cls;
1585 int retval;
1586
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001587 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001588 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001589
Guido van Rossum823649d2001-03-21 18:40:58 +00001590 retval = PyObject_IsSubclass(derived, cls);
1591 if (retval < 0)
1592 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001593 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001594}
1595
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001596PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001597"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001598\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001599Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1600When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1601is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001602
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001603
Barry Warsawbd599b52000-08-03 15:45:29 +00001604static PyObject*
1605builtin_zip(PyObject *self, PyObject *args)
1606{
1607 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001608 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001609 int i;
1610 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001611 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001612
1613 if (itemsize < 1) {
1614 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001615 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001616 return NULL;
1617 }
1618 /* args must be a tuple */
1619 assert(PyTuple_Check(args));
1620
Tim Peters39a86c22002-05-12 07:19:38 +00001621 /* Guess at result length: the shortest of the input lengths.
1622 If some argument refuses to say, we refuse to guess too, lest
1623 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001624 len = -1; /* unknown */
1625 for (i = 0; i < itemsize; ++i) {
1626 PyObject *item = PyTuple_GET_ITEM(args, i);
1627 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001628 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001629 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001630 len = -1;
1631 break;
1632 }
Tim Peters67d687a2002-04-29 21:27:32 +00001633 else if (len < 0 || thislen < len)
1634 len = thislen;
1635 }
1636
Tim Peters8572b4f2001-05-06 01:05:02 +00001637 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001638 if (len < 0)
1639 len = 10; /* arbitrary */
1640 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001641 return NULL;
1642
Tim Peters8572b4f2001-05-06 01:05:02 +00001643 /* obtain iterators */
1644 itlist = PyTuple_New(itemsize);
1645 if (itlist == NULL)
1646 goto Fail_ret;
1647 for (i = 0; i < itemsize; ++i) {
1648 PyObject *item = PyTuple_GET_ITEM(args, i);
1649 PyObject *it = PyObject_GetIter(item);
1650 if (it == NULL) {
1651 if (PyErr_ExceptionMatches(PyExc_TypeError))
1652 PyErr_Format(PyExc_TypeError,
1653 "zip argument #%d must support iteration",
1654 i+1);
1655 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001656 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001657 PyTuple_SET_ITEM(itlist, i, it);
1658 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001659
Tim Peters8572b4f2001-05-06 01:05:02 +00001660 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001661 for (i = 0; ; ++i) {
1662 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001663 PyObject *next = PyTuple_New(itemsize);
1664 if (!next)
1665 goto Fail_ret_itlist;
1666
Tim Peters67d687a2002-04-29 21:27:32 +00001667 for (j = 0; j < itemsize; j++) {
1668 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001669 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001670 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001671 if (PyErr_Occurred()) {
1672 Py_DECREF(ret);
1673 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001674 }
1675 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001676 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001677 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001678 }
Tim Peters67d687a2002-04-29 21:27:32 +00001679 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001680 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001681
Tim Peters67d687a2002-04-29 21:27:32 +00001682 if (i < len)
1683 PyList_SET_ITEM(ret, i, next);
1684 else {
1685 int status = PyList_Append(ret, next);
1686 Py_DECREF(next);
1687 ++len;
1688 if (status < 0)
1689 goto Fail_ret_itlist;
1690 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001691 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001692
Tim Peters67d687a2002-04-29 21:27:32 +00001693Done:
1694 if (ret != NULL && i < len) {
1695 /* The list is too big. */
1696 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1697 return NULL;
1698 }
1699 return ret;
1700
Tim Peters8572b4f2001-05-06 01:05:02 +00001701Fail_ret_itlist:
1702 Py_DECREF(itlist);
1703Fail_ret:
1704 Py_DECREF(ret);
1705 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001706}
1707
1708
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001709PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001710"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1711\n\
1712Return a list of tuples, where each tuple contains the i-th element\n\
1713from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001714in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001715
1716
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001718 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1719 {"abs", builtin_abs, METH_O, abs_doc},
1720 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001721 {"callable", builtin_callable, METH_O, callable_doc},
1722 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1723 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1724 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1725 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1726 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1727 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1728 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1729 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1730 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1731 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1732 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1733 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1734 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1735 {"hash", builtin_hash, METH_O, hash_doc},
1736 {"hex", builtin_hex, METH_O, hex_doc},
1737 {"id", builtin_id, METH_O, id_doc},
1738 {"input", builtin_input, METH_VARARGS, input_doc},
1739 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1740 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1741 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1742 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1743 {"len", builtin_len, METH_O, len_doc},
1744 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1745 {"map", builtin_map, METH_VARARGS, map_doc},
1746 {"max", builtin_max, METH_VARARGS, max_doc},
1747 {"min", builtin_min, METH_VARARGS, min_doc},
1748 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001749 {"ord", builtin_ord, METH_O, ord_doc},
1750 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1751 {"range", builtin_range, METH_VARARGS, range_doc},
1752 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1753 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1754 {"reload", builtin_reload, METH_O, reload_doc},
1755 {"repr", builtin_repr, METH_O, repr_doc},
1756 {"round", builtin_round, METH_VARARGS, round_doc},
1757 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001758#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001759 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001760#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001761 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001762 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001763 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001764};
1765
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001766PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001767"Built-in functions, exceptions, and other objects.\n\
1768\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001769Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001770
Guido van Rossum25ce5661997-08-02 03:10:38 +00001771PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001772_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001773{
Fred Drake5550de32000-06-20 04:54:19 +00001774 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001775 mod = Py_InitModule4("__builtin__", builtin_methods,
1776 builtin_doc, (PyObject *)NULL,
1777 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001778 if (mod == NULL)
1779 return NULL;
1780 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001781
1782#define SETBUILTIN(NAME, OBJECT) \
1783 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1784 return NULL
1785
1786 SETBUILTIN("None", Py_None);
1787 SETBUILTIN("Ellipsis", Py_Ellipsis);
1788 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001789 SETBUILTIN("False", Py_False);
1790 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001791 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001792 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001793 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001794 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001795#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001796 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001797#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001798 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001799 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001800 SETBUILTIN("float", &PyFloat_Type);
1801 SETBUILTIN("property", &PyProperty_Type);
1802 SETBUILTIN("int", &PyInt_Type);
1803 SETBUILTIN("list", &PyList_Type);
1804 SETBUILTIN("long", &PyLong_Type);
1805 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001806 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001807 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1808 SETBUILTIN("str", &PyString_Type);
1809 SETBUILTIN("super", &PySuper_Type);
1810 SETBUILTIN("tuple", &PyTuple_Type);
1811 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001812 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001813
1814 /* Note that open() is just an alias of file(). */
1815 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001816 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001817#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001818 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001819#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001820 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001821 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1822 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001823 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001824 }
1825 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001826
Guido van Rossum25ce5661997-08-02 03:10:38 +00001827 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001828#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001829}
1830
Guido van Rossume77a7571993-11-03 15:01:26 +00001831/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001832
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001834filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001835{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001836 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001837 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001839
Guido van Rossumb7b45621995-08-04 04:07:45 +00001840 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001841 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001842 return tuple;
1843 }
1844
Guido van Rossum79f25d91997-04-29 20:08:16 +00001845 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001846 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001847
Guido van Rossum12d12c51993-10-26 17:58:25 +00001848 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001850 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001851
Guido van Rossum79f25d91997-04-29 20:08:16 +00001852 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001853 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854 if (func == Py_None) {
1855 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001856 good = item;
1857 }
1858 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001859 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001860 if (arg == NULL)
1861 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001862 good = PyEval_CallObject(func, arg);
1863 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001864 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001865 goto Fail_1;
1866 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867 ok = PyObject_IsTrue(good);
1868 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001869 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 Py_INCREF(item);
1871 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001872 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001873 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001874 }
1875
Tim Peters4324aa32001-05-28 22:30:08 +00001876 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001877 return NULL;
1878
Guido van Rossum12d12c51993-10-26 17:58:25 +00001879 return result;
1880
Guido van Rossum12d12c51993-10-26 17:58:25 +00001881Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001882 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001883 return NULL;
1884}
1885
1886
Guido van Rossume77a7571993-11-03 15:01:26 +00001887/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001888
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001890filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001891{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001892 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001893 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001895 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001896
Guido van Rossum79f25d91997-04-29 20:08:16 +00001897 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00001898 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00001900 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001901 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001902 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001903 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001904
Guido van Rossum12d12c51993-10-26 17:58:25 +00001905 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001907 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001908
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001909 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1910 if (item == NULL)
1911 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00001913 if (arg == NULL) {
1914 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001915 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001916 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001917 good = PyEval_CallObject(func, arg);
1918 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00001919 if (good == NULL) {
1920 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001921 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001922 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001923 ok = PyObject_IsTrue(good);
1924 Py_DECREF(good);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001925 if (ok) {
1926 int reslen;
1927 if (!PyString_Check(item)) {
1928 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
1929 " __getitem__ returned different type");
1930 Py_DECREF(item);
1931 goto Fail_1;
1932 }
1933 reslen = PyString_GET_SIZE(item);
1934 if (reslen == 1) {
1935 PyString_AS_STRING(result)[j++] =
1936 PyString_AS_STRING(item)[0];
1937 } else {
1938 /* do we need more space? */
1939 int need = j + reslen + len-i-1;
1940 if (need > outlen) {
1941 /* overallocate, to avoid reallocations */
1942 if (need<2*outlen)
1943 need = 2*outlen;
1944 if (_PyString_Resize(&result, need)) {
1945 Py_DECREF(item);
1946 return NULL;
1947 }
1948 outlen = need;
1949 }
1950 memcpy(
1951 PyString_AS_STRING(result) + j,
1952 PyString_AS_STRING(item),
1953 reslen
1954 );
1955 j += reslen;
1956 }
1957 }
Tim Peters388ed082001-04-07 20:34:48 +00001958 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001959 }
1960
Walter Dörwald903f1e02003-02-04 16:28:00 +00001961 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00001962 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001963
Guido van Rossum12d12c51993-10-26 17:58:25 +00001964 return result;
1965
Guido van Rossum12d12c51993-10-26 17:58:25 +00001966Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001967 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001968 return NULL;
1969}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00001970
1971#ifdef Py_USING_UNICODE
1972/* Helper for filter(): filter a Unicode object through a function */
1973
1974static PyObject *
1975filterunicode(PyObject *func, PyObject *strobj)
1976{
1977 PyObject *result;
1978 register int i, j;
1979 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001980 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00001981
1982 if (func == Py_None) {
1983 /* No character is ever false -- share input string */
1984 Py_INCREF(strobj);
1985 return strobj;
1986 }
1987 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
1988 return NULL;
1989
1990 for (i = j = 0; i < len; ++i) {
1991 PyObject *item, *arg, *good;
1992 int ok;
1993
1994 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1995 if (item == NULL)
1996 goto Fail_1;
1997 arg = Py_BuildValue("(O)", item);
1998 if (arg == NULL) {
1999 Py_DECREF(item);
2000 goto Fail_1;
2001 }
2002 good = PyEval_CallObject(func, arg);
2003 Py_DECREF(arg);
2004 if (good == NULL) {
2005 Py_DECREF(item);
2006 goto Fail_1;
2007 }
2008 ok = PyObject_IsTrue(good);
2009 Py_DECREF(good);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002010 if (ok) {
2011 int reslen;
2012 if (!PyUnicode_Check(item)) {
2013 PyErr_SetString(PyExc_TypeError, "can't filter unicode to unicode:"
2014 " __getitem__ returned different type");
2015 Py_DECREF(item);
2016 goto Fail_1;
2017 }
2018 reslen = PyUnicode_GET_SIZE(item);
2019 if (reslen == 1) {
2020 PyUnicode_AS_UNICODE(result)[j++] =
2021 PyUnicode_AS_UNICODE(item)[0];
2022 } else {
2023 /* do we need more space? */
2024 int need = j + reslen + len-i-1;
2025 if (need > outlen) {
2026 /* overallocate, to avoid reallocations */
2027 if (need<2*outlen)
2028 need = 2*outlen;
2029 if (PyUnicode_Resize(&result, need)) {
2030 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002031 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002032 }
2033 outlen = need;
2034 }
2035 memcpy(
2036 PyUnicode_AS_UNICODE(result) + j,
2037 PyUnicode_AS_UNICODE(item),
2038 reslen*sizeof(Py_UNICODE)
2039 );
2040 j += reslen;
2041 }
2042 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002043 Py_DECREF(item);
2044 }
2045
Walter Dörwald903f1e02003-02-04 16:28:00 +00002046 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002047 PyUnicode_Resize(&result, j);
2048
2049 return result;
2050
2051Fail_1:
2052 Py_DECREF(result);
2053 return NULL;
2054}
2055#endif