blob: f4f8b7a1a7be54b775703324515b2b8dd403bfad [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");
462 return NULL;
463 }
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");
468 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000469 if (globals == Py_None) {
470 globals = PyEval_GetGlobals();
471 if (locals == Py_None)
472 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000473 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000474 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000475 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000476
Guido van Rossum79f25d91997-04-29 20:08:16 +0000477 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
478 if (PyDict_SetItemString(globals, "__builtins__",
479 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000480 return NULL;
481 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000482
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000483 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000484 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000485 PyErr_SetString(PyExc_TypeError,
486 "code object passed to eval() may not contain free variables");
487 return NULL;
488 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000489 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000490 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000491
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000492 if (!PyString_Check(cmd) &&
493 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000494 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000495 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000496 return NULL;
497 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000498 cf.cf_flags = 0;
499
500#ifdef Py_USING_UNICODE
501 if (PyUnicode_Check(cmd)) {
502 tmp = PyUnicode_AsUTF8String(cmd);
503 if (tmp == NULL)
504 return NULL;
505 cmd = tmp;
506 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
507 }
508#endif
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000509 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000510 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000511 while (*str == ' ' || *str == '\t')
512 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000513
Tim Peters9fa96be2001-08-17 23:04:59 +0000514 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000515 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
516 Py_XDECREF(tmp);
517 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000518}
519
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000520PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000521"eval(source[, globals[, locals]]) -> value\n\
522\n\
523Evaluate the source in the context of globals and locals.\n\
524The source may be a string representing a Python expression\n\
525or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000526The globals must be a dictionary and locals can be any mappping,\n\
527defaulting to the current globals and locals.\n\
528If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000529
530
Guido van Rossum79f25d91997-04-29 20:08:16 +0000531static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000532builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000533{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000534 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000535 PyObject *globals = Py_None, *locals = Py_None;
536 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000537 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000538 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000539 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000542 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000543 &PyDict_Type, &globals,
544 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000545 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546 if (globals == Py_None) {
547 globals = PyEval_GetGlobals();
548 if (locals == Py_None)
549 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000550 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000551 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000552 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000553 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
554 if (PyDict_SetItemString(globals, "__builtins__",
555 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000556 return NULL;
557 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000558
559 exists = 0;
560 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000561#if defined(PLAN9)
562 {
563 Dir *d;
564
565 if ((d = dirstat(filename))!=nil) {
566 if(d->mode & DMDIR)
567 werrstr("is a directory");
568 else
569 exists = 1;
570 free(d);
571 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000572 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000573#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000574 if (object_exists(filename)) {
575 if (isdir(filename))
576 errno = EISDIR;
577 else
578 exists = 1;
579 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000580#else /* standard Posix */
581 {
582 struct stat s;
583 if (stat(filename, &s) == 0) {
584 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000585# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000586 errno = EOS2ERR;
587# else
588 errno = EISDIR;
589# endif
590 else
591 exists = 1;
592 }
593 }
594#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000595
596 if (exists) {
597 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000598 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000599 Py_END_ALLOW_THREADS
600
601 if (fp == NULL) {
602 exists = 0;
603 }
604 }
605
606 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000607 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000608 return NULL;
609 }
Tim Peters5ba58662001-07-16 02:29:45 +0000610 cf.cf_flags = 0;
611 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000612 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000613 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000614 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000615 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000616 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000617 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000618}
619
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000620PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000621"execfile(filename[, globals[, locals]])\n\
622\n\
623Read and execute a Python script from a file.\n\
624The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000625globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000626
627
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000629builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000630{
Guido van Rossum950ff291998-06-29 13:38:57 +0000631 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000633
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000634 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000635 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000636#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000637 if (PyUnicode_Check(name)) {
638 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
639 if (name == NULL)
640 return NULL;
641 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000642#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000643
644 if (!PyString_Check(name)) {
645 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000646 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000647 return NULL;
648 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000649 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000650 if (result == NULL && dflt != NULL &&
651 PyErr_ExceptionMatches(PyExc_AttributeError))
652 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000653 PyErr_Clear();
654 Py_INCREF(dflt);
655 result = dflt;
656 }
657 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000658}
659
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000660PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000661"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000662\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000663Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
664When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000665exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000666
667
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000669builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000670{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000672
Guido van Rossum79f25d91997-04-29 20:08:16 +0000673 d = PyEval_GetGlobals();
674 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000675 return d;
676}
677
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000678PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000679"globals() -> dictionary\n\
680\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000681Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000682
683
Guido van Rossum79f25d91997-04-29 20:08:16 +0000684static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000685builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000686{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000687 PyObject *v;
688 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000689
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000690 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000691 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000692#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000693 if (PyUnicode_Check(name)) {
694 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
695 if (name == NULL)
696 return NULL;
697 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000698#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000699
700 if (!PyString_Check(name)) {
701 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000702 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000703 return NULL;
704 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000706 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000707 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000708 Py_INCREF(Py_False);
709 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000710 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000711 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000712 Py_INCREF(Py_True);
713 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000714}
715
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000716PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000717"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000718\n\
719Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000720(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000721
722
Guido van Rossum79f25d91997-04-29 20:08:16 +0000723static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000724builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000725{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000726 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000727}
728
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000729PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000730"id(object) -> integer\n\
731\n\
732Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000733simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000734
735
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000737builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000738{
739 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000740 PyObject *it; /* the iterator object */
741 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000742 } sequence;
743
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000745 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000747 register int i, j;
748
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 PyErr_SetString(PyExc_TypeError,
752 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000753 return NULL;
754 }
755
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000757 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000758
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000759 if (func == Py_None && n == 1) {
760 /* map(None, S) is the same as list(S). */
761 return PySequence_List(PyTuple_GetItem(args, 1));
762 }
763
Tim Peters4e9afdc2001-05-03 23:54:49 +0000764 /* Get space for sequence descriptors. Must NULL out the iterator
765 * pointers so that jumping to Fail_2 later doesn't see trash.
766 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
768 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000769 return NULL;
770 }
771 for (i = 0; i < n; ++i) {
772 seqs[i].it = (PyObject*)NULL;
773 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000774 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000775
Tim Peters4e9afdc2001-05-03 23:54:49 +0000776 /* Do a first pass to obtain iterators for the arguments, and set len
777 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000778 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000779 len = 0;
780 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
781 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000782 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000783
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 /* Get iterator. */
785 curseq = PyTuple_GetItem(args, i+1);
786 sqp->it = PyObject_GetIter(curseq);
787 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000788 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000789 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000790 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000791 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000792 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000793 goto Fail_2;
794 }
795
Tim Peters4e9afdc2001-05-03 23:54:49 +0000796 /* Update len. */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000797 curlen = PyObject_Size(curseq);
798 if (curlen < 0) {
799 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000800 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000801 }
802 if (curlen > len)
803 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000804 }
805
Tim Peters4e9afdc2001-05-03 23:54:49 +0000806 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000808 goto Fail_2;
809
Tim Peters4e9afdc2001-05-03 23:54:49 +0000810 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000811 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000813 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000814
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000816 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000817 else if ((alist = PyTuple_New(n)) == NULL)
818 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000819
820 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000821 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 Py_INCREF(Py_None);
823 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000824 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000825 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000826 item = PyIter_Next(sqp->it);
827 if (item)
828 ++numactive;
829 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000830 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000831 Py_XDECREF(alist);
832 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000833 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000834 Py_INCREF(Py_None);
835 item = Py_None;
836 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000837 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000838 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000839 if (alist)
840 PyTuple_SET_ITEM(alist, j, item);
841 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000842 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000843 }
844
Guido van Rossum32120311995-07-10 13:52:21 +0000845 if (!alist)
846 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000847
Tim Peters4e9afdc2001-05-03 23:54:49 +0000848 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000850 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000851 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000852
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000854 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000855 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000856 value = PyEval_CallObject(func, alist);
857 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000858 if (value == NULL)
859 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000860 }
861 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000862 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000863 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000864 if (status < 0)
865 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000866 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000867 else if (PyList_SetItem(result, i, value) < 0)
868 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000869 }
870
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000871 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
872 goto Fail_1;
873
Tim Peters4e9afdc2001-05-03 23:54:49 +0000874 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000875
Guido van Rossum12d12c51993-10-26 17:58:25 +0000876Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000878Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000879 result = NULL;
880Succeed:
881 assert(seqs);
882 for (i = 0; i < n; ++i)
883 Py_XDECREF(seqs[i].it);
884 PyMem_DEL(seqs);
885 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000886}
887
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000888PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000889"map(function, sequence[, sequence, ...]) -> list\n\
890\n\
891Return a list of the results of applying the function to the items of\n\
892the argument sequence(s). If more than one sequence is given, the\n\
893function is called with an argument list consisting of the corresponding\n\
894item of each sequence, substituting None for missing values when not all\n\
895sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000896the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000897
898
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000900builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000901{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902 PyObject *v;
903 PyObject *name;
904 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000905
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000906 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000907 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000908 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000909 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 Py_INCREF(Py_None);
911 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000912}
913
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000914PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000915"setattr(object, name, value)\n\
916\n\
917Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000918``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919
920
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000922builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000923{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 PyObject *v;
925 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000926
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000927 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000928 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000930 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931 Py_INCREF(Py_None);
932 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000933}
934
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000935PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000936"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000937\n\
938Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000939``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000940
941
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000943builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000944{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000946
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000948 if (x == -1)
949 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000951}
952
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000953PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000954"hash(object) -> integer\n\
955\n\
956Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000957the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000958
959
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000961builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +0000962{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000963 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000964
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000966 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000968 "hex() argument can't be converted to hex");
969 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +0000970 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000971 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +0000972}
973
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000974PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000975"hex(number) -> string\n\
976\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000977Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000978
979
Tim Petersdbd9ba62000-07-09 03:09:57 +0000980static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000981
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000983builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000984{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000985 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000987 PyObject *res;
988 PyObject *globals, *locals;
Hye-Shik Changff83c2b2004-02-02 13:39:01 +0000989 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000990
991 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000992 if (line == NULL)
993 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000995 return NULL;
996 while (*str == ' ' || *str == '\t')
997 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 globals = PyEval_GetGlobals();
999 locals = PyEval_GetLocals();
1000 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1001 if (PyDict_SetItemString(globals, "__builtins__",
1002 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001003 return NULL;
1004 }
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001005 cf.cf_flags = 0;
1006 PyEval_MergeCompilerFlags(&cf);
1007 res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001009 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001010}
1011
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001012PyDoc_STRVAR(input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001013"input([prompt]) -> value\n\
1014\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001015Equivalent to eval(raw_input(prompt)).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001016
1017
Guido van Rossume8811f81997-02-14 15:48:05 +00001018static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001019builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001020{
1021 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001022 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001023 return NULL;
1024 Py_INCREF(s);
1025 PyString_InternInPlace(&s);
1026 return s;
1027}
1028
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030"intern(string) -> string\n\
1031\n\
1032``Intern'' the given string. This enters the string in the (global)\n\
1033table of interned strings whose purpose is to speed up dictionary lookups.\n\
1034Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001035same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001036
1037
Guido van Rossum79f25d91997-04-29 20:08:16 +00001038static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001039builtin_iter(PyObject *self, PyObject *args)
1040{
1041 PyObject *v, *w = NULL;
1042
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001043 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001044 return NULL;
1045 if (w == NULL)
1046 return PyObject_GetIter(v);
1047 if (!PyCallable_Check(v)) {
1048 PyErr_SetString(PyExc_TypeError,
1049 "iter(v, w): v must be callable");
1050 return NULL;
1051 }
1052 return PyCallIter_New(v, w);
1053}
1054
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001055PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001056"iter(collection) -> iterator\n\
1057iter(callable, sentinel) -> iterator\n\
1058\n\
1059Get an iterator from an object. In the first form, the argument must\n\
1060supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001061In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001062
1063
1064static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001065builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001066{
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001067 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001068
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001069 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001070 if (res < 0 && PyErr_Occurred())
1071 return NULL;
1072 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001073}
1074
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001075PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001076"len(object) -> integer\n\
1077\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001078Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001079
1080
Guido van Rossum79f25d91997-04-29 20:08:16 +00001081static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001082builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001083{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001085
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086 d = PyEval_GetLocals();
1087 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001088 return d;
1089}
1090
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001091PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001092"locals() -> dictionary\n\
1093\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001094Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001095
1096
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001098min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001099{
Tim Petersc3074532001-05-03 07:00:32 +00001100 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001101
Guido van Rossum79f25d91997-04-29 20:08:16 +00001102 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001103 v = args;
Raymond Hettingerbbfb9102002-12-29 18:31:19 +00001104 else if (!PyArg_UnpackTuple(args, (op==Py_LT) ? "min" : "max", 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001105 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001106
Tim Petersc3074532001-05-03 07:00:32 +00001107 it = PyObject_GetIter(v);
1108 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001109 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001110
1111 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001112 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001113 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001114 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001115 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001116 Py_XDECREF(w);
1117 Py_DECREF(it);
1118 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001119 }
Tim Petersc3074532001-05-03 07:00:32 +00001120 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001121 }
Tim Petersc3074532001-05-03 07:00:32 +00001122
Guido van Rossum2d951851994-08-29 12:52:16 +00001123 if (w == NULL)
1124 w = x;
1125 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001126 int cmp = PyObject_RichCompareBool(x, w, op);
1127 if (cmp > 0) {
1128 Py_DECREF(w);
1129 w = x;
1130 }
1131 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001132 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001133 Py_DECREF(w);
1134 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001135 return NULL;
1136 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001137 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001139 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001140 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001141 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001143 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001144 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001145 return w;
1146}
1147
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001149builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001150{
Guido van Rossum53451b32001-01-17 15:47:24 +00001151 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001152}
1153
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001154PyDoc_STRVAR(min_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001155"min(sequence) -> value\n\
1156min(a, b, c, ...) -> value\n\
1157\n\
1158With a single sequence argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001159With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001160
1161
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001163builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001164{
Guido van Rossum53451b32001-01-17 15:47:24 +00001165 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001166}
1167
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001168PyDoc_STRVAR(max_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001169"max(sequence) -> value\n\
1170max(a, b, c, ...) -> value\n\
1171\n\
1172With a single sequence argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001173With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001174
1175
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001177builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001178{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001180
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001181 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1182 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001183 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001184 "oct() argument can't be converted to oct");
1185 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001186 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001187 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001188}
1189
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001190PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001191"oct(number) -> string\n\
1192\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001193Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001194
1195
Guido van Rossum79f25d91997-04-29 20:08:16 +00001196static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001197builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001198{
Guido van Rossum09095f32000-03-10 23:00:52 +00001199 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001200 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001201
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001202 if (PyString_Check(obj)) {
1203 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001204 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001205 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001206 return PyInt_FromLong(ord);
1207 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001208#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001209 } else if (PyUnicode_Check(obj)) {
1210 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001211 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001212 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001213 return PyInt_FromLong(ord);
1214 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001215#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001216 } else {
1217 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001218 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001219 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001220 return NULL;
1221 }
1222
Guido van Rossumad991772001-01-12 16:03:05 +00001223 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001224 "ord() expected a character, "
1225 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001226 size);
1227 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001228}
1229
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001230PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001231"ord(c) -> integer\n\
1232\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001233Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001234
1235
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001237builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001238{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001239 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001240
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001241 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001242 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001243 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001244}
1245
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001247"pow(x, y[, z]) -> number\n\
1248\n\
1249With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001250equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001251
1252
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001253
1254/* Return number of items in range (lo, hi, step), when arguments are
1255 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1256 * & only if the true value is too large to fit in a signed long.
1257 * Arguments MUST return 1 with either PyInt_Check() or
1258 * PyLong_Check(). Return -1 when there is an error.
1259 */
1260static long
1261get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1262{
1263 /* -------------------------------------------------------------
1264 Algorithm is equal to that of get_len_of_range(), but it operates
1265 on PyObjects (which are assumed to be PyLong or PyInt objects).
1266 ---------------------------------------------------------------*/
1267 long n;
1268 PyObject *diff = NULL;
1269 PyObject *one = NULL;
1270 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1271 /* holds sub-expression evaluations */
1272
1273 /* if (lo >= hi), return length of 0. */
1274 if (PyObject_Compare(lo, hi) >= 0)
1275 return 0;
1276
1277 if ((one = PyLong_FromLong(1L)) == NULL)
1278 goto Fail;
1279
1280 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1281 goto Fail;
1282
1283 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1284 goto Fail;
1285
1286 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1287 goto Fail;
1288
1289 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1290 goto Fail;
1291
1292 n = PyLong_AsLong(tmp3);
1293 if (PyErr_Occurred()) { /* Check for Overflow */
1294 PyErr_Clear();
1295 goto Fail;
1296 }
1297
1298 Py_DECREF(tmp3);
1299 Py_DECREF(tmp2);
1300 Py_DECREF(diff);
1301 Py_DECREF(tmp1);
1302 Py_DECREF(one);
1303 return n;
1304
1305 Fail:
1306 Py_XDECREF(tmp3);
1307 Py_XDECREF(tmp2);
1308 Py_XDECREF(diff);
1309 Py_XDECREF(tmp1);
1310 Py_XDECREF(one);
1311 return -1;
1312}
1313
1314/* An extension of builtin_range() that handles the case when PyLong
1315 * arguments are given. */
1316static PyObject *
1317handle_range_longs(PyObject *self, PyObject *args)
1318{
1319 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001320 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001321 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001322
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001323 PyObject *curnum = NULL;
1324 PyObject *v = NULL;
1325 long bign;
1326 int i, n;
1327 int cmp_result;
1328
Tim Peters874e1f72003-04-13 22:13:08 +00001329 PyObject *zero = PyLong_FromLong(0);
1330
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001331 if (zero == NULL)
1332 return NULL;
1333
Tim Peters874e1f72003-04-13 22:13:08 +00001334 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1335 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001336 return NULL;
1337 }
1338
Tim Peters874e1f72003-04-13 22:13:08 +00001339 /* Figure out which way we were called, supply defaults, and be
1340 * sure to incref everything so that the decrefs at the end
1341 * are correct.
1342 */
1343 assert(ilow != NULL);
1344 if (ihigh == NULL) {
1345 /* only 1 arg -- it's the upper limit */
1346 ihigh = ilow;
1347 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001348 }
Tim Peters874e1f72003-04-13 22:13:08 +00001349 assert(ihigh != NULL);
1350 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001351
Tim Peters874e1f72003-04-13 22:13:08 +00001352 /* ihigh correct now; do ilow */
1353 if (ilow == NULL)
1354 ilow = zero;
1355 Py_INCREF(ilow);
1356
1357 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001358 if (istep == NULL) {
1359 istep = PyLong_FromLong(1L);
1360 if (istep == NULL)
1361 goto Fail;
1362 }
1363 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001364 Py_INCREF(istep);
1365 }
1366
Tim Peters874e1f72003-04-13 22:13:08 +00001367 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001368 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001369 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001370 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001371 goto Fail;
1372 }
1373
Tim Peters874e1f72003-04-13 22:13:08 +00001374 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001375 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001376 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001377 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001378 goto Fail;
1379 }
1380
1381 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001382 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001383 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001384 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001385 goto Fail;
1386 }
1387
1388 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1389 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001390 if (cmp_result == 0) {
1391 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001392 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001393 goto Fail;
1394 }
1395
1396 if (cmp_result > 0)
1397 bign = get_len_of_range_longs(ilow, ihigh, istep);
1398 else {
1399 PyObject *neg_istep = PyNumber_Negative(istep);
1400 if (neg_istep == NULL)
1401 goto Fail;
1402 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1403 Py_DECREF(neg_istep);
1404 }
1405
1406 n = (int)bign;
1407 if (bign < 0 || (long)n != bign) {
1408 PyErr_SetString(PyExc_OverflowError,
1409 "range() result has too many items");
1410 goto Fail;
1411 }
1412
1413 v = PyList_New(n);
1414 if (v == NULL)
1415 goto Fail;
1416
1417 curnum = ilow;
1418 Py_INCREF(curnum);
1419
1420 for (i = 0; i < n; i++) {
1421 PyObject *w = PyNumber_Long(curnum);
1422 PyObject *tmp_num;
1423 if (w == NULL)
1424 goto Fail;
1425
1426 PyList_SET_ITEM(v, i, w);
1427
1428 tmp_num = PyNumber_Add(curnum, istep);
1429 if (tmp_num == NULL)
1430 goto Fail;
1431
1432 Py_DECREF(curnum);
1433 curnum = tmp_num;
1434 }
Tim Peters874e1f72003-04-13 22:13:08 +00001435 Py_DECREF(ilow);
1436 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001437 Py_DECREF(istep);
1438 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001439 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001440 return v;
1441
1442 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001443 Py_DECREF(ilow);
1444 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001445 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001446 Py_DECREF(zero);
1447 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001448 Py_XDECREF(v);
1449 return NULL;
1450}
1451
Guido van Rossum124eff01999-02-23 16:11:01 +00001452/* Return number of items in range/xrange (lo, hi, step). step > 0
1453 * required. Return a value < 0 if & only if the true value is too
1454 * large to fit in a signed long.
1455 */
1456static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001457get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001458{
1459 /* -------------------------------------------------------------
1460 If lo >= hi, the range is empty.
1461 Else if n values are in the range, the last one is
1462 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1463 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1464 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1465 the RHS is non-negative and so truncation is the same as the
1466 floor. Letting M be the largest positive long, the worst case
1467 for the RHS numerator is hi=M, lo=-M-1, and then
1468 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1469 precision to compute the RHS exactly.
1470 ---------------------------------------------------------------*/
1471 long n = 0;
1472 if (lo < hi) {
1473 unsigned long uhi = (unsigned long)hi;
1474 unsigned long ulo = (unsigned long)lo;
1475 unsigned long diff = uhi - ulo - 1;
1476 n = (long)(diff / (unsigned long)step + 1);
1477 }
1478 return n;
1479}
1480
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001482builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001483{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001484 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001485 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001486 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001487
Guido van Rossum79f25d91997-04-29 20:08:16 +00001488 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001489
Guido van Rossum79f25d91997-04-29 20:08:16 +00001490 if (PyTuple_Size(args) <= 1) {
1491 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001492 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001493 &ihigh)) {
1494 PyErr_Clear();
1495 return handle_range_longs(self, args);
1496 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497 }
1498 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001499 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001500 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001501 &ilow, &ihigh, &istep)) {
1502 PyErr_Clear();
1503 return handle_range_longs(self, args);
1504 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001505 }
1506 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001507 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001508 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001509 return NULL;
1510 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001511 if (istep > 0)
1512 bign = get_len_of_range(ilow, ihigh, istep);
1513 else
1514 bign = get_len_of_range(ihigh, ilow, -istep);
1515 n = (int)bign;
1516 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001517 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001518 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001519 return NULL;
1520 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001521 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001522 if (v == NULL)
1523 return NULL;
1524 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001525 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001526 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001527 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001528 return NULL;
1529 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001530 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001531 ilow += istep;
1532 }
1533 return v;
1534}
1535
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001536PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537"range([start,] stop[, step]) -> list of integers\n\
1538\n\
1539Return a list containing an arithmetic progression of integers.\n\
1540range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1541When step is given, it specifies the increment (or decrement).\n\
1542For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001543These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001544
1545
Guido van Rossum79f25d91997-04-29 20:08:16 +00001546static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001547builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001548{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001549 PyObject *v = NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001550 PyObject *fin = PySys_GetObject("stdin");
1551 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001552
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001553 if (!PyArg_UnpackTuple(args, "[raw_]input", 0, 1, &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001554 return NULL;
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001555
1556 if (fin == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001557 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdin");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001558 return NULL;
1559 }
1560 if (fout == NULL) {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001561 PyErr_SetString(PyExc_RuntimeError, "[raw_]input: lost sys.stdout");
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001562 return NULL;
1563 }
1564 if (PyFile_SoftSpace(fout, 0)) {
1565 if (PyFile_WriteString(" ", fout) != 0)
1566 return NULL;
1567 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001568 if (PyFile_Check (fin) && PyFile_Check (fout)
1569 && isatty(fileno(PyFile_AsFile(fin)))
1570 && isatty(fileno(PyFile_AsFile(fout)))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001571 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001572 char *prompt;
1573 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001574 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001575 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001576 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001577 if (po == NULL)
1578 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001579 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001580 if (prompt == NULL)
1581 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001582 }
1583 else {
1584 po = NULL;
1585 prompt = "";
1586 }
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001587 s = PyOS_Readline(PyFile_AsFile (fin), PyFile_AsFile (fout),
1588 prompt);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001589 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001590 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001591 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001592 return NULL;
1593 }
1594 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001595 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001596 result = NULL;
1597 }
1598 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001599 size_t len = strlen(s);
1600 if (len > INT_MAX) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001601 PyErr_SetString(PyExc_OverflowError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001602 "[raw_]input: input too long");
Guido van Rossum106f2da2000-06-28 21:12:25 +00001603 result = NULL;
1604 }
1605 else {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001606 result = PyString_FromStringAndSize(s,
1607 (int)(len-1));
Guido van Rossum106f2da2000-06-28 21:12:25 +00001608 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001609 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001610 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001611 return result;
1612 }
Guido van Rossum90933611991-06-07 16:10:43 +00001613 if (v != NULL) {
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001614 if (PyFile_WriteObject(v, fout, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001615 return NULL;
1616 }
Martin v. Löwis31d2df52002-08-14 15:46:02 +00001617 return PyFile_GetLine(fin, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001618}
1619
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001620PyDoc_STRVAR(raw_input_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001621"raw_input([prompt]) -> string\n\
1622\n\
1623Read a string from standard input. The trailing newline is stripped.\n\
1624If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1625On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001626is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001627
1628
Guido van Rossum79f25d91997-04-29 20:08:16 +00001629static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001630builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001631{
Tim Peters15d81ef2001-05-04 04:39:21 +00001632 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001633
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001634 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001635 return NULL;
1636 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001637 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001638
Tim Peters15d81ef2001-05-04 04:39:21 +00001639 it = PyObject_GetIter(seq);
1640 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001641 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001642 "reduce() arg 2 must support iteration");
1643 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001644 return NULL;
1645 }
1646
Guido van Rossum79f25d91997-04-29 20:08:16 +00001647 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001648 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001649
Tim Peters15d81ef2001-05-04 04:39:21 +00001650 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001651 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001652
1653 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001654 Py_DECREF(args);
1655 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001656 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001657 }
1658
Tim Peters15d81ef2001-05-04 04:39:21 +00001659 op2 = PyIter_Next(it);
1660 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001661 if (PyErr_Occurred())
1662 goto Fail;
1663 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001664 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001665
Guido van Rossum2d951851994-08-29 12:52:16 +00001666 if (result == NULL)
1667 result = op2;
1668 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669 PyTuple_SetItem(args, 0, result);
1670 PyTuple_SetItem(args, 1, op2);
1671 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001672 goto Fail;
1673 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001674 }
1675
Guido van Rossum79f25d91997-04-29 20:08:16 +00001676 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001677
Guido van Rossum2d951851994-08-29 12:52:16 +00001678 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001679 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001680 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001681
Tim Peters15d81ef2001-05-04 04:39:21 +00001682 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001683 return result;
1684
Guido van Rossum2d951851994-08-29 12:52:16 +00001685Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001686 Py_XDECREF(args);
1687 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001688 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001689 return NULL;
1690}
1691
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001692PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001693"reduce(function, sequence[, initial]) -> value\n\
1694\n\
1695Apply a function of two arguments cumulatively to the items of a sequence,\n\
1696from left to right, so as to reduce the sequence to a single value.\n\
1697For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1698((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1699of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001700sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001701
1702
Guido van Rossum79f25d91997-04-29 20:08:16 +00001703static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001704builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001705{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001707}
1708
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001709PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001710"reload(module) -> module\n\
1711\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001712Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001713
1714
Guido van Rossum79f25d91997-04-29 20:08:16 +00001715static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001716builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001717{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001718 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001719}
1720
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001721PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001722"repr(object) -> string\n\
1723\n\
1724Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001725For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001726
1727
Guido van Rossum79f25d91997-04-29 20:08:16 +00001728static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001729builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001730{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001731 double x;
1732 double f;
1733 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001734 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001735
Guido van Rossum79f25d91997-04-29 20:08:16 +00001736 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001737 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001738 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001739 i = abs(ndigits);
1740 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001741 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001742 if (ndigits < 0)
1743 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001744 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001745 x *= f;
1746 if (x >= 0.0)
1747 x = floor(x + 0.5);
1748 else
1749 x = ceil(x - 0.5);
1750 if (ndigits < 0)
1751 x *= f;
1752 else
1753 x /= f;
1754 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001755}
1756
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001757PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758"round(number[, ndigits]) -> floating point number\n\
1759\n\
1760Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001761This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001762
Raymond Hettinger64958a12003-12-17 20:43:33 +00001763static PyObject *
1764builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1765{
1766 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1767 PyObject *callable;
1768 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
1769 long reverse;
1770
1771 if (args != NULL) {
1772 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1773 kwlist, &seq, &compare, &keyfunc, &reverse))
1774 return NULL;
1775 }
1776
1777 newlist = PySequence_List(seq);
1778 if (newlist == NULL)
1779 return NULL;
1780
1781 callable = PyObject_GetAttrString(newlist, "sort");
1782 if (callable == NULL) {
1783 Py_DECREF(newlist);
1784 return NULL;
1785 }
1786
1787 newargs = PyTuple_GetSlice(args, 1, 4);
1788 if (newargs == NULL) {
1789 Py_DECREF(newlist);
1790 Py_DECREF(callable);
1791 return NULL;
1792 }
1793
1794 v = PyObject_Call(callable, newargs, kwds);
1795 Py_DECREF(newargs);
1796 Py_DECREF(callable);
1797 if (v == NULL) {
1798 Py_DECREF(newlist);
1799 return NULL;
1800 }
1801 Py_DECREF(v);
1802 return newlist;
1803}
1804
1805PyDoc_STRVAR(sorted_doc,
1806"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807
Guido van Rossum79f25d91997-04-29 20:08:16 +00001808static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001809builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001810{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 PyObject *v = NULL;
1812 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001814 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001815 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001816 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001818 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 if (!PyErr_Occurred())
1820 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001821 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001822 }
1823 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001825 }
1826 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001828 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001830 "vars() argument must have __dict__ attribute");
1831 return NULL;
1832 }
1833 }
1834 return d;
1835}
1836
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001837PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001838"vars([object]) -> dictionary\n\
1839\n\
1840Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001841With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001842
Alex Martellia70b1912003-04-22 08:12:33 +00001843
1844static PyObject*
1845builtin_sum(PyObject *self, PyObject *args)
1846{
1847 PyObject *seq;
1848 PyObject *result = NULL;
1849 PyObject *temp, *item, *iter;
1850
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001851 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001852 return NULL;
1853
1854 iter = PyObject_GetIter(seq);
1855 if (iter == NULL)
1856 return NULL;
1857
1858 if (result == NULL) {
1859 result = PyInt_FromLong(0);
1860 if (result == NULL) {
1861 Py_DECREF(iter);
1862 return NULL;
1863 }
1864 } else {
1865 /* reject string values for 'start' parameter */
1866 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1867 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001868 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001869 Py_DECREF(iter);
1870 return NULL;
1871 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001872 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001873 }
1874
1875 for(;;) {
1876 item = PyIter_Next(iter);
1877 if (item == NULL) {
1878 /* error, or end-of-sequence */
1879 if (PyErr_Occurred()) {
1880 Py_DECREF(result);
1881 result = NULL;
1882 }
1883 break;
1884 }
Alex Martellia253e182003-10-25 23:24:14 +00001885 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001886 Py_DECREF(result);
1887 Py_DECREF(item);
1888 result = temp;
1889 if (result == NULL)
1890 break;
1891 }
1892 Py_DECREF(iter);
1893 return result;
1894}
1895
1896PyDoc_STRVAR(sum_doc,
1897"sum(sequence, start=0) -> value\n\
1898\n\
1899Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1900of parameter 'start'. When the sequence is empty, returns start.");
1901
1902
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001903static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001904builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001905{
1906 PyObject *inst;
1907 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001908 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001909
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001910 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001911 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001912
Guido van Rossum823649d2001-03-21 18:40:58 +00001913 retval = PyObject_IsInstance(inst, cls);
1914 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001915 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001916 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001917}
1918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001919PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001920"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001921\n\
1922Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001923With a type as second argument, return whether that is the object's type.\n\
1924The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001925isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001926
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001927
1928static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001929builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001930{
1931 PyObject *derived;
1932 PyObject *cls;
1933 int retval;
1934
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001935 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001936 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001937
Guido van Rossum823649d2001-03-21 18:40:58 +00001938 retval = PyObject_IsSubclass(derived, cls);
1939 if (retval < 0)
1940 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001941 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001942}
1943
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001944PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001945"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001946\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001947Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1948When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1949is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001950
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001951
Barry Warsawbd599b52000-08-03 15:45:29 +00001952static PyObject*
1953builtin_zip(PyObject *self, PyObject *args)
1954{
1955 PyObject *ret;
Tim Peters67d687a2002-04-29 21:27:32 +00001956 const int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00001957 int i;
1958 PyObject *itlist; /* tuple of iterators */
Tim Peters67d687a2002-04-29 21:27:32 +00001959 int len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001960
Raymond Hettingereaef6152003-08-02 07:42:57 +00001961 if (itemsize == 0)
1962 return PyList_New(0);
1963
Barry Warsawbd599b52000-08-03 15:45:29 +00001964 /* args must be a tuple */
1965 assert(PyTuple_Check(args));
1966
Tim Peters39a86c22002-05-12 07:19:38 +00001967 /* Guess at result length: the shortest of the input lengths.
1968 If some argument refuses to say, we refuse to guess too, lest
1969 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001970 len = -1; /* unknown */
1971 for (i = 0; i < itemsize; ++i) {
1972 PyObject *item = PyTuple_GET_ITEM(args, i);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001973 int thislen = PyObject_Size(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001974 if (thislen < 0) {
Tim Peters67d687a2002-04-29 21:27:32 +00001975 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001976 len = -1;
1977 break;
1978 }
Tim Peters67d687a2002-04-29 21:27:32 +00001979 else if (len < 0 || thislen < len)
1980 len = thislen;
1981 }
1982
Tim Peters8572b4f2001-05-06 01:05:02 +00001983 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001984 if (len < 0)
1985 len = 10; /* arbitrary */
1986 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001987 return NULL;
1988
Tim Peters8572b4f2001-05-06 01:05:02 +00001989 /* obtain iterators */
1990 itlist = PyTuple_New(itemsize);
1991 if (itlist == NULL)
1992 goto Fail_ret;
1993 for (i = 0; i < itemsize; ++i) {
1994 PyObject *item = PyTuple_GET_ITEM(args, i);
1995 PyObject *it = PyObject_GetIter(item);
1996 if (it == NULL) {
1997 if (PyErr_ExceptionMatches(PyExc_TypeError))
1998 PyErr_Format(PyExc_TypeError,
1999 "zip argument #%d must support iteration",
2000 i+1);
2001 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002002 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002003 PyTuple_SET_ITEM(itlist, i, it);
2004 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002005
Tim Peters8572b4f2001-05-06 01:05:02 +00002006 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00002007 for (i = 0; ; ++i) {
2008 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00002009 PyObject *next = PyTuple_New(itemsize);
2010 if (!next)
2011 goto Fail_ret_itlist;
2012
Tim Peters67d687a2002-04-29 21:27:32 +00002013 for (j = 0; j < itemsize; j++) {
2014 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00002015 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002016 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002017 if (PyErr_Occurred()) {
2018 Py_DECREF(ret);
2019 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002020 }
2021 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002022 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002023 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002024 }
Tim Peters67d687a2002-04-29 21:27:32 +00002025 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002026 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002027
Tim Peters67d687a2002-04-29 21:27:32 +00002028 if (i < len)
2029 PyList_SET_ITEM(ret, i, next);
2030 else {
2031 int status = PyList_Append(ret, next);
2032 Py_DECREF(next);
2033 ++len;
2034 if (status < 0)
2035 goto Fail_ret_itlist;
2036 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002037 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002038
Tim Peters67d687a2002-04-29 21:27:32 +00002039Done:
2040 if (ret != NULL && i < len) {
2041 /* The list is too big. */
2042 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2043 return NULL;
2044 }
2045 return ret;
2046
Tim Peters8572b4f2001-05-06 01:05:02 +00002047Fail_ret_itlist:
2048 Py_DECREF(itlist);
2049Fail_ret:
2050 Py_DECREF(ret);
2051 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002052}
2053
2054
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002055PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002056"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2057\n\
2058Return a list of tuples, where each tuple contains the i-th element\n\
2059from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002060in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002061
2062
Guido van Rossum79f25d91997-04-29 20:08:16 +00002063static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002064 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2065 {"abs", builtin_abs, METH_O, abs_doc},
2066 {"apply", builtin_apply, METH_VARARGS, apply_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002067 {"callable", builtin_callable, METH_O, callable_doc},
2068 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2069 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2070 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2071 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2072 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2073 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2074 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2075 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2076 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2077 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2078 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2079 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2080 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2081 {"hash", builtin_hash, METH_O, hash_doc},
2082 {"hex", builtin_hex, METH_O, hex_doc},
2083 {"id", builtin_id, METH_O, id_doc},
2084 {"input", builtin_input, METH_VARARGS, input_doc},
2085 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2086 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2087 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2088 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2089 {"len", builtin_len, METH_O, len_doc},
2090 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2091 {"map", builtin_map, METH_VARARGS, map_doc},
2092 {"max", builtin_max, METH_VARARGS, max_doc},
2093 {"min", builtin_min, METH_VARARGS, min_doc},
2094 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002095 {"ord", builtin_ord, METH_O, ord_doc},
2096 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2097 {"range", builtin_range, METH_VARARGS, range_doc},
2098 {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
2099 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2100 {"reload", builtin_reload, METH_O, reload_doc},
2101 {"repr", builtin_repr, METH_O, repr_doc},
2102 {"round", builtin_round, METH_VARARGS, round_doc},
2103 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002104 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002105 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002106#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002107 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002108#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002109 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002110 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002111 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002112};
2113
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002114PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002115"Built-in functions, exceptions, and other objects.\n\
2116\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002117Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002118
Guido van Rossum25ce5661997-08-02 03:10:38 +00002119PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002120_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002121{
Fred Drake5550de32000-06-20 04:54:19 +00002122 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002123 mod = Py_InitModule4("__builtin__", builtin_methods,
2124 builtin_doc, (PyObject *)NULL,
2125 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002126 if (mod == NULL)
2127 return NULL;
2128 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002129
Tim Peters7571a0f2003-03-23 17:52:28 +00002130#ifdef Py_TRACE_REFS
2131 /* __builtin__ exposes a number of statically allocated objects
2132 * that, before this code was added in 2.3, never showed up in
2133 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2134 * result, programs leaking references to None and False (etc)
2135 * couldn't be diagnosed by examining sys.getobjects(0).
2136 */
2137#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2138#else
2139#define ADD_TO_ALL(OBJECT) (void)0
2140#endif
2141
Tim Peters4b7625e2001-09-13 21:37:17 +00002142#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002143 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2144 return NULL; \
2145 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002146
2147 SETBUILTIN("None", Py_None);
2148 SETBUILTIN("Ellipsis", Py_Ellipsis);
2149 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002150 SETBUILTIN("False", Py_False);
2151 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002152 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002153 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002154 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002155 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002156#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002157 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002158#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002159 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002160 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002161 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002162 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002163 SETBUILTIN("property", &PyProperty_Type);
2164 SETBUILTIN("int", &PyInt_Type);
2165 SETBUILTIN("list", &PyList_Type);
2166 SETBUILTIN("long", &PyLong_Type);
2167 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002168 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002169 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002170 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002171 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2172 SETBUILTIN("str", &PyString_Type);
2173 SETBUILTIN("super", &PySuper_Type);
2174 SETBUILTIN("tuple", &PyTuple_Type);
2175 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002176 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002177
2178 /* Note that open() is just an alias of file(). */
2179 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002180 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002181#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002182 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002183#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002184 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002185 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2186 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002187 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002188 }
2189 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002190
Guido van Rossum25ce5661997-08-02 03:10:38 +00002191 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002192#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002193#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002194}
2195
Guido van Rossume77a7571993-11-03 15:01:26 +00002196/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002197
Guido van Rossum79f25d91997-04-29 20:08:16 +00002198static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002199filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002200{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002201 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002202 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002203 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002204
Guido van Rossumb7b45621995-08-04 04:07:45 +00002205 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002206 if (PyTuple_CheckExact(tuple))
2207 Py_INCREF(tuple);
2208 else
2209 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002210 return tuple;
2211 }
2212
Guido van Rossum79f25d91997-04-29 20:08:16 +00002213 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002214 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002215
Guido van Rossum12d12c51993-10-26 17:58:25 +00002216 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002217 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002218 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002219
Walter Dörwald8dd19322003-02-10 17:36:40 +00002220 if (tuple->ob_type->tp_as_sequence &&
2221 tuple->ob_type->tp_as_sequence->sq_item) {
2222 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002223 if (item == NULL)
2224 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002225 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002226 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002227 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002228 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002229 if (func == Py_None) {
2230 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002231 good = item;
2232 }
2233 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002234 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002235 if (arg == NULL) {
2236 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002237 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002238 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002239 good = PyEval_CallObject(func, arg);
2240 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002241 if (good == NULL) {
2242 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002243 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002244 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002245 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002246 ok = PyObject_IsTrue(good);
2247 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002248 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002250 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002251 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002252 else
2253 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002254 }
2255
Tim Peters4324aa32001-05-28 22:30:08 +00002256 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002257 return NULL;
2258
Guido van Rossum12d12c51993-10-26 17:58:25 +00002259 return result;
2260
Guido van Rossum12d12c51993-10-26 17:58:25 +00002261Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002262 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002263 return NULL;
2264}
2265
2266
Guido van Rossume77a7571993-11-03 15:01:26 +00002267/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002268
Guido van Rossum79f25d91997-04-29 20:08:16 +00002269static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002270filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002271{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002272 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002273 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002274 int len = PyString_Size(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002275 int outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002276
Guido van Rossum79f25d91997-04-29 20:08:16 +00002277 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002278 /* If it's a real string we can return the original,
2279 * as no character is ever false and __getitem__
2280 * does return this character. If it's a subclass
2281 * we must go through the __getitem__ loop */
2282 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002283 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002284 return strobj;
2285 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002286 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002287 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002288 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002289
Guido van Rossum12d12c51993-10-26 17:58:25 +00002290 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002291 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002292 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002293
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002294 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2295 if (item == NULL)
2296 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002297 if (func==Py_None) {
2298 ok = 1;
2299 } else {
2300 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002301 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002302 if (arg == NULL) {
2303 Py_DECREF(item);
2304 goto Fail_1;
2305 }
2306 good = PyEval_CallObject(func, arg);
2307 Py_DECREF(arg);
2308 if (good == NULL) {
2309 Py_DECREF(item);
2310 goto Fail_1;
2311 }
2312 ok = PyObject_IsTrue(good);
2313 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002314 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002315 if (ok) {
2316 int reslen;
2317 if (!PyString_Check(item)) {
2318 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2319 " __getitem__ returned different type");
2320 Py_DECREF(item);
2321 goto Fail_1;
2322 }
2323 reslen = PyString_GET_SIZE(item);
2324 if (reslen == 1) {
2325 PyString_AS_STRING(result)[j++] =
2326 PyString_AS_STRING(item)[0];
2327 } else {
2328 /* do we need more space? */
2329 int need = j + reslen + len-i-1;
2330 if (need > outlen) {
2331 /* overallocate, to avoid reallocations */
2332 if (need<2*outlen)
2333 need = 2*outlen;
2334 if (_PyString_Resize(&result, need)) {
2335 Py_DECREF(item);
2336 return NULL;
2337 }
2338 outlen = need;
2339 }
2340 memcpy(
2341 PyString_AS_STRING(result) + j,
2342 PyString_AS_STRING(item),
2343 reslen
2344 );
2345 j += reslen;
2346 }
2347 }
Tim Peters388ed082001-04-07 20:34:48 +00002348 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002349 }
2350
Walter Dörwald903f1e02003-02-04 16:28:00 +00002351 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002352 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002353
Guido van Rossum12d12c51993-10-26 17:58:25 +00002354 return result;
2355
Guido van Rossum12d12c51993-10-26 17:58:25 +00002356Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002357 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002358 return NULL;
2359}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002360
2361#ifdef Py_USING_UNICODE
2362/* Helper for filter(): filter a Unicode object through a function */
2363
2364static PyObject *
2365filterunicode(PyObject *func, PyObject *strobj)
2366{
2367 PyObject *result;
2368 register int i, j;
2369 int len = PyUnicode_GetSize(strobj);
Walter Dörwald903f1e02003-02-04 16:28:00 +00002370 int outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002371
2372 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002373 /* If it's a real string we can return the original,
2374 * as no character is ever false and __getitem__
2375 * does return this character. If it's a subclass
2376 * we must go through the __getitem__ loop */
2377 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002378 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002379 return strobj;
2380 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002381 }
2382 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2383 return NULL;
2384
2385 for (i = j = 0; i < len; ++i) {
2386 PyObject *item, *arg, *good;
2387 int ok;
2388
2389 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2390 if (item == NULL)
2391 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002392 if (func == Py_None) {
2393 ok = 1;
2394 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002395 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002396 if (arg == NULL) {
2397 Py_DECREF(item);
2398 goto Fail_1;
2399 }
2400 good = PyEval_CallObject(func, arg);
2401 Py_DECREF(arg);
2402 if (good == NULL) {
2403 Py_DECREF(item);
2404 goto Fail_1;
2405 }
2406 ok = PyObject_IsTrue(good);
2407 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002408 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002409 if (ok) {
2410 int reslen;
2411 if (!PyUnicode_Check(item)) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002412 PyErr_SetString(PyExc_TypeError,
2413 "can't filter unicode to unicode:"
2414 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002415 Py_DECREF(item);
2416 goto Fail_1;
2417 }
2418 reslen = PyUnicode_GET_SIZE(item);
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002419 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002420 PyUnicode_AS_UNICODE(result)[j++] =
2421 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002422 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002423 /* do we need more space? */
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002424 int need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002425 if (need > outlen) {
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002426 /* overallocate,
2427 to avoid reallocations */
2428 if (need < 2 * outlen)
2429 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002430 if (PyUnicode_Resize(
2431 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002432 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002433 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002434 }
2435 outlen = need;
2436 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002437 memcpy(PyUnicode_AS_UNICODE(result) + j,
2438 PyUnicode_AS_UNICODE(item),
2439 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002440 j += reslen;
2441 }
2442 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002443 Py_DECREF(item);
2444 }
2445
Walter Dörwald903f1e02003-02-04 16:28:00 +00002446 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002447 PyUnicode_Resize(&result, j);
2448
2449 return result;
2450
2451Fail_1:
2452 Py_DECREF(result);
2453 return NULL;
2454}
2455#endif