blob: 10e59c958047cbe4c92407b2d2f274a92058c1db [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;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000967 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000969 "hex() argument can't be converted to hex");
970 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000971 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000972 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000973}
974
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976"hex(number) -> string\n\
977\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000978Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000979
980
Tim Petersdbd9ba62000-07-09 03:09:57 +0000981static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000982
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000984builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000985{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000987 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 PyObject *res;
989 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +0000990 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000991
992 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000993 if (line == NULL)
994 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996 return NULL;
997 while (*str == ' ' || *str == '\t')
998 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 globals = PyEval_GetGlobals();
1000 locals = PyEval_GetLocals();
1001 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1002 if (PyDict_SetItemString(globals, "__builtins__",
1003 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001004 return NULL;
1005 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001006 cf.cf_flags = 0;
1007 PyEval_MergeCompilerFlags(&cf);
1008 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001009 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001010 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001011}
1012
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001013PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001014"input([prompt]) -> value\n\
1015\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001016Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001017
1018
Guido van Rossume8811f81997-02-14 15:48:05 +00001019static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001020builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001021{
1022 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001023 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001024 return NULL;
1025 Py_INCREF(s);
1026 PyString_InternInPlace(&s);
1027 return s;
1028}
1029
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001030PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001031"intern(string) -> string\n\
1032\n\
1033``Intern'' the given string. This enters the string in the (global)\n\
1034table of interned strings whose purpose is to speed up dictionary lookups.\n\
1035Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001036same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001037
1038
Guido van Rossum79f25d91997-04-29 20:08:16 +00001039static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001040builtin_iter(PyObject *self, PyObject *args)
1041{
1042 PyObject *v, *w = NULL;
1043
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001044 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001045 return NULL;
1046 if (w == NULL)
1047 return PyObject_GetIter(v);
1048 if (!PyCallable_Check(v)) {
1049 PyErr_SetString(PyExc_TypeError,
1050 "iter(v, w): v must be callable");
1051 return NULL;
1052 }
1053 return PyCallIter_New(v, w);
1054}
1055
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001056PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001057"iter(collection) -> iterator\n\
1058iter(callable, sentinel) -> iterator\n\
1059\n\
1060Get an iterator from an object. In the first form, the argument must\n\
1061supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001062In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001063
1064
1065static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001066builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001067{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001068 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001069
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001070 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001071 if (res < 0 && PyErr_Occurred())
1072 return NULL;
1073 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001074}
1075
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001076PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001077"len(object) -> integer\n\
1078\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001079Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001080
1081
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001083builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001084{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001086
Guido van Rossum79f25d91997-04-29 20:08:16 +00001087 d = PyEval_GetLocals();
1088 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001089 return d;
1090}
1091
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001092PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001093"locals() -> dictionary\n\
1094\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001095Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001096
1097
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001099min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001100{
Tim Petersc3074532001-05-03 07:00:32 +00001101 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001102
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001104 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001105 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001106 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001107
Tim Petersc3074532001-05-03 07:00:32 +00001108 it = PyObject_GetIter(v);
1109 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001110 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001111
1112 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001113 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001114 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001115 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001116 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001117 Py_XDECREF(w);
1118 Py_DECREF(it);
1119 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001120 }
Tim Petersc3074532001-05-03 07:00:32 +00001121 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001122 }
Tim Petersc3074532001-05-03 07:00:32 +00001123
Guido van Rossum2d951851994-08-29 12:52:16 +00001124 if (w == NULL)
1125 w = x;
1126 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001127 int cmp = PyObject_RichCompareBool(x, w, op);
1128 if (cmp > 0) {
1129 Py_DECREF(w);
1130 w = x;
1131 }
1132 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001133 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001134 Py_DECREF(w);
1135 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001136 return NULL;
1137 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001138 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001140 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001141 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001142 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001144 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001145 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001146 return w;
1147}
1148
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001150builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001151{
Guido van Rossum53451b32001-01-17 15:47:24 +00001152 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001153}
1154
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001156"min(sequence) -> value\n\
1157min(a, b, c, ...) -> value\n\
1158\n\
1159With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001160With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001161
1162
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001164builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001165{
Guido van Rossum53451b32001-01-17 15:47:24 +00001166 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001167}
1168
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001169PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001170"max(sequence) -> value\n\
1171max(a, b, c, ...) -> value\n\
1172\n\
1173With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001174With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001175
1176
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001178builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001179{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001180 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001181
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001182 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1183 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001184 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001185 "oct() argument can't be converted to oct");
1186 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001187 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001188 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001189}
1190
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001191PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001192"oct(number) -> string\n\
1193\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001194Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001195
1196
Guido van Rossum79f25d91997-04-29 20:08:16 +00001197static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001198builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001199{
Guido van Rossum09095f32000-03-10 23:00:52 +00001200 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001201 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001202
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001203 if (PyString_Check(obj)) {
1204 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001205 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001206 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001207 return PyInt_FromLong(ord);
1208 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001209#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001210 } else if (PyUnicode_Check(obj)) {
1211 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001212 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001213 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001214 return PyInt_FromLong(ord);
1215 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001216#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001217 } else {
1218 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001219 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001220 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001221 return NULL;
1222 }
1223
Guido van Rossumad991772001-01-12 16:03:05 +00001224 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001225 "ord() expected a character, "
1226 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001227 size);
1228 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001229}
1230
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001231PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001232"ord(c) -> integer\n\
1233\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001234Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001235
1236
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001238builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001239{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001240 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001241
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001242 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001243 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001244 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001245}
1246
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001247PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001248"pow(x, y[, z]) -> number\n\
1249\n\
1250With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001251equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001252
1253
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001254
1255/* Return number of items in range (lo, hi, step), when arguments are
1256 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1257 * & only if the true value is too large to fit in a signed long.
1258 * Arguments MUST return 1 with either PyInt_Check() or
1259 * PyLong_Check(). Return -1 when there is an error.
1260 */
1261static long
1262get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1263{
1264 /* -------------------------------------------------------------
1265 Algorithm is equal to that of get_len_of_range(), but it operates
1266 on PyObjects (which are assumed to be PyLong or PyInt objects).
1267 ---------------------------------------------------------------*/
1268 long n;
1269 PyObject *diff = NULL;
1270 PyObject *one = NULL;
1271 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1272 /* holds sub-expression evaluations */
1273
1274 /* if (lo >= hi), return length of 0. */
1275 if (PyObject_Compare(lo, hi) >= 0)
1276 return 0;
1277
1278 if ((one = PyLong_FromLong(1L)) == NULL)
1279 goto Fail;
1280
1281 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1282 goto Fail;
1283
1284 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1285 goto Fail;
1286
1287 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1288 goto Fail;
1289
1290 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1291 goto Fail;
1292
1293 n = PyLong_AsLong(tmp3);
1294 if (PyErr_Occurred()) { /* Check for Overflow */
1295 PyErr_Clear();
1296 goto Fail;
1297 }
1298
1299 Py_DECREF(tmp3);
1300 Py_DECREF(tmp2);
1301 Py_DECREF(diff);
1302 Py_DECREF(tmp1);
1303 Py_DECREF(one);
1304 return n;
1305
1306 Fail:
1307 Py_XDECREF(tmp3);
1308 Py_XDECREF(tmp2);
1309 Py_XDECREF(diff);
1310 Py_XDECREF(tmp1);
1311 Py_XDECREF(one);
1312 return -1;
1313}
1314
1315/* An extension of builtin_range() that handles the case when PyLong
1316 * arguments are given. */
1317static PyObject *
1318handle_range_longs(PyObject *self, PyObject *args)
1319{
1320 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001321 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001322 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001323
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001324 PyObject *curnum = NULL;
1325 PyObject *v = NULL;
1326 long bign;
1327 int i, n;
1328 int cmp_result;
1329
Tim Peters874e1f72003-04-13 22:13:08 +00001330 PyObject *zero = PyLong_FromLong(0);
1331
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001332 if (zero == NULL)
1333 return NULL;
1334
Tim Peters874e1f72003-04-13 22:13:08 +00001335 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1336 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001337 return NULL;
1338 }
1339
Tim Peters874e1f72003-04-13 22:13:08 +00001340 /* Figure out which way we were called, supply defaults, and be
1341 * sure to incref everything so that the decrefs at the end
1342 * are correct.
1343 */
1344 assert(ilow != NULL);
1345 if (ihigh == NULL) {
1346 /* only 1 arg -- it's the upper limit */
1347 ihigh = ilow;
1348 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001349 }
Tim Peters874e1f72003-04-13 22:13:08 +00001350 assert(ihigh != NULL);
1351 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001352
Tim Peters874e1f72003-04-13 22:13:08 +00001353 /* ihigh correct now; do ilow */
1354 if (ilow == NULL)
1355 ilow = zero;
1356 Py_INCREF(ilow);
1357
1358 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001359 if (istep == NULL) {
1360 istep = PyLong_FromLong(1L);
1361 if (istep == NULL)
1362 goto Fail;
1363 }
1364 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001365 Py_INCREF(istep);
1366 }
1367
Tim Peters874e1f72003-04-13 22:13:08 +00001368 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001369 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001370 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001371 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001372 goto Fail;
1373 }
1374
Tim Peters874e1f72003-04-13 22:13:08 +00001375 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001376 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001377 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001378 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001379 goto Fail;
1380 }
1381
1382 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001383 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001384 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001385 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001386 goto Fail;
1387 }
1388
1389 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1390 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001391 if (cmp_result == 0) {
1392 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001393 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001394 goto Fail;
1395 }
1396
1397 if (cmp_result > 0)
1398 bign = get_len_of_range_longs(ilow, ihigh, istep);
1399 else {
1400 PyObject *neg_istep = PyNumber_Negative(istep);
1401 if (neg_istep == NULL)
1402 goto Fail;
1403 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1404 Py_DECREF(neg_istep);
1405 }
1406
1407 n = (int)bign;
1408 if (bign < 0 || (long)n != bign) {
1409 PyErr_SetString(PyExc_OverflowError,
1410 "range() result has too many items");
1411 goto Fail;
1412 }
1413
1414 v = PyList_New(n);
1415 if (v == NULL)
1416 goto Fail;
1417
1418 curnum = ilow;
1419 Py_INCREF(curnum);
1420
1421 for (i = 0; i < n; i++) {
1422 PyObject *w = PyNumber_Long(curnum);
1423 PyObject *tmp_num;
1424 if (w == NULL)
1425 goto Fail;
1426
1427 PyList_SET_ITEM(v, i, w);
1428
1429 tmp_num = PyNumber_Add(curnum, istep);
1430 if (tmp_num == NULL)
1431 goto Fail;
1432
1433 Py_DECREF(curnum);
1434 curnum = tmp_num;
1435 }
Tim Peters874e1f72003-04-13 22:13:08 +00001436 Py_DECREF(ilow);
1437 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001438 Py_DECREF(istep);
1439 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001440 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001441 return v;
1442
1443 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001444 Py_DECREF(ilow);
1445 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001446 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001447 Py_DECREF(zero);
1448 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001449 Py_XDECREF(v);
1450 return NULL;
1451}
1452
Guido van Rossum124eff01999-02-23 16:11:01 +00001453/* Return number of items in range/xrange (lo, hi, step). step > 0
1454 * required. Return a value < 0 if & only if the true value is too
1455 * large to fit in a signed long.
1456 */
1457static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001458get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001459{
1460 /* -------------------------------------------------------------
1461 If lo >= hi, the range is empty.
1462 Else if n values are in the range, the last one is
1463 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1464 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1465 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1466 the RHS is non-negative and so truncation is the same as the
1467 floor. Letting M be the largest positive long, the worst case
1468 for the RHS numerator is hi=M, lo=-M-1, and then
1469 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1470 precision to compute the RHS exactly.
1471 ---------------------------------------------------------------*/
1472 long n = 0;
1473 if (lo < hi) {
1474 unsigned long uhi = (unsigned long)hi;
1475 unsigned long ulo = (unsigned long)lo;
1476 unsigned long diff = uhi - ulo - 1;
1477 n = (long)(diff / (unsigned long)step + 1);
1478 }
1479 return n;
1480}
1481
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001483builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001484{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001485 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001486 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001487 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001488
Guido van Rossum79f25d91997-04-29 20:08:16 +00001489 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001490
Guido van Rossum79f25d91997-04-29 20:08:16 +00001491 if (PyTuple_Size(args) <= 1) {
1492 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001493 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001494 &ihigh)) {
1495 PyErr_Clear();
1496 return handle_range_longs(self, args);
1497 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001498 }
1499 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001501 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001502 &ilow, &ihigh, &istep)) {
1503 PyErr_Clear();
1504 return handle_range_longs(self, args);
1505 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001506 }
1507 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001508 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001509 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001510 return NULL;
1511 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001512 if (istep > 0)
1513 bign = get_len_of_range(ilow, ihigh, istep);
1514 else
1515 bign = get_len_of_range(ihigh, ilow, -istep);
1516 n = (int)bign;
1517 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001518 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001519 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001520 return NULL;
1521 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001522 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001523 if (v == NULL)
1524 return NULL;
1525 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001526 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001527 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001528 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001529 return NULL;
1530 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001531 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001532 ilow += istep;
1533 }
1534 return v;
1535}
1536
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001537PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001538"range([start,] stop[, step]) -> list of integers\n\
1539\n\
1540Return a list containing an arithmetic progression of integers.\n\
1541range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1542When step is given, it specifies the increment (or decrement).\n\
1543For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001544These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001545
1546
Guido van Rossum79f25d91997-04-29 20:08:16 +00001547static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001548builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001549{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001550 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001551 PyObject *fin = PySys_GetObject("stdin");
1552 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001553
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001554 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001555 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001556
1557 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001558 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001559 return NULL;
1560 }
1561 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001562 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001563 return NULL;
1564 }
1565 if (PyFile_SoftSpace(fout, 0)) {
1566 if (PyFile_WriteString(" ", fout) != 0)
1567 return NULL;
1568 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001569 if (PyFile_Check (fin) && PyFile_Check (fout)
1570 && isatty(fileno(PyFile_AsFile(fin)))
1571 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001572 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001573 char *prompt;
1574 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001575 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001576 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001577 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001578 if (po == NULL)
1579 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001580 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001581 if (prompt == NULL)
1582 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001583 }
1584 else {
1585 po = NULL;
1586 prompt = "";
1587 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001588 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1589 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001590 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001591 if (s == NULL) {
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001592 if (!PyErr_Occurred())
1593 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001594 return NULL;
1595 }
1596 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001597 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001598 result = NULL;
1599 }
1600 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001601 size_t len = strlen(s);
1602 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001603 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001604 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001605 result = NULL;
1606 }
1607 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001608 result = PyString_FromStringAndSize(s,
1609 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001610 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001611 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001612 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001613 return result;
1614 }
Guido van Rossum90933611991-06-07 16:10:43 +00001615 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001616 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001617 return NULL;
1618 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001619 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001620}
1621
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001622PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001623"raw_input([prompt]) -> string\n\
1624\n\
1625Read a string from standard input. The trailing newline is stripped.\n\
1626If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1627On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001628is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001629
1630
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001632builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001633{
Tim Peters15d81ef2001-05-04 04:39:21 +00001634 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001635
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001636 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001637 return NULL;
1638 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001639 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001640
Tim Peters15d81ef2001-05-04 04:39:21 +00001641 it = PyObject_GetIter(seq);
1642 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001643 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001644 "reduce() arg 2 must support iteration");
1645 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001646 return NULL;
1647 }
1648
Guido van Rossum79f25d91997-04-29 20:08:16 +00001649 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001650 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001651
Tim Peters15d81ef2001-05-04 04:39:21 +00001652 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001653 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001654
1655 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001656 Py_DECREF(args);
1657 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001658 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001659 }
1660
Tim Peters15d81ef2001-05-04 04:39:21 +00001661 op2 = PyIter_Next(it);
1662 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001663 if (PyErr_Occurred())
1664 goto Fail;
1665 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001666 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001667
Guido van Rossum2d951851994-08-29 12:52:16 +00001668 if (result == NULL)
1669 result = op2;
1670 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001671 PyTuple_SetItem(args, 0, result);
1672 PyTuple_SetItem(args, 1, op2);
1673 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001674 goto Fail;
1675 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001676 }
1677
Guido van Rossum79f25d91997-04-29 20:08:16 +00001678 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001679
Guido van Rossum2d951851994-08-29 12:52:16 +00001680 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001681 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001682 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001683
Tim Peters15d81ef2001-05-04 04:39:21 +00001684 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001685 return result;
1686
Guido van Rossum2d951851994-08-29 12:52:16 +00001687Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001688 Py_XDECREF(args);
1689 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001690 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001691 return NULL;
1692}
1693
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001694PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001695"reduce(function, sequence[, initial]) -> value\n\
1696\n\
1697Apply a function of two arguments cumulatively to the items of a sequence,\n\
1698from left to right, so as to reduce the sequence to a single value.\n\
1699For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1700((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1701of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001702sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703
1704
Guido van Rossum79f25d91997-04-29 20:08:16 +00001705static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001706builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001707{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001708 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001709}
1710
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001711PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001712"reload(module) -> module\n\
1713\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001714Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001715
1716
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001718builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001719{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001721}
1722
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001723PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001724"repr(object) -> string\n\
1725\n\
1726Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001727For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001728
1729
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001731builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001732{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001733 double x;
1734 double f;
1735 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001736 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001737
Guido van Rossum79f25d91997-04-29 20:08:16 +00001738 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001739 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001740 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001741 i = abs(ndigits);
1742 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001743 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001744 if (ndigits < 0)
1745 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001746 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001747 x *= f;
1748 if (x >= 0.0)
1749 x = floor(x + 0.5);
1750 else
1751 x = ceil(x - 0.5);
1752 if (ndigits < 0)
1753 x *= f;
1754 else
1755 x /= f;
1756 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001757}
1758
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001759PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001760"round(number[, ndigits]) -> floating point number\n\
1761\n\
1762Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001763This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001764
Raymond Hettinger64958a12003-12-17 20:43:33 +00001765static PyObject *
1766builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1767{
1768 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1769 PyObject *callable;
1770 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1771 long reverse;
1772
1773 if (args != NULL) {
1774 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1775 kwlist, &seq, &compare, &keyfunc, &reverse))
1776 return NULL;
1777 }
1778
1779 newlist = PySequence_List(seq);
1780 if (newlist == NULL)
1781 return NULL;
1782
1783 callable = PyObject_GetAttrString(newlist, "sort");
1784 if (callable == NULL) {
1785 Py_DECREF(newlist);
1786 return NULL;
1787 }
1788
1789 newargs = PyTuple_GetSlice(args, 1, 4);
1790 if (newargs == NULL) {
1791 Py_DECREF(newlist);
1792 Py_DECREF(callable);
1793 return NULL;
1794 }
1795
1796 v = PyObject_Call(callable, newargs, kwds);
1797 Py_DECREF(newargs);
1798 Py_DECREF(callable);
1799 if (v == NULL) {
1800 Py_DECREF(newlist);
1801 return NULL;
1802 }
1803 Py_DECREF(v);
1804 return newlist;
1805}
1806
1807PyDoc_STRVAR(sorted_doc,
1808"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001809
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001811builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001812{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813 PyObject *v = NULL;
1814 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001815
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001816 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001817 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001818 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001820 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821 if (!PyErr_Occurred())
1822 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001823 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001824 }
1825 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001826 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001827 }
1828 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001830 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001832 "vars() argument must have __dict__ attribute");
1833 return NULL;
1834 }
1835 }
1836 return d;
1837}
1838
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001839PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001840"vars([object]) -> dictionary\n\
1841\n\
1842Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001843With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001844
Alex Martellia70b1912003-04-22 08:12:33 +00001845
1846static PyObject*
1847builtin_sum(PyObject *self, PyObject *args)
1848{
1849 PyObject *seq;
1850 PyObject *result = NULL;
1851 PyObject *temp, *item, *iter;
1852
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001853 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001854 return NULL;
1855
1856 iter = PyObject_GetIter(seq);
1857 if (iter == NULL)
1858 return NULL;
1859
1860 if (result == NULL) {
1861 result = PyInt_FromLong(0);
1862 if (result == NULL) {
1863 Py_DECREF(iter);
1864 return NULL;
1865 }
1866 } else {
1867 /* reject string values for 'start' parameter */
1868 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1869 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001870 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001871 Py_DECREF(iter);
1872 return NULL;
1873 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001874 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001875 }
1876
1877 for(;;) {
1878 item = PyIter_Next(iter);
1879 if (item == NULL) {
1880 /* error, or end-of-sequence */
1881 if (PyErr_Occurred()) {
1882 Py_DECREF(result);
1883 result = NULL;
1884 }
1885 break;
1886 }
Alex Martellia253e182003-10-25 23:24:14 +00001887 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001888 Py_DECREF(result);
1889 Py_DECREF(item);
1890 result = temp;
1891 if (result == NULL)
1892 break;
1893 }
1894 Py_DECREF(iter);
1895 return result;
1896}
1897
1898PyDoc_STRVAR(sum_doc,
1899"sum(sequence, start=0) -> value\n\
1900\n\
1901Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1902of parameter 'start'. When the sequence is empty, returns start.");
1903
1904
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001905static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001906builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001907{
1908 PyObject *inst;
1909 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001910 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001911
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001912 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001913 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001914
Guido van Rossum823649d2001-03-21 18:40:58 +00001915 retval = PyObject_IsInstance(inst, cls);
1916 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001917 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001918 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001919}
1920
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001921PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001922"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001923\n\
1924Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001925With a type as second argument, return whether that is the object's type.\n\
1926The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001927isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001928
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001929
1930static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001931builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001932{
1933 PyObject *derived;
1934 PyObject *cls;
1935 int retval;
1936
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001937 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001938 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001939
Guido van Rossum823649d2001-03-21 18:40:58 +00001940 retval = PyObject_IsSubclass(derived, cls);
1941 if (retval < 0)
1942 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001943 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001944}
1945
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001946PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001947"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001948\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001949Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1950When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1951is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001952
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001953
Barry Warsawbd599b52000-08-03 15:45:29 +00001954static PyObject*
1955builtin_zip(PyObject *self, PyObject *args)
1956{
1957 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001958 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001959 int i;
1960 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001961 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001962
Raymond Hettingereaef6152003-08-02 07:42:57 +00001963 if (itemsize == 0)
1964 return PyList_New(0);
1965
Barry Warsawbd599b52000-08-03 15:45:29 +00001966 /* args must be a tuple */
1967 assert(PyTuple_Check(args));
1968
Tim Peters39a86c22002-05-12 07:19:38 +00001969 /* Guess at result length: the shortest of the input lengths.
1970 If some argument refuses to say, we refuse to guess too, lest
1971 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001972 len = -1; /* unknown */
1973 for (i = 0; i < itemsize; ++i) {
1974 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001975 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001976 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001977 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001978 len = -1;
1979 break;
1980 }
Tim Peters67d687a2002-04-29 21:27:32 +00001981 else if (len < 0 || thislen < len)
1982 len = thislen;
1983 }
1984
Tim Peters8572b4f2001-05-06 01:05:02 +00001985 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001986 if (len < 0)
1987 len = 10; /* arbitrary */
1988 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001989 return NULL;
1990
Tim Peters8572b4f2001-05-06 01:05:02 +00001991 /* obtain iterators */
1992 itlist = PyTuple_New(itemsize);
1993 if (itlist == NULL)
1994 goto Fail_ret;
1995 for (i = 0; i < itemsize; ++i) {
1996 PyObject *item = PyTuple_GET_ITEM(args, i);
1997 PyObject *it = PyObject_GetIter(item);
1998 if (it == NULL) {
1999 if (PyErr_ExceptionMatches(PyExc_TypeError))
2000 PyErr_Format(PyExc_TypeError,
2001 "zip argument #%d must support iteration",
2002 i+1);
2003 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002004 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002005 PyTuple_SET_ITEM(itlist, i, it);
2006 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002007
Tim Peters8572b4f2001-05-06 01:05:02 +00002008 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002009 for (i = 0; ; ++i) {
2010 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002011 PyObject *next = PyTuple_New(itemsize);
2012 if (!next)
2013 goto Fail_ret_itlist;
2014
Tim Peters67d687a2002-04-29 21:27:32 +00002015 for (j = 0; j < itemsize; j++) {
2016 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002017 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002018 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002019 if (PyErr_Occurred()) {
2020 Py_DECREF(ret);
2021 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002022 }
2023 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002024 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002025 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002026 }
Tim Peters67d687a2002-04-29 21:27:32 +00002027 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002028 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002029
Tim Peters67d687a2002-04-29 21:27:32 +00002030 if (i < len)
2031 PyList_SET_ITEM(ret, i, next);
2032 else {
2033 int status = PyList_Append(ret, next);
2034 Py_DECREF(next);
2035 ++len;
2036 if (status < 0)
2037 goto Fail_ret_itlist;
2038 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002039 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002040
Tim Peters67d687a2002-04-29 21:27:32 +00002041Done:
2042 if (ret != NULL && i < len) {
2043 /* The list is too big. */
2044 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2045 return NULL;
2046 }
2047 return ret;
2048
Tim Peters8572b4f2001-05-06 01:05:02 +00002049Fail_ret_itlist:
2050 Py_DECREF(itlist);
2051Fail_ret:
2052 Py_DECREF(ret);
2053 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002054}
2055
2056
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002057PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002058"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2059\n\
2060Return a list of tuples, where each tuple contains the i-th element\n\
2061from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002062in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002063
2064
Guido van Rossum79f25d91997-04-29 20:08:16 +00002065static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002066 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2067 {"abs", builtin_abs, METH_O, abs_doc},
2068 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002069 {"callable", builtin_callable, METH_O, callable_doc},
2070 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2071 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2072 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2073 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2074 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2075 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2076 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2077 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2078 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2079 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2080 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2081 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2082 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2083 {"hash", builtin_hash, METH_O, hash_doc},
2084 {"hex", builtin_hex, METH_O, hex_doc},
2085 {"id", builtin_id, METH_O, id_doc},
2086 {"input", builtin_input, METH_VARARGS, input_doc},
2087 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2088 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2089 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2090 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2091 {"len", builtin_len, METH_O, len_doc},
2092 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2093 {"map", builtin_map, METH_VARARGS, map_doc},
2094 {"max", builtin_max, METH_VARARGS, max_doc},
2095 {"min", builtin_min, METH_VARARGS, min_doc},
2096 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002097 {"ord", builtin_ord, METH_O, ord_doc},
2098 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2099 {"range", builtin_range, METH_VARARGS, range_doc},
2100 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2101 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2102 {"reload", builtin_reload, METH_O, reload_doc},
2103 {"repr", builtin_repr, METH_O, repr_doc},
2104 {"round", builtin_round, METH_VARARGS, round_doc},
2105 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002106 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002107 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002108#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002109 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002110#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002111 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002112 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002113 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002114};
2115
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002116PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002117"Built-in functions, exceptions, and other objects.\n\
2118\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002119Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002120
Guido van Rossum25ce5661997-08-02 03:10:38 +00002121PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002122_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002123{
Fred Drake5550de32000-06-20 04:54:19 +00002124 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002125 mod = Py_InitModule4("__builtin__", builtin_methods,
2126 builtin_doc, (PyObject *)NULL,
2127 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002128 if (mod == NULL)
2129 return NULL;
2130 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002131
Tim Peters7571a0f2003-03-23 17:52:28 +00002132#ifdef Py_TRACE_REFS
2133 /* __builtin__ exposes a number of statically allocated objects
2134 * that, before this code was added in 2.3, never showed up in
2135 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2136 * result, programs leaking references to None and False (etc)
2137 * couldn't be diagnosed by examining sys.getobjects(0).
2138 */
2139#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2140#else
2141#define ADD_TO_ALL(OBJECT) (void)0
2142#endif
2143
Tim Peters4b7625e2001-09-13 21:37:17 +00002144#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002145 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2146 return NULL; \
2147 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002148
2149 SETBUILTIN("None", Py_None);
2150 SETBUILTIN("Ellipsis", Py_Ellipsis);
2151 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002152 SETBUILTIN("False", Py_False);
2153 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002154 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002155 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002156 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002157 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002158#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002159 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002160#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002161 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002162 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002163 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002164 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002165 SETBUILTIN("property", &PyProperty_Type);
2166 SETBUILTIN("int", &PyInt_Type);
2167 SETBUILTIN("list", &PyList_Type);
2168 SETBUILTIN("long", &PyLong_Type);
2169 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002170 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002171 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002172 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002173 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2174 SETBUILTIN("str", &PyString_Type);
2175 SETBUILTIN("super", &PySuper_Type);
2176 SETBUILTIN("tuple", &PyTuple_Type);
2177 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002178 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002179
2180 /* Note that open() is just an alias of file(). */
2181 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002182 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002183#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002184 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002185#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002186 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002187 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2188 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002189 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002190 }
2191 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002192
Guido van Rossum25ce5661997-08-02 03:10:38 +00002193 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002194#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002195#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002196}
2197
Guido van Rossume77a7571993-11-03 15:01:26 +00002198/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002199
Guido van Rossum79f25d91997-04-29 20:08:16 +00002200static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002201filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002202{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002203 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002204 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002205 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002206
Guido van Rossumb7b45621995-08-04 04:07:45 +00002207 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002208 if (PyTuple_CheckExact(tuple))
2209 Py_INCREF(tuple);
2210 else
2211 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002212 return tuple;
2213 }
2214
Guido van Rossum79f25d91997-04-29 20:08:16 +00002215 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002216 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002217
Guido van Rossum12d12c51993-10-26 17:58:25 +00002218 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002219 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002220 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002221
Walter Dörwald8dd19322003-02-10 17:36:40 +00002222 if (tuple->ob_type->tp_as_sequence &&
2223 tuple->ob_type->tp_as_sequence->sq_item) {
2224 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002225 if (item == NULL)
2226 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002227 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002228 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002229 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002230 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002231 if (func == Py_None) {
2232 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002233 good = item;
2234 }
2235 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002236 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002237 if (arg == NULL) {
2238 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002239 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002240 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002241 good = PyEval_CallObject(func, arg);
2242 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002243 if (good == NULL) {
2244 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002245 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002246 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002247 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002248 ok = PyObject_IsTrue(good);
2249 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002250 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002251 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002252 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002253 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002254 else
2255 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002256 }
2257
Tim Peters4324aa32001-05-28 22:30:08 +00002258 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002259 return NULL;
2260
Guido van Rossum12d12c51993-10-26 17:58:25 +00002261 return result;
2262
Guido van Rossum12d12c51993-10-26 17:58:25 +00002263Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002264 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002265 return NULL;
2266}
2267
2268
Guido van Rossume77a7571993-11-03 15:01:26 +00002269/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002270
Guido van Rossum79f25d91997-04-29 20:08:16 +00002271static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002272filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002273{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002274 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002275 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002276 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002277 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002278
Guido van Rossum79f25d91997-04-29 20:08:16 +00002279 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002280 /* If it's a real string we can return the original,
2281 * as no character is ever false and __getitem__
2282 * does return this character. If it's a subclass
2283 * we must go through the __getitem__ loop */
2284 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002285 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002286 return strobj;
2287 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002288 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002290 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002291
Guido van Rossum12d12c51993-10-26 17:58:25 +00002292 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002293 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002294 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002295
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002296 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2297 if (item == NULL)
2298 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002299 if (func==Py_None) {
2300 ok = 1;
2301 } else {
2302 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002303 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002304 if (arg == NULL) {
2305 Py_DECREF(item);
2306 goto Fail_1;
2307 }
2308 good = PyEval_CallObject(func, arg);
2309 Py_DECREF(arg);
2310 if (good == NULL) {
2311 Py_DECREF(item);
2312 goto Fail_1;
2313 }
2314 ok = PyObject_IsTrue(good);
2315 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002316 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002317 if (ok) {
2318 int reslen;
2319 if (!PyString_Check(item)) {
2320 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2321 " __getitem__ returned different type");
2322 Py_DECREF(item);
2323 goto Fail_1;
2324 }
2325 reslen = PyString_GET_SIZE(item);
2326 if (reslen == 1) {
2327 PyString_AS_STRING(result)[j++] =
2328 PyString_AS_STRING(item)[0];
2329 } else {
2330 /* do we need more space? */
2331 int need = j + reslen + len-i-1;
2332 if (need > outlen) {
2333 /* overallocate, to avoid reallocations */
2334 if (need<2*outlen)
2335 need = 2*outlen;
2336 if (_PyString_Resize(&result, need)) {
2337 Py_DECREF(item);
2338 return NULL;
2339 }
2340 outlen = need;
2341 }
2342 memcpy(
2343 PyString_AS_STRING(result) + j,
2344 PyString_AS_STRING(item),
2345 reslen
2346 );
2347 j += reslen;
2348 }
2349 }
Tim Peters388ed082001-04-07 20:34:48 +00002350 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351 }
2352
Walter Dörwald903f1e02003-02-04 16:28:00 +00002353 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002354 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossum12d12c51993-10-26 17:58:25 +00002356 return result;
2357
Guido van Rossum12d12c51993-10-26 17:58:25 +00002358Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002359 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002360 return NULL;
2361}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002362
2363#ifdef Py_USING_UNICODE
2364/* Helper for filter(): filter a Unicode object through a function */
2365
2366static PyObject *
2367filterunicode(PyObject *func, PyObject *strobj)
2368{
2369 PyObject *result;
2370 register int i, j;
2371 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002372 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002373
2374 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002375 /* If it's a real string we can return the original,
2376 * as no character is ever false and __getitem__
2377 * does return this character. If it's a subclass
2378 * we must go through the __getitem__ loop */
2379 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002380 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002381 return strobj;
2382 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002383 }
2384 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2385 return NULL;
2386
2387 for (i = j = 0; i < len; ++i) {
2388 PyObject *item, *arg, *good;
2389 int ok;
2390
2391 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2392 if (item == NULL)
2393 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002394 if (func == Py_None) {
2395 ok = 1;
2396 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002397 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002398 if (arg == NULL) {
2399 Py_DECREF(item);
2400 goto Fail_1;
2401 }
2402 good = PyEval_CallObject(func, arg);
2403 Py_DECREF(arg);
2404 if (good == NULL) {
2405 Py_DECREF(item);
2406 goto Fail_1;
2407 }
2408 ok = PyObject_IsTrue(good);
2409 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002410 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002411 if (ok) {
2412 int reslen;
2413 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002414 PyErr_SetString(PyExc_TypeError,
2415 "can't filter unicode to unicode:"
2416 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002417 Py_DECREF(item);
2418 goto Fail_1;
2419 }
2420 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002421 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002422 PyUnicode_AS_UNICODE(result)[j++] =
2423 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002424 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002425 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002426 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002427 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002428 /* overallocate,
2429 to avoid reallocations */
2430 if (need < 2 * outlen)
2431 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002432 if (PyUnicode_Resize(
2433 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002434 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002435 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002436 }
2437 outlen = need;
2438 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002439 memcpy(PyUnicode_AS_UNICODE(result) + j,
2440 PyUnicode_AS_UNICODE(item),
2441 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002442 j += reslen;
2443 }
2444 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002445 Py_DECREF(item);
2446 }
2447
Walter Dörwald903f1e02003-02-04 16:28:00 +00002448 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002449 PyUnicode_Resize(&result, j);
2450
2451 return result;
2452
2453Fail_1:
2454 Py_DECREF(result);
2455 return NULL;
2456}
2457#endif