blob: 9b1bf55495dd239426ee50fb590de626fa8e96c8 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossume2ae77b2001-10-24 20:42:55 +000012#ifdef RISCOS
13#include "unixstuff.h"
14#endif
15
Mark Hammond26cffde42001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000019#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
21#else
22const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
23#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000024
Guido van Rossum12d12c51993-10-26 17:58:25 +000025/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000026static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000027#ifdef Py_USING_UNICODE
28static PyObject *filterunicode(PyObject *, PyObject *);
29#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000030static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000031
Guido van Rossum79f25d91997-04-29 20:08:16 +000032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000033builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000034{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000035 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000036 PyObject *globals = NULL;
37 PyObject *locals = NULL;
38 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039
Guido van Rossum79f25d91997-04-29 20:08:16 +000040 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000041 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000042 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000043 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044}
45
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000046PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000047"__import__(name, globals, locals, fromlist) -> module\n\
48\n\
49Import a module. The globals are only used to determine the context;\n\
50they are not modified. The locals are currently unused. The fromlist\n\
51should be a list of names to emulate ``from name import ...'', or an\n\
52empty list to emulate ``import name''.\n\
53When importing a module from a package, note that __import__('A.B', ...)\n\
54returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000055fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000056
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057
Guido van Rossum79f25d91997-04-29 20:08:16 +000058static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000059builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000060{
Guido van Rossum09df08a1998-05-22 00:51:39 +000061 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000062}
63
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000064PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065"abs(number) -> number\n\
66\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000067Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000068
69
Guido van Rossum79f25d91997-04-29 20:08:16 +000070static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000071builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000072{
Guido van Rossum79f25d91997-04-29 20:08:16 +000073 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000074 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000075
Neal Norwitz94c30c02003-02-03 20:23:33 +000076 PyErr_Warn(PyExc_PendingDeprecationWarning,
77 "use func(*args, **kwargs) instead of "
78 "apply(func, args, kwargs)");
Raymond Hettingerea3fdf42002-12-29 16:33:45 +000079 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000080 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000081 if (alist != NULL) {
82 if (!PyTuple_Check(alist)) {
83 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000084 PyErr_Format(PyExc_TypeError,
85 "apply() arg 2 expect sequence, found %s",
86 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000087 return NULL;
88 }
89 t = PySequence_Tuple(alist);
90 if (t == NULL)
91 return NULL;
92 alist = t;
93 }
Guido van Rossum2d951851994-08-29 12:52:16 +000094 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000095 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000096 PyErr_Format(PyExc_TypeError,
97 "apply() arg 3 expected dictionary, found %s",
98 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000099 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000100 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000101 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
102 finally:
103 Py_XDECREF(t);
104 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000105}
106
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000107PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000108"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000109\n\
Fred Drake7b912121999-12-23 14:16:55 +0000110Call a callable object with positional arguments taken from the tuple args,\n\
111and keyword arguments taken from the optional dictionary kwargs.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000112Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000113
114
Guido van Rossum79f25d91997-04-29 20:08:16 +0000115static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000116builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000117{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000118 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000119}
120
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000121PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000122"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000123\n\
124Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000125Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000126
127
Guido van Rossum79f25d91997-04-29 20:08:16 +0000128static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000129builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000130{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000131 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000132 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000133 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000134
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000135 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000136 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000137
Tim Peters0e57abf2001-05-02 07:39:38 +0000138 /* Strings and tuples return a result of the same type. */
139 if (PyString_Check(seq))
140 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000141#ifdef Py_USING_UNICODE
142 if (PyUnicode_Check(seq))
143 return filterunicode(func, seq);
144#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000145 if (PyTuple_Check(seq))
146 return filtertuple(func, seq);
147
148 /* Get iterator. */
149 it = PyObject_GetIter(seq);
150 if (it == NULL)
151 return NULL;
152
153 /* Guess a result list size. */
154 len = -1; /* unknown */
155 if (PySequence_Check(seq) &&
156 seq->ob_type->tp_as_sequence->sq_length) {
157 len = PySequence_Size(seq);
158 if (len < 0)
159 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000160 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000161 if (len < 0)
162 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000163
Guido van Rossumc7903a12002-08-16 07:04:56 +0000164 /* Pre-allocate argument list tuple. */
165 arg = PyTuple_New(1);
166 if (arg == NULL)
167 goto Fail_arg;
168
Tim Peters0e57abf2001-05-02 07:39:38 +0000169 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000170 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000171 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000172 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000173 result = seq;
174 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000175 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000176 result = PyList_New(len);
177 if (result == NULL)
178 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000179 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000180
Tim Peters0e57abf2001-05-02 07:39:38 +0000181 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000182 j = 0;
183 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000184 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000185 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000186
Tim Peters0e57abf2001-05-02 07:39:38 +0000187 item = PyIter_Next(it);
188 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000189 if (PyErr_Occurred())
190 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000191 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000192 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000193
Guido van Rossum79f25d91997-04-29 20:08:16 +0000194 if (func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000195 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000196 }
197 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000198 PyObject *good;
199 PyTuple_SET_ITEM(arg, 0, item);
200 good = PyObject_Call(func, arg, NULL);
201 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000202 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000203 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000204 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000205 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000206 ok = PyObject_IsTrue(good);
207 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000208 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000209 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000210 if (j < len)
211 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000212 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000213 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000214 Py_DECREF(item);
215 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000217 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000219 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000220 else
221 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000222 }
223
Guido van Rossum12d12c51993-10-26 17:58:25 +0000224
Tim Peters0e57abf2001-05-02 07:39:38 +0000225 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000226 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000227 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000228
Tim Peters3c6b1482001-05-21 08:07:05 +0000229 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000230 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000231 return result;
232
Tim Peters0e57abf2001-05-02 07:39:38 +0000233Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000234 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000235Fail_it:
236 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000237Fail_arg:
238 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000239 return NULL;
240}
241
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000242PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000243"filter(function or None, sequence) -> list, tuple, or string\n"
244"\n"
245"Return those items of sequence for which function(item) is true. If\n"
246"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000247"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000248
Guido van Rossum79f25d91997-04-29 20:08:16 +0000249static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000250builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000251{
252 long x;
253 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000254
Guido van Rossum79f25d91997-04-29 20:08:16 +0000255 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000256 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000257 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000258 PyErr_SetString(PyExc_ValueError,
259 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000260 return NULL;
261 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000262 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000263 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000264}
265
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000266PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267"chr(i) -> character\n\
268\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000270
271
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000272#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000273static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000274builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000275{
276 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000277
278 if (!PyArg_ParseTuple(args, "l:unichr", &x))
279 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000280
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000281 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000282}
283
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000284PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000285"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000286\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000287Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000288#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000289
290
291static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000292builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000293{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000294 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000295 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000296
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000297 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000298 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000299 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000300 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000301 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000302}
303
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000304PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000305"cmp(x, y) -> integer\n\
306\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000307Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000308
309
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000311builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000312{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000313 PyObject *v, *w;
314 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000315
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000316 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000317 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000318 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000319 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000320 res = Py_BuildValue("(OO)", v, w);
321 Py_DECREF(v);
322 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000323 return res;
324}
325
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000326PyDoc_STRVAR(coerce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000327"coerce(x, y) -> None or (x1, y1)\n\
328\n\
329When x and y can be coerced to values of the same type, return a tuple\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000330containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000331
332
Guido van Rossum79f25d91997-04-29 20:08:16 +0000333static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000334builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000335{
336 char *str;
337 char *filename;
338 char *startstr;
339 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000340 int dont_inherit = 0;
341 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000342 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000343 PyObject *result, *cmd, *tmp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000344
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000345 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000346 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000347 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000348
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000349 cf.cf_flags = supplied_flags;
350
351#ifdef Py_USING_UNICODE
352 if (PyUnicode_Check(cmd)) {
353 tmp = PyUnicode_AsUTF8String(cmd);
354 if (tmp == NULL)
355 return NULL;
356 cmd = tmp;
357 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
358 }
359#endif
360 if (!PyString_Check(cmd)) {
361 PyErr_SetString(PyExc_TypeError,
362 "compile() arg 1 must be a string");
363 return NULL;
364 }
365
366 if (PyString_AsStringAndSize(cmd, &str, NULL))
367 return NULL;
368
Guido van Rossum5b722181993-03-30 17:46:03 +0000369 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000370 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000371 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000372 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000373 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000374 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000375 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000376 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000377 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000378 return NULL;
379 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000380
381 if (supplied_flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE)) {
382 PyErr_SetString(PyExc_ValueError,
383 "compile(): unrecognised flags");
384 return NULL;
385 }
386 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
387
Tim Peters6cd6a822001-08-17 22:11:27 +0000388 if (!dont_inherit) {
389 PyEval_MergeCompilerFlags(&cf);
390 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000391 result = Py_CompileStringFlags(str, filename, start, &cf);
392 Py_XDECREF(tmp);
393 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000394}
395
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000396PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000397"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000398\n\
399Compile the source string (a Python module, statement or expression)\n\
400into a code object that can be executed by the exec statement or eval().\n\
401The filename will be used for run-time error messages.\n\
402The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000403single (interactive) statement, or 'eval' to compile an expression.\n\
404The flags argument, if present, controls which future statements influence\n\
405the compilation of the code.\n\
406The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
407the effects of any future statements in effect in the code calling\n\
408compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000409in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000410
Guido van Rossum79f25d91997-04-29 20:08:16 +0000411static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000412builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000413{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000414 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000415
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000416 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000417 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000418 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000419}
420
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000421PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000422"dir([object]) -> list of strings\n"
423"\n"
424"Return an alphabetized list of names comprising (some of) the attributes\n"
425"of the given object, and of attributes reachable from it:\n"
426"\n"
427"No argument: the names in the current scope.\n"
428"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000429"Type or class object: its attributes, and recursively the attributes of\n"
430" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000431"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000432" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000433
Guido van Rossum79f25d91997-04-29 20:08:16 +0000434static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000435builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000436{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000437 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000438
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000439 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000440 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000441 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000442}
443
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000444PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000445"divmod(x, y) -> (div, mod)\n\
446\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000447Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000448
449
Guido van Rossum79f25d91997-04-29 20:08:16 +0000450static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000451builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000452{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000453 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000454 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000455 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000456 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000457
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000459 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 &PyDict_Type, &globals,
461 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000462 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000463 if (globals == Py_None) {
464 globals = PyEval_GetGlobals();
465 if (locals == Py_None)
466 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000467 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000469 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000470
Guido van Rossum79f25d91997-04-29 20:08:16 +0000471 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
472 if (PyDict_SetItemString(globals, "__builtins__",
473 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000474 return NULL;
475 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000476
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000477 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000478 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000479 PyErr_SetString(PyExc_TypeError,
480 "code object passed to eval() may not contain free variables");
481 return NULL;
482 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000483 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000484 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000485
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000486 if (!PyString_Check(cmd) &&
487 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000488 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000489 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000490 return NULL;
491 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000492 cf.cf_flags = 0;
493
494#ifdef Py_USING_UNICODE
495 if (PyUnicode_Check(cmd)) {
496 tmp = PyUnicode_AsUTF8String(cmd);
497 if (tmp == NULL)
498 return NULL;
499 cmd = tmp;
500 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
501 }
502#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000503 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000504 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000505 while (*str == ' ' || *str == '\t')
506 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000507
Tim Peters9fa96be2001-08-17 23:04:59 +0000508 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000509 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
510 Py_XDECREF(tmp);
511 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000512}
513
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000514PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000515"eval(source[, globals[, locals]]) -> value\n\
516\n\
517Evaluate the source in the context of globals and locals.\n\
518The source may be a string representing a Python expression\n\
519or a code object as returned by compile().\n\
520The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000521globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000522
523
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000525builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000526{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000527 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528 PyObject *globals = Py_None, *locals = Py_None;
529 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000530 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000531 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000532 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536 &PyDict_Type, &globals,
537 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000538 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 if (globals == Py_None) {
540 globals = PyEval_GetGlobals();
541 if (locals == Py_None)
542 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000543 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000545 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
547 if (PyDict_SetItemString(globals, "__builtins__",
548 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000549 return NULL;
550 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000551
552 exists = 0;
553 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000554#if defined(PLAN9)
555 {
556 Dir *d;
557
558 if ((d = dirstat(filename))!=nil) {
559 if(d->mode & DMDIR)
560 werrstr("is a directory");
561 else
562 exists = 1;
563 free(d);
564 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000565 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000566#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000567 if (object_exists(filename)) {
568 if (isdir(filename))
569 errno = EISDIR;
570 else
571 exists = 1;
572 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000573#else /* standard Posix */
574 {
575 struct stat s;
576 if (stat(filename, &s) == 0) {
577 if (S_ISDIR(s.st_mode))
578# if defined(PY_OS2) && defined(PYCC_VACPP)
579 errno = EOS2ERR;
580# else
581 errno = EISDIR;
582# endif
583 else
584 exists = 1;
585 }
586 }
587#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000588
589 if (exists) {
590 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000591 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000592 Py_END_ALLOW_THREADS
593
594 if (fp == NULL) {
595 exists = 0;
596 }
597 }
598
599 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000600 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000601 return NULL;
602 }
Tim Peters5ba58662001-07-16 02:29:45 +0000603 cf.cf_flags = 0;
604 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000605 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000606 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000607 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000608 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000609 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000610 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000611}
612
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000613PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000614"execfile(filename[, globals[, locals]])\n\
615\n\
616Read and execute a Python script from a file.\n\
617The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000618globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000619
620
Guido van Rossum79f25d91997-04-29 20:08:16 +0000621static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000622builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000623{
Guido van Rossum950ff291998-06-29 13:38:57 +0000624 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000626
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000627 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000628 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000629#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000630 if (PyUnicode_Check(name)) {
631 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
632 if (name == NULL)
633 return NULL;
634 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000635#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000636
637 if (!PyString_Check(name)) {
638 PyErr_SetString(PyExc_TypeError,
639 "attribute name must be string");
640 return NULL;
641 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000642 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000643 if (result == NULL && dflt != NULL &&
644 PyErr_ExceptionMatches(PyExc_AttributeError))
645 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000646 PyErr_Clear();
647 Py_INCREF(dflt);
648 result = dflt;
649 }
650 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000651}
652
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000653PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000654"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000655\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000656Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
657When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000658exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000659
660
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000662builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000663{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000664 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000665
Guido van Rossum79f25d91997-04-29 20:08:16 +0000666 d = PyEval_GetGlobals();
667 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000668 return d;
669}
670
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000671PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000672"globals() -> dictionary\n\
673\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000674Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000675
676
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000678builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000679{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000680 PyObject *v;
681 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000683 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000684 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000685#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000686 if (PyUnicode_Check(name)) {
687 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
688 if (name == NULL)
689 return NULL;
690 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000691#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000692
693 if (!PyString_Check(name)) {
694 PyErr_SetString(PyExc_TypeError,
695 "attribute name must be string");
696 return NULL;
697 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000699 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000700 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000701 Py_INCREF(Py_False);
702 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000703 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000704 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000705 Py_INCREF(Py_True);
706 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000707}
708
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000709PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000710"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000711\n\
712Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000713(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000714
715
Guido van Rossum79f25d91997-04-29 20:08:16 +0000716static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000717builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000718{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000719 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000720}
721
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000722PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000723"id(object) -> integer\n\
724\n\
725Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000726simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000727
728
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000730builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000731{
732 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000733 PyObject *it; /* the iterator object */
734 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000735 } sequence;
736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000738 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000740 register int i, j;
741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 PyErr_SetString(PyExc_TypeError,
745 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000746 return NULL;
747 }
748
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000751
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000752 if (func == Py_None && n == 1) {
753 /* map(None, S) is the same as list(S). */
754 return PySequence_List(PyTuple_GetItem(args, 1));
755 }
756
Tim Peters4e9afdc2001-05-03 23:54:49 +0000757 /* Get space for sequence descriptors. Must NULL out the iterator
758 * pointers so that jumping to Fail_2 later doesn't see trash.
759 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000760 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
761 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000762 return NULL;
763 }
764 for (i = 0; i < n; ++i) {
765 seqs[i].it = (PyObject*)NULL;
766 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000767 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000768
Tim Peters4e9afdc2001-05-03 23:54:49 +0000769 /* Do a first pass to obtain iterators for the arguments, and set len
770 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000771 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000772 len = 0;
773 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
774 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000775 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000776
Tim Peters4e9afdc2001-05-03 23:54:49 +0000777 /* Get iterator. */
778 curseq = PyTuple_GetItem(args, i+1);
779 sqp->it = PyObject_GetIter(curseq);
780 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000781 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000782 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000783 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000784 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000786 goto Fail_2;
787 }
788
Tim Peters4e9afdc2001-05-03 23:54:49 +0000789 /* Update len. */
790 curlen = -1; /* unknown */
791 if (PySequence_Check(curseq) &&
792 curseq->ob_type->tp_as_sequence->sq_length) {
793 curlen = PySequence_Size(curseq);
794 if (curlen < 0)
795 PyErr_Clear();
796 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000797 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000798 curlen = 8; /* arbitrary */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000799 if (curlen > len)
800 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000801 }
802
Tim Peters4e9afdc2001-05-03 23:54:49 +0000803 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000805 goto Fail_2;
806
Tim Peters4e9afdc2001-05-03 23:54:49 +0000807 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000808 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000810 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000813 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000814 else if ((alist = PyTuple_New(n)) == NULL)
815 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000816
817 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819 Py_INCREF(Py_None);
820 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000821 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000822 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 item = PyIter_Next(sqp->it);
824 if (item)
825 ++numactive;
826 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000827 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000828 Py_XDECREF(alist);
829 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000830 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000831 Py_INCREF(Py_None);
832 item = Py_None;
833 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000834 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000835 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000836 if (alist)
837 PyTuple_SET_ITEM(alist, j, item);
838 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000839 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000840 }
841
Guido van Rossum32120311995-07-10 13:52:21 +0000842 if (!alist)
843 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000844
Tim Peters4e9afdc2001-05-03 23:54:49 +0000845 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000847 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000848 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000849
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000851 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000852 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 value = PyEval_CallObject(func, alist);
854 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000855 if (value == NULL)
856 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000857 }
858 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000859 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000860 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000861 if (status < 0)
862 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000863 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000864 else if (PyList_SetItem(result, i, value) < 0)
865 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000866 }
867
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000868 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
869 goto Fail_1;
870
Tim Peters4e9afdc2001-05-03 23:54:49 +0000871 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000872
Guido van Rossum12d12c51993-10-26 17:58:25 +0000873Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000875Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000876 result = NULL;
877Succeed:
878 assert(seqs);
879 for (i = 0; i < n; ++i)
880 Py_XDECREF(seqs[i].it);
881 PyMem_DEL(seqs);
882 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000883}
884
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000885PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000886"map(function, sequence[, sequence, ...]) -> list\n\
887\n\
888Return a list of the results of applying the function to the items of\n\
889the argument sequence(s). If more than one sequence is given, the\n\
890function is called with an argument list consisting of the corresponding\n\
891item of each sequence, substituting None for missing values when not all\n\
892sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000893the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000894
895
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000897builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000898{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 PyObject *v;
900 PyObject *name;
901 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000902
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000903 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000904 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000906 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 Py_INCREF(Py_None);
908 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000909}
910
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000911PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000912"setattr(object, name, value)\n\
913\n\
914Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000915``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000916
917
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000919builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000920{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 PyObject *v;
922 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000923
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000924 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000925 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000927 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 Py_INCREF(Py_None);
929 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000930}
931
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000932PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000933"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000934\n\
935Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000937
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000940builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000941{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000942 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945 if (x == -1)
946 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000948}
949
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000950PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000951"hash(object) -> integer\n\
952\n\
953Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000954the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000955
956
Guido van Rossum79f25d91997-04-29 20:08:16 +0000957static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000958builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000959{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000961
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000962 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000963 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000965 "hex() argument can't be converted to hex");
966 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000967 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000968 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000969}
970
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000971PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000972"hex(number) -> string\n\
973\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000974Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000975
976
Tim Petersdbd9ba62000-07-09 03:09:57 +0000977static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000978
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000980builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000981{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000983 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 PyObject *res;
985 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986
987 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000988 if (line == NULL)
989 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991 return NULL;
992 while (*str == ' ' || *str == '\t')
993 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 globals = PyEval_GetGlobals();
995 locals = PyEval_GetLocals();
996 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
997 if (PyDict_SetItemString(globals, "__builtins__",
998 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000999 return NULL;
1000 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001001 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001004}
1005
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001006PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001007"input([prompt]) -> value\n\
1008\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001009Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001010
1011
Guido van Rossume8811f81997-02-14 15:48:05 +00001012static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001013builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001014{
1015 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001016 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001017 return NULL;
1018 Py_INCREF(s);
1019 PyString_InternInPlace(&s);
1020 return s;
1021}
1022
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001023PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001024"intern(string) -> string\n\
1025\n\
1026``Intern'' the given string. This enters the string in the (global)\n\
1027table of interned strings whose purpose is to speed up dictionary lookups.\n\
1028Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030
1031
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001033builtin_iter(PyObject *self, PyObject *args)
1034{
1035 PyObject *v, *w = NULL;
1036
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001037 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001038 return NULL;
1039 if (w == NULL)
1040 return PyObject_GetIter(v);
1041 if (!PyCallable_Check(v)) {
1042 PyErr_SetString(PyExc_TypeError,
1043 "iter(v, w): v must be callable");
1044 return NULL;
1045 }
1046 return PyCallIter_New(v, w);
1047}
1048
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001049PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001050"iter(collection) -> iterator\n\
1051iter(callable, sentinel) -> iterator\n\
1052\n\
1053Get an iterator from an object. In the first form, the argument must\n\
1054supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001055In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001056
1057
1058static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001059builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001060{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001061 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001062
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001063 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001064 if (res < 0 && PyErr_Occurred())
1065 return NULL;
1066 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001067}
1068
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001069PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001070"len(object) -> integer\n\
1071\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001072Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073
1074
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001076builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001077{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001078 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001079
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 d = PyEval_GetLocals();
1081 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001082 return d;
1083}
1084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001085PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001086"locals() -> dictionary\n\
1087\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001088Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001089
1090
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001092min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001093{
Tim Petersc3074532001-05-03 07:00:32 +00001094 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001097 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001098 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001099 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001100
Tim Petersc3074532001-05-03 07:00:32 +00001101 it = PyObject_GetIter(v);
1102 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001103 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001104
1105 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001106 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001107 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001108 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001109 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001110 Py_XDECREF(w);
1111 Py_DECREF(it);
1112 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001113 }
Tim Petersc3074532001-05-03 07:00:32 +00001114 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001115 }
Tim Petersc3074532001-05-03 07:00:32 +00001116
Guido van Rossum2d951851994-08-29 12:52:16 +00001117 if (w == NULL)
1118 w = x;
1119 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001120 int cmp = PyObject_RichCompareBool(x, w, op);
1121 if (cmp > 0) {
1122 Py_DECREF(w);
1123 w = x;
1124 }
1125 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001126 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001127 Py_DECREF(w);
1128 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001129 return NULL;
1130 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001131 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001132 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001133 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001134 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001135 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001137 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001138 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001139 return w;
1140}
1141
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001143builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001144{
Guido van Rossum53451b32001-01-17 15:47:24 +00001145 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001146}
1147
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001148PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001149"min(sequence) -> value\n\
1150min(a, b, c, ...) -> value\n\
1151\n\
1152With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001153With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154
1155
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001157builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158{
Guido van Rossum53451b32001-01-17 15:47:24 +00001159 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001160}
1161
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001162PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001163"max(sequence) -> value\n\
1164max(a, b, c, ...) -> value\n\
1165\n\
1166With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168
1169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001171builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001172{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001174
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001175 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1176 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001178 "oct() argument can't be converted to oct");
1179 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001180 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001181 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001182}
1183
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001184PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185"oct(number) -> string\n\
1186\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188
1189
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001191builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001192{
Guido van Rossum09095f32000-03-10 23:00:52 +00001193 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001194 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001195
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001196 if (PyString_Check(obj)) {
1197 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001198 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001199 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001200 return PyInt_FromLong(ord);
1201 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001202#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001203 } else if (PyUnicode_Check(obj)) {
1204 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001205 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001206 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001207 return PyInt_FromLong(ord);
1208 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001209#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001210 } else {
1211 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001212 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001213 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001214 return NULL;
1215 }
1216
Guido van Rossumad991772001-01-12 16:03:05 +00001217 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001218 "ord() expected a character, "
1219 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001220 size);
1221 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001222}
1223
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001224PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001225"ord(c) -> integer\n\
1226\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001227Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001228
1229
Guido van Rossum79f25d91997-04-29 20:08:16 +00001230static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001231builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001232{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001233 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001234
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001235 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001236 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001237 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001238}
1239
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001240PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001241"pow(x, y[, z]) -> number\n\
1242\n\
1243With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001244equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001245
1246
Guido van Rossum124eff01999-02-23 16:11:01 +00001247/* Return number of items in range/xrange (lo, hi, step). step > 0
1248 * required. Return a value < 0 if & only if the true value is too
1249 * large to fit in a signed long.
1250 */
1251static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001252get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001253{
1254 /* -------------------------------------------------------------
1255 If lo >= hi, the range is empty.
1256 Else if n values are in the range, the last one is
1257 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1258 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1259 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1260 the RHS is non-negative and so truncation is the same as the
1261 floor. Letting M be the largest positive long, the worst case
1262 for the RHS numerator is hi=M, lo=-M-1, and then
1263 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1264 precision to compute the RHS exactly.
1265 ---------------------------------------------------------------*/
1266 long n = 0;
1267 if (lo < hi) {
1268 unsigned long uhi = (unsigned long)hi;
1269 unsigned long ulo = (unsigned long)lo;
1270 unsigned long diff = uhi - ulo - 1;
1271 n = (long)(diff / (unsigned long)step + 1);
1272 }
1273 return n;
1274}
1275
Guido van Rossum79f25d91997-04-29 20:08:16 +00001276static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001277builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001278{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001279 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001280 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001282
Guido van Rossum79f25d91997-04-29 20:08:16 +00001283 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001284
Guido van Rossum79f25d91997-04-29 20:08:16 +00001285 if (PyTuple_Size(args) <= 1) {
1286 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001287 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001288 &ihigh))
1289 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001290 }
1291 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001292 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001293 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001294 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001296 }
1297 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001298 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001299 return NULL;
1300 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001301 if (istep > 0)
1302 bign = get_len_of_range(ilow, ihigh, istep);
1303 else
1304 bign = get_len_of_range(ihigh, ilow, -istep);
1305 n = (int)bign;
1306 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001307 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001308 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001309 return NULL;
1310 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001311 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001312 if (v == NULL)
1313 return NULL;
1314 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001316 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318 return NULL;
1319 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001320 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001321 ilow += istep;
1322 }
1323 return v;
1324}
1325
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001326PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001327"range([start,] stop[, step]) -> list of integers\n\
1328\n\
1329Return a list containing an arithmetic progression of integers.\n\
1330range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1331When step is given, it specifies the increment (or decrement).\n\
1332For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001333These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001334
1335
Guido van Rossum79f25d91997-04-29 20:08:16 +00001336static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001337builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001338{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001339 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001340 PyObject *fin = PySys_GetObject("stdin");
1341 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001342
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001343 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001344 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001345
1346 if (fin == NULL) {
1347 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
1348 return NULL;
1349 }
1350 if (fout == NULL) {
1351 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1352 return NULL;
1353 }
1354 if (PyFile_SoftSpace(fout, 0)) {
1355 if (PyFile_WriteString(" ", fout) != 0)
1356 return NULL;
1357 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001358 if (PyFile_Check (fin) && PyFile_Check (fout)
1359 && isatty(fileno(PyFile_AsFile(fin)))
1360 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001361 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001362 char *prompt;
1363 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001364 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001365 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001366 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001367 if (po == NULL)
1368 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001370 if (prompt == NULL)
1371 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001372 }
1373 else {
1374 po = NULL;
1375 prompt = "";
1376 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001377 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1378 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001379 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001380 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001381 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001382 return NULL;
1383 }
1384 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001385 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001386 result = NULL;
1387 }
1388 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001389 size_t len = strlen(s);
1390 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001391 PyErr_SetString(PyExc_OverflowError,
1392 "input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001393 result = NULL;
1394 }
1395 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001396 result = PyString_FromStringAndSize(s,
1397 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001398 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001399 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001400 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001401 return result;
1402 }
Guido van Rossum90933611991-06-07 16:10:43 +00001403 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001404 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001405 return NULL;
1406 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001407 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001408}
1409
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001410PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001411"raw_input([prompt]) -> string\n\
1412\n\
1413Read a string from standard input. The trailing newline is stripped.\n\
1414If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1415On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001416is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001417
1418
Guido van Rossum79f25d91997-04-29 20:08:16 +00001419static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001420builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001421{
Tim Peters15d81ef2001-05-04 04:39:21 +00001422 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001423
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001424 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001425 return NULL;
1426 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001427 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001428
Tim Peters15d81ef2001-05-04 04:39:21 +00001429 it = PyObject_GetIter(seq);
1430 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001431 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001432 "reduce() arg 2 must support iteration");
1433 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001434 return NULL;
1435 }
1436
Guido van Rossum79f25d91997-04-29 20:08:16 +00001437 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001438 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001439
Tim Peters15d81ef2001-05-04 04:39:21 +00001440 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001441 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001442
1443 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001444 Py_DECREF(args);
1445 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001446 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001447 }
1448
Tim Peters15d81ef2001-05-04 04:39:21 +00001449 op2 = PyIter_Next(it);
1450 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001451 if (PyErr_Occurred())
1452 goto Fail;
1453 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001454 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001455
Guido van Rossum2d951851994-08-29 12:52:16 +00001456 if (result == NULL)
1457 result = op2;
1458 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459 PyTuple_SetItem(args, 0, result);
1460 PyTuple_SetItem(args, 1, op2);
1461 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001462 goto Fail;
1463 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001464 }
1465
Guido van Rossum79f25d91997-04-29 20:08:16 +00001466 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001467
Guido van Rossum2d951851994-08-29 12:52:16 +00001468 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001469 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001470 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001471
Tim Peters15d81ef2001-05-04 04:39:21 +00001472 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001473 return result;
1474
Guido van Rossum2d951851994-08-29 12:52:16 +00001475Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001476 Py_XDECREF(args);
1477 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001478 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001479 return NULL;
1480}
1481
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001482PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001483"reduce(function, sequence[, initial]) -> value\n\
1484\n\
1485Apply a function of two arguments cumulatively to the items of a sequence,\n\
1486from left to right, so as to reduce the sequence to a single value.\n\
1487For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1488((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1489of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001490sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001491
1492
Guido van Rossum79f25d91997-04-29 20:08:16 +00001493static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001494builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001495{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497}
1498
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001499PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001500"reload(module) -> module\n\
1501\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001502Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001503
1504
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001506builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001507{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001508 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001509}
1510
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001511PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001512"repr(object) -> string\n\
1513\n\
1514Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001515For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001516
1517
Guido van Rossum79f25d91997-04-29 20:08:16 +00001518static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001519builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001520{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001521 double x;
1522 double f;
1523 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001524 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001525
Guido van Rossum79f25d91997-04-29 20:08:16 +00001526 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001527 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001528 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001529 i = abs(ndigits);
1530 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001531 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001532 if (ndigits < 0)
1533 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001534 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001535 x *= f;
1536 if (x >= 0.0)
1537 x = floor(x + 0.5);
1538 else
1539 x = ceil(x - 0.5);
1540 if (ndigits < 0)
1541 x *= f;
1542 else
1543 x /= f;
1544 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001545}
1546
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001547PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001548"round(number[, ndigits]) -> floating point number\n\
1549\n\
1550Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001551This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001552
1553
Guido van Rossum79f25d91997-04-29 20:08:16 +00001554static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001555builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001556{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001557 PyObject *v = NULL;
1558 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001559
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001560 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001561 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001562 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001563 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001564 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001565 if (!PyErr_Occurred())
1566 PyErr_SetString(PyExc_SystemError,
1567 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001568 }
1569 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001570 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001571 }
1572 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001574 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001575 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001576 "vars() argument must have __dict__ attribute");
1577 return NULL;
1578 }
1579 }
1580 return d;
1581}
1582
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001583PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001584"vars([object]) -> dictionary\n\
1585\n\
1586Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001587With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001588
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001589static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001590builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001591{
1592 PyObject *inst;
1593 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001594 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001595
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001596 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001597 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001598
Guido van Rossum823649d2001-03-21 18:40:58 +00001599 retval = PyObject_IsInstance(inst, cls);
1600 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001601 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001602 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001603}
1604
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001605PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001606"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001607\n\
1608Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001609With a type as second argument, return whether that is the object's type.\n\
1610The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001611isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001612
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001613
1614static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001615builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001616{
1617 PyObject *derived;
1618 PyObject *cls;
1619 int retval;
1620
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001621 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001622 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001623
Guido van Rossum823649d2001-03-21 18:40:58 +00001624 retval = PyObject_IsSubclass(derived, cls);
1625 if (retval < 0)
1626 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001627 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001628}
1629
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001630PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001631"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001632\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001633Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1634When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1635is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001636
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001637
Barry Warsawbd599b52000-08-03 15:45:29 +00001638static PyObject*
1639builtin_zip(PyObject *self, PyObject *args)
1640{
1641 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001642 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001643 int i;
1644 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001645 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001646
1647 if (itemsize < 1) {
1648 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001649 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00001650 return NULL;
1651 }
1652 /* args must be a tuple */
1653 assert(PyTuple_Check(args));
1654
Tim Peters39a86c22002-05-12 07:19:38 +00001655 /* Guess at result length: the shortest of the input lengths.
1656 If some argument refuses to say, we refuse to guess too, lest
1657 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001658 len = -1; /* unknown */
1659 for (i = 0; i < itemsize; ++i) {
1660 PyObject *item = PyTuple_GET_ITEM(args, i);
1661 int thislen = PySequence_Length(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001662 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001663 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001664 len = -1;
1665 break;
1666 }
Tim Peters67d687a2002-04-29 21:27:32 +00001667 else if (len < 0 || thislen < len)
1668 len = thislen;
1669 }
1670
Tim Peters8572b4f2001-05-06 01:05:02 +00001671 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001672 if (len < 0)
1673 len = 10; /* arbitrary */
1674 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001675 return NULL;
1676
Tim Peters8572b4f2001-05-06 01:05:02 +00001677 /* obtain iterators */
1678 itlist = PyTuple_New(itemsize);
1679 if (itlist == NULL)
1680 goto Fail_ret;
1681 for (i = 0; i < itemsize; ++i) {
1682 PyObject *item = PyTuple_GET_ITEM(args, i);
1683 PyObject *it = PyObject_GetIter(item);
1684 if (it == NULL) {
1685 if (PyErr_ExceptionMatches(PyExc_TypeError))
1686 PyErr_Format(PyExc_TypeError,
1687 "zip argument #%d must support iteration",
1688 i+1);
1689 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001690 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001691 PyTuple_SET_ITEM(itlist, i, it);
1692 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001693
Tim Peters8572b4f2001-05-06 01:05:02 +00001694 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001695 for (i = 0; ; ++i) {
1696 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001697 PyObject *next = PyTuple_New(itemsize);
1698 if (!next)
1699 goto Fail_ret_itlist;
1700
Tim Peters67d687a2002-04-29 21:27:32 +00001701 for (j = 0; j < itemsize; j++) {
1702 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001703 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001704 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001705 if (PyErr_Occurred()) {
1706 Py_DECREF(ret);
1707 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001708 }
1709 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00001710 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00001711 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00001712 }
Tim Peters67d687a2002-04-29 21:27:32 +00001713 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00001714 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001715
Tim Peters67d687a2002-04-29 21:27:32 +00001716 if (i < len)
1717 PyList_SET_ITEM(ret, i, next);
1718 else {
1719 int status = PyList_Append(ret, next);
1720 Py_DECREF(next);
1721 ++len;
1722 if (status < 0)
1723 goto Fail_ret_itlist;
1724 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001725 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001726
Tim Peters67d687a2002-04-29 21:27:32 +00001727Done:
1728 if (ret != NULL && i < len) {
1729 /* The list is too big. */
1730 if (PyList_SetSlice(ret, i, len, NULL) < 0)
1731 return NULL;
1732 }
1733 return ret;
1734
Tim Peters8572b4f2001-05-06 01:05:02 +00001735Fail_ret_itlist:
1736 Py_DECREF(itlist);
1737Fail_ret:
1738 Py_DECREF(ret);
1739 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00001740}
1741
1742
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001743PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00001744"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
1745\n\
1746Return a list of tuples, where each tuple contains the i-th element\n\
1747from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001748in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00001749
1750
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001752 {"__import__", builtin___import__, METH_VARARGS, import_doc},
1753 {"abs", builtin_abs, METH_O, abs_doc},
1754 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001755 {"callable", builtin_callable, METH_O, callable_doc},
1756 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1757 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
1758 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
1759 {"compile", builtin_compile, METH_VARARGS, compile_doc},
1760 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1761 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1762 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1763 {"eval", builtin_eval, METH_VARARGS, eval_doc},
1764 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1765 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1766 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1767 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1768 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1769 {"hash", builtin_hash, METH_O, hash_doc},
1770 {"hex", builtin_hex, METH_O, hex_doc},
1771 {"id", builtin_id, METH_O, id_doc},
1772 {"input", builtin_input, METH_VARARGS, input_doc},
1773 {"intern", builtin_intern, METH_VARARGS, intern_doc},
1774 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1775 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1776 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1777 {"len", builtin_len, METH_O, len_doc},
1778 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1779 {"map", builtin_map, METH_VARARGS, map_doc},
1780 {"max", builtin_max, METH_VARARGS, max_doc},
1781 {"min", builtin_min, METH_VARARGS, min_doc},
1782 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001783 {"ord", builtin_ord, METH_O, ord_doc},
1784 {"pow", builtin_pow, METH_VARARGS, pow_doc},
1785 {"range", builtin_range, METH_VARARGS, range_doc},
1786 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
1787 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
1788 {"reload", builtin_reload, METH_O, reload_doc},
1789 {"repr", builtin_repr, METH_O, repr_doc},
1790 {"round", builtin_round, METH_VARARGS, round_doc},
1791 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001792#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001793 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001794#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001795 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001796 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001797 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001798};
1799
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001800PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001801"Built-in functions, exceptions, and other objects.\n\
1802\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001803Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001804
Guido van Rossum25ce5661997-08-02 03:10:38 +00001805PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001806_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001807{
Fred Drake5550de32000-06-20 04:54:19 +00001808 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001809 mod = Py_InitModule4("__builtin__", builtin_methods,
1810 builtin_doc, (PyObject *)NULL,
1811 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001812 if (mod == NULL)
1813 return NULL;
1814 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001815
1816#define SETBUILTIN(NAME, OBJECT) \
1817 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
1818 return NULL
1819
1820 SETBUILTIN("None", Py_None);
1821 SETBUILTIN("Ellipsis", Py_Ellipsis);
1822 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001823 SETBUILTIN("False", Py_False);
1824 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00001825 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00001826 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001827 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001828 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001829#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00001830 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00001831#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00001832 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00001833 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001834 SETBUILTIN("float", &PyFloat_Type);
1835 SETBUILTIN("property", &PyProperty_Type);
1836 SETBUILTIN("int", &PyInt_Type);
1837 SETBUILTIN("list", &PyList_Type);
1838 SETBUILTIN("long", &PyLong_Type);
1839 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00001840 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001841 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
1842 SETBUILTIN("str", &PyString_Type);
1843 SETBUILTIN("super", &PySuper_Type);
1844 SETBUILTIN("tuple", &PyTuple_Type);
1845 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00001846 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00001847
1848 /* Note that open() is just an alias of file(). */
1849 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00001850 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001851#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00001852 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001853#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00001854 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00001855 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
1856 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001857 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00001858 }
1859 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00001860
Guido van Rossum25ce5661997-08-02 03:10:38 +00001861 return mod;
Tim Peters4b7625e2001-09-13 21:37:17 +00001862#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00001863}
1864
Guido van Rossume77a7571993-11-03 15:01:26 +00001865/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001866
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001868filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001869{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001871 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001873
Guido van Rossumb7b45621995-08-04 04:07:45 +00001874 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001875 if (PyTuple_CheckExact(tuple))
1876 Py_INCREF(tuple);
1877 else
1878 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00001879 return tuple;
1880 }
1881
Guido van Rossum79f25d91997-04-29 20:08:16 +00001882 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001883 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001884
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001887 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001888
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001890 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001891 if (func == Py_None) {
1892 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001893 good = item;
1894 }
1895 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001896 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001897 if (arg == NULL)
1898 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899 good = PyEval_CallObject(func, arg);
1900 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001901 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001902 goto Fail_1;
1903 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 ok = PyObject_IsTrue(good);
1905 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001906 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001907 Py_INCREF(item);
1908 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001909 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001910 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001911 }
1912
Tim Peters4324aa32001-05-28 22:30:08 +00001913 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001914 return NULL;
1915
Guido van Rossum12d12c51993-10-26 17:58:25 +00001916 return result;
1917
Guido van Rossum12d12c51993-10-26 17:58:25 +00001918Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001919 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001920 return NULL;
1921}
1922
1923
Guido van Rossume77a7571993-11-03 15:01:26 +00001924/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001925
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001927filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001928{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001929 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001930 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001932 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001933
Guido van Rossum79f25d91997-04-29 20:08:16 +00001934 if (func == Py_None) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00001935 /* No character is ever false -- share input string
1936 * (if it's not a subclass) */
1937 if (PyString_CheckExact(strobj))
1938 Py_INCREF(strobj);
1939 else
1940 strobj = PyString_FromStringAndSize(
1941 PyString_AS_STRING(strobj),
1942 len
1943 );
Guido van Rossum2d951851994-08-29 12:52:16 +00001944 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001945 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001946 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00001947 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001948
Guido van Rossum12d12c51993-10-26 17:58:25 +00001949 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001950 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001951 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001952
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001953 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
1954 if (item == NULL)
1955 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00001957 if (arg == NULL) {
1958 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001959 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001960 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 good = PyEval_CallObject(func, arg);
1962 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00001963 if (good == NULL) {
1964 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001965 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00001966 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001967 ok = PyObject_IsTrue(good);
1968 Py_DECREF(good);
Walter Dörwald903f1e02003-02-04 16:28:00 +00001969 if (ok) {
1970 int reslen;
1971 if (!PyString_Check(item)) {
1972 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
1973 " __getitem__ returned different type");
1974 Py_DECREF(item);
1975 goto Fail_1;
1976 }
1977 reslen = PyString_GET_SIZE(item);
1978 if (reslen == 1) {
1979 PyString_AS_STRING(result)[j++] =
1980 PyString_AS_STRING(item)[0];
1981 } else {
1982 /* do we need more space? */
1983 int need = j + reslen + len-i-1;
1984 if (need > outlen) {
1985 /* overallocate, to avoid reallocations */
1986 if (need<2*outlen)
1987 need = 2*outlen;
1988 if (_PyString_Resize(&result, need)) {
1989 Py_DECREF(item);
1990 return NULL;
1991 }
1992 outlen = need;
1993 }
1994 memcpy(
1995 PyString_AS_STRING(result) + j,
1996 PyString_AS_STRING(item),
1997 reslen
1998 );
1999 j += reslen;
2000 }
2001 }
Tim Peters388ed082001-04-07 20:34:48 +00002002 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002003 }
2004
Walter Dörwald903f1e02003-02-04 16:28:00 +00002005 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002006 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002007
Guido van Rossum12d12c51993-10-26 17:58:25 +00002008 return result;
2009
Guido van Rossum12d12c51993-10-26 17:58:25 +00002010Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002011 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002012 return NULL;
2013}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002014
2015#ifdef Py_USING_UNICODE
2016/* Helper for filter(): filter a Unicode object through a function */
2017
2018static PyObject *
2019filterunicode(PyObject *func, PyObject *strobj)
2020{
2021 PyObject *result;
2022 register int i, j;
2023 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002024 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002025
2026 if (func == Py_None) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002027 /* No character is ever false -- share input string
2028 * (it if's not a subclass) */
2029 if (PyUnicode_CheckExact(strobj))
2030 Py_INCREF(strobj);
2031 else
2032 strobj = PyUnicode_FromUnicode(
2033 PyUnicode_AS_UNICODE(strobj),
2034 len
2035 );
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002036 return strobj;
2037 }
2038 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2039 return NULL;
2040
2041 for (i = j = 0; i < len; ++i) {
2042 PyObject *item, *arg, *good;
2043 int ok;
2044
2045 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2046 if (item == NULL)
2047 goto Fail_1;
2048 arg = Py_BuildValue("(O)", item);
2049 if (arg == NULL) {
2050 Py_DECREF(item);
2051 goto Fail_1;
2052 }
2053 good = PyEval_CallObject(func, arg);
2054 Py_DECREF(arg);
2055 if (good == NULL) {
2056 Py_DECREF(item);
2057 goto Fail_1;
2058 }
2059 ok = PyObject_IsTrue(good);
2060 Py_DECREF(good);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002061 if (ok) {
2062 int reslen;
2063 if (!PyUnicode_Check(item)) {
2064 PyErr_SetString(PyExc_TypeError, "can't filter unicode to unicode:"
2065 " __getitem__ returned different type");
2066 Py_DECREF(item);
2067 goto Fail_1;
2068 }
2069 reslen = PyUnicode_GET_SIZE(item);
2070 if (reslen == 1) {
2071 PyUnicode_AS_UNICODE(result)[j++] =
2072 PyUnicode_AS_UNICODE(item)[0];
2073 } else {
2074 /* do we need more space? */
2075 int need = j + reslen + len-i-1;
2076 if (need > outlen) {
2077 /* overallocate, to avoid reallocations */
2078 if (need<2*outlen)
2079 need = 2*outlen;
2080 if (PyUnicode_Resize(&result, need)) {
2081 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002082 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002083 }
2084 outlen = need;
2085 }
2086 memcpy(
2087 PyUnicode_AS_UNICODE(result) + j,
2088 PyUnicode_AS_UNICODE(item),
2089 reslen*sizeof(Py_UNICODE)
2090 );
2091 j += reslen;
2092 }
2093 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002094 Py_DECREF(item);
2095 }
2096
Walter Dörwald903f1e02003-02-04 16:28:00 +00002097 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002098 PyUnicode_Resize(&result, j);
2099
2100 return result;
2101
2102Fail_1:
2103 Py_DECREF(result);
2104 return NULL;
2105}
2106#endif