blob: 54a9afd2e8b7c96f140f786ec2f984919a6feaca [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
Raymond Hettingerea3fdf42002-12-29 16:33:45 +000076 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000077 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000078 if (alist != NULL) {
79 if (!PyTuple_Check(alist)) {
80 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000081 PyErr_Format(PyExc_TypeError,
82 "apply() arg 2 expect sequence, found %s",
83 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000084 return NULL;
85 }
86 t = PySequence_Tuple(alist);
87 if (t == NULL)
88 return NULL;
89 alist = t;
90 }
Guido van Rossum2d951851994-08-29 12:52:16 +000091 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000092 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000093 PyErr_Format(PyExc_TypeError,
94 "apply() arg 3 expected dictionary, found %s",
95 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000096 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000097 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000098 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
99 finally:
100 Py_XDECREF(t);
101 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000102}
103
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000104PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000105"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000106\n\
Fred Drake7b912121999-12-23 14:16:55 +0000107Call a callable object with positional arguments taken from the tuple args,\n\
108and keyword arguments taken from the optional dictionary kwargs.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000109Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000110
111
Guido van Rossum79f25d91997-04-29 20:08:16 +0000112static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000113builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000114{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000115 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000116}
117
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000118PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000119"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000120\n\
121Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000122Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000123
124
Guido van Rossum79f25d91997-04-29 20:08:16 +0000125static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000126builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000127{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000128 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000129 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000130 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000131
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000132 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000133 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000134
Tim Peters0e57abf2001-05-02 07:39:38 +0000135 /* Strings and tuples return a result of the same type. */
136 if (PyString_Check(seq))
137 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000138#ifdef Py_USING_UNICODE
139 if (PyUnicode_Check(seq))
140 return filterunicode(func, seq);
141#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000142 if (PyTuple_Check(seq))
143 return filtertuple(func, seq);
144
145 /* Get iterator. */
146 it = PyObject_GetIter(seq);
147 if (it == NULL)
148 return NULL;
149
150 /* Guess a result list size. */
151 len = -1; /* unknown */
152 if (PySequence_Check(seq) &&
153 seq->ob_type->tp_as_sequence->sq_length) {
154 len = PySequence_Size(seq);
155 if (len < 0)
156 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000157 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000158 if (len < 0)
159 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000160
Guido van Rossumc7903a12002-08-16 07:04:56 +0000161 /* Pre-allocate argument list tuple. */
162 arg = PyTuple_New(1);
163 if (arg == NULL)
164 goto Fail_arg;
165
Tim Peters0e57abf2001-05-02 07:39:38 +0000166 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000167 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000168 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000169 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000170 result = seq;
171 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000172 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000173 result = PyList_New(len);
174 if (result == NULL)
175 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000176 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000177
Tim Peters0e57abf2001-05-02 07:39:38 +0000178 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000179 j = 0;
180 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000181 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000182 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000183
Tim Peters0e57abf2001-05-02 07:39:38 +0000184 item = PyIter_Next(it);
185 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000186 if (PyErr_Occurred())
187 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000188 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000189 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000190
Guido van Rossum79f25d91997-04-29 20:08:16 +0000191 if (func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000192 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000193 }
194 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000195 PyObject *good;
196 PyTuple_SET_ITEM(arg, 0, item);
197 good = PyObject_Call(func, arg, NULL);
198 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000199 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000200 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000201 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000202 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000203 ok = PyObject_IsTrue(good);
204 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000205 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000206 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000207 if (j < len)
208 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000209 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000210 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000211 Py_DECREF(item);
212 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000213 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000214 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000215 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000216 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000217 else
218 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000219 }
220
Guido van Rossum12d12c51993-10-26 17:58:25 +0000221
Tim Peters0e57abf2001-05-02 07:39:38 +0000222 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000223 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000224 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000225
Tim Peters3c6b1482001-05-21 08:07:05 +0000226 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000227 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000228 return result;
229
Tim Peters0e57abf2001-05-02 07:39:38 +0000230Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000231 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000232Fail_it:
233 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000234Fail_arg:
235 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000236 return NULL;
237}
238
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000239PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000240"filter(function or None, sequence) -> list, tuple, or string\n"
241"\n"
242"Return those items of sequence for which function(item) is true. If\n"
243"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000244"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000245
Guido van Rossum79f25d91997-04-29 20:08:16 +0000246static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000247builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000248{
249 long x;
250 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000251
Guido van Rossum79f25d91997-04-29 20:08:16 +0000252 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000253 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000254 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000255 PyErr_SetString(PyExc_ValueError,
256 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000257 return NULL;
258 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000259 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000261}
262
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000263PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000264"chr(i) -> character\n\
265\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000266Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267
268
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000269#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000270static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000271builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000272{
273 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000274
275 if (!PyArg_ParseTuple(args, "l:unichr", &x))
276 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000277
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000278 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000279}
280
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000281PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000282"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000283\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000284Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000285#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000286
287
288static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000289builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000290{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000291 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000292 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000293
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000294 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000295 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000296 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000297 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000298 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000299}
300
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000301PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000302"cmp(x, y) -> integer\n\
303\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000304Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000305
306
Guido van Rossum79f25d91997-04-29 20:08:16 +0000307static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000308builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000309{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310 PyObject *v, *w;
311 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000312
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000313 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000314 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000315 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000316 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000317 res = Py_BuildValue("(OO)", v, w);
318 Py_DECREF(v);
319 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000320 return res;
321}
322
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000323PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000324"coerce(x, y) -> None or (x1, y1)\n\
325\n\
326When 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 +0000327containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000328
329
Guido van Rossum79f25d91997-04-29 20:08:16 +0000330static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000331builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000332{
333 char *str;
334 char *filename;
335 char *startstr;
336 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000337 int dont_inherit = 0;
338 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000339 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000340
Tim Peters67d687a2002-04-29 21:27:32 +0000341 if (!PyArg_ParseTuple(args, "sss|ii:compile", &str, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000342 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000343 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000344
Guido van Rossum5b722181993-03-30 17:46:03 +0000345 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000346 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000347 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000348 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000349 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000350 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000351 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000352 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000353 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000354 return NULL;
355 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000356
357 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
358 PyErr_SetString(PyExc_ValueError,
359 "compile(): unrecognised flags");
360 return NULL;
361 }
362 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
363
364 cf.cf_flags = supplied_flags;
365 if (!dont_inherit) {
366 PyEval_MergeCompilerFlags(&cf);
367 }
368 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000369}
370
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000371PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000372"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000373\n\
374Compile the source string (a Python module, statement or expression)\n\
375into a code object that can be executed by the exec statement or eval().\n\
376The filename will be used for run-time error messages.\n\
377The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000378single (interactive) statement, or 'eval' to compile an expression.\n\
379The flags argument, if present, controls which future statements influence\n\
380the compilation of the code.\n\
381The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
382the effects of any future statements in effect in the code calling\n\
383compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000384in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000385
Guido van Rossum79f25d91997-04-29 20:08:16 +0000386static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000387builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000388{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000389 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000390
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000391 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000392 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000393 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000394}
395
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000396PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000397"dir([object]) -> list of strings\n"
398"\n"
399"Return an alphabetized list of names comprising (some of) the attributes\n"
400"of the given object, and of attributes reachable from it:\n"
401"\n"
402"No argument: the names in the current scope.\n"
403"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000404"Type or class object: its attributes, and recursively the attributes of\n"
405" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000406"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000407" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000408
Guido van Rossum79f25d91997-04-29 20:08:16 +0000409static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000410builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000411{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000412 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000413
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000414 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000415 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000416 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000417}
418
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000419PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000420"divmod(x, y) -> (div, mod)\n\
421\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000422Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000423
424
Guido van Rossum79f25d91997-04-29 20:08:16 +0000425static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000426builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000427{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000428 PyObject *cmd;
429 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000430 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000431 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000432
Guido van Rossum79f25d91997-04-29 20:08:16 +0000433 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000434 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000435 &PyDict_Type, &globals,
436 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438 if (globals == Py_None) {
439 globals = PyEval_GetGlobals();
440 if (locals == Py_None)
441 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000442 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000444 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000445
Guido van Rossum79f25d91997-04-29 20:08:16 +0000446 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
447 if (PyDict_SetItemString(globals, "__builtins__",
448 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000449 return NULL;
450 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000451
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000452 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000453 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000454 PyErr_SetString(PyExc_TypeError,
455 "code object passed to eval() may not contain free variables");
456 return NULL;
457 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000459 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000460
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000461 if (!PyString_Check(cmd) &&
462 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000463 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000464 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000465 return NULL;
466 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000467 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000468 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000469 while (*str == ' ' || *str == '\t')
470 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000471
472 cf.cf_flags = 0;
473 (void)PyEval_MergeCompilerFlags(&cf);
474 return PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000475}
476
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000477PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000478"eval(source[, globals[, locals]]) -> value\n\
479\n\
480Evaluate the source in the context of globals and locals.\n\
481The source may be a string representing a Python expression\n\
482or a code object as returned by compile().\n\
483The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000484globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000485
486
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000488builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000489{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000490 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000491 PyObject *globals = Py_None, *locals = Py_None;
492 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000493 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000494 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000495 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000496
Guido van Rossum79f25d91997-04-29 20:08:16 +0000497 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000498 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000499 &PyDict_Type, &globals,
500 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000501 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000502 if (globals == Py_None) {
503 globals = PyEval_GetGlobals();
504 if (locals == Py_None)
505 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000506 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000507 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000508 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
510 if (PyDict_SetItemString(globals, "__builtins__",
511 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000512 return NULL;
513 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000514
515 exists = 0;
516 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000517#if defined(PLAN9)
518 {
519 Dir *d;
520
521 if ((d = dirstat(filename))!=nil) {
522 if(d->mode & DMDIR)
523 werrstr("is a directory");
524 else
525 exists = 1;
526 free(d);
527 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000528 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000529#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000530 if (object_exists(filename)) {
531 if (isdir(filename))
532 errno = EISDIR;
533 else
534 exists = 1;
535 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000536#else /* standard Posix */
537 {
538 struct stat s;
539 if (stat(filename, &s) == 0) {
540 if (S_ISDIR(s.st_mode))
541# if defined(PY_OS2) && defined(PYCC_VACPP)
542 errno = EOS2ERR;
543# else
544 errno = EISDIR;
545# endif
546 else
547 exists = 1;
548 }
549 }
550#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000551
552 if (exists) {
553 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000554 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000555 Py_END_ALLOW_THREADS
556
557 if (fp == NULL) {
558 exists = 0;
559 }
560 }
561
562 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000563 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000564 return NULL;
565 }
Tim Peters5ba58662001-07-16 02:29:45 +0000566 cf.cf_flags = 0;
567 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000568 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000569 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000570 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000571 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000572 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000573 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000574}
575
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000576PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000577"execfile(filename[, globals[, locals]])\n\
578\n\
579Read and execute a Python script from a file.\n\
580The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000581globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000582
583
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000585builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000586{
Guido van Rossum950ff291998-06-29 13:38:57 +0000587 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000589
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000590 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000591 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000592#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000593 if (PyUnicode_Check(name)) {
594 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
595 if (name == NULL)
596 return NULL;
597 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000598#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000599
600 if (!PyString_Check(name)) {
601 PyErr_SetString(PyExc_TypeError,
602 "attribute name must be string");
603 return NULL;
604 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000605 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000606 if (result == NULL && dflt != NULL &&
607 PyErr_ExceptionMatches(PyExc_AttributeError))
608 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000609 PyErr_Clear();
610 Py_INCREF(dflt);
611 result = dflt;
612 }
613 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000614}
615
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000616PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000617"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000618\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000619Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
620When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000621exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000622
623
Guido van Rossum79f25d91997-04-29 20:08:16 +0000624static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000625builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000626{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000628
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 d = PyEval_GetGlobals();
630 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000631 return d;
632}
633
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000634PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000635"globals() -> dictionary\n\
636\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000637Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000638
639
Guido van Rossum79f25d91997-04-29 20:08:16 +0000640static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000641builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000642{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643 PyObject *v;
644 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000645
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000646 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000647 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000648#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000649 if (PyUnicode_Check(name)) {
650 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
651 if (name == NULL)
652 return NULL;
653 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000654#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000655
656 if (!PyString_Check(name)) {
657 PyErr_SetString(PyExc_TypeError,
658 "attribute name must be string");
659 return NULL;
660 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000662 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000664 Py_INCREF(Py_False);
665 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000666 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000668 Py_INCREF(Py_True);
669 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000670}
671
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000672PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000673"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000674\n\
675Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000676(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000677
678
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000680builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000681{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000682 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000683}
684
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000685PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000686"id(object) -> integer\n\
687\n\
688Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000689simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000690
691
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000693builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000694{
695 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000696 PyObject *it; /* the iterator object */
697 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000698 } sequence;
699
Guido van Rossum79f25d91997-04-29 20:08:16 +0000700 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000701 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000702 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000703 register int i, j;
704
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000706 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000707 PyErr_SetString(PyExc_TypeError,
708 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000709 return NULL;
710 }
711
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000713 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000714
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000715 if (func == Py_None && n == 1) {
716 /* map(None, S) is the same as list(S). */
717 return PySequence_List(PyTuple_GetItem(args, 1));
718 }
719
Tim Peters4e9afdc2001-05-03 23:54:49 +0000720 /* Get space for sequence descriptors. Must NULL out the iterator
721 * pointers so that jumping to Fail_2 later doesn't see trash.
722 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000723 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
724 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000725 return NULL;
726 }
727 for (i = 0; i < n; ++i) {
728 seqs[i].it = (PyObject*)NULL;
729 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000730 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000731
Tim Peters4e9afdc2001-05-03 23:54:49 +0000732 /* Do a first pass to obtain iterators for the arguments, and set len
733 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000734 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000735 len = 0;
736 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
737 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000738 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000739
Tim Peters4e9afdc2001-05-03 23:54:49 +0000740 /* Get iterator. */
741 curseq = PyTuple_GetItem(args, i+1);
742 sqp->it = PyObject_GetIter(curseq);
743 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000744 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000745 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000746 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000747 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000749 goto Fail_2;
750 }
751
Tim Peters4e9afdc2001-05-03 23:54:49 +0000752 /* Update len. */
753 curlen = -1; /* unknown */
754 if (PySequence_Check(curseq) &&
755 curseq->ob_type->tp_as_sequence->sq_length) {
756 curlen = PySequence_Size(curseq);
757 if (curlen < 0)
758 PyErr_Clear();
759 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000760 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000761 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000762 if (curlen > len)
763 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000764 }
765
Tim Peters4e9afdc2001-05-03 23:54:49 +0000766 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000768 goto Fail_2;
769
Tim Peters4e9afdc2001-05-03 23:54:49 +0000770 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000771 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000773 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000774
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000776 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000777 else if ((alist = PyTuple_New(n)) == NULL)
778 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000779
780 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000781 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782 Py_INCREF(Py_None);
783 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000784 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000785 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000786 item = PyIter_Next(sqp->it);
787 if (item)
788 ++numactive;
789 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000790 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000791 Py_XDECREF(alist);
792 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000793 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000794 Py_INCREF(Py_None);
795 item = Py_None;
796 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000797 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000798 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000799 if (alist)
800 PyTuple_SET_ITEM(alist, j, item);
801 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000802 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000803 }
804
Guido van Rossum32120311995-07-10 13:52:21 +0000805 if (!alist)
806 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000807
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000810 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000811 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000812
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000814 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000815 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 value = PyEval_CallObject(func, alist);
817 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000818 if (value == NULL)
819 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000820 }
821 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000822 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000823 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000824 if (status < 0)
825 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000826 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000827 else if (PyList_SetItem(result, i, value) < 0)
828 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000829 }
830
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000831 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
832 goto Fail_1;
833
Tim Peters4e9afdc2001-05-03 23:54:49 +0000834 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000835
Guido van Rossum12d12c51993-10-26 17:58:25 +0000836Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000838Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000839 result = NULL;
840Succeed:
841 assert(seqs);
842 for (i = 0; i < n; ++i)
843 Py_XDECREF(seqs[i].it);
844 PyMem_DEL(seqs);
845 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000846}
847
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000848PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000849"map(function, sequence[, sequence, ...]) -> list\n\
850\n\
851Return a list of the results of applying the function to the items of\n\
852the argument sequence(s). If more than one sequence is given, the\n\
853function is called with an argument list consisting of the corresponding\n\
854item of each sequence, substituting None for missing values when not all\n\
855sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000856the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000857
858
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000860builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000861{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 PyObject *v;
863 PyObject *name;
864 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000866 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000867 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000869 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870 Py_INCREF(Py_None);
871 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000872}
873
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000874PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000875"setattr(object, name, value)\n\
876\n\
877Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000878``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879
880
Guido van Rossum79f25d91997-04-29 20:08:16 +0000881static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000882builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000883{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884 PyObject *v;
885 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000887 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000888 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000890 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 Py_INCREF(Py_None);
892 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000893}
894
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000895PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000896"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000897\n\
898Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900
901
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000903builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000904{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000905 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000906
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000908 if (x == -1)
909 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000911}
912
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000913PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914"hash(object) -> integer\n\
915\n\
916Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918
919
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000921builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000922{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000924
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000925 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000926 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000928 "hex() argument can't be converted to hex");
929 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000930 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000931 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000932}
933
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000934PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000935"hex(number) -> string\n\
936\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000937Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000938
939
Tim Petersdbd9ba62000-07-09 03:09:57 +0000940static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000941
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000943builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000944{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000946 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 PyObject *res;
948 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000949
950 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000951 if (line == NULL)
952 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000954 return NULL;
955 while (*str == ' ' || *str == '\t')
956 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000957 globals = PyEval_GetGlobals();
958 locals = PyEval_GetLocals();
959 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
960 if (PyDict_SetItemString(globals, "__builtins__",
961 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000962 return NULL;
963 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000964 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000967}
968
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000969PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000970"input([prompt]) -> value\n\
971\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000972Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000973
974
Guido van Rossume8811f81997-02-14 15:48:05 +0000975static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000976builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +0000977{
978 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +0000979 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +0000980 return NULL;
981 Py_INCREF(s);
982 PyString_InternInPlace(&s);
983 return s;
984}
985
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000986PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000987"intern(string) -> string\n\
988\n\
989``Intern'' the given string. This enters the string in the (global)\n\
990table of interned strings whose purpose is to speed up dictionary lookups.\n\
991Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000992same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000993
994
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000996builtin_iter(PyObject *self, PyObject *args)
997{
998 PyObject *v, *w = NULL;
999
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001000 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001001 return NULL;
1002 if (w == NULL)
1003 return PyObject_GetIter(v);
1004 if (!PyCallable_Check(v)) {
1005 PyErr_SetString(PyExc_TypeError,
1006 "iter(v, w): v must be callable");
1007 return NULL;
1008 }
1009 return PyCallIter_New(v, w);
1010}
1011
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001012PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001013"iter(collection) -> iterator\n\
1014iter(callable, sentinel) -> iterator\n\
1015\n\
1016Get an iterator from an object. In the first form, the argument must\n\
1017supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001018In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001019
1020
1021static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001022builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001023{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001024 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001025
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001026 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001027 if (res < 0 && PyErr_Occurred())
1028 return NULL;
1029 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001030}
1031
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001032PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001033"len(object) -> integer\n\
1034\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001035Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001036
1037
Guido van Rossum79f25d91997-04-29 20:08:16 +00001038static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001039builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001040{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001042
Guido van Rossum79f25d91997-04-29 20:08:16 +00001043 d = PyEval_GetLocals();
1044 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001045 return d;
1046}
1047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001048PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001049"locals() -> dictionary\n\
1050\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001051Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001052
1053
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001055min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001056{
Tim Petersc3074532001-05-03 07:00:32 +00001057 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001058
Guido van Rossum79f25d91997-04-29 20:08:16 +00001059 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001061 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001062 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001063
Tim Petersc3074532001-05-03 07:00:32 +00001064 it = PyObject_GetIter(v);
1065 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001066 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001067
1068 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001069 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001070 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001071 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001072 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001073 Py_XDECREF(w);
1074 Py_DECREF(it);
1075 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001076 }
Tim Petersc3074532001-05-03 07:00:32 +00001077 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001078 }
Tim Petersc3074532001-05-03 07:00:32 +00001079
Guido van Rossum2d951851994-08-29 12:52:16 +00001080 if (w == NULL)
1081 w = x;
1082 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001083 int cmp = PyObject_RichCompareBool(x, w, op);
1084 if (cmp > 0) {
1085 Py_DECREF(w);
1086 w = x;
1087 }
1088 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001089 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001090 Py_DECREF(w);
1091 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001092 return NULL;
1093 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001094 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001095 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001096 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001097 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001098 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001100 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001101 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001102 return w;
1103}
1104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001106builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001107{
Guido van Rossum53451b32001-01-17 15:47:24 +00001108 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001109}
1110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001111PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001112"min(sequence) -> value\n\
1113min(a, b, c, ...) -> value\n\
1114\n\
1115With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001116With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001117
1118
Guido van Rossum79f25d91997-04-29 20:08:16 +00001119static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001120builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001121{
Guido van Rossum53451b32001-01-17 15:47:24 +00001122 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001123}
1124
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001125PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001126"max(sequence) -> value\n\
1127max(a, b, c, ...) -> value\n\
1128\n\
1129With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001130With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001131
1132
Guido van Rossum79f25d91997-04-29 20:08:16 +00001133static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001134builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001135{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001137
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001138 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1139 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001141 "oct() argument can't be converted to oct");
1142 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001143 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001144 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001145}
1146
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001147PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001148"oct(number) -> string\n\
1149\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001150Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001151
1152
Guido van Rossum79f25d91997-04-29 20:08:16 +00001153static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001154builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001155{
Guido van Rossum09095f32000-03-10 23:00:52 +00001156 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001157 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001159 if (PyString_Check(obj)) {
1160 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001161 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001162 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001163 return PyInt_FromLong(ord);
1164 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001165#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001166 } else if (PyUnicode_Check(obj)) {
1167 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001168 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001169 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001170 return PyInt_FromLong(ord);
1171 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001172#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001173 } else {
1174 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001175 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001176 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001177 return NULL;
1178 }
1179
Guido van Rossumad991772001-01-12 16:03:05 +00001180 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001181 "ord() expected a character, "
1182 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001183 size);
1184 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001185}
1186
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188"ord(c) -> integer\n\
1189\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001190Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001191
1192
Guido van Rossum79f25d91997-04-29 20:08:16 +00001193static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001194builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001195{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001196 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001197
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001198 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001199 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001200 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001201}
1202
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001203PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001204"pow(x, y[, z]) -> number\n\
1205\n\
1206With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001207equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001208
1209
Guido van Rossum124eff01999-02-23 16:11:01 +00001210/* Return number of items in range/xrange (lo, hi, step). step > 0
1211 * required. Return a value < 0 if & only if the true value is too
1212 * large to fit in a signed long.
1213 */
1214static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001215get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001216{
1217 /* -------------------------------------------------------------
1218 If lo >= hi, the range is empty.
1219 Else if n values are in the range, the last one is
1220 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1221 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1222 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1223 the RHS is non-negative and so truncation is the same as the
1224 floor. Letting M be the largest positive long, the worst case
1225 for the RHS numerator is hi=M, lo=-M-1, and then
1226 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1227 precision to compute the RHS exactly.
1228 ---------------------------------------------------------------*/
1229 long n = 0;
1230 if (lo < hi) {
1231 unsigned long uhi = (unsigned long)hi;
1232 unsigned long ulo = (unsigned long)lo;
1233 unsigned long diff = uhi - ulo - 1;
1234 n = (long)(diff / (unsigned long)step + 1);
1235 }
1236 return n;
1237}
1238
Guido van Rossum79f25d91997-04-29 20:08:16 +00001239static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001240builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001241{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001242 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001243 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001244 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001245
Guido van Rossum79f25d91997-04-29 20:08:16 +00001246 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001247
Guido van Rossum79f25d91997-04-29 20:08:16 +00001248 if (PyTuple_Size(args) <= 1) {
1249 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001250 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001251 &ihigh))
1252 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001253 }
1254 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001255 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001256 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001257 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001258 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001259 }
1260 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001261 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001262 return NULL;
1263 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001264 if (istep > 0)
1265 bign = get_len_of_range(ilow, ihigh, istep);
1266 else
1267 bign = get_len_of_range(ihigh, ilow, -istep);
1268 n = (int)bign;
1269 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001270 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001271 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001272 return NULL;
1273 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001274 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001275 if (v == NULL)
1276 return NULL;
1277 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001278 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001279 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001280 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281 return NULL;
1282 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001283 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001284 ilow += istep;
1285 }
1286 return v;
1287}
1288
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001289PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001290"range([start,] stop[, step]) -> list of integers\n\
1291\n\
1292Return a list containing an arithmetic progression of integers.\n\
1293range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1294When step is given, it specifies the increment (or decrement).\n\
1295For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001296These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001297
1298
Guido van Rossum79f25d91997-04-29 20:08:16 +00001299static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001300builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001301{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001302 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001303 PyObject *fin = PySys_GetObject("stdin");
1304 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001305
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001306 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001307 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001308
1309 if (fin == NULL) {
1310 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
1311 return NULL;
1312 }
1313 if (fout == NULL) {
1314 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1315 return NULL;
1316 }
1317 if (PyFile_SoftSpace(fout, 0)) {
1318 if (PyFile_WriteString(" ", fout) != 0)
1319 return NULL;
1320 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001321 if (PyFile_Check (fin) && PyFile_Check (fout)
1322 && isatty(fileno(PyFile_AsFile(fin)))
1323 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001324 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001325 char *prompt;
1326 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001327 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001328 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001329 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001330 if (po == NULL)
1331 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001333 if (prompt == NULL)
1334 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001335 }
1336 else {
1337 po = NULL;
1338 prompt = "";
1339 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001340 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1341 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001342 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001343 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001344 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001345 return NULL;
1346 }
1347 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001348 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001349 result = NULL;
1350 }
1351 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001352 size_t len = strlen(s);
1353 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001354 PyErr_SetString(PyExc_OverflowError,
1355 "input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001356 result = NULL;
1357 }
1358 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001359 result = PyString_FromStringAndSize(s,
1360 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001361 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001362 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001363 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001364 return result;
1365 }
Guido van Rossum90933611991-06-07 16:10:43 +00001366 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001367 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001368 return NULL;
1369 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001370 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001371}
1372
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001373PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001374"raw_input([prompt]) -> string\n\
1375\n\
1376Read a string from standard input. The trailing newline is stripped.\n\
1377If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1378On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001379is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001380
1381
Guido van Rossum79f25d91997-04-29 20:08:16 +00001382static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001383builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001384{
Tim Peters15d81ef2001-05-04 04:39:21 +00001385 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001386
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001387 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001388 return NULL;
1389 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001390 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001391
Tim Peters15d81ef2001-05-04 04:39:21 +00001392 it = PyObject_GetIter(seq);
1393 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001394 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001395 "reduce() arg 2 must support iteration");
1396 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001397 return NULL;
1398 }
1399
Guido van Rossum79f25d91997-04-29 20:08:16 +00001400 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001401 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001402
Tim Peters15d81ef2001-05-04 04:39:21 +00001403 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001404 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001405
1406 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001407 Py_DECREF(args);
1408 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001409 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001410 }
1411
Tim Peters15d81ef2001-05-04 04:39:21 +00001412 op2 = PyIter_Next(it);
1413 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001414 if (PyErr_Occurred())
1415 goto Fail;
1416 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001417 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001418
Guido van Rossum2d951851994-08-29 12:52:16 +00001419 if (result == NULL)
1420 result = op2;
1421 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001422 PyTuple_SetItem(args, 0, result);
1423 PyTuple_SetItem(args, 1, op2);
1424 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001425 goto Fail;
1426 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001427 }
1428
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001430
Guido van Rossum2d951851994-08-29 12:52:16 +00001431 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001432 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001433 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001434
Tim Peters15d81ef2001-05-04 04:39:21 +00001435 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001436 return result;
1437
Guido van Rossum2d951851994-08-29 12:52:16 +00001438Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439 Py_XDECREF(args);
1440 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001441 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001442 return NULL;
1443}
1444
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001445PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001446"reduce(function, sequence[, initial]) -> value\n\
1447\n\
1448Apply a function of two arguments cumulatively to the items of a sequence,\n\
1449from left to right, so as to reduce the sequence to a single value.\n\
1450For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1451((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1452of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001453sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001454
1455
Guido van Rossum79f25d91997-04-29 20:08:16 +00001456static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001457builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001458{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001460}
1461
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001462PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001463"reload(module) -> module\n\
1464\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001465Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001466
1467
Guido van Rossum79f25d91997-04-29 20:08:16 +00001468static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001469builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001470{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001472}
1473
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001474PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001475"repr(object) -> string\n\
1476\n\
1477Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001478For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001479
1480
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001482builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001483{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001484 double x;
1485 double f;
1486 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001487 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001488
Guido van Rossum79f25d91997-04-29 20:08:16 +00001489 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001490 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001491 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001492 i = abs(ndigits);
1493 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001494 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001495 if (ndigits < 0)
1496 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001497 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001498 x *= f;
1499 if (x >= 0.0)
1500 x = floor(x + 0.5);
1501 else
1502 x = ceil(x - 0.5);
1503 if (ndigits < 0)
1504 x *= f;
1505 else
1506 x /= f;
1507 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001508}
1509
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001510PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001511"round(number[, ndigits]) -> floating point number\n\
1512\n\
1513Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001514This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001515
1516
Guido van Rossum79f25d91997-04-29 20:08:16 +00001517static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001518builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001519{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520 PyObject *v = NULL;
1521 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001522
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001523 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001524 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001525 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001526 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001527 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001528 if (!PyErr_Occurred())
1529 PyErr_SetString(PyExc_SystemError,
1530 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001531 }
1532 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001533 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001534 }
1535 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001536 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001537 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001539 "vars() argument must have __dict__ attribute");
1540 return NULL;
1541 }
1542 }
1543 return d;
1544}
1545
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001546PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001547"vars([object]) -> dictionary\n\
1548\n\
1549Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001550With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001551
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001552static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001553builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001554{
1555 PyObject *inst;
1556 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001557 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001558
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001559 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001560 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001561
Guido van Rossum823649d2001-03-21 18:40:58 +00001562 retval = PyObject_IsInstance(inst, cls);
1563 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001564 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001565 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001566}
1567
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001568PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001569"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001570\n\
1571Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001572With a type as second argument, return whether that is the object's type.\n\
1573The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001574isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001575
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001576
1577static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001578builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001579{
1580 PyObject *derived;
1581 PyObject *cls;
1582 int retval;
1583
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001584 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001585 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001586
Guido van Rossum823649d2001-03-21 18:40:58 +00001587 retval = PyObject_IsSubclass(derived, cls);
1588 if (retval < 0)
1589 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001590 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001591}
1592
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001593PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001594"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001595\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001596Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1597When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1598is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001599
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001600
Barry Warsawbd599b52000-08-03 15:45:29 +00001601static PyObject*
1602builtin_zip(PyObject *self, PyObject *args)
1603{
1604 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001605 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001606 int i;
1607 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001608 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001609
1610 if (itemsize < 1) {
1611 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001612 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001613 return NULL;
1614 }
1615 /* args must be a tuple */
1616 assert(PyTuple_Check(args));
1617
Tim Peters39a86c22002-05-12 07:19:38 +00001618 /* Guess at result length: the shortest of the input lengths.
1619 If some argument refuses to say, we refuse to guess too, lest
1620 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001621 len = -1; /* unknown */
1622 for (i = 0; i < itemsize; ++i) {
1623 PyObject *item = PyTuple_GET_ITEM(args, i);
1624 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001625 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001626 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001627 len = -1;
1628 break;
1629 }
Tim Peters67d687a2002-04-29 21:27:32 +00001630 else if (len < 0 || thislen < len)
1631 len = thislen;
1632 }
1633
Tim Peters8572b4f2001-05-06 01:05:02 +00001634 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001635 if (len < 0)
1636 len = 10; /* arbitrary */
1637 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001638 return NULL;
1639
Tim Peters8572b4f2001-05-06 01:05:02 +00001640 /* obtain iterators */
1641 itlist = PyTuple_New(itemsize);
1642 if (itlist == NULL)
1643 goto Fail_ret;
1644 for (i = 0; i < itemsize; ++i) {
1645 PyObject *item = PyTuple_GET_ITEM(args, i);
1646 PyObject *it = PyObject_GetIter(item);
1647 if (it == NULL) {
1648 if (PyErr_ExceptionMatches(PyExc_TypeError))
1649 PyErr_Format(PyExc_TypeError,
1650 "zip argument #%d must support iteration",
1651 i+1);
1652 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001653 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001654 PyTuple_SET_ITEM(itlist, i, it);
1655 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001656
Tim Peters8572b4f2001-05-06 01:05:02 +00001657 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001658 for (i = 0; ; ++i) {
1659 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001660 PyObject *next = PyTuple_New(itemsize);
1661 if (!next)
1662 goto Fail_ret_itlist;
1663
Tim Peters67d687a2002-04-29 21:27:32 +00001664 for (j = 0; j < itemsize; j++) {
1665 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001666 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001667 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001668 if (PyErr_Occurred()) {
1669 Py_DECREF(ret);
1670 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001671 }
1672 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001673 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001674 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001675 }
Tim Peters67d687a2002-04-29 21:27:32 +00001676 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001677 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001678
Tim Peters67d687a2002-04-29 21:27:32 +00001679 if (i < len)
1680 PyList_SET_ITEM(ret, i, next);
1681 else {
1682 int status = PyList_Append(ret, next);
1683 Py_DECREF(next);
1684 ++len;
1685 if (status < 0)
1686 goto Fail_ret_itlist;
1687 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001688 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001689
Tim Peters67d687a2002-04-29 21:27:32 +00001690Done:
1691 if (ret != NULL && i < len) {
1692 /* The list is too big. */
1693 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1694 return NULL;
1695 }
1696 return ret;
1697
Tim Peters8572b4f2001-05-06 01:05:02 +00001698Fail_ret_itlist:
1699 Py_DECREF(itlist);
1700Fail_ret:
1701 Py_DECREF(ret);
1702 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001703}
1704
1705
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001706PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001707"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1708\n\
1709Return a list of tuples, where each tuple contains the i-th element\n\
1710from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001711in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001712
1713
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001715 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1716 {"abs", builtin_abs, METH_O, abs_doc},
1717 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001718 {"callable", builtin_callable, METH_O, callable_doc},
1719 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1720 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1721 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1722 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1723 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1724 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1725 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1726 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1727 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1728 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1729 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1730 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1731 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1732 {"hash", builtin_hash, METH_O, hash_doc},
1733 {"hex", builtin_hex, METH_O, hex_doc},
1734 {"id", builtin_id, METH_O, id_doc},
1735 {"input", builtin_input, METH_VARARGS, input_doc},
1736 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1737 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1738 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1739 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1740 {"len", builtin_len, METH_O, len_doc},
1741 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1742 {"map", builtin_map, METH_VARARGS, map_doc},
1743 {"max", builtin_max, METH_VARARGS, max_doc},
1744 {"min", builtin_min, METH_VARARGS, min_doc},
1745 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001746 {"ord", builtin_ord, METH_O, ord_doc},
1747 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1748 {"range", builtin_range, METH_VARARGS, range_doc},
1749 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1750 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1751 {"reload", builtin_reload, METH_O, reload_doc},
1752 {"repr", builtin_repr, METH_O, repr_doc},
1753 {"round", builtin_round, METH_VARARGS, round_doc},
1754 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001755#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001756 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001757#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001758 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001759 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001760 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001761};
1762
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001763PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001764"Built-in functions, exceptions, and other objects.\n\
1765\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001766Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001767
Guido van Rossum25ce5661997-08-02 03:10:38 +00001768PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001769_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001770{
Fred Drake5550de32000-06-20 04:54:19 +00001771 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001772 mod = Py_InitModule4("__builtin__", builtin_methods,
1773 builtin_doc, (PyObject *)NULL,
1774 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001775 if (mod == NULL)
1776 return NULL;
1777 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001778
1779#define SETBUILTIN(NAME, OBJECT) \
1780 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1781 return NULL
1782
1783 SETBUILTIN("None", Py_None);
1784 SETBUILTIN("Ellipsis", Py_Ellipsis);
1785 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001786 SETBUILTIN("False", Py_False);
1787 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001788 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001789 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001790 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001791 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001792#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001793 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001794#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001795 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001796 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001797 SETBUILTIN("float", &PyFloat_Type);
1798 SETBUILTIN("property", &PyProperty_Type);
1799 SETBUILTIN("int", &PyInt_Type);
1800 SETBUILTIN("list", &PyList_Type);
1801 SETBUILTIN("long", &PyLong_Type);
1802 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001803 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001804 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1805 SETBUILTIN("str", &PyString_Type);
1806 SETBUILTIN("super", &PySuper_Type);
1807 SETBUILTIN("tuple", &PyTuple_Type);
1808 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001809 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001810
1811 /* Note that open() is just an alias of file(). */
1812 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001813 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001814#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001815 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001816#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001817 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001818 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1819 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001820 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001821 }
1822 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001823
Guido van Rossum25ce5661997-08-02 03:10:38 +00001824 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001825#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001826}
1827
Guido van Rossume77a7571993-11-03 15:01:26 +00001828/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001829
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001831filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001832{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001834 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001835 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001836
Guido van Rossumb7b45621995-08-04 04:07:45 +00001837 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001839 return tuple;
1840 }
1841
Guido van Rossum79f25d91997-04-29 20:08:16 +00001842 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001843 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001844
Guido van Rossum12d12c51993-10-26 17:58:25 +00001845 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001846 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001847 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001848
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001850 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001851 if (func == Py_None) {
1852 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001853 good = item;
1854 }
1855 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001856 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001857 if (arg == NULL)
1858 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001859 good = PyEval_CallObject(func, arg);
1860 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001861 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001862 goto Fail_1;
1863 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001864 ok = PyObject_IsTrue(good);
1865 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001866 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867 Py_INCREF(item);
1868 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001869 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001870 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001871 }
1872
Tim Peters4324aa32001-05-28 22:30:08 +00001873 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001874 return NULL;
1875
Guido van Rossum12d12c51993-10-26 17:58:25 +00001876 return result;
1877
Guido van Rossum12d12c51993-10-26 17:58:25 +00001878Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001880 return NULL;
1881}
1882
1883
Guido van Rossume77a7571993-11-03 15:01:26 +00001884/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001887filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001888{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001890 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001891 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001892
Guido van Rossum79f25d91997-04-29 20:08:16 +00001893 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00001894 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001895 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00001896 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001897 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001898 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001899 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001900
Guido van Rossum12d12c51993-10-26 17:58:25 +00001901 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001902 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001903 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001904
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001905 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1906 if (item == NULL)
1907 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001908 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00001909 if (arg == NULL) {
1910 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001911 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001912 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001913 good = PyEval_CallObject(func, arg);
1914 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00001915 if (good == NULL) {
1916 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001917 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001918 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001919 ok = PyObject_IsTrue(good);
1920 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001921 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 PyString_AS_STRING((PyStringObject *)result)[j++] =
1923 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00001924 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001925 }
1926
Tim Peters5de98422002-04-27 18:44:32 +00001927 if (j < len)
1928 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001929
Guido van Rossum12d12c51993-10-26 17:58:25 +00001930 return result;
1931
Guido van Rossum12d12c51993-10-26 17:58:25 +00001932Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001934 return NULL;
1935}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00001936
1937#ifdef Py_USING_UNICODE
1938/* Helper for filter(): filter a Unicode object through a function */
1939
1940static PyObject *
1941filterunicode(PyObject *func, PyObject *strobj)
1942{
1943 PyObject *result;
1944 register int i, j;
1945 int len = PyUnicode_GetSize(strobj);
1946
1947 if (func == Py_None) {
1948 /* No character is ever false -- share input string */
1949 Py_INCREF(strobj);
1950 return strobj;
1951 }
1952 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
1953 return NULL;
1954
1955 for (i = j = 0; i < len; ++i) {
1956 PyObject *item, *arg, *good;
1957 int ok;
1958
1959 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1960 if (item == NULL)
1961 goto Fail_1;
1962 arg = Py_BuildValue("(O)", item);
1963 if (arg == NULL) {
1964 Py_DECREF(item);
1965 goto Fail_1;
1966 }
1967 good = PyEval_CallObject(func, arg);
1968 Py_DECREF(arg);
1969 if (good == NULL) {
1970 Py_DECREF(item);
1971 goto Fail_1;
1972 }
1973 ok = PyObject_IsTrue(good);
1974 Py_DECREF(good);
1975 if (ok)
1976 PyUnicode_AS_UNICODE((PyStringObject *)result)[j++] =
1977 PyUnicode_AS_UNICODE((PyStringObject *)item)[0];
1978 Py_DECREF(item);
1979 }
1980
1981 if (j < len)
1982 PyUnicode_Resize(&result, j);
1983
1984 return result;
1985
1986Fail_1:
1987 Py_DECREF(result);
1988 return NULL;
1989}
1990#endif