blob: 4143681b8a318ecfa88ab9dd869cf06647606e95 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossume2ae77b2001-10-24 20:42:55 +000012#ifdef RISCOS
13#include "unixstuff.h"
14#endif
15
Mark Hammond26cffde42001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000019#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-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,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000325"coerce(x, y) -> None or (x1, y1)\n\
326\n\
327When x and y can be coerced to values of the same type, return a tuple\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000328containing the coerced values. When they can't be coerced, return None.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000329
330
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
Guido van Rossum79f25d91997-04-29 20:08:16 +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,
545 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000546 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000547 if (globals == Py_None) {
548 globals = PyEval_GetGlobals();
549 if (locals == Py_None)
550 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000551 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000553 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
555 if (PyDict_SetItemString(globals, "__builtins__",
556 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000557 return NULL;
558 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000559
560 exists = 0;
561 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000562#if defined(PLAN9)
563 {
564 Dir *d;
565
566 if ((d = dirstat(filename))!=nil) {
567 if(d->mode & DMDIR)
568 werrstr("is a directory");
569 else
570 exists = 1;
571 free(d);
572 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000573 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000574#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000575 if (object_exists(filename)) {
576 if (isdir(filename))
577 errno = EISDIR;
578 else
579 exists = 1;
580 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000581#else /* standard Posix */
582 {
583 struct stat s;
584 if (stat(filename, &s) == 0) {
585 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000586# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000587 errno = EOS2ERR;
588# else
589 errno = EISDIR;
590# endif
591 else
592 exists = 1;
593 }
594 }
595#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000596
597 if (exists) {
598 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000599 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000600 Py_END_ALLOW_THREADS
601
602 if (fp == NULL) {
603 exists = 0;
604 }
605 }
606
607 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000608 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000609 return NULL;
610 }
Tim Peters5ba58662001-07-16 02:29:45 +0000611 cf.cf_flags = 0;
612 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000613 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000614 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000615 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000616 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000617 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000618 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000619}
620
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000621PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000622"execfile(filename[, globals[, locals]])\n\
623\n\
624Read and execute a Python script from a file.\n\
625The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000626globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000627
628
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000630builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000631{
Guido van Rossum950ff291998-06-29 13:38:57 +0000632 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000634
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000635 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000636 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000637#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000638 if (PyUnicode_Check(name)) {
639 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
640 if (name == NULL)
641 return NULL;
642 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000643#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000644
645 if (!PyString_Check(name)) {
646 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000647 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000648 return NULL;
649 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000650 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000651 if (result == NULL && dflt != NULL &&
652 PyErr_ExceptionMatches(PyExc_AttributeError))
653 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000654 PyErr_Clear();
655 Py_INCREF(dflt);
656 result = dflt;
657 }
658 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000659}
660
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000661PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000662"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000663\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000664Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
665When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000666exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000667
668
Guido van Rossum79f25d91997-04-29 20:08:16 +0000669static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000670builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000671{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000672 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000673
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 d = PyEval_GetGlobals();
675 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000676 return d;
677}
678
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000679PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000680"globals() -> dictionary\n\
681\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000682Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000683
684
Guido van Rossum79f25d91997-04-29 20:08:16 +0000685static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000686builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000687{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688 PyObject *v;
689 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000690
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000691 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000692 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000693#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000694 if (PyUnicode_Check(name)) {
695 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
696 if (name == NULL)
697 return NULL;
698 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000699#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000700
701 if (!PyString_Check(name)) {
702 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000703 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000704 return NULL;
705 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000707 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000709 Py_INCREF(Py_False);
710 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000711 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000713 Py_INCREF(Py_True);
714 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000715}
716
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000718"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000719\n\
720Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000721(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000722
723
Guido van Rossum79f25d91997-04-29 20:08:16 +0000724static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000725builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000726{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000727 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000728}
729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731"id(object) -> integer\n\
732\n\
733Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000734simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000735
736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000738builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000739{
740 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000741 PyObject *it; /* the iterator object */
742 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000743 } sequence;
744
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000746 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000747 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000748 register int i, j;
749
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000752 PyErr_SetString(PyExc_TypeError,
753 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000754 return NULL;
755 }
756
Guido van Rossum79f25d91997-04-29 20:08:16 +0000757 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000758 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000759
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000760 if (func == Py_None && n == 1) {
761 /* map(None, S) is the same as list(S). */
762 return PySequence_List(PyTuple_GetItem(args, 1));
763 }
764
Tim Peters4e9afdc2001-05-03 23:54:49 +0000765 /* Get space for sequence descriptors. Must NULL out the iterator
766 * pointers so that jumping to Fail_2 later doesn't see trash.
767 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
769 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000770 return NULL;
771 }
772 for (i = 0; i < n; ++i) {
773 seqs[i].it = (PyObject*)NULL;
774 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000775 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000776
Tim Peters4e9afdc2001-05-03 23:54:49 +0000777 /* Do a first pass to obtain iterators for the arguments, and set len
778 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000779 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000780 len = 0;
781 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
782 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000783 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000784
Tim Peters4e9afdc2001-05-03 23:54:49 +0000785 /* Get iterator. */
786 curseq = PyTuple_GetItem(args, i+1);
787 sqp->it = PyObject_GetIter(curseq);
788 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000789 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000790 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000791 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000792 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000794 goto Fail_2;
795 }
796
Tim Peters4e9afdc2001-05-03 23:54:49 +0000797 /* Update len. */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000798 curlen = PyObject_Size(curseq);
799 if (curlen < 0) {
800 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000801 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000802 }
803 if (curlen > len)
804 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000805 }
806
Tim Peters4e9afdc2001-05-03 23:54:49 +0000807 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000809 goto Fail_2;
810
Tim Peters4e9afdc2001-05-03 23:54:49 +0000811 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000812 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000814 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000815
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000817 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 else if ((alist = PyTuple_New(n)) == NULL)
819 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000820
821 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000822 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000823 Py_INCREF(Py_None);
824 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000826 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000827 item = PyIter_Next(sqp->it);
828 if (item)
829 ++numactive;
830 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000831 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000832 Py_XDECREF(alist);
833 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000834 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000835 Py_INCREF(Py_None);
836 item = Py_None;
837 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000838 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000839 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000840 if (alist)
841 PyTuple_SET_ITEM(alist, j, item);
842 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000843 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000844 }
845
Guido van Rossum32120311995-07-10 13:52:21 +0000846 if (!alist)
847 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000848
Tim Peters4e9afdc2001-05-03 23:54:49 +0000849 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000851 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000852 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000853
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000855 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000856 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000857 value = PyEval_CallObject(func, alist);
858 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000859 if (value == NULL)
860 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000861 }
862 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000863 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000864 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000865 if (status < 0)
866 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000867 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000868 else if (PyList_SetItem(result, i, value) < 0)
869 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000870 }
871
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000872 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
873 goto Fail_1;
874
Tim Peters4e9afdc2001-05-03 23:54:49 +0000875 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876
Guido van Rossum12d12c51993-10-26 17:58:25 +0000877Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000878 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000879Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000880 result = NULL;
881Succeed:
882 assert(seqs);
883 for (i = 0; i < n; ++i)
884 Py_XDECREF(seqs[i].it);
885 PyMem_DEL(seqs);
886 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000887}
888
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000889PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890"map(function, sequence[, sequence, ...]) -> list\n\
891\n\
892Return a list of the results of applying the function to the items of\n\
893the argument sequence(s). If more than one sequence is given, the\n\
894function is called with an argument list consisting of the corresponding\n\
895item of each sequence, substituting None for missing values when not all\n\
896sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000897the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898
899
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000901builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000902{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903 PyObject *v;
904 PyObject *name;
905 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000906
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000907 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000908 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000910 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 Py_INCREF(Py_None);
912 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000913}
914
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000915PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000916"setattr(object, name, value)\n\
917\n\
918Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000920
921
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000923builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000924{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925 PyObject *v;
926 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000927
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000928 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000929 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000931 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 Py_INCREF(Py_None);
933 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000934}
935
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000937"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000938\n\
939Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000940``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000941
942
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000944builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000946 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000949 if (x == -1)
950 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000952}
953
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000954PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000955"hash(object) -> integer\n\
956\n\
957Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000959
960
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000962builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000963{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +0000965 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000967 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000968 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000970 "hex() argument can't be converted to hex");
971 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000972 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +0000973 res = (*nb->nb_hex)(v);
974 if (res && !PyString_Check(res)) {
975 PyErr_Format(PyExc_TypeError,
976 "__hex__ returned non-string (type %.200s)",
977 res->ob_type->tp_name);
978 Py_DECREF(res);
979 return NULL;
980 }
981 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000982}
983
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000984PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000985"hex(number) -> string\n\
986\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000987Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000988
989
Tim Petersdbd9ba62000-07-09 03:09:57 +0000990static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000991
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000993builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000994{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000997 PyObject *res;
998 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +0000999 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001000
1001 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001002 if (line == NULL)
1003 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001005 return NULL;
1006 while (*str == ' ' || *str == '\t')
1007 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 globals = PyEval_GetGlobals();
1009 locals = PyEval_GetLocals();
1010 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1011 if (PyDict_SetItemString(globals, "__builtins__",
1012 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001013 return NULL;
1014 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001015 cf.cf_flags = 0;
1016 PyEval_MergeCompilerFlags(&cf);
1017 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001018 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001019 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001020}
1021
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001022PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001023"input([prompt]) -> value\n\
1024\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001025Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001026
1027
Guido van Rossume8811f81997-02-14 15:48:05 +00001028static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001029builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001030{
1031 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001032 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001033 return NULL;
1034 Py_INCREF(s);
1035 PyString_InternInPlace(&s);
1036 return s;
1037}
1038
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001039PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001040"intern(string) -> string\n\
1041\n\
1042``Intern'' the given string. This enters the string in the (global)\n\
1043table of interned strings whose purpose is to speed up dictionary lookups.\n\
1044Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001045same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001046
1047
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001049builtin_iter(PyObject *self, PyObject *args)
1050{
1051 PyObject *v, *w = NULL;
1052
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001053 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001054 return NULL;
1055 if (w == NULL)
1056 return PyObject_GetIter(v);
1057 if (!PyCallable_Check(v)) {
1058 PyErr_SetString(PyExc_TypeError,
1059 "iter(v, w): v must be callable");
1060 return NULL;
1061 }
1062 return PyCallIter_New(v, w);
1063}
1064
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001065PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001066"iter(collection) -> iterator\n\
1067iter(callable, sentinel) -> iterator\n\
1068\n\
1069Get an iterator from an object. In the first form, the argument must\n\
1070supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001071In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001072
1073
1074static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001075builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001076{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001077 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001078
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001079 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001080 if (res < 0 && PyErr_Occurred())
1081 return NULL;
1082 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001083}
1084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001085PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001086"len(object) -> integer\n\
1087\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001089
1090
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001092builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001093{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001095
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 d = PyEval_GetLocals();
1097 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001098 return d;
1099}
1100
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001101PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001102"locals() -> dictionary\n\
1103\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001104Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001105
1106
Guido van Rossum79f25d91997-04-29 20:08:16 +00001107static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001108min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001109{
Tim Petersc3074532001-05-03 07:00:32 +00001110 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001111
Guido van Rossum79f25d91997-04-29 20:08:16 +00001112 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001113 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001114 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001115 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001116
Tim Petersc3074532001-05-03 07:00:32 +00001117 it = PyObject_GetIter(v);
1118 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001119 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001120
1121 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001122 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001123 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001124 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001125 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001126 Py_XDECREF(w);
1127 Py_DECREF(it);
1128 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001129 }
Tim Petersc3074532001-05-03 07:00:32 +00001130 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001131 }
Tim Petersc3074532001-05-03 07:00:32 +00001132
Guido van Rossum2d951851994-08-29 12:52:16 +00001133 if (w == NULL)
1134 w = x;
1135 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001136 int cmp = PyObject_RichCompareBool(x, w, op);
1137 if (cmp > 0) {
1138 Py_DECREF(w);
1139 w = x;
1140 }
1141 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001142 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001143 Py_DECREF(w);
1144 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001145 return NULL;
1146 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001147 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001149 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001150 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001151 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001153 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001154 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001155 return w;
1156}
1157
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001159builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001160{
Guido van Rossum53451b32001-01-17 15:47:24 +00001161 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001162}
1163
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001164PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165"min(sequence) -> value\n\
1166min(a, b, c, ...) -> value\n\
1167\n\
1168With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001169With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001170
1171
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001173builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001174{
Guido van Rossum53451b32001-01-17 15:47:24 +00001175 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001176}
1177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001178PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179"max(sequence) -> value\n\
1180max(a, b, c, ...) -> value\n\
1181\n\
1182With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001183With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184
1185
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001187builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001188{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001190 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001191
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001192 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1193 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001194 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001195 "oct() argument can't be converted to oct");
1196 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001197 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001198 res = (*nb->nb_oct)(v);
1199 if (res && !PyString_Check(res)) {
1200 PyErr_Format(PyExc_TypeError,
1201 "__oct__ returned non-string (type %.200s)",
1202 res->ob_type->tp_name);
1203 Py_DECREF(res);
1204 return NULL;
1205 }
1206 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001207}
1208
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001209PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001210"oct(number) -> string\n\
1211\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001212Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001213
1214
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001216builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001217{
Guido van Rossum09095f32000-03-10 23:00:52 +00001218 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001219 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001221 if (PyString_Check(obj)) {
1222 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001223 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001224 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001225 return PyInt_FromLong(ord);
1226 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001227#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001228 } else if (PyUnicode_Check(obj)) {
1229 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001230 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001231 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001232 return PyInt_FromLong(ord);
1233 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001234#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001235 } else {
1236 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001237 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001238 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001239 return NULL;
1240 }
1241
Guido van Rossumad991772001-01-12 16:03:05 +00001242 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001243 "ord() expected a character, "
1244 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001245 size);
1246 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001247}
1248
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001249PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001250"ord(c) -> integer\n\
1251\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001252Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253
1254
Guido van Rossum79f25d91997-04-29 20:08:16 +00001255static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001256builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001257{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001258 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001259
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001260 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001261 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001262 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001263}
1264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001265PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001266"pow(x, y[, z]) -> number\n\
1267\n\
1268With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001269equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001270
1271
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001272
1273/* Return number of items in range (lo, hi, step), when arguments are
1274 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1275 * & only if the true value is too large to fit in a signed long.
1276 * Arguments MUST return 1 with either PyInt_Check() or
1277 * PyLong_Check(). Return -1 when there is an error.
1278 */
1279static long
1280get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1281{
1282 /* -------------------------------------------------------------
1283 Algorithm is equal to that of get_len_of_range(), but it operates
1284 on PyObjects (which are assumed to be PyLong or PyInt objects).
1285 ---------------------------------------------------------------*/
1286 long n;
1287 PyObject *diff = NULL;
1288 PyObject *one = NULL;
1289 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1290 /* holds sub-expression evaluations */
1291
1292 /* if (lo >= hi), return length of 0. */
1293 if (PyObject_Compare(lo, hi) >= 0)
1294 return 0;
1295
1296 if ((one = PyLong_FromLong(1L)) == NULL)
1297 goto Fail;
1298
1299 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1300 goto Fail;
1301
1302 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1303 goto Fail;
1304
1305 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1306 goto Fail;
1307
1308 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1309 goto Fail;
1310
1311 n = PyLong_AsLong(tmp3);
1312 if (PyErr_Occurred()) { /* Check for Overflow */
1313 PyErr_Clear();
1314 goto Fail;
1315 }
1316
1317 Py_DECREF(tmp3);
1318 Py_DECREF(tmp2);
1319 Py_DECREF(diff);
1320 Py_DECREF(tmp1);
1321 Py_DECREF(one);
1322 return n;
1323
1324 Fail:
1325 Py_XDECREF(tmp3);
1326 Py_XDECREF(tmp2);
1327 Py_XDECREF(diff);
1328 Py_XDECREF(tmp1);
1329 Py_XDECREF(one);
1330 return -1;
1331}
1332
1333/* An extension of builtin_range() that handles the case when PyLong
1334 * arguments are given. */
1335static PyObject *
1336handle_range_longs(PyObject *self, PyObject *args)
1337{
1338 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001339 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001340 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001341
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001342 PyObject *curnum = NULL;
1343 PyObject *v = NULL;
1344 long bign;
1345 int i, n;
1346 int cmp_result;
1347
Tim Peters874e1f72003-04-13 22:13:08 +00001348 PyObject *zero = PyLong_FromLong(0);
1349
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001350 if (zero == NULL)
1351 return NULL;
1352
Tim Peters874e1f72003-04-13 22:13:08 +00001353 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1354 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001355 return NULL;
1356 }
1357
Tim Peters874e1f72003-04-13 22:13:08 +00001358 /* Figure out which way we were called, supply defaults, and be
1359 * sure to incref everything so that the decrefs at the end
1360 * are correct.
1361 */
1362 assert(ilow != NULL);
1363 if (ihigh == NULL) {
1364 /* only 1 arg -- it's the upper limit */
1365 ihigh = ilow;
1366 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001367 }
Tim Peters874e1f72003-04-13 22:13:08 +00001368 assert(ihigh != NULL);
1369 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001370
Tim Peters874e1f72003-04-13 22:13:08 +00001371 /* ihigh correct now; do ilow */
1372 if (ilow == NULL)
1373 ilow = zero;
1374 Py_INCREF(ilow);
1375
1376 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001377 if (istep == NULL) {
1378 istep = PyLong_FromLong(1L);
1379 if (istep == NULL)
1380 goto Fail;
1381 }
1382 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001383 Py_INCREF(istep);
1384 }
1385
Tim Peters874e1f72003-04-13 22:13:08 +00001386 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001387 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001388 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001389 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001390 goto Fail;
1391 }
1392
Tim Peters874e1f72003-04-13 22:13:08 +00001393 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001394 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001395 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001396 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001397 goto Fail;
1398 }
1399
1400 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001401 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001402 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001403 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001404 goto Fail;
1405 }
1406
1407 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1408 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001409 if (cmp_result == 0) {
1410 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001411 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001412 goto Fail;
1413 }
1414
1415 if (cmp_result > 0)
1416 bign = get_len_of_range_longs(ilow, ihigh, istep);
1417 else {
1418 PyObject *neg_istep = PyNumber_Negative(istep);
1419 if (neg_istep == NULL)
1420 goto Fail;
1421 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1422 Py_DECREF(neg_istep);
1423 }
1424
1425 n = (int)bign;
1426 if (bign < 0 || (long)n != bign) {
1427 PyErr_SetString(PyExc_OverflowError,
1428 "range() result has too many items");
1429 goto Fail;
1430 }
1431
1432 v = PyList_New(n);
1433 if (v == NULL)
1434 goto Fail;
1435
1436 curnum = ilow;
1437 Py_INCREF(curnum);
1438
1439 for (i = 0; i < n; i++) {
1440 PyObject *w = PyNumber_Long(curnum);
1441 PyObject *tmp_num;
1442 if (w == NULL)
1443 goto Fail;
1444
1445 PyList_SET_ITEM(v, i, w);
1446
1447 tmp_num = PyNumber_Add(curnum, istep);
1448 if (tmp_num == NULL)
1449 goto Fail;
1450
1451 Py_DECREF(curnum);
1452 curnum = tmp_num;
1453 }
Tim Peters874e1f72003-04-13 22:13:08 +00001454 Py_DECREF(ilow);
1455 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001456 Py_DECREF(istep);
1457 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001458 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001459 return v;
1460
1461 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001462 Py_DECREF(ilow);
1463 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001464 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001465 Py_DECREF(zero);
1466 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001467 Py_XDECREF(v);
1468 return NULL;
1469}
1470
Guido van Rossum124eff01999-02-23 16:11:01 +00001471/* Return number of items in range/xrange (lo, hi, step). step > 0
1472 * required. Return a value < 0 if & only if the true value is too
1473 * large to fit in a signed long.
1474 */
1475static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001476get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001477{
1478 /* -------------------------------------------------------------
1479 If lo >= hi, the range is empty.
1480 Else if n values are in the range, the last one is
1481 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1482 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1483 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1484 the RHS is non-negative and so truncation is the same as the
1485 floor. Letting M be the largest positive long, the worst case
1486 for the RHS numerator is hi=M, lo=-M-1, and then
1487 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1488 precision to compute the RHS exactly.
1489 ---------------------------------------------------------------*/
1490 long n = 0;
1491 if (lo < hi) {
1492 unsigned long uhi = (unsigned long)hi;
1493 unsigned long ulo = (unsigned long)lo;
1494 unsigned long diff = uhi - ulo - 1;
1495 n = (long)(diff / (unsigned long)step + 1);
1496 }
1497 return n;
1498}
1499
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001501builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001502{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001503 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001504 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001505 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001506
Guido van Rossum79f25d91997-04-29 20:08:16 +00001507 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001508
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509 if (PyTuple_Size(args) <= 1) {
1510 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001511 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001512 &ihigh)) {
1513 PyErr_Clear();
1514 return handle_range_longs(self, args);
1515 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001516 }
1517 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001518 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001519 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001520 &ilow, &ihigh, &istep)) {
1521 PyErr_Clear();
1522 return handle_range_longs(self, args);
1523 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001524 }
1525 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001526 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001527 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001528 return NULL;
1529 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001530 if (istep > 0)
1531 bign = get_len_of_range(ilow, ihigh, istep);
1532 else
1533 bign = get_len_of_range(ihigh, ilow, -istep);
1534 n = (int)bign;
1535 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001536 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001537 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001538 return NULL;
1539 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001540 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001541 if (v == NULL)
1542 return NULL;
1543 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001545 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001546 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001547 return NULL;
1548 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001549 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001550 ilow += istep;
1551 }
1552 return v;
1553}
1554
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001555PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001556"range([start,] stop[, step]) -> list of integers\n\
1557\n\
1558Return a list containing an arithmetic progression of integers.\n\
1559range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1560When step is given, it specifies the increment (or decrement).\n\
1561For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001562These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001563
1564
Guido van Rossum79f25d91997-04-29 20:08:16 +00001565static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001566builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001567{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001569 PyObject *fin = PySys_GetObject("stdin");
1570 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001571
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001572 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001573 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001574
1575 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001576 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001577 return NULL;
1578 }
1579 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001580 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001581 return NULL;
1582 }
1583 if (PyFile_SoftSpace(fout, 0)) {
1584 if (PyFile_WriteString(" ", fout) != 0)
1585 return NULL;
1586 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001587 if (PyFile_Check (fin) && PyFile_Check (fout)
1588 && isatty(fileno(PyFile_AsFile(fin)))
1589 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001590 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001591 char *prompt;
1592 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001593 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001594 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001595 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001596 if (po == NULL)
1597 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001598 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001599 if (prompt == NULL)
1600 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001601 }
1602 else {
1603 po = NULL;
1604 prompt = "";
1605 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001606 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1607 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001608 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001609 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001610 if (!PyErr_Occurred())
1611 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001612 return NULL;
1613 }
1614 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001615 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001616 result = NULL;
1617 }
1618 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001619 size_t len = strlen(s);
1620 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001621 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001622 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001623 result = NULL;
1624 }
1625 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001626 result = PyString_FromStringAndSize(s,
1627 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001628 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001629 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001630 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001631 return result;
1632 }
Guido van Rossum90933611991-06-07 16:10:43 +00001633 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001634 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001635 return NULL;
1636 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001637 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001638}
1639
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001640PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001641"raw_input([prompt]) -> string\n\
1642\n\
1643Read a string from standard input. The trailing newline is stripped.\n\
1644If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1645On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001646is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001647
1648
Guido van Rossum79f25d91997-04-29 20:08:16 +00001649static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001650builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001651{
Tim Peters15d81ef2001-05-04 04:39:21 +00001652 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001653
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001654 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001655 return NULL;
1656 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001658
Tim Peters15d81ef2001-05-04 04:39:21 +00001659 it = PyObject_GetIter(seq);
1660 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001661 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001662 "reduce() arg 2 must support iteration");
1663 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001664 return NULL;
1665 }
1666
Guido van Rossum79f25d91997-04-29 20:08:16 +00001667 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001668 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001669
Tim Peters15d81ef2001-05-04 04:39:21 +00001670 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001671 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001672
1673 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001674 Py_DECREF(args);
1675 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001676 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001677 }
1678
Tim Peters15d81ef2001-05-04 04:39:21 +00001679 op2 = PyIter_Next(it);
1680 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001681 if (PyErr_Occurred())
1682 goto Fail;
1683 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001684 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001685
Guido van Rossum2d951851994-08-29 12:52:16 +00001686 if (result == NULL)
1687 result = op2;
1688 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689 PyTuple_SetItem(args, 0, result);
1690 PyTuple_SetItem(args, 1, op2);
1691 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001692 goto Fail;
1693 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001694 }
1695
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001697
Guido van Rossum2d951851994-08-29 12:52:16 +00001698 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001699 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001700 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001701
Tim Peters15d81ef2001-05-04 04:39:21 +00001702 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001703 return result;
1704
Guido van Rossum2d951851994-08-29 12:52:16 +00001705Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706 Py_XDECREF(args);
1707 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001708 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001709 return NULL;
1710}
1711
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001712PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001713"reduce(function, sequence[, initial]) -> value\n\
1714\n\
1715Apply a function of two arguments cumulatively to the items of a sequence,\n\
1716from left to right, so as to reduce the sequence to a single value.\n\
1717For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1718((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1719of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001720sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001721
1722
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001724builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001725{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001726 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001727}
1728
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001729PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001730"reload(module) -> module\n\
1731\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001732Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001733
1734
Guido van Rossum79f25d91997-04-29 20:08:16 +00001735static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001736builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001737{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001738 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001739}
1740
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001741PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001742"repr(object) -> string\n\
1743\n\
1744Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001745For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001746
1747
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001749builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001750{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001751 double x;
1752 double f;
1753 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001754 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001755
Guido van Rossum79f25d91997-04-29 20:08:16 +00001756 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001757 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001758 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001759 i = abs(ndigits);
1760 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001761 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001762 if (ndigits < 0)
1763 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001764 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001765 x *= f;
1766 if (x >= 0.0)
1767 x = floor(x + 0.5);
1768 else
1769 x = ceil(x - 0.5);
1770 if (ndigits < 0)
1771 x *= f;
1772 else
1773 x /= f;
1774 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001775}
1776
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001777PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001778"round(number[, ndigits]) -> floating point number\n\
1779\n\
1780Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001781This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001782
Raymond Hettinger64958a12003-12-17 20:43:33 +00001783static PyObject *
1784builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1785{
1786 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1787 PyObject *callable;
1788 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1789 long reverse;
1790
1791 if (args != NULL) {
1792 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1793 kwlist, &seq, &compare, &keyfunc, &reverse))
1794 return NULL;
1795 }
1796
1797 newlist = PySequence_List(seq);
1798 if (newlist == NULL)
1799 return NULL;
1800
1801 callable = PyObject_GetAttrString(newlist, "sort");
1802 if (callable == NULL) {
1803 Py_DECREF(newlist);
1804 return NULL;
1805 }
1806
1807 newargs = PyTuple_GetSlice(args, 1, 4);
1808 if (newargs == NULL) {
1809 Py_DECREF(newlist);
1810 Py_DECREF(callable);
1811 return NULL;
1812 }
1813
1814 v = PyObject_Call(callable, newargs, kwds);
1815 Py_DECREF(newargs);
1816 Py_DECREF(callable);
1817 if (v == NULL) {
1818 Py_DECREF(newlist);
1819 return NULL;
1820 }
1821 Py_DECREF(v);
1822 return newlist;
1823}
1824
1825PyDoc_STRVAR(sorted_doc,
1826"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001827
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001829builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001830{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 PyObject *v = NULL;
1832 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001833
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001834 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001835 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001836 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001838 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001839 if (!PyErr_Occurred())
1840 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001841 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001842 }
1843 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001845 }
1846 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001848 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001850 "vars() argument must have __dict__ attribute");
1851 return NULL;
1852 }
1853 }
1854 return d;
1855}
1856
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001857PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001858"vars([object]) -> dictionary\n\
1859\n\
1860Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001861With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001862
Alex Martellia70b1912003-04-22 08:12:33 +00001863
1864static PyObject*
1865builtin_sum(PyObject *self, PyObject *args)
1866{
1867 PyObject *seq;
1868 PyObject *result = NULL;
1869 PyObject *temp, *item, *iter;
1870
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001871 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001872 return NULL;
1873
1874 iter = PyObject_GetIter(seq);
1875 if (iter == NULL)
1876 return NULL;
1877
1878 if (result == NULL) {
1879 result = PyInt_FromLong(0);
1880 if (result == NULL) {
1881 Py_DECREF(iter);
1882 return NULL;
1883 }
1884 } else {
1885 /* reject string values for 'start' parameter */
1886 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1887 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001888 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001889 Py_DECREF(iter);
1890 return NULL;
1891 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001892 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001893 }
1894
1895 for(;;) {
1896 item = PyIter_Next(iter);
1897 if (item == NULL) {
1898 /* error, or end-of-sequence */
1899 if (PyErr_Occurred()) {
1900 Py_DECREF(result);
1901 result = NULL;
1902 }
1903 break;
1904 }
Alex Martellia253e182003-10-25 23:24:14 +00001905 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001906 Py_DECREF(result);
1907 Py_DECREF(item);
1908 result = temp;
1909 if (result == NULL)
1910 break;
1911 }
1912 Py_DECREF(iter);
1913 return result;
1914}
1915
1916PyDoc_STRVAR(sum_doc,
1917"sum(sequence, start=0) -> value\n\
1918\n\
1919Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1920of parameter 'start'. When the sequence is empty, returns start.");
1921
1922
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001924builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001925{
1926 PyObject *inst;
1927 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001928 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001929
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001930 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001931 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001932
Guido van Rossum823649d2001-03-21 18:40:58 +00001933 retval = PyObject_IsInstance(inst, cls);
1934 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001935 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001936 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001937}
1938
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001939PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001940"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001941\n\
1942Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001943With a type as second argument, return whether that is the object's type.\n\
1944The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001945isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001946
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001947
1948static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001949builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001950{
1951 PyObject *derived;
1952 PyObject *cls;
1953 int retval;
1954
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001955 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001956 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001957
Guido van Rossum823649d2001-03-21 18:40:58 +00001958 retval = PyObject_IsSubclass(derived, cls);
1959 if (retval < 0)
1960 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001961 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001962}
1963
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001964PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001965"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001966\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001967Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1968When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1969is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001970
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001971
Barry Warsawbd599b52000-08-03 15:45:29 +00001972static PyObject*
1973builtin_zip(PyObject *self, PyObject *args)
1974{
1975 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001976 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001977 int i;
1978 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001979 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001980
Raymond Hettingereaef6152003-08-02 07:42:57 +00001981 if (itemsize == 0)
1982 return PyList_New(0);
1983
Barry Warsawbd599b52000-08-03 15:45:29 +00001984 /* args must be a tuple */
1985 assert(PyTuple_Check(args));
1986
Tim Peters39a86c22002-05-12 07:19:38 +00001987 /* Guess at result length: the shortest of the input lengths.
1988 If some argument refuses to say, we refuse to guess too, lest
1989 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001990 len = -1; /* unknown */
1991 for (i = 0; i < itemsize; ++i) {
1992 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001993 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001994 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001995 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001996 len = -1;
1997 break;
1998 }
Tim Peters67d687a2002-04-29 21:27:32 +00001999 else if (len < 0 || thislen < len)
2000 len = thislen;
2001 }
2002
Tim Peters8572b4f2001-05-06 01:05:02 +00002003 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00002004 if (len < 0)
2005 len = 10; /* arbitrary */
2006 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00002007 return NULL;
2008
Tim Peters8572b4f2001-05-06 01:05:02 +00002009 /* obtain iterators */
2010 itlist = PyTuple_New(itemsize);
2011 if (itlist == NULL)
2012 goto Fail_ret;
2013 for (i = 0; i < itemsize; ++i) {
2014 PyObject *item = PyTuple_GET_ITEM(args, i);
2015 PyObject *it = PyObject_GetIter(item);
2016 if (it == NULL) {
2017 if (PyErr_ExceptionMatches(PyExc_TypeError))
2018 PyErr_Format(PyExc_TypeError,
2019 "zip argument #%d must support iteration",
2020 i+1);
2021 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002022 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002023 PyTuple_SET_ITEM(itlist, i, it);
2024 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002025
Tim Peters8572b4f2001-05-06 01:05:02 +00002026 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002027 for (i = 0; ; ++i) {
2028 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002029 PyObject *next = PyTuple_New(itemsize);
2030 if (!next)
2031 goto Fail_ret_itlist;
2032
Tim Peters67d687a2002-04-29 21:27:32 +00002033 for (j = 0; j < itemsize; j++) {
2034 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002035 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002036 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002037 if (PyErr_Occurred()) {
2038 Py_DECREF(ret);
2039 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002040 }
2041 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002042 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002043 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002044 }
Tim Peters67d687a2002-04-29 21:27:32 +00002045 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002046 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002047
Tim Peters67d687a2002-04-29 21:27:32 +00002048 if (i < len)
2049 PyList_SET_ITEM(ret, i, next);
2050 else {
2051 int status = PyList_Append(ret, next);
2052 Py_DECREF(next);
2053 ++len;
2054 if (status < 0)
2055 goto Fail_ret_itlist;
2056 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002057 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002058
Tim Peters67d687a2002-04-29 21:27:32 +00002059Done:
2060 if (ret != NULL && i < len) {
2061 /* The list is too big. */
2062 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2063 return NULL;
2064 }
2065 return ret;
2066
Tim Peters8572b4f2001-05-06 01:05:02 +00002067Fail_ret_itlist:
2068 Py_DECREF(itlist);
2069Fail_ret:
2070 Py_DECREF(ret);
2071 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002072}
2073
2074
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002075PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002076"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2077\n\
2078Return a list of tuples, where each tuple contains the i-th element\n\
2079from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002080in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002081
2082
Guido van Rossum79f25d91997-04-29 20:08:16 +00002083static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002084 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2085 {"abs", builtin_abs, METH_O, abs_doc},
2086 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002087 {"callable", builtin_callable, METH_O, callable_doc},
2088 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2089 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2090 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2091 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2092 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2093 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2094 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2095 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2096 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2097 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2098 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2099 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2100 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2101 {"hash", builtin_hash, METH_O, hash_doc},
2102 {"hex", builtin_hex, METH_O, hex_doc},
2103 {"id", builtin_id, METH_O, id_doc},
2104 {"input", builtin_input, METH_VARARGS, input_doc},
2105 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2106 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2107 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2108 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2109 {"len", builtin_len, METH_O, len_doc},
2110 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2111 {"map", builtin_map, METH_VARARGS, map_doc},
2112 {"max", builtin_max, METH_VARARGS, max_doc},
2113 {"min", builtin_min, METH_VARARGS, min_doc},
2114 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002115 {"ord", builtin_ord, METH_O, ord_doc},
2116 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2117 {"range", builtin_range, METH_VARARGS, range_doc},
2118 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2119 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2120 {"reload", builtin_reload, METH_O, reload_doc},
2121 {"repr", builtin_repr, METH_O, repr_doc},
2122 {"round", builtin_round, METH_VARARGS, round_doc},
2123 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002124 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002125 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002126#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002127 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002128#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002129 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002130 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002131 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002132};
2133
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002134PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002135"Built-in functions, exceptions, and other objects.\n\
2136\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002137Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002138
Guido van Rossum25ce5661997-08-02 03:10:38 +00002139PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002140_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002141{
Fred Drake5550de32000-06-20 04:54:19 +00002142 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002143 mod = Py_InitModule4("__builtin__", builtin_methods,
2144 builtin_doc, (PyObject *)NULL,
2145 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002146 if (mod == NULL)
2147 return NULL;
2148 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002149
Tim Peters7571a0f2003-03-23 17:52:28 +00002150#ifdef Py_TRACE_REFS
2151 /* __builtin__ exposes a number of statically allocated objects
2152 * that, before this code was added in 2.3, never showed up in
2153 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2154 * result, programs leaking references to None and False (etc)
2155 * couldn't be diagnosed by examining sys.getobjects(0).
2156 */
2157#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2158#else
2159#define ADD_TO_ALL(OBJECT) (void)0
2160#endif
2161
Tim Peters4b7625e2001-09-13 21:37:17 +00002162#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002163 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2164 return NULL; \
2165 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002166
2167 SETBUILTIN("None", Py_None);
2168 SETBUILTIN("Ellipsis", Py_Ellipsis);
2169 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002170 SETBUILTIN("False", Py_False);
2171 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002172 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002173 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002174 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002175 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002176#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002177 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002178#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002179 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002180 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002181 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002182 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002183 SETBUILTIN("property", &PyProperty_Type);
2184 SETBUILTIN("int", &PyInt_Type);
2185 SETBUILTIN("list", &PyList_Type);
2186 SETBUILTIN("long", &PyLong_Type);
2187 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002188 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002189 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002190 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002191 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2192 SETBUILTIN("str", &PyString_Type);
2193 SETBUILTIN("super", &PySuper_Type);
2194 SETBUILTIN("tuple", &PyTuple_Type);
2195 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002196 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002197
2198 /* Note that open() is just an alias of file(). */
2199 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002200 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002201#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002202 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002203#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002204 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002205 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2206 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002207 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002208 }
2209 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002210
Guido van Rossum25ce5661997-08-02 03:10:38 +00002211 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002212#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002213#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002214}
2215
Guido van Rossume77a7571993-11-03 15:01:26 +00002216/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002217
Guido van Rossum79f25d91997-04-29 20:08:16 +00002218static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002219filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002220{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002221 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002222 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002223 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002224
Guido van Rossumb7b45621995-08-04 04:07:45 +00002225 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002226 if (PyTuple_CheckExact(tuple))
2227 Py_INCREF(tuple);
2228 else
2229 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002230 return tuple;
2231 }
2232
Guido van Rossum79f25d91997-04-29 20:08:16 +00002233 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002234 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002235
Guido van Rossum12d12c51993-10-26 17:58:25 +00002236 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002237 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002238 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002239
Walter Dörwald8dd19322003-02-10 17:36:40 +00002240 if (tuple->ob_type->tp_as_sequence &&
2241 tuple->ob_type->tp_as_sequence->sq_item) {
2242 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002243 if (item == NULL)
2244 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002245 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002246 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002247 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002248 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249 if (func == Py_None) {
2250 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002251 good = item;
2252 }
2253 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002254 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002255 if (arg == NULL) {
2256 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002257 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002258 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002259 good = PyEval_CallObject(func, arg);
2260 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002261 if (good == NULL) {
2262 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002263 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002264 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002265 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002266 ok = PyObject_IsTrue(good);
2267 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002268 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002269 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002270 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002271 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002272 else
2273 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002274 }
2275
Tim Peters4324aa32001-05-28 22:30:08 +00002276 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002277 return NULL;
2278
Guido van Rossum12d12c51993-10-26 17:58:25 +00002279 return result;
2280
Guido van Rossum12d12c51993-10-26 17:58:25 +00002281Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002282 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002283 return NULL;
2284}
2285
2286
Guido van Rossume77a7571993-11-03 15:01:26 +00002287/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002288
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002290filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002291{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002292 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002293 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002294 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002295 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002296
Guido van Rossum79f25d91997-04-29 20:08:16 +00002297 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002298 /* If it's a real string we can return the original,
2299 * as no character is ever false and __getitem__
2300 * does return this character. If it's a subclass
2301 * we must go through the __getitem__ loop */
2302 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002303 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002304 return strobj;
2305 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002306 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002307 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002308 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002309
Guido van Rossum12d12c51993-10-26 17:58:25 +00002310 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002311 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002312 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002313
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002314 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2315 if (item == NULL)
2316 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002317 if (func==Py_None) {
2318 ok = 1;
2319 } else {
2320 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002321 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002322 if (arg == NULL) {
2323 Py_DECREF(item);
2324 goto Fail_1;
2325 }
2326 good = PyEval_CallObject(func, arg);
2327 Py_DECREF(arg);
2328 if (good == NULL) {
2329 Py_DECREF(item);
2330 goto Fail_1;
2331 }
2332 ok = PyObject_IsTrue(good);
2333 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002334 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002335 if (ok) {
2336 int reslen;
2337 if (!PyString_Check(item)) {
2338 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2339 " __getitem__ returned different type");
2340 Py_DECREF(item);
2341 goto Fail_1;
2342 }
2343 reslen = PyString_GET_SIZE(item);
2344 if (reslen == 1) {
2345 PyString_AS_STRING(result)[j++] =
2346 PyString_AS_STRING(item)[0];
2347 } else {
2348 /* do we need more space? */
2349 int need = j + reslen + len-i-1;
2350 if (need > outlen) {
2351 /* overallocate, to avoid reallocations */
2352 if (need<2*outlen)
2353 need = 2*outlen;
2354 if (_PyString_Resize(&result, need)) {
2355 Py_DECREF(item);
2356 return NULL;
2357 }
2358 outlen = need;
2359 }
2360 memcpy(
2361 PyString_AS_STRING(result) + j,
2362 PyString_AS_STRING(item),
2363 reslen
2364 );
2365 j += reslen;
2366 }
2367 }
Tim Peters388ed082001-04-07 20:34:48 +00002368 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002369 }
2370
Walter Dörwald903f1e02003-02-04 16:28:00 +00002371 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002372 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002373
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374 return result;
2375
Guido van Rossum12d12c51993-10-26 17:58:25 +00002376Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002377 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002378 return NULL;
2379}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002380
2381#ifdef Py_USING_UNICODE
2382/* Helper for filter(): filter a Unicode object through a function */
2383
2384static PyObject *
2385filterunicode(PyObject *func, PyObject *strobj)
2386{
2387 PyObject *result;
2388 register int i, j;
2389 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002390 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002391
2392 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002393 /* If it's a real string we can return the original,
2394 * as no character is ever false and __getitem__
2395 * does return this character. If it's a subclass
2396 * we must go through the __getitem__ loop */
2397 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002398 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002399 return strobj;
2400 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002401 }
2402 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2403 return NULL;
2404
2405 for (i = j = 0; i < len; ++i) {
2406 PyObject *item, *arg, *good;
2407 int ok;
2408
2409 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2410 if (item == NULL)
2411 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002412 if (func == Py_None) {
2413 ok = 1;
2414 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002415 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002416 if (arg == NULL) {
2417 Py_DECREF(item);
2418 goto Fail_1;
2419 }
2420 good = PyEval_CallObject(func, arg);
2421 Py_DECREF(arg);
2422 if (good == NULL) {
2423 Py_DECREF(item);
2424 goto Fail_1;
2425 }
2426 ok = PyObject_IsTrue(good);
2427 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002428 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002429 if (ok) {
2430 int reslen;
2431 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002432 PyErr_SetString(PyExc_TypeError,
2433 "can't filter unicode to unicode:"
2434 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002435 Py_DECREF(item);
2436 goto Fail_1;
2437 }
2438 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002439 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002440 PyUnicode_AS_UNICODE(result)[j++] =
2441 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002442 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002443 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002444 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002445 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002446 /* overallocate,
2447 to avoid reallocations */
2448 if (need < 2 * outlen)
2449 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002450 if (PyUnicode_Resize(
2451 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002452 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002453 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002454 }
2455 outlen = need;
2456 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002457 memcpy(PyUnicode_AS_UNICODE(result) + j,
2458 PyUnicode_AS_UNICODE(item),
2459 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002460 j += reslen;
2461 }
2462 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002463 Py_DECREF(item);
2464 }
2465
Walter Dörwald903f1e02003-02-04 16:28:00 +00002466 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002467 PyUnicode_Resize(&result, j);
2468
2469 return result;
2470
2471Fail_1:
2472 Py_DECREF(result);
2473 return NULL;
2474}
2475#endif