blob: 33b5ca5e46a32a48963a8c65928aae95638e52b9 [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 Hammond26cffde2001-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 Hammond26cffde2001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
25#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000026
Guido van Rossum12d12c51993-10-26 17:58:25 +000027/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000028static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000029#ifdef Py_USING_UNICODE
30static PyObject *filterunicode(PyObject *, PyObject *);
31#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000032static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000033
Guido van Rossum79f25d91997-04-29 20:08:16 +000034static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000035builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000036{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000037 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000038 PyObject *globals = NULL;
39 PyObject *locals = NULL;
40 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041
Guido van Rossum79f25d91997-04-29 20:08:16 +000042 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000043 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000045 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046}
47
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000048PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000049"__import__(name, globals, locals, fromlist) -> module\n\
50\n\
51Import a module. The globals are only used to determine the context;\n\
52they are not modified. The locals are currently unused. The fromlist\n\
53should be a list of names to emulate ``from name import ...'', or an\n\
54empty list to emulate ``import name''.\n\
55When importing a module from a package, note that __import__('A.B', ...)\n\
56returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000057fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000058
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000061builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000062{
Guido van Rossum09df08a1998-05-22 00:51:39 +000063 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000064}
65
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000066PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000067"abs(number) -> number\n\
68\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000069Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000070
71
Guido van Rossum79f25d91997-04-29 20:08:16 +000072static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000073builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000074{
Guido van Rossum79f25d91997-04-29 20:08:16 +000075 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000076 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000077
Raymond Hettingerea3fdf42002-12-29 16:33:45 +000078 if (!PyArg_UnpackTuple(args, "apply", 1, 3, &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000079 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000080 if (alist != NULL) {
81 if (!PyTuple_Check(alist)) {
82 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000083 PyErr_Format(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +000084 "apply() arg 2 expected sequence, found %s",
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000085 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000086 return NULL;
87 }
88 t = PySequence_Tuple(alist);
89 if (t == NULL)
90 return NULL;
91 alist = t;
92 }
Guido van Rossum2d951851994-08-29 12:52:16 +000093 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000094 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000095 PyErr_Format(PyExc_TypeError,
96 "apply() arg 3 expected dictionary, found %s",
97 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000098 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000099 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000100 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
101 finally:
102 Py_XDECREF(t);
103 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000104}
105
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000106PyDoc_STRVAR(apply_doc,
Fred Drakef1fbc622001-01-12 17:05:05 +0000107"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000108\n\
Fred Drake7b912121999-12-23 14:16:55 +0000109Call a callable object with positional arguments taken from the tuple args,\n\
110and keyword arguments taken from the optional dictionary kwargs.\n\
Raymond Hettingerff41c482003-04-06 09:01:11 +0000111Note that classes are callable, as are instances with a __call__() method.\n\
112\n\
113Deprecated since release 2.3. Instead, use the extended call syntax:\n\
114 function(*args, **keywords).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000115
116
Guido van Rossum79f25d91997-04-29 20:08:16 +0000117static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000118builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000119{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000120 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000121}
122
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000123PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000124"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000125\n\
126Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000127Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000128
129
Guido van Rossum79f25d91997-04-29 20:08:16 +0000130static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000131builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000132{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000133 PyObject *func, *seq, *result, *it, *arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000134 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000135 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000136
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000137 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000138 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000139
Tim Peters0e57abf2001-05-02 07:39:38 +0000140 /* Strings and tuples return a result of the same type. */
141 if (PyString_Check(seq))
142 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000143#ifdef Py_USING_UNICODE
144 if (PyUnicode_Check(seq))
145 return filterunicode(func, seq);
146#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000147 if (PyTuple_Check(seq))
148 return filtertuple(func, seq);
149
150 /* Get iterator. */
151 it = PyObject_GetIter(seq);
152 if (it == NULL)
153 return NULL;
154
155 /* Guess a result list size. */
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000156 len = PyObject_Size(seq);
157 if (len < 0) {
158 PyErr_Clear();
159 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000160 }
161
Guido van Rossumc7903a12002-08-16 07:04:56 +0000162 /* Pre-allocate argument list tuple. */
163 arg = PyTuple_New(1);
164 if (arg == NULL)
165 goto Fail_arg;
166
Tim Peters0e57abf2001-05-02 07:39:38 +0000167 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000168 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000169 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000170 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000171 result = seq;
172 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000173 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000174 result = PyList_New(len);
175 if (result == NULL)
176 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000177 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000178
Tim Peters0e57abf2001-05-02 07:39:38 +0000179 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000180 j = 0;
181 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000182 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000183 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000184
Tim Peters0e57abf2001-05-02 07:39:38 +0000185 item = PyIter_Next(it);
186 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000187 if (PyErr_Occurred())
188 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000189 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000190 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000191
Neil Schemenauer68973552003-08-14 20:37:34 +0000192 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000193 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000194 }
195 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000196 PyObject *good;
197 PyTuple_SET_ITEM(arg, 0, item);
198 good = PyObject_Call(func, arg, NULL);
199 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000200 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000201 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000202 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000203 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000204 ok = PyObject_IsTrue(good);
205 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000206 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000207 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000208 if (j < len)
209 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000210 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000211 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000212 Py_DECREF(item);
213 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000215 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000217 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 else
219 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000220 }
221
Guido van Rossum12d12c51993-10-26 17:58:25 +0000222
Tim Peters0e57abf2001-05-02 07:39:38 +0000223 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000224 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000225 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000226
Tim Peters3c6b1482001-05-21 08:07:05 +0000227 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000228 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000229 return result;
230
Tim Peters0e57abf2001-05-02 07:39:38 +0000231Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000232 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000233Fail_it:
234 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000235Fail_arg:
236 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000237 return NULL;
238}
239
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000240PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000241"filter(function or None, sequence) -> list, tuple, or string\n"
242"\n"
243"Return those items of sequence for which function(item) is true. If\n"
244"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000245"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000246
Guido van Rossum79f25d91997-04-29 20:08:16 +0000247static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000248builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000249{
250 long x;
251 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000252
Guido van Rossum79f25d91997-04-29 20:08:16 +0000253 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000254 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000255 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256 PyErr_SetString(PyExc_ValueError,
257 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000258 return NULL;
259 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000260 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000262}
263
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000264PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000265"chr(i) -> character\n\
266\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000267Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000268
269
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000270#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000272builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000273{
274 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000275
276 if (!PyArg_ParseTuple(args, "l:unichr", &x))
277 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000278
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000279 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000280}
281
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000282PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000283"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000284\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000285Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000286#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000287
288
289static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000290builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000291{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000292 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000293 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000294
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000295 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000296 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000297 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000298 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000299 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000300}
301
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000302PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000303"cmp(x, y) -> integer\n\
304\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000305Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000306
307
Guido van Rossum79f25d91997-04-29 20:08:16 +0000308static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000309builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000310{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000311 PyObject *v, *w;
312 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000313
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000314 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000315 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000317 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000318 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000319 Py_DECREF(v);
320 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000321 return res;
322}
323
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000324PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000325"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000326\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000327Return a tuple consisting of the two numeric arguments converted to\n\
328a common type, using the same rules as used by arithmetic operations.\n\
329If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000330
Guido van Rossum79f25d91997-04-29 20:08:16 +0000331static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000332builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000333{
334 char *str;
335 char *filename;
336 char *startstr;
337 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000338 int dont_inherit = 0;
339 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000340 PyCompilerFlags cf;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000341 PyObject *result, *cmd, *tmp = NULL;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000342 int length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000343
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000344 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000345 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000346 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000347
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000348 cf.cf_flags = supplied_flags;
349
350#ifdef Py_USING_UNICODE
351 if (PyUnicode_Check(cmd)) {
352 tmp = PyUnicode_AsUTF8String(cmd);
353 if (tmp == NULL)
354 return NULL;
355 cmd = tmp;
356 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
357 }
358#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000359 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
360 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000361 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000362 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000363 "compile() expected string without null bytes");
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000364 return NULL;
365 }
366
Guido van Rossum5b722181993-03-30 17:46:03 +0000367 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000368 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000369 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000370 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000371 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000372 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000373 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000375 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000376 return NULL;
377 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000378
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000379 if (supplied_flags &
380 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT))
381 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000382 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
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000458 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000459 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000460 if (locals != Py_None && !PyMapping_Check(locals)) {
461 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000462 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000463 }
464 if (globals != Py_None && !PyDict_Check(globals)) {
465 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
466 "globals must be a real dict; try eval(expr, {}, mapping)"
467 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000468 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000469 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000470 if (globals == Py_None) {
471 globals = PyEval_GetGlobals();
472 if (locals == Py_None)
473 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000474 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000476 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000477
Guido van Rossum79f25d91997-04-29 20:08:16 +0000478 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
479 if (PyDict_SetItemString(globals, "__builtins__",
480 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000481 return NULL;
482 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000483
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000484 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000485 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000486 PyErr_SetString(PyExc_TypeError,
487 "code object passed to eval() may not contain free variables");
488 return NULL;
489 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000490 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000491 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000492
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000493 if (!PyString_Check(cmd) &&
494 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000495 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000496 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000497 return NULL;
498 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000499 cf.cf_flags = 0;
500
501#ifdef Py_USING_UNICODE
502 if (PyUnicode_Check(cmd)) {
503 tmp = PyUnicode_AsUTF8String(cmd);
504 if (tmp == NULL)
505 return NULL;
506 cmd = tmp;
507 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
508 }
509#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000510 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000511 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512 while (*str == ' ' || *str == '\t')
513 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000514
Tim Peters9fa96be2001-08-17 23:04:59 +0000515 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000516 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
517 Py_XDECREF(tmp);
518 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000519}
520
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000521PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000522"eval(source[, globals[, locals]]) -> value\n\
523\n\
524Evaluate the source in the context of globals and locals.\n\
525The source may be a string representing a Python expression\n\
526or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000527The globals must be a dictionary and locals can be any mappping,\n\
528defaulting to the current globals and locals.\n\
529If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000530
531
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000533builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000534{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536 PyObject *globals = Py_None, *locals = Py_None;
537 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000538 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000539 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000540 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000542 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000543 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000545 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000546 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000547 if (locals != Py_None && !PyMapping_Check(locals)) {
548 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
549 return NULL;
550 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 if (globals == Py_None) {
552 globals = PyEval_GetGlobals();
553 if (locals == Py_None)
554 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000555 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000556 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000557 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000558 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
559 if (PyDict_SetItemString(globals, "__builtins__",
560 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000561 return NULL;
562 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000563
564 exists = 0;
565 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000566#if defined(PLAN9)
567 {
568 Dir *d;
569
570 if ((d = dirstat(filename))!=nil) {
571 if(d->mode & DMDIR)
572 werrstr("is a directory");
573 else
574 exists = 1;
575 free(d);
576 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000577 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000578#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000579 if (object_exists(filename)) {
580 if (isdir(filename))
581 errno = EISDIR;
582 else
583 exists = 1;
584 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000585#else /* standard Posix */
586 {
587 struct stat s;
588 if (stat(filename, &s) == 0) {
589 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000590# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000591 errno = EOS2ERR;
592# else
593 errno = EISDIR;
594# endif
595 else
596 exists = 1;
597 }
598 }
599#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000600
601 if (exists) {
602 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000603 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000604 Py_END_ALLOW_THREADS
605
606 if (fp == NULL) {
607 exists = 0;
608 }
609 }
610
611 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000612 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000613 return NULL;
614 }
Tim Peters5ba58662001-07-16 02:29:45 +0000615 cf.cf_flags = 0;
616 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000617 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000618 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000619 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000620 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000621 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000623}
624
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000625PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000626"execfile(filename[, globals[, locals]])\n\
627\n\
628Read and execute a Python script from a file.\n\
629The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000630globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000631
632
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000634builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000635{
Guido van Rossum950ff291998-06-29 13:38:57 +0000636 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000637 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000638
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000639 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000640 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000641#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000642 if (PyUnicode_Check(name)) {
643 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
644 if (name == NULL)
645 return NULL;
646 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000647#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000648
649 if (!PyString_Check(name)) {
650 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000651 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000652 return NULL;
653 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000654 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000655 if (result == NULL && dflt != NULL &&
656 PyErr_ExceptionMatches(PyExc_AttributeError))
657 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000658 PyErr_Clear();
659 Py_INCREF(dflt);
660 result = dflt;
661 }
662 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000663}
664
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000665PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000666"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000667\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000668Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
669When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000670exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000671
672
Guido van Rossum79f25d91997-04-29 20:08:16 +0000673static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000674builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000675{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000676 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000677
Guido van Rossum79f25d91997-04-29 20:08:16 +0000678 d = PyEval_GetGlobals();
679 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000680 return d;
681}
682
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000683PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000684"globals() -> dictionary\n\
685\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000686Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000687
688
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000690builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000691{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692 PyObject *v;
693 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000694
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000695 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000696 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000697#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000698 if (PyUnicode_Check(name)) {
699 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
700 if (name == NULL)
701 return NULL;
702 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000703#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000704
705 if (!PyString_Check(name)) {
706 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000707 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000708 return NULL;
709 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000711 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000713 Py_INCREF(Py_False);
714 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000715 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000716 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000717 Py_INCREF(Py_True);
718 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000719}
720
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000721PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000722"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000723\n\
724Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000725(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000726
727
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000729builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000730{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000731 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000732}
733
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000734PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000735"id(object) -> integer\n\
736\n\
737Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000738simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000739
740
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000742builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000743{
744 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000745 PyObject *it; /* the iterator object */
746 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000747 } sequence;
748
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000750 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000752 register int i, j;
753
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 PyErr_SetString(PyExc_TypeError,
757 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000758 return NULL;
759 }
760
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000763
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000764 if (func == Py_None && n == 1) {
765 /* map(None, S) is the same as list(S). */
766 return PySequence_List(PyTuple_GetItem(args, 1));
767 }
768
Tim Peters4e9afdc2001-05-03 23:54:49 +0000769 /* Get space for sequence descriptors. Must NULL out the iterator
770 * pointers so that jumping to Fail_2 later doesn't see trash.
771 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
773 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000774 return NULL;
775 }
776 for (i = 0; i < n; ++i) {
777 seqs[i].it = (PyObject*)NULL;
778 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000779 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000780
Tim Peters4e9afdc2001-05-03 23:54:49 +0000781 /* Do a first pass to obtain iterators for the arguments, and set len
782 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000783 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 len = 0;
785 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
786 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000787 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000788
Tim Peters4e9afdc2001-05-03 23:54:49 +0000789 /* Get iterator. */
790 curseq = PyTuple_GetItem(args, i+1);
791 sqp->it = PyObject_GetIter(curseq);
792 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000793 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000794 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000795 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000796 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000798 goto Fail_2;
799 }
800
Tim Peters4e9afdc2001-05-03 23:54:49 +0000801 /* Update len. */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000802 curlen = PyObject_Size(curseq);
803 if (curlen < 0) {
804 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000805 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000806 }
807 if (curlen > len)
808 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000809 }
810
Tim Peters4e9afdc2001-05-03 23:54:49 +0000811 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000813 goto Fail_2;
814
Tim Peters4e9afdc2001-05-03 23:54:49 +0000815 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000816 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000817 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000819
Guido van Rossum79f25d91997-04-29 20:08:16 +0000820 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000821 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000822 else if ((alist = PyTuple_New(n)) == NULL)
823 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000824
825 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000826 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000827 Py_INCREF(Py_None);
828 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000829 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000830 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000831 item = PyIter_Next(sqp->it);
832 if (item)
833 ++numactive;
834 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000835 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000836 Py_XDECREF(alist);
837 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000838 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000839 Py_INCREF(Py_None);
840 item = Py_None;
841 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000842 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000843 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000844 if (alist)
845 PyTuple_SET_ITEM(alist, j, item);
846 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000847 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000848 }
849
Guido van Rossum32120311995-07-10 13:52:21 +0000850 if (!alist)
851 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000852
Tim Peters4e9afdc2001-05-03 23:54:49 +0000853 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000855 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000856 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000857
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000859 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000860 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861 value = PyEval_CallObject(func, alist);
862 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000863 if (value == NULL)
864 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000865 }
866 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000867 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000868 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000869 if (status < 0)
870 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000871 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000872 else if (PyList_SetItem(result, i, value) < 0)
873 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000874 }
875
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000876 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
877 goto Fail_1;
878
Tim Peters4e9afdc2001-05-03 23:54:49 +0000879 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000880
Guido van Rossum12d12c51993-10-26 17:58:25 +0000881Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000883Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000884 result = NULL;
885Succeed:
886 assert(seqs);
887 for (i = 0; i < n; ++i)
888 Py_XDECREF(seqs[i].it);
889 PyMem_DEL(seqs);
890 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000891}
892
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000893PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000894"map(function, sequence[, sequence, ...]) -> list\n\
895\n\
896Return a list of the results of applying the function to the items of\n\
897the argument sequence(s). If more than one sequence is given, the\n\
898function is called with an argument list consisting of the corresponding\n\
899item of each sequence, substituting None for missing values when not all\n\
900sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000901the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902
903
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000905builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000906{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 PyObject *v;
908 PyObject *name;
909 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000910
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000911 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000912 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000914 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 Py_INCREF(Py_None);
916 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000917}
918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920"setattr(object, name, value)\n\
921\n\
922Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000923``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000924
925
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000927builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000928{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929 PyObject *v;
930 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000931
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000932 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000933 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000935 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 Py_INCREF(Py_None);
937 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000938}
939
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000940PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000941"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000942\n\
943Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000944``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000945
946
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000948builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000949{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000950 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000951
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000953 if (x == -1)
954 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000956}
957
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000959"hash(object) -> integer\n\
960\n\
961Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000962the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000963
964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000966builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000967{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +0000969 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000970
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000971 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000972 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000974 "hex() argument can't be converted to hex");
975 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000976 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +0000977 res = (*nb->nb_hex)(v);
978 if (res && !PyString_Check(res)) {
979 PyErr_Format(PyExc_TypeError,
980 "__hex__ returned non-string (type %.200s)",
981 res->ob_type->tp_name);
982 Py_DECREF(res);
983 return NULL;
984 }
985 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000986}
987
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000988PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000989"hex(number) -> string\n\
990\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000991Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000992
993
Tim Petersdbd9ba62000-07-09 03:09:57 +0000994static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000995
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000997builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000998{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001000 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001001 PyObject *res;
1002 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001003 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001004
1005 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001006 if (line == NULL)
1007 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001009 return NULL;
1010 while (*str == ' ' || *str == '\t')
1011 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001012 globals = PyEval_GetGlobals();
1013 locals = PyEval_GetLocals();
1014 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1015 if (PyDict_SetItemString(globals, "__builtins__",
1016 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001017 return NULL;
1018 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001019 cf.cf_flags = 0;
1020 PyEval_MergeCompilerFlags(&cf);
1021 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001022 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001023 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001024}
1025
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001026PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001027"input([prompt]) -> value\n\
1028\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030
1031
Guido van Rossume8811f81997-02-14 15:48:05 +00001032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001033builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001034{
1035 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001036 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001037 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001038 if (!PyString_CheckExact(s)) {
1039 PyErr_SetString(PyExc_TypeError,
1040 "can't intern subclass of string");
1041 return NULL;
1042 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001043 Py_INCREF(s);
1044 PyString_InternInPlace(&s);
1045 return s;
1046}
1047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001048PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001049"intern(string) -> string\n\
1050\n\
1051``Intern'' the given string. This enters the string in the (global)\n\
1052table of interned strings whose purpose is to speed up dictionary lookups.\n\
1053Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001054same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055
1056
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001058builtin_iter(PyObject *self, PyObject *args)
1059{
1060 PyObject *v, *w = NULL;
1061
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001062 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001063 return NULL;
1064 if (w == NULL)
1065 return PyObject_GetIter(v);
1066 if (!PyCallable_Check(v)) {
1067 PyErr_SetString(PyExc_TypeError,
1068 "iter(v, w): v must be callable");
1069 return NULL;
1070 }
1071 return PyCallIter_New(v, w);
1072}
1073
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001075"iter(collection) -> iterator\n\
1076iter(callable, sentinel) -> iterator\n\
1077\n\
1078Get an iterator from an object. In the first form, the argument must\n\
1079supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001080In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001081
1082
1083static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001084builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001085{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001086 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001087
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001088 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001089 if (res < 0 && PyErr_Occurred())
1090 return NULL;
1091 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001092}
1093
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001094PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001095"len(object) -> integer\n\
1096\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001097Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001098
1099
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001101builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001102{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105 d = PyEval_GetLocals();
1106 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001107 return d;
1108}
1109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001110PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001111"locals() -> dictionary\n\
1112\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001113Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001114
1115
Guido van Rossum79f25d91997-04-29 20:08:16 +00001116static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001117min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001118{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001119 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001120 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001123 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001124 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001125 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001126
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001127 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1128 keyfunc = PyDict_GetItemString(kwds, "key");
1129 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1130 PyErr_Format(PyExc_TypeError,
1131 "%s() got an unexpected keyword argument", name);
1132 return NULL;
1133 }
1134 }
1135
Tim Petersc3074532001-05-03 07:00:32 +00001136 it = PyObject_GetIter(v);
1137 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001138 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001139
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001140 maxitem = NULL; /* the result */
1141 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001142 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001143 /* get the value from the key function */
1144 if (keyfunc != NULL) {
1145 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1146 if (val == NULL)
1147 goto Fail_it_item;
1148 }
1149 /* no key function; the value is the item */
1150 else {
1151 val = item;
1152 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001153 }
Tim Petersc3074532001-05-03 07:00:32 +00001154
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001155 /* maximum value and item are unset; set them */
1156 if (maxval == NULL) {
1157 maxitem = item;
1158 maxval = val;
1159 }
1160 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001161 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001162 int cmp = PyObject_RichCompareBool(val, maxval, op);
1163 if (cmp < 0)
1164 goto Fail_it_item_and_val;
1165 else if (cmp > 0) {
1166 Py_DECREF(maxval);
1167 Py_DECREF(maxitem);
1168 maxval = val;
1169 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001170 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001171 else {
1172 Py_DECREF(item);
1173 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001174 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001175 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001176 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001177 if (PyErr_Occurred())
1178 goto Fail_it;
1179 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001180 PyErr_Format(PyExc_ValueError,
1181 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001182 assert(maxitem == NULL);
1183 }
1184 else
1185 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001186 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001187 return maxitem;
1188
1189Fail_it_item_and_val:
1190 Py_DECREF(val);
1191Fail_it_item:
1192 Py_DECREF(item);
1193Fail_it:
1194 Py_XDECREF(maxval);
1195 Py_XDECREF(maxitem);
1196 Py_DECREF(it);
1197 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001198}
1199
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001201builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001202{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001203 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001204}
1205
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001206PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001207"min(iterable[, key=func]) -> value\n\
1208min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001210With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001212
1213
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001215builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001216{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001218}
1219
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001220PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001221"max(iterable[, key=func]) -> value\n\
1222max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001223\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001224With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001225With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226
1227
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001229builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001230{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001231 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001232 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001234 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1235 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001237 "oct() argument can't be converted to oct");
1238 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001239 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001240 res = (*nb->nb_oct)(v);
1241 if (res && !PyString_Check(res)) {
1242 PyErr_Format(PyExc_TypeError,
1243 "__oct__ returned non-string (type %.200s)",
1244 res->ob_type->tp_name);
1245 Py_DECREF(res);
1246 return NULL;
1247 }
1248 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001249}
1250
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001251PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001252"oct(number) -> string\n\
1253\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001254Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001255
1256
Guido van Rossum79f25d91997-04-29 20:08:16 +00001257static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001258builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001259{
Guido van Rossum09095f32000-03-10 23:00:52 +00001260 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001261 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001262
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001263 if (PyString_Check(obj)) {
1264 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001265 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001266 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001267 return PyInt_FromLong(ord);
1268 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001269#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001270 } else if (PyUnicode_Check(obj)) {
1271 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001272 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001273 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001274 return PyInt_FromLong(ord);
1275 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001276#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001277 } else {
1278 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001279 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001280 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001281 return NULL;
1282 }
1283
Guido van Rossumad991772001-01-12 16:03:05 +00001284 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001285 "ord() expected a character, "
1286 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001287 size);
1288 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001289}
1290
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001291PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001292"ord(c) -> integer\n\
1293\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001294Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001295
1296
Guido van Rossum79f25d91997-04-29 20:08:16 +00001297static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001298builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001299{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001300 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001301
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001302 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001303 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001304 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001305}
1306
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001307PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001308"pow(x, y[, z]) -> number\n\
1309\n\
1310With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001311equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001312
1313
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001314
1315/* Return number of items in range (lo, hi, step), when arguments are
1316 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1317 * & only if the true value is too large to fit in a signed long.
1318 * Arguments MUST return 1 with either PyInt_Check() or
1319 * PyLong_Check(). Return -1 when there is an error.
1320 */
1321static long
1322get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1323{
1324 /* -------------------------------------------------------------
1325 Algorithm is equal to that of get_len_of_range(), but it operates
1326 on PyObjects (which are assumed to be PyLong or PyInt objects).
1327 ---------------------------------------------------------------*/
1328 long n;
1329 PyObject *diff = NULL;
1330 PyObject *one = NULL;
1331 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1332 /* holds sub-expression evaluations */
1333
1334 /* if (lo >= hi), return length of 0. */
1335 if (PyObject_Compare(lo, hi) >= 0)
1336 return 0;
1337
1338 if ((one = PyLong_FromLong(1L)) == NULL)
1339 goto Fail;
1340
1341 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1342 goto Fail;
1343
1344 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1345 goto Fail;
1346
1347 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1348 goto Fail;
1349
1350 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1351 goto Fail;
1352
1353 n = PyLong_AsLong(tmp3);
1354 if (PyErr_Occurred()) { /* Check for Overflow */
1355 PyErr_Clear();
1356 goto Fail;
1357 }
1358
1359 Py_DECREF(tmp3);
1360 Py_DECREF(tmp2);
1361 Py_DECREF(diff);
1362 Py_DECREF(tmp1);
1363 Py_DECREF(one);
1364 return n;
1365
1366 Fail:
1367 Py_XDECREF(tmp3);
1368 Py_XDECREF(tmp2);
1369 Py_XDECREF(diff);
1370 Py_XDECREF(tmp1);
1371 Py_XDECREF(one);
1372 return -1;
1373}
1374
1375/* An extension of builtin_range() that handles the case when PyLong
1376 * arguments are given. */
1377static PyObject *
1378handle_range_longs(PyObject *self, PyObject *args)
1379{
1380 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001381 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001382 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001383
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001384 PyObject *curnum = NULL;
1385 PyObject *v = NULL;
1386 long bign;
1387 int i, n;
1388 int cmp_result;
1389
Tim Peters874e1f72003-04-13 22:13:08 +00001390 PyObject *zero = PyLong_FromLong(0);
1391
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001392 if (zero == NULL)
1393 return NULL;
1394
Tim Peters874e1f72003-04-13 22:13:08 +00001395 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1396 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001397 return NULL;
1398 }
1399
Tim Peters874e1f72003-04-13 22:13:08 +00001400 /* Figure out which way we were called, supply defaults, and be
1401 * sure to incref everything so that the decrefs at the end
1402 * are correct.
1403 */
1404 assert(ilow != NULL);
1405 if (ihigh == NULL) {
1406 /* only 1 arg -- it's the upper limit */
1407 ihigh = ilow;
1408 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001409 }
Tim Peters874e1f72003-04-13 22:13:08 +00001410 assert(ihigh != NULL);
1411 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001412
Tim Peters874e1f72003-04-13 22:13:08 +00001413 /* ihigh correct now; do ilow */
1414 if (ilow == NULL)
1415 ilow = zero;
1416 Py_INCREF(ilow);
1417
1418 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001419 if (istep == NULL) {
1420 istep = PyLong_FromLong(1L);
1421 if (istep == NULL)
1422 goto Fail;
1423 }
1424 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001425 Py_INCREF(istep);
1426 }
1427
Tim Peters874e1f72003-04-13 22:13:08 +00001428 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001429 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001430 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001431 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001432 goto Fail;
1433 }
1434
Tim Peters874e1f72003-04-13 22:13:08 +00001435 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001436 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001437 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001438 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001439 goto Fail;
1440 }
1441
1442 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001443 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001444 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001445 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001446 goto Fail;
1447 }
1448
1449 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1450 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001451 if (cmp_result == 0) {
1452 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001453 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001454 goto Fail;
1455 }
1456
1457 if (cmp_result > 0)
1458 bign = get_len_of_range_longs(ilow, ihigh, istep);
1459 else {
1460 PyObject *neg_istep = PyNumber_Negative(istep);
1461 if (neg_istep == NULL)
1462 goto Fail;
1463 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1464 Py_DECREF(neg_istep);
1465 }
1466
1467 n = (int)bign;
1468 if (bign < 0 || (long)n != bign) {
1469 PyErr_SetString(PyExc_OverflowError,
1470 "range() result has too many items");
1471 goto Fail;
1472 }
1473
1474 v = PyList_New(n);
1475 if (v == NULL)
1476 goto Fail;
1477
1478 curnum = ilow;
1479 Py_INCREF(curnum);
1480
1481 for (i = 0; i < n; i++) {
1482 PyObject *w = PyNumber_Long(curnum);
1483 PyObject *tmp_num;
1484 if (w == NULL)
1485 goto Fail;
1486
1487 PyList_SET_ITEM(v, i, w);
1488
1489 tmp_num = PyNumber_Add(curnum, istep);
1490 if (tmp_num == NULL)
1491 goto Fail;
1492
1493 Py_DECREF(curnum);
1494 curnum = tmp_num;
1495 }
Tim Peters874e1f72003-04-13 22:13:08 +00001496 Py_DECREF(ilow);
1497 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001498 Py_DECREF(istep);
1499 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001500 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001501 return v;
1502
1503 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001504 Py_DECREF(ilow);
1505 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001506 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001507 Py_DECREF(zero);
1508 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001509 Py_XDECREF(v);
1510 return NULL;
1511}
1512
Guido van Rossum124eff01999-02-23 16:11:01 +00001513/* Return number of items in range/xrange (lo, hi, step). step > 0
1514 * required. Return a value < 0 if & only if the true value is too
1515 * large to fit in a signed long.
1516 */
1517static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001518get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001519{
1520 /* -------------------------------------------------------------
1521 If lo >= hi, the range is empty.
1522 Else if n values are in the range, the last one is
1523 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1524 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1525 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1526 the RHS is non-negative and so truncation is the same as the
1527 floor. Letting M be the largest positive long, the worst case
1528 for the RHS numerator is hi=M, lo=-M-1, and then
1529 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1530 precision to compute the RHS exactly.
1531 ---------------------------------------------------------------*/
1532 long n = 0;
1533 if (lo < hi) {
1534 unsigned long uhi = (unsigned long)hi;
1535 unsigned long ulo = (unsigned long)lo;
1536 unsigned long diff = uhi - ulo - 1;
1537 n = (long)(diff / (unsigned long)step + 1);
1538 }
1539 return n;
1540}
1541
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001543builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001544{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001545 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001546 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001547 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001548
Guido van Rossum79f25d91997-04-29 20:08:16 +00001549 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001550
Guido van Rossum79f25d91997-04-29 20:08:16 +00001551 if (PyTuple_Size(args) <= 1) {
1552 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001553 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001554 &ihigh)) {
1555 PyErr_Clear();
1556 return handle_range_longs(self, args);
1557 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001558 }
1559 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001560 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001561 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001562 &ilow, &ihigh, &istep)) {
1563 PyErr_Clear();
1564 return handle_range_longs(self, args);
1565 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001566 }
1567 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001568 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001569 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001570 return NULL;
1571 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001572 if (istep > 0)
1573 bign = get_len_of_range(ilow, ihigh, istep);
1574 else
1575 bign = get_len_of_range(ihigh, ilow, -istep);
1576 n = (int)bign;
1577 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001578 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001579 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001580 return NULL;
1581 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001582 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001583 if (v == NULL)
1584 return NULL;
1585 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001586 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001587 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001588 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001589 return NULL;
1590 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001591 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001592 ilow += istep;
1593 }
1594 return v;
1595}
1596
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001597PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001598"range([start,] stop[, step]) -> list of integers\n\
1599\n\
1600Return a list containing an arithmetic progression of integers.\n\
1601range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1602When step is given, it specifies the increment (or decrement).\n\
1603For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001604These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001605
1606
Guido van Rossum79f25d91997-04-29 20:08:16 +00001607static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001608builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001609{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001610 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001611 PyObject *fin = PySys_GetObject("stdin");
1612 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001613
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001614 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001615 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001616
1617 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001618 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001619 return NULL;
1620 }
1621 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001622 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001623 return NULL;
1624 }
1625 if (PyFile_SoftSpace(fout, 0)) {
1626 if (PyFile_WriteString(" ", fout) != 0)
1627 return NULL;
1628 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001629 if (PyFile_Check(fin) && PyFile_Check(fout)
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001630 && isatty(fileno(PyFile_AsFile(fin)))
1631 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001632 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001633 char *prompt;
1634 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001635 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001636 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001637 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001638 if (po == NULL)
1639 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001640 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001641 if (prompt == NULL)
1642 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001643 }
1644 else {
1645 po = NULL;
1646 prompt = "";
1647 }
Michael W. Hudson52db5192004-08-02 13:21:09 +00001648 s = PyOS_Readline(PyFile_AsFile(fin), PyFile_AsFile(fout),
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001649 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001650 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001651 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001652 if (!PyErr_Occurred())
1653 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001654 return NULL;
1655 }
1656 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001658 result = NULL;
1659 }
1660 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001661 size_t len = strlen(s);
1662 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001663 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001664 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001665 result = NULL;
1666 }
1667 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001668 result = PyString_FromStringAndSize(s,
1669 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001670 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001671 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001672 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001673 return result;
1674 }
Guido van Rossum90933611991-06-07 16:10:43 +00001675 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001676 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001677 return NULL;
1678 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001679 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001680}
1681
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001682PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001683"raw_input([prompt]) -> string\n\
1684\n\
1685Read a string from standard input. The trailing newline is stripped.\n\
1686If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1687On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001688is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001689
1690
Guido van Rossum79f25d91997-04-29 20:08:16 +00001691static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001692builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001693{
Tim Peters15d81ef2001-05-04 04:39:21 +00001694 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001695
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001696 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001697 return NULL;
1698 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001699 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001700
Tim Peters15d81ef2001-05-04 04:39:21 +00001701 it = PyObject_GetIter(seq);
1702 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001703 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001704 "reduce() arg 2 must support iteration");
1705 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001706 return NULL;
1707 }
1708
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001710 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001711
Tim Peters15d81ef2001-05-04 04:39:21 +00001712 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001714
1715 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001716 Py_DECREF(args);
1717 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001718 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001719 }
1720
Tim Peters15d81ef2001-05-04 04:39:21 +00001721 op2 = PyIter_Next(it);
1722 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001723 if (PyErr_Occurred())
1724 goto Fail;
1725 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001726 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001727
Guido van Rossum2d951851994-08-29 12:52:16 +00001728 if (result == NULL)
1729 result = op2;
1730 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001731 PyTuple_SetItem(args, 0, result);
1732 PyTuple_SetItem(args, 1, op2);
1733 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001734 goto Fail;
1735 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001736 }
1737
Guido van Rossum79f25d91997-04-29 20:08:16 +00001738 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001739
Guido van Rossum2d951851994-08-29 12:52:16 +00001740 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001742 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001743
Tim Peters15d81ef2001-05-04 04:39:21 +00001744 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001745 return result;
1746
Guido van Rossum2d951851994-08-29 12:52:16 +00001747Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 Py_XDECREF(args);
1749 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001750 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001751 return NULL;
1752}
1753
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001754PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001755"reduce(function, sequence[, initial]) -> value\n\
1756\n\
1757Apply a function of two arguments cumulatively to the items of a sequence,\n\
1758from left to right, so as to reduce the sequence to a single value.\n\
1759For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1760((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1761of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001762sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001763
1764
Guido van Rossum79f25d91997-04-29 20:08:16 +00001765static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001766builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001767{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001769}
1770
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001771PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001772"reload(module) -> module\n\
1773\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001774Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001775
1776
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001778builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001779{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001781}
1782
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001783PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001784"repr(object) -> string\n\
1785\n\
1786Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001787For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001788
1789
Guido van Rossum79f25d91997-04-29 20:08:16 +00001790static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001791builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001792{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001793 double x;
1794 double f;
1795 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001796 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001797
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001799 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001800 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001801 i = abs(ndigits);
1802 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001803 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001804 if (ndigits < 0)
1805 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001806 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001807 x *= f;
1808 if (x >= 0.0)
1809 x = floor(x + 0.5);
1810 else
1811 x = ceil(x - 0.5);
1812 if (ndigits < 0)
1813 x *= f;
1814 else
1815 x /= f;
1816 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001817}
1818
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001819PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001820"round(number[, ndigits]) -> floating point number\n\
1821\n\
1822Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001823This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001824
Raymond Hettinger64958a12003-12-17 20:43:33 +00001825static PyObject *
1826builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1827{
1828 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1829 PyObject *callable;
1830 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1831 long reverse;
1832
1833 if (args != NULL) {
1834 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1835 kwlist, &seq, &compare, &keyfunc, &reverse))
1836 return NULL;
1837 }
1838
1839 newlist = PySequence_List(seq);
1840 if (newlist == NULL)
1841 return NULL;
1842
1843 callable = PyObject_GetAttrString(newlist, "sort");
1844 if (callable == NULL) {
1845 Py_DECREF(newlist);
1846 return NULL;
1847 }
1848
1849 newargs = PyTuple_GetSlice(args, 1, 4);
1850 if (newargs == NULL) {
1851 Py_DECREF(newlist);
1852 Py_DECREF(callable);
1853 return NULL;
1854 }
1855
1856 v = PyObject_Call(callable, newargs, kwds);
1857 Py_DECREF(newargs);
1858 Py_DECREF(callable);
1859 if (v == NULL) {
1860 Py_DECREF(newlist);
1861 return NULL;
1862 }
1863 Py_DECREF(v);
1864 return newlist;
1865}
1866
1867PyDoc_STRVAR(sorted_doc,
1868"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001869
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001871builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001872{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001873 PyObject *v = NULL;
1874 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001875
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001876 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001877 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001878 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001880 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881 if (!PyErr_Occurred())
1882 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001883 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001884 }
1885 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001887 }
1888 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001890 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001891 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001892 "vars() argument must have __dict__ attribute");
1893 return NULL;
1894 }
1895 }
1896 return d;
1897}
1898
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001899PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001900"vars([object]) -> dictionary\n\
1901\n\
1902Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001903With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001904
Alex Martellia70b1912003-04-22 08:12:33 +00001905
1906static PyObject*
1907builtin_sum(PyObject *self, PyObject *args)
1908{
1909 PyObject *seq;
1910 PyObject *result = NULL;
1911 PyObject *temp, *item, *iter;
1912
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001913 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001914 return NULL;
1915
1916 iter = PyObject_GetIter(seq);
1917 if (iter == NULL)
1918 return NULL;
1919
1920 if (result == NULL) {
1921 result = PyInt_FromLong(0);
1922 if (result == NULL) {
1923 Py_DECREF(iter);
1924 return NULL;
1925 }
1926 } else {
1927 /* reject string values for 'start' parameter */
1928 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1929 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001930 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001931 Py_DECREF(iter);
1932 return NULL;
1933 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001934 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001935 }
1936
1937 for(;;) {
1938 item = PyIter_Next(iter);
1939 if (item == NULL) {
1940 /* error, or end-of-sequence */
1941 if (PyErr_Occurred()) {
1942 Py_DECREF(result);
1943 result = NULL;
1944 }
1945 break;
1946 }
Alex Martellia253e182003-10-25 23:24:14 +00001947 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001948 Py_DECREF(result);
1949 Py_DECREF(item);
1950 result = temp;
1951 if (result == NULL)
1952 break;
1953 }
1954 Py_DECREF(iter);
1955 return result;
1956}
1957
1958PyDoc_STRVAR(sum_doc,
1959"sum(sequence, start=0) -> value\n\
1960\n\
1961Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1962of parameter 'start'. When the sequence is empty, returns start.");
1963
1964
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001965static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001966builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001967{
1968 PyObject *inst;
1969 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001970 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001971
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001972 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001973 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001974
Guido van Rossum823649d2001-03-21 18:40:58 +00001975 retval = PyObject_IsInstance(inst, cls);
1976 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001977 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001978 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001979}
1980
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001981PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001982"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001983\n\
1984Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001985With a type as second argument, return whether that is the object's type.\n\
1986The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001987isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001988
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001989
1990static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001991builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001992{
1993 PyObject *derived;
1994 PyObject *cls;
1995 int retval;
1996
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001997 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001998 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001999
Guido van Rossum823649d2001-03-21 18:40:58 +00002000 retval = PyObject_IsSubclass(derived, cls);
2001 if (retval < 0)
2002 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00002003 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002004}
2005
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002006PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002007"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002008\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002009Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2010When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2011is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002012
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002013
Barry Warsawbd599b52000-08-03 15:45:29 +00002014static PyObject*
2015builtin_zip(PyObject *self, PyObject *args)
2016{
2017 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00002018 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002019 int i;
2020 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00002021 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00002022
Raymond Hettingereaef6152003-08-02 07:42:57 +00002023 if (itemsize == 0)
2024 return PyList_New(0);
2025
Barry Warsawbd599b52000-08-03 15:45:29 +00002026 /* args must be a tuple */
2027 assert(PyTuple_Check(args));
2028
Tim Peters39a86c22002-05-12 07:19:38 +00002029 /* Guess at result length: the shortest of the input lengths.
2030 If some argument refuses to say, we refuse to guess too, lest
2031 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00002032 len = -1; /* unknown */
2033 for (i = 0; i < itemsize; ++i) {
2034 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00002035 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00002036 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00002037 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00002038 len = -1;
2039 break;
2040 }
Tim Peters67d687a2002-04-29 21:27:32 +00002041 else if (len < 0 || thislen < len)
2042 len = thislen;
2043 }
2044
Tim Peters8572b4f2001-05-06 01:05:02 +00002045 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002046 if (len < 0)
2047 len = 10; /* arbitrary */
2048 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002049 return NULL;
2050
Tim Peters8572b4f2001-05-06 01:05:02 +00002051 /* obtain iterators */
2052 itlist = PyTuple_New(itemsize);
2053 if (itlist == NULL)
2054 goto Fail_ret;
2055 for (i = 0; i < itemsize; ++i) {
2056 PyObject *item = PyTuple_GET_ITEM(args, i);
2057 PyObject *it = PyObject_GetIter(item);
2058 if (it == NULL) {
2059 if (PyErr_ExceptionMatches(PyExc_TypeError))
2060 PyErr_Format(PyExc_TypeError,
2061 "zip argument #%d must support iteration",
2062 i+1);
2063 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002064 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002065 PyTuple_SET_ITEM(itlist, i, it);
2066 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002067
Tim Peters8572b4f2001-05-06 01:05:02 +00002068 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002069 for (i = 0; ; ++i) {
2070 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002071 PyObject *next = PyTuple_New(itemsize);
2072 if (!next)
2073 goto Fail_ret_itlist;
2074
Tim Peters67d687a2002-04-29 21:27:32 +00002075 for (j = 0; j < itemsize; j++) {
2076 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002077 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002078 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002079 if (PyErr_Occurred()) {
2080 Py_DECREF(ret);
2081 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002082 }
2083 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002084 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002085 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002086 }
Tim Peters67d687a2002-04-29 21:27:32 +00002087 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002088 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002089
Tim Peters67d687a2002-04-29 21:27:32 +00002090 if (i < len)
2091 PyList_SET_ITEM(ret, i, next);
2092 else {
2093 int status = PyList_Append(ret, next);
2094 Py_DECREF(next);
2095 ++len;
2096 if (status < 0)
2097 goto Fail_ret_itlist;
2098 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002099 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002100
Tim Peters67d687a2002-04-29 21:27:32 +00002101Done:
2102 if (ret != NULL && i < len) {
2103 /* The list is too big. */
2104 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2105 return NULL;
2106 }
2107 return ret;
2108
Tim Peters8572b4f2001-05-06 01:05:02 +00002109Fail_ret_itlist:
2110 Py_DECREF(itlist);
2111Fail_ret:
2112 Py_DECREF(ret);
2113 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002114}
2115
2116
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002117PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002118"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2119\n\
2120Return a list of tuples, where each tuple contains the i-th element\n\
2121from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002122in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002123
2124
Guido van Rossum79f25d91997-04-29 20:08:16 +00002125static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002126 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2127 {"abs", builtin_abs, METH_O, abs_doc},
2128 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002129 {"callable", builtin_callable, METH_O, callable_doc},
2130 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2131 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2132 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2133 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2134 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2135 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2136 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2137 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2138 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2139 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2140 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2141 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2142 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2143 {"hash", builtin_hash, METH_O, hash_doc},
2144 {"hex", builtin_hex, METH_O, hex_doc},
2145 {"id", builtin_id, METH_O, id_doc},
2146 {"input", builtin_input, METH_VARARGS, input_doc},
2147 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2148 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2149 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2150 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2151 {"len", builtin_len, METH_O, len_doc},
2152 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2153 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002154 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2155 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002156 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002157 {"ord", builtin_ord, METH_O, ord_doc},
2158 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2159 {"range", builtin_range, METH_VARARGS, range_doc},
2160 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2161 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2162 {"reload", builtin_reload, METH_O, reload_doc},
2163 {"repr", builtin_repr, METH_O, repr_doc},
2164 {"round", builtin_round, METH_VARARGS, round_doc},
2165 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002166 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002167 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002168#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002169 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002170#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002171 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002172 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002173 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002174};
2175
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002176PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002177"Built-in functions, exceptions, and other objects.\n\
2178\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002179Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002180
Guido van Rossum25ce5661997-08-02 03:10:38 +00002181PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002182_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002183{
Fred Drake5550de32000-06-20 04:54:19 +00002184 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002185 mod = Py_InitModule4("__builtin__", builtin_methods,
2186 builtin_doc, (PyObject *)NULL,
2187 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002188 if (mod == NULL)
2189 return NULL;
2190 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002191
Tim Peters7571a0f2003-03-23 17:52:28 +00002192#ifdef Py_TRACE_REFS
2193 /* __builtin__ exposes a number of statically allocated objects
2194 * that, before this code was added in 2.3, never showed up in
2195 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2196 * result, programs leaking references to None and False (etc)
2197 * couldn't be diagnosed by examining sys.getobjects(0).
2198 */
2199#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2200#else
2201#define ADD_TO_ALL(OBJECT) (void)0
2202#endif
2203
Tim Peters4b7625e2001-09-13 21:37:17 +00002204#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002205 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2206 return NULL; \
2207 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002208
2209 SETBUILTIN("None", Py_None);
2210 SETBUILTIN("Ellipsis", Py_Ellipsis);
2211 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002212 SETBUILTIN("False", Py_False);
2213 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002214 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002215 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002216 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002217 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002218#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002219 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002220#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002221 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002222 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002223 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002224 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002225 SETBUILTIN("property", &PyProperty_Type);
2226 SETBUILTIN("int", &PyInt_Type);
2227 SETBUILTIN("list", &PyList_Type);
2228 SETBUILTIN("long", &PyLong_Type);
2229 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002230 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002231 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002232 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002233 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2234 SETBUILTIN("str", &PyString_Type);
2235 SETBUILTIN("super", &PySuper_Type);
2236 SETBUILTIN("tuple", &PyTuple_Type);
2237 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002238 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002239
2240 /* Note that open() is just an alias of file(). */
2241 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002242 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002243#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002244 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002245#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002246 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002247 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2248 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002249 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002250 }
2251 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002252
Guido van Rossum25ce5661997-08-02 03:10:38 +00002253 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002254#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002255#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002256}
2257
Guido van Rossume77a7571993-11-03 15:01:26 +00002258/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002259
Guido van Rossum79f25d91997-04-29 20:08:16 +00002260static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002261filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002262{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002263 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002264 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002265 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002266
Guido van Rossumb7b45621995-08-04 04:07:45 +00002267 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002268 if (PyTuple_CheckExact(tuple))
2269 Py_INCREF(tuple);
2270 else
2271 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002272 return tuple;
2273 }
2274
Guido van Rossum79f25d91997-04-29 20:08:16 +00002275 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002276 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002277
Guido van Rossum12d12c51993-10-26 17:58:25 +00002278 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002279 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002280 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002281
Walter Dörwald8dd19322003-02-10 17:36:40 +00002282 if (tuple->ob_type->tp_as_sequence &&
2283 tuple->ob_type->tp_as_sequence->sq_item) {
2284 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002285 if (item == NULL)
2286 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002287 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002288 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002289 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002290 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002291 if (func == Py_None) {
2292 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002293 good = item;
2294 }
2295 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002296 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002297 if (arg == NULL) {
2298 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002299 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002300 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002301 good = PyEval_CallObject(func, arg);
2302 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002303 if (good == NULL) {
2304 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002305 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002306 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002307 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002308 ok = PyObject_IsTrue(good);
2309 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002310 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002311 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002312 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002313 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002314 else
2315 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002316 }
2317
Tim Peters4324aa32001-05-28 22:30:08 +00002318 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002319 return NULL;
2320
Guido van Rossum12d12c51993-10-26 17:58:25 +00002321 return result;
2322
Guido van Rossum12d12c51993-10-26 17:58:25 +00002323Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002324 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002325 return NULL;
2326}
2327
2328
Guido van Rossume77a7571993-11-03 15:01:26 +00002329/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002330
Guido van Rossum79f25d91997-04-29 20:08:16 +00002331static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002332filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002333{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002334 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002335 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002336 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002337 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002338
Guido van Rossum79f25d91997-04-29 20:08:16 +00002339 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002340 /* If it's a real string we can return the original,
2341 * as no character is ever false and __getitem__
2342 * does return this character. If it's a subclass
2343 * we must go through the __getitem__ loop */
2344 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002345 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002346 return strobj;
2347 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002350 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351
Guido van Rossum12d12c51993-10-26 17:58:25 +00002352 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002353 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002354 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002356 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2357 if (item == NULL)
2358 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002359 if (func==Py_None) {
2360 ok = 1;
2361 } else {
2362 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002363 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002364 if (arg == NULL) {
2365 Py_DECREF(item);
2366 goto Fail_1;
2367 }
2368 good = PyEval_CallObject(func, arg);
2369 Py_DECREF(arg);
2370 if (good == NULL) {
2371 Py_DECREF(item);
2372 goto Fail_1;
2373 }
2374 ok = PyObject_IsTrue(good);
2375 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002376 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002377 if (ok) {
2378 int reslen;
2379 if (!PyString_Check(item)) {
2380 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2381 " __getitem__ returned different type");
2382 Py_DECREF(item);
2383 goto Fail_1;
2384 }
2385 reslen = PyString_GET_SIZE(item);
2386 if (reslen == 1) {
2387 PyString_AS_STRING(result)[j++] =
2388 PyString_AS_STRING(item)[0];
2389 } else {
2390 /* do we need more space? */
2391 int need = j + reslen + len-i-1;
2392 if (need > outlen) {
2393 /* overallocate, to avoid reallocations */
2394 if (need<2*outlen)
2395 need = 2*outlen;
2396 if (_PyString_Resize(&result, need)) {
2397 Py_DECREF(item);
2398 return NULL;
2399 }
2400 outlen = need;
2401 }
2402 memcpy(
2403 PyString_AS_STRING(result) + j,
2404 PyString_AS_STRING(item),
2405 reslen
2406 );
2407 j += reslen;
2408 }
2409 }
Tim Peters388ed082001-04-07 20:34:48 +00002410 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002411 }
2412
Walter Dörwald903f1e02003-02-04 16:28:00 +00002413 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002414 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002415
Guido van Rossum12d12c51993-10-26 17:58:25 +00002416 return result;
2417
Guido van Rossum12d12c51993-10-26 17:58:25 +00002418Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002419 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002420 return NULL;
2421}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002422
2423#ifdef Py_USING_UNICODE
2424/* Helper for filter(): filter a Unicode object through a function */
2425
2426static PyObject *
2427filterunicode(PyObject *func, PyObject *strobj)
2428{
2429 PyObject *result;
2430 register int i, j;
2431 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002432 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002433
2434 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002435 /* If it's a real string we can return the original,
2436 * as no character is ever false and __getitem__
2437 * does return this character. If it's a subclass
2438 * we must go through the __getitem__ loop */
2439 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002440 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002441 return strobj;
2442 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002443 }
2444 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2445 return NULL;
2446
2447 for (i = j = 0; i < len; ++i) {
2448 PyObject *item, *arg, *good;
2449 int ok;
2450
2451 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2452 if (item == NULL)
2453 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002454 if (func == Py_None) {
2455 ok = 1;
2456 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002457 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002458 if (arg == NULL) {
2459 Py_DECREF(item);
2460 goto Fail_1;
2461 }
2462 good = PyEval_CallObject(func, arg);
2463 Py_DECREF(arg);
2464 if (good == NULL) {
2465 Py_DECREF(item);
2466 goto Fail_1;
2467 }
2468 ok = PyObject_IsTrue(good);
2469 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002470 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002471 if (ok) {
2472 int reslen;
2473 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002474 PyErr_SetString(PyExc_TypeError,
2475 "can't filter unicode to unicode:"
2476 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002477 Py_DECREF(item);
2478 goto Fail_1;
2479 }
2480 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002481 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002482 PyUnicode_AS_UNICODE(result)[j++] =
2483 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002484 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002485 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002486 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002487 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002488 /* overallocate,
2489 to avoid reallocations */
2490 if (need < 2 * outlen)
2491 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002492 if (PyUnicode_Resize(
2493 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002494 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002495 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002496 }
2497 outlen = need;
2498 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002499 memcpy(PyUnicode_AS_UNICODE(result) + j,
2500 PyUnicode_AS_UNICODE(item),
2501 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002502 j += reslen;
2503 }
2504 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002505 Py_DECREF(item);
2506 }
2507
Walter Dörwald903f1e02003-02-04 16:28:00 +00002508 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002509 PyUnicode_Resize(&result, j);
2510
2511 return result;
2512
2513Fail_1:
2514 Py_DECREF(result);
2515 return NULL;
2516}
2517#endif