blob: 8f1f464a75f968045d0c04b25f4461087df46060 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde42001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde42001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028#ifdef Py_USING_UNICODE
29static PyObject *filterunicode(PyObject *, PyObject *);
30#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000032
Guido van Rossum79f25d91997-04-29 20:08:16 +000033static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000034builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000036 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
37 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +000038 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000039 PyObject *globals = NULL;
40 PyObject *locals = NULL;
41 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000042 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000044 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
45 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000047 return PyImport_ImportModuleLevel(name, globals, locals,
48 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000049}
50
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000051PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000052"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000053\n\
54Import a module. The globals are only used to determine the context;\n\
55they are not modified. The locals are currently unused. The fromlist\n\
56should be a list of names to emulate ``from name import ...'', or an\n\
57empty list to emulate ``import name''.\n\
58When importing a module from a package, note that __import__('A.B', ...)\n\
59returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000060fromlist is not empty. Level is used to determine whether to perform \n\
61absolute or relative imports. -1 is the original strategy of attempting\n\
62both absolute and relative imports, 0 is absolute, a positive number\n\
63is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000064
Guido van Rossum1ae940a1995-01-02 19:04:15 +000065
Guido van Rossum79f25d91997-04-29 20:08:16 +000066static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000067builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000068{
Guido van Rossum09df08a1998-05-22 00:51:39 +000069 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000070}
71
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000072PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000073"abs(number) -> number\n\
74\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000075Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000076
Raymond Hettinger96229b12005-03-11 06:49:40 +000077static PyObject *
78builtin_all(PyObject *self, PyObject *v)
79{
80 PyObject *it, *item;
81
82 it = PyObject_GetIter(v);
83 if (it == NULL)
84 return NULL;
85
86 while ((item = PyIter_Next(it)) != NULL) {
87 int cmp = PyObject_IsTrue(item);
88 Py_DECREF(item);
89 if (cmp < 0) {
90 Py_DECREF(it);
91 return NULL;
92 }
93 if (cmp == 0) {
94 Py_DECREF(it);
95 Py_RETURN_FALSE;
96 }
97 }
98 Py_DECREF(it);
99 if (PyErr_Occurred())
100 return NULL;
101 Py_RETURN_TRUE;
102}
103
104PyDoc_STRVAR(all_doc,
105"all(iterable) -> bool\n\
106\n\
107Return True if bool(x) is True for all values x in the iterable.");
108
109static PyObject *
110builtin_any(PyObject *self, PyObject *v)
111{
112 PyObject *it, *item;
113
114 it = PyObject_GetIter(v);
115 if (it == NULL)
116 return NULL;
117
118 while ((item = PyIter_Next(it)) != NULL) {
119 int cmp = PyObject_IsTrue(item);
120 Py_DECREF(item);
121 if (cmp < 0) {
122 Py_DECREF(it);
123 return NULL;
124 }
125 if (cmp == 1) {
126 Py_DECREF(it);
127 Py_RETURN_TRUE;
128 }
129 }
130 Py_DECREF(it);
131 if (PyErr_Occurred())
132 return NULL;
133 Py_RETURN_FALSE;
134}
135
136PyDoc_STRVAR(any_doc,
137"any(iterable) -> bool\n\
138\n\
139Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000140
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000141
Guido van Rossum79f25d91997-04-29 20:08:16 +0000142static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000143builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000144{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000145 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000146}
147
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000148PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000149"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000150\n\
151Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000152Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000153
154
Guido van Rossum79f25d91997-04-29 20:08:16 +0000155static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000156builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000157{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000158 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000159 Py_ssize_t len; /* guess for result list size */
160 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000161
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000162 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000163 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000164
Tim Peters0e57abf2001-05-02 07:39:38 +0000165 /* Strings and tuples return a result of the same type. */
166 if (PyString_Check(seq))
167 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000168#ifdef Py_USING_UNICODE
169 if (PyUnicode_Check(seq))
170 return filterunicode(func, seq);
171#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000172 if (PyTuple_Check(seq))
173 return filtertuple(func, seq);
174
Georg Brandle35b6572005-07-19 22:20:20 +0000175 /* Pre-allocate argument list tuple. */
176 arg = PyTuple_New(1);
177 if (arg == NULL)
178 return NULL;
179
Tim Peters0e57abf2001-05-02 07:39:38 +0000180 /* Get iterator. */
181 it = PyObject_GetIter(seq);
182 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000183 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000184
185 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000186 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000187 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000188 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
189 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
190 goto Fail_it;
191 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000192 PyErr_Clear();
193 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000194 }
195
Tim Peters0e57abf2001-05-02 07:39:38 +0000196 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000198 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000199 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000200 result = seq;
201 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000202 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000203 result = PyList_New(len);
204 if (result == NULL)
205 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000206 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207
Tim Peters0e57abf2001-05-02 07:39:38 +0000208 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000209 j = 0;
210 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000211 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000212 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000213
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 item = PyIter_Next(it);
215 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000216 if (PyErr_Occurred())
217 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000219 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000220
Neil Schemenauer68973552003-08-14 20:37:34 +0000221 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000222 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000223 }
224 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000225 PyObject *good;
226 PyTuple_SET_ITEM(arg, 0, item);
227 good = PyObject_Call(func, arg, NULL);
228 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000229 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000230 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000231 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000232 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000233 ok = PyObject_IsTrue(good);
234 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000235 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000236 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000237 if (j < len)
238 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000239 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000240 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000241 Py_DECREF(item);
242 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000243 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000244 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000245 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000247 else
248 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000249 }
250
Guido van Rossum12d12c51993-10-26 17:58:25 +0000251
Tim Peters0e57abf2001-05-02 07:39:38 +0000252 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000253 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000254 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000255
Tim Peters3c6b1482001-05-21 08:07:05 +0000256 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000257 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000258 return result;
259
Tim Peters0e57abf2001-05-02 07:39:38 +0000260Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000262Fail_it:
263 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000264Fail_arg:
265 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266 return NULL;
267}
268
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000270"filter(function or None, sequence) -> list, tuple, or string\n"
271"\n"
272"Return those items of sequence for which function(item) is true. If\n"
273"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000274"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000275
Guido van Rossum79f25d91997-04-29 20:08:16 +0000276static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000277builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000278{
279 long x;
280 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281
Guido van Rossum79f25d91997-04-29 20:08:16 +0000282 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000283 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000284 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000285 PyErr_SetString(PyExc_ValueError,
286 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000287 return NULL;
288 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000289 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000290 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000291}
292
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000293PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000294"chr(i) -> character\n\
295\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000296Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000297
298
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000299#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000301builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000302{
303 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000304
305 if (!PyArg_ParseTuple(args, "l:unichr", &x))
306 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000307
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000308 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000309}
310
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000311PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000312"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000313\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000314Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000315#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000316
317
318static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000319builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000320{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000321 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000322 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000323
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000324 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000325 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000326 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000327 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000328 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000329}
330
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000331PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000332"cmp(x, y) -> integer\n\
333\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000334Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000335
336
Guido van Rossum79f25d91997-04-29 20:08:16 +0000337static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000338builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000339{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000340 PyObject *v, *w;
341 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000342
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000343 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000344 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000345 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000346 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000347 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000348 Py_DECREF(v);
349 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000350 return res;
351}
352
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000353PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000354"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000355\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000356Return a tuple consisting of the two numeric arguments converted to\n\
357a common type, using the same rules as used by arithmetic operations.\n\
358If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000359
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000361builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000362{
363 char *str;
364 char *filename;
365 char *startstr;
366 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000367 int dont_inherit = 0;
368 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000369 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000370 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000371 Py_ssize_t length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000372
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000373 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000374 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000375 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000376
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000377 cf.cf_flags = supplied_flags;
378
379#ifdef Py_USING_UNICODE
380 if (PyUnicode_Check(cmd)) {
381 tmp = PyUnicode_AsUTF8String(cmd);
382 if (tmp == NULL)
383 return NULL;
384 cmd = tmp;
385 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
386 }
387#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000388 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
389 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000390 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000391 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000392 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000393 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000394 }
395
Guido van Rossum5b722181993-03-30 17:46:03 +0000396 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000397 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000398 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000399 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000400 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000401 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000402 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000403 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000404 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000405 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000406 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000407
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000408 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000409 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000410 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000411 PyErr_SetString(PyExc_ValueError,
412 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000413 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000414 }
415 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
416
Tim Peters6cd6a822001-08-17 22:11:27 +0000417 if (!dont_inherit) {
418 PyEval_MergeCompilerFlags(&cf);
419 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000420 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000421cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000422 Py_XDECREF(tmp);
423 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000424}
425
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000426PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000427"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000428\n\
429Compile the source string (a Python module, statement or expression)\n\
430into a code object that can be executed by the exec statement or eval().\n\
431The filename will be used for run-time error messages.\n\
432The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000433single (interactive) statement, or 'eval' to compile an expression.\n\
434The flags argument, if present, controls which future statements influence\n\
435the compilation of the code.\n\
436The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
437the effects of any future statements in effect in the code calling\n\
438compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000439in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000440
Guido van Rossum79f25d91997-04-29 20:08:16 +0000441static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000442builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000443{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000444 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000445
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000446 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000447 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000448 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000449}
450
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000451PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000452"dir([object]) -> list of strings\n"
453"\n"
454"Return an alphabetized list of names comprising (some of) the attributes\n"
455"of the given object, and of attributes reachable from it:\n"
456"\n"
457"No argument: the names in the current scope.\n"
458"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000459"Type or class object: its attributes, and recursively the attributes of\n"
460" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000461"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000462" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000463
Guido van Rossum79f25d91997-04-29 20:08:16 +0000464static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000465builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000466{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000468
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000469 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000470 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000471 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000472}
473
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000474PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000475"divmod(x, y) -> (div, mod)\n\
476\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000477Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000478
479
Guido van Rossum79f25d91997-04-29 20:08:16 +0000480static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000481builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000482{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000483 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000484 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000485 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000486 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000487
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000488 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000489 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000490 if (locals != Py_None && !PyMapping_Check(locals)) {
491 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000492 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000493 }
494 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000495 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000496 "globals must be a real dict; try eval(expr, {}, mapping)"
497 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000498 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000499 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500 if (globals == Py_None) {
501 globals = PyEval_GetGlobals();
502 if (locals == Py_None)
503 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000504 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000505 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000506 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000507
Georg Brandl77c85e62005-09-15 10:46:13 +0000508 if (globals == NULL || locals == NULL) {
509 PyErr_SetString(PyExc_TypeError,
510 "eval must be given globals and locals "
511 "when called without a frame");
512 return NULL;
513 }
514
Guido van Rossum79f25d91997-04-29 20:08:16 +0000515 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
516 if (PyDict_SetItemString(globals, "__builtins__",
517 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000518 return NULL;
519 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000520
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000521 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000522 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000523 PyErr_SetString(PyExc_TypeError,
524 "code object passed to eval() may not contain free variables");
525 return NULL;
526 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000528 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000529
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000530 if (!PyString_Check(cmd) &&
531 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000533 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000534 return NULL;
535 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000536 cf.cf_flags = 0;
537
538#ifdef Py_USING_UNICODE
539 if (PyUnicode_Check(cmd)) {
540 tmp = PyUnicode_AsUTF8String(cmd);
541 if (tmp == NULL)
542 return NULL;
543 cmd = tmp;
544 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
545 }
546#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000547 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
548 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000549 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000550 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000551 while (*str == ' ' || *str == '\t')
552 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000553
Tim Peters9fa96be2001-08-17 23:04:59 +0000554 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000555 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
556 Py_XDECREF(tmp);
557 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000558}
559
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000560PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000561"eval(source[, globals[, locals]]) -> value\n\
562\n\
563Evaluate the source in the context of globals and locals.\n\
564The source may be a string representing a Python expression\n\
565or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000566The globals must be a dictionary and locals can be any mappping,\n\
567defaulting to the current globals and locals.\n\
568If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000569
570
Guido van Rossum79f25d91997-04-29 20:08:16 +0000571static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000572builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000573{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000574 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000575 PyObject *globals = Py_None, *locals = Py_None;
576 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000577 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000578 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000579 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000580
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000581 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000582 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000583 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000584 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000585 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000586 if (locals != Py_None && !PyMapping_Check(locals)) {
587 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
588 return NULL;
589 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 if (globals == Py_None) {
591 globals = PyEval_GetGlobals();
592 if (locals == Py_None)
593 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000594 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000596 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000597 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
598 if (PyDict_SetItemString(globals, "__builtins__",
599 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000600 return NULL;
601 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000602
603 exists = 0;
604 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000605#if defined(PLAN9)
606 {
607 Dir *d;
608
609 if ((d = dirstat(filename))!=nil) {
610 if(d->mode & DMDIR)
611 werrstr("is a directory");
612 else
613 exists = 1;
614 free(d);
615 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000616 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000617#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000618 if (object_exists(filename)) {
619 if (isdir(filename))
620 errno = EISDIR;
621 else
622 exists = 1;
623 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000624#else /* standard Posix */
625 {
626 struct stat s;
627 if (stat(filename, &s) == 0) {
628 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000629# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000630 errno = EOS2ERR;
631# else
632 errno = EISDIR;
633# endif
634 else
635 exists = 1;
636 }
637 }
638#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000639
640 if (exists) {
641 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000642 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000643 Py_END_ALLOW_THREADS
644
645 if (fp == NULL) {
646 exists = 0;
647 }
648 }
649
650 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000651 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000652 return NULL;
653 }
Tim Peters5ba58662001-07-16 02:29:45 +0000654 cf.cf_flags = 0;
655 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000656 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000657 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000658 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000659 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000660 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000661 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000662}
663
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000664PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000665"execfile(filename[, globals[, locals]])\n\
666\n\
667Read and execute a Python script from a file.\n\
668The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000669globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000670
671
Guido van Rossum79f25d91997-04-29 20:08:16 +0000672static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000673builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000674{
Guido van Rossum950ff291998-06-29 13:38:57 +0000675 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000676 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000677
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000678 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000679 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000680#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000681 if (PyUnicode_Check(name)) {
682 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
683 if (name == NULL)
684 return NULL;
685 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000686#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000687
688 if (!PyString_Check(name)) {
689 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000690 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000691 return NULL;
692 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000693 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000694 if (result == NULL && dflt != NULL &&
695 PyErr_ExceptionMatches(PyExc_AttributeError))
696 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000697 PyErr_Clear();
698 Py_INCREF(dflt);
699 result = dflt;
700 }
701 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000702}
703
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000704PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000705"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000706\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000707Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
708When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000709exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000710
711
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000713builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000714{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000715 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000716
Guido van Rossum79f25d91997-04-29 20:08:16 +0000717 d = PyEval_GetGlobals();
718 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000719 return d;
720}
721
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000722PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000723"globals() -> dictionary\n\
724\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000725Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000726
727
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000729builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000730{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731 PyObject *v;
732 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000734 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000735 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000736#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000737 if (PyUnicode_Check(name)) {
738 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
739 if (name == NULL)
740 return NULL;
741 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000742#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000743
744 if (!PyString_Check(name)) {
745 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000746 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000747 return NULL;
748 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000750 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000752 Py_INCREF(Py_False);
753 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000754 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000755 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000756 Py_INCREF(Py_True);
757 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000758}
759
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000760PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000761"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000762\n\
763Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000764(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000765
766
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000768builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000769{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000770 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000771}
772
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000773PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000774"id(object) -> integer\n\
775\n\
776Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000777simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000778
779
Guido van Rossum79f25d91997-04-29 20:08:16 +0000780static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000781builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000782{
783 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000784 PyObject *it; /* the iterator object */
785 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000786 } sequence;
787
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000789 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000790 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000791 register int i, j;
792
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000794 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795 PyErr_SetString(PyExc_TypeError,
796 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000797 return NULL;
798 }
799
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000801 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000802
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000803 if (func == Py_None && n == 1) {
804 /* map(None, S) is the same as list(S). */
805 return PySequence_List(PyTuple_GetItem(args, 1));
806 }
807
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 /* Get space for sequence descriptors. Must NULL out the iterator
809 * pointers so that jumping to Fail_2 later doesn't see trash.
810 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
812 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000813 return NULL;
814 }
815 for (i = 0; i < n; ++i) {
816 seqs[i].it = (PyObject*)NULL;
817 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000818 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000819
Tim Peters4e9afdc2001-05-03 23:54:49 +0000820 /* Do a first pass to obtain iterators for the arguments, and set len
821 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000822 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 len = 0;
824 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
825 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000826 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000827
Tim Peters4e9afdc2001-05-03 23:54:49 +0000828 /* Get iterator. */
829 curseq = PyTuple_GetItem(args, i+1);
830 sqp->it = PyObject_GetIter(curseq);
831 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000832 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000833 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000834 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000835 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000837 goto Fail_2;
838 }
839
Tim Peters4e9afdc2001-05-03 23:54:49 +0000840 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000841 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000842 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000843 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
844 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
845 goto Fail_2;
846 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000847 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000848 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000849 }
850 if (curlen > len)
851 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000852 }
853
Tim Peters4e9afdc2001-05-03 23:54:49 +0000854 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000856 goto Fail_2;
857
Tim Peters4e9afdc2001-05-03 23:54:49 +0000858 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000859 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000861 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000862
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000864 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000865 else if ((alist = PyTuple_New(n)) == NULL)
866 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000867
868 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000869 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870 Py_INCREF(Py_None);
871 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000872 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000873 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000874 item = PyIter_Next(sqp->it);
875 if (item)
876 ++numactive;
877 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000878 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000879 Py_XDECREF(alist);
880 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000881 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000882 Py_INCREF(Py_None);
883 item = Py_None;
884 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000885 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000886 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000887 if (alist)
888 PyTuple_SET_ITEM(alist, j, item);
889 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000890 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000891 }
892
Guido van Rossum32120311995-07-10 13:52:21 +0000893 if (!alist)
894 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000895
Tim Peters4e9afdc2001-05-03 23:54:49 +0000896 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000898 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000899 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000900
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000902 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000903 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904 value = PyEval_CallObject(func, alist);
905 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000906 if (value == NULL)
907 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000908 }
909 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000910 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000911 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000912 if (status < 0)
913 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000914 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000915 else if (PyList_SetItem(result, i, value) < 0)
916 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000917 }
918
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000919 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
920 goto Fail_1;
921
Tim Peters4e9afdc2001-05-03 23:54:49 +0000922 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000923
Guido van Rossum12d12c51993-10-26 17:58:25 +0000924Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000926Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000927 result = NULL;
928Succeed:
929 assert(seqs);
930 for (i = 0; i < n; ++i)
931 Py_XDECREF(seqs[i].it);
932 PyMem_DEL(seqs);
933 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000934}
935
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000937"map(function, sequence[, sequence, ...]) -> list\n\
938\n\
939Return a list of the results of applying the function to the items of\n\
940the argument sequence(s). If more than one sequence is given, the\n\
941function is called with an argument list consisting of the corresponding\n\
942item of each sequence, substituting None for missing values when not all\n\
943sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000944the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000945
946
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000948builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000949{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 PyObject *v;
951 PyObject *name;
952 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000953
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000954 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000955 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000956 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000957 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958 Py_INCREF(Py_None);
959 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000960}
961
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000962PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000963"setattr(object, name, value)\n\
964\n\
965Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000966``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000967
968
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000970builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000971{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000972 PyObject *v;
973 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000974
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000975 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000976 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000977 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000978 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979 Py_INCREF(Py_None);
980 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000981}
982
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000983PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000984"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000985\n\
986Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000987``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000988
989
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000991builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000992{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000993 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000994
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000996 if (x == -1)
997 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000999}
1000
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001001PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001002"hash(object) -> integer\n\
1003\n\
1004Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001005the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001006
1007
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001009builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001010{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001011 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001012 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001013
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001014 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001015 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001016 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001017 "hex() argument can't be converted to hex");
1018 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001019 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001020 res = (*nb->nb_hex)(v);
1021 if (res && !PyString_Check(res)) {
1022 PyErr_Format(PyExc_TypeError,
1023 "__hex__ returned non-string (type %.200s)",
1024 res->ob_type->tp_name);
1025 Py_DECREF(res);
1026 return NULL;
1027 }
1028 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001029}
1030
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001031PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001032"hex(number) -> string\n\
1033\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001034Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001035
1036
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001038builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001039{
1040 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001041 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001042 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001043 if (!PyString_CheckExact(s)) {
1044 PyErr_SetString(PyExc_TypeError,
1045 "can't intern subclass of string");
1046 return NULL;
1047 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001048 Py_INCREF(s);
1049 PyString_InternInPlace(&s);
1050 return s;
1051}
1052
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001053PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001054"intern(string) -> string\n\
1055\n\
1056``Intern'' the given string. This enters the string in the (global)\n\
1057table of interned strings whose purpose is to speed up dictionary lookups.\n\
1058Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001059same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001060
1061
Guido van Rossum79f25d91997-04-29 20:08:16 +00001062static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001063builtin_iter(PyObject *self, PyObject *args)
1064{
1065 PyObject *v, *w = NULL;
1066
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001067 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001068 return NULL;
1069 if (w == NULL)
1070 return PyObject_GetIter(v);
1071 if (!PyCallable_Check(v)) {
1072 PyErr_SetString(PyExc_TypeError,
1073 "iter(v, w): v must be callable");
1074 return NULL;
1075 }
1076 return PyCallIter_New(v, w);
1077}
1078
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001079PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001080"iter(collection) -> iterator\n\
1081iter(callable, sentinel) -> iterator\n\
1082\n\
1083Get an iterator from an object. In the first form, the argument must\n\
1084supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001085In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001086
1087
1088static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001089builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001090{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001091 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001092
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001093 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001094 if (res < 0 && PyErr_Occurred())
1095 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001096 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001097}
1098
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001099PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001100"len(object) -> integer\n\
1101\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001102Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001103
1104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001106builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001107{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001109
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110 d = PyEval_GetLocals();
1111 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001112 return d;
1113}
1114
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001115PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001116"locals() -> dictionary\n\
1117\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001118Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001119
1120
Guido van Rossum79f25d91997-04-29 20:08:16 +00001121static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001122min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001123{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001124 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001125 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001126
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001128 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001129 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001130 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001131
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001132 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1133 keyfunc = PyDict_GetItemString(kwds, "key");
1134 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001135 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001136 "%s() got an unexpected keyword argument", name);
1137 return NULL;
1138 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001139 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001140
Tim Petersc3074532001-05-03 07:00:32 +00001141 it = PyObject_GetIter(v);
1142 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001143 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001144
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001145 maxitem = NULL; /* the result */
1146 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001147 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001148 /* get the value from the key function */
1149 if (keyfunc != NULL) {
1150 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1151 if (val == NULL)
1152 goto Fail_it_item;
1153 }
1154 /* no key function; the value is the item */
1155 else {
1156 val = item;
1157 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158 }
Tim Petersc3074532001-05-03 07:00:32 +00001159
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001160 /* maximum value and item are unset; set them */
1161 if (maxval == NULL) {
1162 maxitem = item;
1163 maxval = val;
1164 }
1165 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001166 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001167 int cmp = PyObject_RichCompareBool(val, maxval, op);
1168 if (cmp < 0)
1169 goto Fail_it_item_and_val;
1170 else if (cmp > 0) {
1171 Py_DECREF(maxval);
1172 Py_DECREF(maxitem);
1173 maxval = val;
1174 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001175 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001176 else {
1177 Py_DECREF(item);
1178 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001179 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001180 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001181 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001182 if (PyErr_Occurred())
1183 goto Fail_it;
1184 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001185 PyErr_Format(PyExc_ValueError,
1186 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001187 assert(maxitem == NULL);
1188 }
1189 else
1190 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001191 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001192 return maxitem;
1193
1194Fail_it_item_and_val:
1195 Py_DECREF(val);
1196Fail_it_item:
1197 Py_DECREF(item);
1198Fail_it:
1199 Py_XDECREF(maxval);
1200 Py_XDECREF(maxitem);
1201 Py_DECREF(it);
1202 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001203}
1204
Guido van Rossum79f25d91997-04-29 20:08:16 +00001205static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001206builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001207{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001208 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001209}
1210
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001212"min(iterable[, key=func]) -> value\n\
1213min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001215With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001216With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001217
1218
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001220builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001221{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001222 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001223}
1224
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001225PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001226"max(iterable[, key=func]) -> value\n\
1227max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001228\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001229With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001230With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001231
1232
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001234builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001235{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001237 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001238
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001239 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1240 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001241 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001242 "oct() argument can't be converted to oct");
1243 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001244 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001245 res = (*nb->nb_oct)(v);
1246 if (res && !PyString_Check(res)) {
1247 PyErr_Format(PyExc_TypeError,
1248 "__oct__ returned non-string (type %.200s)",
1249 res->ob_type->tp_name);
1250 Py_DECREF(res);
1251 return NULL;
1252 }
1253 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001254}
1255
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001256PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001257"oct(number) -> string\n\
1258\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001259Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001260
1261
Guido van Rossum79f25d91997-04-29 20:08:16 +00001262static PyObject *
Thomas Wouters477c8d52006-05-27 19:21:47 +00001263builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
1264{
1265 return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
1266}
1267
1268PyDoc_STRVAR(open_doc,
1269"open(name[, mode[, buffering]]) -> file object\n\
1270\n\
1271Open a file using the file() type, returns a file object.");
1272
1273
1274static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001275builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001276{
Guido van Rossum09095f32000-03-10 23:00:52 +00001277 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001278 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001279
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001280 if (PyString_Check(obj)) {
1281 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001282 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001283 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001284 return PyInt_FromLong(ord);
1285 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001286#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001287 } else if (PyUnicode_Check(obj)) {
1288 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001289 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001290 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001291 return PyInt_FromLong(ord);
1292 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001293#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001294 } else {
1295 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001296 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001297 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001298 return NULL;
1299 }
1300
Guido van Rossumad991772001-01-12 16:03:05 +00001301 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001302 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001303 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001304 size);
1305 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001306}
1307
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001308PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001309"ord(c) -> integer\n\
1310\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001311Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001312
1313
Guido van Rossum79f25d91997-04-29 20:08:16 +00001314static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001315builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001316{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001317 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001318
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001319 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001320 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001321 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001322}
1323
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001324PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001325"pow(x, y[, z]) -> number\n\
1326\n\
1327With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001328equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001329
1330
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001331
1332/* Return number of items in range (lo, hi, step), when arguments are
1333 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1334 * & only if the true value is too large to fit in a signed long.
1335 * Arguments MUST return 1 with either PyInt_Check() or
1336 * PyLong_Check(). Return -1 when there is an error.
1337 */
1338static long
1339get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1340{
1341 /* -------------------------------------------------------------
1342 Algorithm is equal to that of get_len_of_range(), but it operates
1343 on PyObjects (which are assumed to be PyLong or PyInt objects).
1344 ---------------------------------------------------------------*/
1345 long n;
1346 PyObject *diff = NULL;
1347 PyObject *one = NULL;
1348 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1349 /* holds sub-expression evaluations */
1350
1351 /* if (lo >= hi), return length of 0. */
1352 if (PyObject_Compare(lo, hi) >= 0)
1353 return 0;
1354
1355 if ((one = PyLong_FromLong(1L)) == NULL)
1356 goto Fail;
1357
1358 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1359 goto Fail;
1360
1361 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1362 goto Fail;
1363
1364 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1365 goto Fail;
1366
1367 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1368 goto Fail;
1369
1370 n = PyLong_AsLong(tmp3);
1371 if (PyErr_Occurred()) { /* Check for Overflow */
1372 PyErr_Clear();
1373 goto Fail;
1374 }
1375
1376 Py_DECREF(tmp3);
1377 Py_DECREF(tmp2);
1378 Py_DECREF(diff);
1379 Py_DECREF(tmp1);
1380 Py_DECREF(one);
1381 return n;
1382
1383 Fail:
1384 Py_XDECREF(tmp3);
1385 Py_XDECREF(tmp2);
1386 Py_XDECREF(diff);
1387 Py_XDECREF(tmp1);
1388 Py_XDECREF(one);
1389 return -1;
1390}
1391
1392/* An extension of builtin_range() that handles the case when PyLong
1393 * arguments are given. */
1394static PyObject *
1395handle_range_longs(PyObject *self, PyObject *args)
1396{
1397 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001398 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001399 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001400
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001401 PyObject *curnum = NULL;
1402 PyObject *v = NULL;
1403 long bign;
1404 int i, n;
1405 int cmp_result;
1406
Tim Peters874e1f72003-04-13 22:13:08 +00001407 PyObject *zero = PyLong_FromLong(0);
1408
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001409 if (zero == NULL)
1410 return NULL;
1411
Tim Peters874e1f72003-04-13 22:13:08 +00001412 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1413 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001414 return NULL;
1415 }
1416
Tim Peters874e1f72003-04-13 22:13:08 +00001417 /* Figure out which way we were called, supply defaults, and be
1418 * sure to incref everything so that the decrefs at the end
1419 * are correct.
1420 */
1421 assert(ilow != NULL);
1422 if (ihigh == NULL) {
1423 /* only 1 arg -- it's the upper limit */
1424 ihigh = ilow;
1425 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001426 }
Tim Peters874e1f72003-04-13 22:13:08 +00001427 assert(ihigh != NULL);
1428 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001429
Tim Peters874e1f72003-04-13 22:13:08 +00001430 /* ihigh correct now; do ilow */
1431 if (ilow == NULL)
1432 ilow = zero;
1433 Py_INCREF(ilow);
1434
1435 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001436 if (istep == NULL) {
1437 istep = PyLong_FromLong(1L);
1438 if (istep == NULL)
1439 goto Fail;
1440 }
1441 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001442 Py_INCREF(istep);
1443 }
1444
Tim Peters874e1f72003-04-13 22:13:08 +00001445 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001446 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001447 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001448 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001449 goto Fail;
1450 }
1451
Tim Peters874e1f72003-04-13 22:13:08 +00001452 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001453 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001454 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001455 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001456 goto Fail;
1457 }
1458
1459 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001460 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001461 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001462 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001463 goto Fail;
1464 }
1465
1466 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1467 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001468 if (cmp_result == 0) {
1469 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001470 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001471 goto Fail;
1472 }
1473
1474 if (cmp_result > 0)
1475 bign = get_len_of_range_longs(ilow, ihigh, istep);
1476 else {
1477 PyObject *neg_istep = PyNumber_Negative(istep);
1478 if (neg_istep == NULL)
1479 goto Fail;
1480 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1481 Py_DECREF(neg_istep);
1482 }
1483
1484 n = (int)bign;
1485 if (bign < 0 || (long)n != bign) {
1486 PyErr_SetString(PyExc_OverflowError,
1487 "range() result has too many items");
1488 goto Fail;
1489 }
1490
1491 v = PyList_New(n);
1492 if (v == NULL)
1493 goto Fail;
1494
1495 curnum = ilow;
1496 Py_INCREF(curnum);
1497
1498 for (i = 0; i < n; i++) {
1499 PyObject *w = PyNumber_Long(curnum);
1500 PyObject *tmp_num;
1501 if (w == NULL)
1502 goto Fail;
1503
1504 PyList_SET_ITEM(v, i, w);
1505
1506 tmp_num = PyNumber_Add(curnum, istep);
1507 if (tmp_num == NULL)
1508 goto Fail;
1509
1510 Py_DECREF(curnum);
1511 curnum = tmp_num;
1512 }
Tim Peters874e1f72003-04-13 22:13:08 +00001513 Py_DECREF(ilow);
1514 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001515 Py_DECREF(istep);
1516 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001517 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001518 return v;
1519
1520 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001521 Py_DECREF(ilow);
1522 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001523 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001524 Py_DECREF(zero);
1525 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001526 Py_XDECREF(v);
1527 return NULL;
1528}
1529
Guido van Rossum124eff01999-02-23 16:11:01 +00001530/* Return number of items in range/xrange (lo, hi, step). step > 0
1531 * required. Return a value < 0 if & only if the true value is too
1532 * large to fit in a signed long.
1533 */
1534static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001535get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001536{
1537 /* -------------------------------------------------------------
1538 If lo >= hi, the range is empty.
1539 Else if n values are in the range, the last one is
1540 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1541 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1542 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1543 the RHS is non-negative and so truncation is the same as the
1544 floor. Letting M be the largest positive long, the worst case
1545 for the RHS numerator is hi=M, lo=-M-1, and then
1546 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1547 precision to compute the RHS exactly.
1548 ---------------------------------------------------------------*/
1549 long n = 0;
1550 if (lo < hi) {
1551 unsigned long uhi = (unsigned long)hi;
1552 unsigned long ulo = (unsigned long)lo;
1553 unsigned long diff = uhi - ulo - 1;
1554 n = (long)(diff / (unsigned long)step + 1);
1555 }
1556 return n;
1557}
1558
Guido van Rossum79f25d91997-04-29 20:08:16 +00001559static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001560builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001561{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001562 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001563 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001564 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001565
Guido van Rossum79f25d91997-04-29 20:08:16 +00001566 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001567
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568 if (PyTuple_Size(args) <= 1) {
1569 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001570 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001571 &ihigh)) {
1572 PyErr_Clear();
1573 return handle_range_longs(self, args);
1574 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001575 }
1576 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001577 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001578 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001579 &ilow, &ihigh, &istep)) {
1580 PyErr_Clear();
1581 return handle_range_longs(self, args);
1582 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001583 }
1584 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001585 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001586 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001587 return NULL;
1588 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001589 if (istep > 0)
1590 bign = get_len_of_range(ilow, ihigh, istep);
1591 else
1592 bign = get_len_of_range(ihigh, ilow, -istep);
1593 n = (int)bign;
1594 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001595 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001596 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001597 return NULL;
1598 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001599 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001600 if (v == NULL)
1601 return NULL;
1602 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001603 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001604 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001605 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001606 return NULL;
1607 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001608 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001609 ilow += istep;
1610 }
1611 return v;
1612}
1613
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001614PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001615"range([start,] stop[, step]) -> list of integers\n\
1616\n\
1617Return a list containing an arithmetic progression of integers.\n\
1618range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1619When step is given, it specifies the increment (or decrement).\n\
1620For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001621These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001622
1623
Guido van Rossum79f25d91997-04-29 20:08:16 +00001624static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001625builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001626{
Tim Peters15d81ef2001-05-04 04:39:21 +00001627 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001628
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001629 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001630 return NULL;
1631 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001632 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001633
Tim Peters15d81ef2001-05-04 04:39:21 +00001634 it = PyObject_GetIter(seq);
1635 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001636 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001637 "reduce() arg 2 must support iteration");
1638 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001639 return NULL;
1640 }
1641
Guido van Rossum79f25d91997-04-29 20:08:16 +00001642 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001643 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001644
Tim Peters15d81ef2001-05-04 04:39:21 +00001645 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001646 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001647
1648 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001649 Py_DECREF(args);
1650 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001651 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001652 }
1653
Tim Peters15d81ef2001-05-04 04:39:21 +00001654 op2 = PyIter_Next(it);
1655 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001656 if (PyErr_Occurred())
1657 goto Fail;
1658 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001659 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001660
Guido van Rossum2d951851994-08-29 12:52:16 +00001661 if (result == NULL)
1662 result = op2;
1663 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001664 PyTuple_SetItem(args, 0, result);
1665 PyTuple_SetItem(args, 1, op2);
1666 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001667 goto Fail;
1668 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001669 }
1670
Guido van Rossum79f25d91997-04-29 20:08:16 +00001671 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001672
Guido van Rossum2d951851994-08-29 12:52:16 +00001673 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001674 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001675 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001676
Tim Peters15d81ef2001-05-04 04:39:21 +00001677 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001678 return result;
1679
Guido van Rossum2d951851994-08-29 12:52:16 +00001680Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001681 Py_XDECREF(args);
1682 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001683 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001684 return NULL;
1685}
1686
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001687PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001688"reduce(function, sequence[, initial]) -> value\n\
1689\n\
1690Apply a function of two arguments cumulatively to the items of a sequence,\n\
1691from left to right, so as to reduce the sequence to a single value.\n\
1692For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1693((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1694of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001695sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001696
1697
Guido van Rossum79f25d91997-04-29 20:08:16 +00001698static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001699builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001700{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001702}
1703
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001704PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001705"reload(module) -> module\n\
1706\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001707Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001708
1709
Guido van Rossum79f25d91997-04-29 20:08:16 +00001710static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001711builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001712{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001714}
1715
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001716PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001717"repr(object) -> string\n\
1718\n\
1719Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001720For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001721
1722
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001724builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001725{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001726 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001727 double f;
1728 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001729 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001730 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001731
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001732 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1733 kwlist, &number, &ndigits))
1734 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001735 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001736 i = abs(ndigits);
1737 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001738 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001739 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001740 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001741 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001742 number *= f;
1743 if (number >= 0.0)
1744 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001745 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001746 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001747 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001748 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001749 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001750 number /= f;
1751 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001752}
1753
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001754PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001755"round(number[, ndigits]) -> floating point number\n\
1756\n\
1757Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001758This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001759
Raymond Hettinger64958a12003-12-17 20:43:33 +00001760static PyObject *
1761builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1762{
1763 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1764 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001765 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001766 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001767
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001768 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001769 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1770 kwlist, &seq, &compare, &keyfunc, &reverse))
1771 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001772
1773 newlist = PySequence_List(seq);
1774 if (newlist == NULL)
1775 return NULL;
1776
1777 callable = PyObject_GetAttrString(newlist, "sort");
1778 if (callable == NULL) {
1779 Py_DECREF(newlist);
1780 return NULL;
1781 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001782
Raymond Hettinger64958a12003-12-17 20:43:33 +00001783 newargs = PyTuple_GetSlice(args, 1, 4);
1784 if (newargs == NULL) {
1785 Py_DECREF(newlist);
1786 Py_DECREF(callable);
1787 return NULL;
1788 }
1789
1790 v = PyObject_Call(callable, newargs, kwds);
1791 Py_DECREF(newargs);
1792 Py_DECREF(callable);
1793 if (v == NULL) {
1794 Py_DECREF(newlist);
1795 return NULL;
1796 }
1797 Py_DECREF(v);
1798 return newlist;
1799}
1800
1801PyDoc_STRVAR(sorted_doc,
1802"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001803
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001805builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001806{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 PyObject *v = NULL;
1808 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001809
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001810 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001811 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001812 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001814 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815 if (!PyErr_Occurred())
1816 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001817 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001818 }
1819 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001820 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001821 }
1822 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001824 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001826 "vars() argument must have __dict__ attribute");
1827 return NULL;
1828 }
1829 }
1830 return d;
1831}
1832
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001833PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001834"vars([object]) -> dictionary\n\
1835\n\
1836Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001837With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001838
Alex Martellia70b1912003-04-22 08:12:33 +00001839
1840static PyObject*
1841builtin_sum(PyObject *self, PyObject *args)
1842{
1843 PyObject *seq;
1844 PyObject *result = NULL;
1845 PyObject *temp, *item, *iter;
1846
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001847 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001848 return NULL;
1849
1850 iter = PyObject_GetIter(seq);
1851 if (iter == NULL)
1852 return NULL;
1853
1854 if (result == NULL) {
1855 result = PyInt_FromLong(0);
1856 if (result == NULL) {
1857 Py_DECREF(iter);
1858 return NULL;
1859 }
1860 } else {
1861 /* reject string values for 'start' parameter */
1862 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1863 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001864 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001865 Py_DECREF(iter);
1866 return NULL;
1867 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001868 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001869 }
1870
1871 for(;;) {
1872 item = PyIter_Next(iter);
1873 if (item == NULL) {
1874 /* error, or end-of-sequence */
1875 if (PyErr_Occurred()) {
1876 Py_DECREF(result);
1877 result = NULL;
1878 }
1879 break;
1880 }
Alex Martellia253e182003-10-25 23:24:14 +00001881 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001882 Py_DECREF(result);
1883 Py_DECREF(item);
1884 result = temp;
1885 if (result == NULL)
1886 break;
1887 }
1888 Py_DECREF(iter);
1889 return result;
1890}
1891
1892PyDoc_STRVAR(sum_doc,
1893"sum(sequence, start=0) -> value\n\
1894\n\
1895Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1896of parameter 'start'. When the sequence is empty, returns start.");
1897
1898
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001899static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001900builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001901{
1902 PyObject *inst;
1903 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001904 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001905
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001906 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001907 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001908
Guido van Rossum823649d2001-03-21 18:40:58 +00001909 retval = PyObject_IsInstance(inst, cls);
1910 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001911 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001912 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001913}
1914
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001915PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001916"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001917\n\
1918Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001919With a type as second argument, return whether that is the object's type.\n\
1920The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001921isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001922
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001923
1924static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001925builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001926{
1927 PyObject *derived;
1928 PyObject *cls;
1929 int retval;
1930
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001931 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001932 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001933
Guido van Rossum823649d2001-03-21 18:40:58 +00001934 retval = PyObject_IsSubclass(derived, cls);
1935 if (retval < 0)
1936 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001937 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001938}
1939
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001940PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001941"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001942\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001943Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1944When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1945is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001946
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001947
Barry Warsawbd599b52000-08-03 15:45:29 +00001948static PyObject*
1949builtin_zip(PyObject *self, PyObject *args)
1950{
1951 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001952 const Py_ssize_t itemsize = PySequence_Length(args);
1953 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00001954 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001955 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001956
Raymond Hettingereaef6152003-08-02 07:42:57 +00001957 if (itemsize == 0)
1958 return PyList_New(0);
1959
Barry Warsawbd599b52000-08-03 15:45:29 +00001960 /* args must be a tuple */
1961 assert(PyTuple_Check(args));
1962
Tim Peters39a86c22002-05-12 07:19:38 +00001963 /* Guess at result length: the shortest of the input lengths.
1964 If some argument refuses to say, we refuse to guess too, lest
1965 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001966 len = -1; /* unknown */
1967 for (i = 0; i < itemsize; ++i) {
1968 PyObject *item = PyTuple_GET_ITEM(args, i);
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001969 Py_ssize_t thislen = _PyObject_LengthHint(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001970 if (thislen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001971 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1972 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1973 return NULL;
1974 }
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,
Neal Norwitza361bd82006-02-19 19:31:50 +00001999 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00002000 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[] = {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002064 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002065 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002066 {"all", builtin_all, METH_O, all_doc},
2067 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002068 {"callable", builtin_callable, METH_O, callable_doc},
2069 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2070 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2071 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2072 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2073 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2074 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2075 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2076 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2077 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2078 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2079 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2080 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2081 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2082 {"hash", builtin_hash, METH_O, hash_doc},
2083 {"hex", builtin_hex, METH_O, hex_doc},
2084 {"id", builtin_id, METH_O, id_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002085 {"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},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002092 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2093 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002094 {"oct", builtin_oct, METH_O, oct_doc},
Thomas Wouters477c8d52006-05-27 19:21:47 +00002095 {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002096 {"ord", builtin_ord, METH_O, ord_doc},
2097 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2098 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002099 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2100 {"reload", builtin_reload, METH_O, reload_doc},
2101 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002102 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002103 {"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);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002155 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002156 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002157#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002158 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002159#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002160 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002161 SETBUILTIN("enumerate", &PyEnum_Type);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002162 SETBUILTIN("file", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002163 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002164 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002165 SETBUILTIN("property", &PyProperty_Type);
2166 SETBUILTIN("int", &PyInt_Type);
2167 SETBUILTIN("list", &PyList_Type);
2168 SETBUILTIN("long", &PyLong_Type);
2169 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002170 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002171 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002172 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002173 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2174 SETBUILTIN("str", &PyString_Type);
2175 SETBUILTIN("super", &PySuper_Type);
2176 SETBUILTIN("tuple", &PyTuple_Type);
2177 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002178 SETBUILTIN("xrange", &PyRange_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002179#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002180 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002181#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002182 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002183 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2184 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002185 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002186 }
2187 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002188
Guido van Rossum25ce5661997-08-02 03:10:38 +00002189 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002190#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002191#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002192}
2193
Guido van Rossume77a7571993-11-03 15:01:26 +00002194/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002195
Guido van Rossum79f25d91997-04-29 20:08:16 +00002196static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002197filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002198{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002199 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002200 Py_ssize_t i, j;
2201 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002202
Guido van Rossumb7b45621995-08-04 04:07:45 +00002203 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002204 if (PyTuple_CheckExact(tuple))
2205 Py_INCREF(tuple);
2206 else
2207 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002208 return tuple;
2209 }
2210
Guido van Rossum79f25d91997-04-29 20:08:16 +00002211 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002212 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002213
Guido van Rossum12d12c51993-10-26 17:58:25 +00002214 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002215 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002216 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002217
Walter Dörwald8dd19322003-02-10 17:36:40 +00002218 if (tuple->ob_type->tp_as_sequence &&
2219 tuple->ob_type->tp_as_sequence->sq_item) {
2220 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002221 if (item == NULL)
2222 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002223 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002224 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002225 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002226 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002227 if (func == Py_None) {
2228 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002229 good = item;
2230 }
2231 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002232 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002233 if (arg == NULL) {
2234 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002235 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002236 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002237 good = PyEval_CallObject(func, arg);
2238 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002239 if (good == NULL) {
2240 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002241 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002242 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002243 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002244 ok = PyObject_IsTrue(good);
2245 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002246 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002247 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002248 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002249 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002250 else
2251 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002252 }
2253
Tim Peters4324aa32001-05-28 22:30:08 +00002254 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002255 return NULL;
2256
Guido van Rossum12d12c51993-10-26 17:58:25 +00002257 return result;
2258
Guido van Rossum12d12c51993-10-26 17:58:25 +00002259Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002260 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002261 return NULL;
2262}
2263
2264
Guido van Rossume77a7571993-11-03 15:01:26 +00002265/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002266
Guido van Rossum79f25d91997-04-29 20:08:16 +00002267static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002268filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002269{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002270 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002271 Py_ssize_t i, j;
2272 Py_ssize_t len = PyString_Size(strobj);
2273 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002274
Guido van Rossum79f25d91997-04-29 20:08:16 +00002275 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002276 /* If it's a real string we can return the original,
2277 * as no character is ever false and __getitem__
2278 * does return this character. If it's a subclass
2279 * we must go through the __getitem__ loop */
2280 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002281 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002282 return strobj;
2283 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002284 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002285 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002286 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002287
Guido van Rossum12d12c51993-10-26 17:58:25 +00002288 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002289 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002290 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002291
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002292 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2293 if (item == NULL)
2294 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002295 if (func==Py_None) {
2296 ok = 1;
2297 } else {
2298 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002299 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002300 if (arg == NULL) {
2301 Py_DECREF(item);
2302 goto Fail_1;
2303 }
2304 good = PyEval_CallObject(func, arg);
2305 Py_DECREF(arg);
2306 if (good == NULL) {
2307 Py_DECREF(item);
2308 goto Fail_1;
2309 }
2310 ok = PyObject_IsTrue(good);
2311 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002312 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002313 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002314 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002315 if (!PyString_Check(item)) {
2316 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2317 " __getitem__ returned different type");
2318 Py_DECREF(item);
2319 goto Fail_1;
2320 }
2321 reslen = PyString_GET_SIZE(item);
2322 if (reslen == 1) {
2323 PyString_AS_STRING(result)[j++] =
2324 PyString_AS_STRING(item)[0];
2325 } else {
2326 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002327 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002328 if (need > outlen) {
2329 /* overallocate, to avoid reallocations */
2330 if (need<2*outlen)
2331 need = 2*outlen;
2332 if (_PyString_Resize(&result, need)) {
2333 Py_DECREF(item);
2334 return NULL;
2335 }
2336 outlen = need;
2337 }
2338 memcpy(
2339 PyString_AS_STRING(result) + j,
2340 PyString_AS_STRING(item),
2341 reslen
2342 );
2343 j += reslen;
2344 }
2345 }
Tim Peters388ed082001-04-07 20:34:48 +00002346 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347 }
2348
Walter Dörwald903f1e02003-02-04 16:28:00 +00002349 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002350 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351
Guido van Rossum12d12c51993-10-26 17:58:25 +00002352 return result;
2353
Guido van Rossum12d12c51993-10-26 17:58:25 +00002354Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002355 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002356 return NULL;
2357}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002358
2359#ifdef Py_USING_UNICODE
2360/* Helper for filter(): filter a Unicode object through a function */
2361
2362static PyObject *
2363filterunicode(PyObject *func, PyObject *strobj)
2364{
2365 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002366 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002367 Py_ssize_t len = PyUnicode_GetSize(strobj);
2368 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002369
2370 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002371 /* If it's a real string we can return the original,
2372 * as no character is ever false and __getitem__
2373 * does return this character. If it's a subclass
2374 * we must go through the __getitem__ loop */
2375 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002376 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002377 return strobj;
2378 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002379 }
2380 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2381 return NULL;
2382
2383 for (i = j = 0; i < len; ++i) {
2384 PyObject *item, *arg, *good;
2385 int ok;
2386
2387 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2388 if (item == NULL)
2389 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002390 if (func == Py_None) {
2391 ok = 1;
2392 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002393 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002394 if (arg == NULL) {
2395 Py_DECREF(item);
2396 goto Fail_1;
2397 }
2398 good = PyEval_CallObject(func, arg);
2399 Py_DECREF(arg);
2400 if (good == NULL) {
2401 Py_DECREF(item);
2402 goto Fail_1;
2403 }
2404 ok = PyObject_IsTrue(good);
2405 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002406 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002407 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002408 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002409 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002410 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002411 "can't filter unicode to unicode:"
2412 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002413 Py_DECREF(item);
2414 goto Fail_1;
2415 }
2416 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002417 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002418 PyUnicode_AS_UNICODE(result)[j++] =
2419 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002420 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002421 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002422 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002423 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002424 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002425 to avoid reallocations */
2426 if (need < 2 * outlen)
2427 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002428 if (PyUnicode_Resize(
2429 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002430 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002431 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002432 }
2433 outlen = need;
2434 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002435 memcpy(PyUnicode_AS_UNICODE(result) + j,
2436 PyUnicode_AS_UNICODE(item),
2437 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002438 j += reslen;
2439 }
2440 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002441 Py_DECREF(item);
2442 }
2443
Walter Dörwald903f1e02003-02-04 16:28:00 +00002444 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002445 PyUnicode_Resize(&result, j);
2446
2447 return result;
2448
2449Fail_1:
2450 Py_DECREF(result);
2451 return NULL;
2452}
2453#endif