blob: 342c2dba1728bb20adf58a1e4ec9e5186d2eff9e [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 Woutersf70ef4f2000-07-22 18:47:25 +000034builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 PyObject *globals = NULL;
38 PyObject *locals = NULL;
39 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000040 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041
Thomas Woutersf7f438b2006-02-28 16:09:29 +000042 if (!PyArg_ParseTuple(args, "s|OOOi:__import__",
43 &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +000045 return PyImport_ImportModuleLevel(name, globals, locals,
46 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000047}
48
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000049PyDoc_STRVAR(import_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000050"__import__(name, globals, locals, fromlist) -> module\n\
51\n\
52Import a module. The globals are only used to determine the context;\n\
53they are not modified. The locals are currently unused. The fromlist\n\
54should be a list of names to emulate ``from name import ...'', or an\n\
55empty list to emulate ``import name''.\n\
56When importing a module from a package, note that __import__('A.B', ...)\n\
57returns package A when fromlist is empty, but its submodule B when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000058fromlist is not empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000059
Guido van Rossum1ae940a1995-01-02 19:04:15 +000060
Guido van Rossum79f25d91997-04-29 20:08:16 +000061static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +000062builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000063{
Guido van Rossum09df08a1998-05-22 00:51:39 +000064 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000065}
66
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000067PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000068"abs(number) -> number\n\
69\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000070Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000071
Raymond Hettinger96229b12005-03-11 06:49:40 +000072static PyObject *
73builtin_all(PyObject *self, PyObject *v)
74{
75 PyObject *it, *item;
76
77 it = PyObject_GetIter(v);
78 if (it == NULL)
79 return NULL;
80
81 while ((item = PyIter_Next(it)) != NULL) {
82 int cmp = PyObject_IsTrue(item);
83 Py_DECREF(item);
84 if (cmp < 0) {
85 Py_DECREF(it);
86 return NULL;
87 }
88 if (cmp == 0) {
89 Py_DECREF(it);
90 Py_RETURN_FALSE;
91 }
92 }
93 Py_DECREF(it);
94 if (PyErr_Occurred())
95 return NULL;
96 Py_RETURN_TRUE;
97}
98
99PyDoc_STRVAR(all_doc,
100"all(iterable) -> bool\n\
101\n\
102Return True if bool(x) is True for all values x in the iterable.");
103
104static PyObject *
105builtin_any(PyObject *self, PyObject *v)
106{
107 PyObject *it, *item;
108
109 it = PyObject_GetIter(v);
110 if (it == NULL)
111 return NULL;
112
113 while ((item = PyIter_Next(it)) != NULL) {
114 int cmp = PyObject_IsTrue(item);
115 Py_DECREF(item);
116 if (cmp < 0) {
117 Py_DECREF(it);
118 return NULL;
119 }
120 if (cmp == 1) {
121 Py_DECREF(it);
122 Py_RETURN_TRUE;
123 }
124 }
125 Py_DECREF(it);
126 if (PyErr_Occurred())
127 return NULL;
128 Py_RETURN_FALSE;
129}
130
131PyDoc_STRVAR(any_doc,
132"any(iterable) -> bool\n\
133\n\
134Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000135
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000136
Guido van Rossum79f25d91997-04-29 20:08:16 +0000137static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000138builtin_callable(PyObject *self, PyObject *v)
Guido van Rossum2d951851994-08-29 12:52:16 +0000139{
Guido van Rossum77f6a652002-04-03 22:41:51 +0000140 return PyBool_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000141}
142
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000143PyDoc_STRVAR(callable_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000144"callable(object) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000145\n\
146Return whether the object is callable (i.e., some kind of function).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000147Note that classes are callable, as are instances with a __call__() method.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000148
149
Guido van Rossum79f25d91997-04-29 20:08:16 +0000150static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000151builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000152{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000153 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000154 Py_ssize_t len; /* guess for result list size */
155 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000156
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000157 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000158 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000159
Tim Peters0e57abf2001-05-02 07:39:38 +0000160 /* Strings and tuples return a result of the same type. */
161 if (PyString_Check(seq))
162 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000163#ifdef Py_USING_UNICODE
164 if (PyUnicode_Check(seq))
165 return filterunicode(func, seq);
166#endif
Tim Peters0e57abf2001-05-02 07:39:38 +0000167 if (PyTuple_Check(seq))
168 return filtertuple(func, seq);
169
Georg Brandle35b6572005-07-19 22:20:20 +0000170 /* Pre-allocate argument list tuple. */
171 arg = PyTuple_New(1);
172 if (arg == NULL)
173 return NULL;
174
Tim Peters0e57abf2001-05-02 07:39:38 +0000175 /* Get iterator. */
176 it = PyObject_GetIter(seq);
177 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000178 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000179
180 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000181 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000182 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000183 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
184 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
185 goto Fail_it;
186 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000187 PyErr_Clear();
188 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000189 }
190
Tim Peters0e57abf2001-05-02 07:39:38 +0000191 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000192 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000193 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000194 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000195 result = seq;
196 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000197 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000198 result = PyList_New(len);
199 if (result == NULL)
200 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000201 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000202
Tim Peters0e57abf2001-05-02 07:39:38 +0000203 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000204 j = 0;
205 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000206 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000207 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000208
Tim Peters0e57abf2001-05-02 07:39:38 +0000209 item = PyIter_Next(it);
210 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000211 if (PyErr_Occurred())
212 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000213 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000214 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000215
Neil Schemenauer68973552003-08-14 20:37:34 +0000216 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000217 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000218 }
219 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000220 PyObject *good;
221 PyTuple_SET_ITEM(arg, 0, item);
222 good = PyObject_Call(func, arg, NULL);
223 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000224 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000225 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000226 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000227 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000228 ok = PyObject_IsTrue(good);
229 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000230 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000231 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000232 if (j < len)
233 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000234 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000235 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000236 Py_DECREF(item);
237 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000238 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000239 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000240 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000241 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000242 else
243 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000244 }
245
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246
Tim Peters0e57abf2001-05-02 07:39:38 +0000247 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000248 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000249 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000250
Tim Peters3c6b1482001-05-21 08:07:05 +0000251 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000252 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000253 return result;
254
Tim Peters0e57abf2001-05-02 07:39:38 +0000255Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000257Fail_it:
258 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000259Fail_arg:
260 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000261 return NULL;
262}
263
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000264PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000265"filter(function or None, sequence) -> list, tuple, or string\n"
266"\n"
267"Return those items of sequence for which function(item) is true. If\n"
268"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000270
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000272builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000273{
274 long x;
275 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000276
Guido van Rossum79f25d91997-04-29 20:08:16 +0000277 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000278 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000279 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000280 PyErr_SetString(PyExc_ValueError,
281 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000282 return NULL;
283 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000284 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000285 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000286}
287
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000288PyDoc_STRVAR(chr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000289"chr(i) -> character\n\
290\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000291Return a string of one character with ordinal i; 0 <= i < 256.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000292
293
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000294#ifdef Py_USING_UNICODE
Guido van Rossum79f25d91997-04-29 20:08:16 +0000295static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000296builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000297{
298 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000299
300 if (!PyArg_ParseTuple(args, "l:unichr", &x))
301 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000302
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000303 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000304}
305
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000306PyDoc_STRVAR(unichr_doc,
Fred Drake078b24f2000-04-13 02:42:50 +0000307"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000308\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000309Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000310#endif
Guido van Rossum09095f32000-03-10 23:00:52 +0000311
312
313static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000314builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000315{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000317 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000318
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000319 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000320 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000321 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000322 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000323 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000324}
325
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000326PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000327"cmp(x, y) -> integer\n\
328\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000329Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000330
331
Guido van Rossum79f25d91997-04-29 20:08:16 +0000332static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000333builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000334{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000335 PyObject *v, *w;
336 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000337
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000338 if (!PyArg_UnpackTuple(args, "coerce", 2, 2, &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000339 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000340 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000341 return NULL;
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000342 res = PyTuple_Pack(2, v, w);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000343 Py_DECREF(v);
344 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000345 return res;
346}
347
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000348PyDoc_STRVAR(coerce_doc,
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000349"coerce(x, y) -> (x1, y1)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000350\n\
Martin v. Löwis8d494f32004-08-25 10:42:41 +0000351Return a tuple consisting of the two numeric arguments converted to\n\
352a common type, using the same rules as used by arithmetic operations.\n\
353If coercion is not possible, raise TypeError.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000354
Guido van Rossum79f25d91997-04-29 20:08:16 +0000355static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000356builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000357{
358 char *str;
359 char *filename;
360 char *startstr;
361 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000362 int dont_inherit = 0;
363 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000364 PyCompilerFlags cf;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000365 PyObject *result = NULL, *cmd, *tmp = NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000366 Py_ssize_t length;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000367
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000368 if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
Tim Peters6cd6a822001-08-17 22:11:27 +0000369 &startstr, &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000370 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000371
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000372 cf.cf_flags = supplied_flags;
373
374#ifdef Py_USING_UNICODE
375 if (PyUnicode_Check(cmd)) {
376 tmp = PyUnicode_AsUTF8String(cmd);
377 if (tmp == NULL)
378 return NULL;
379 cmd = tmp;
380 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
381 }
382#endif
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000383 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
384 return NULL;
Tim Peters2c646c92003-02-10 14:48:29 +0000385 if ((size_t)length != strlen(str)) {
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000386 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000387 "compile() expected string without null bytes");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000388 goto cleanup;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000389 }
390
Guido van Rossum5b722181993-03-30 17:46:03 +0000391 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000392 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000393 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000394 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000395 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000396 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000397 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000398 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000399 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000400 goto cleanup;
Guido van Rossum5b722181993-03-30 17:46:03 +0000401 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000402
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000403 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000404 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000405 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000406 PyErr_SetString(PyExc_ValueError,
407 "compile(): unrecognised flags");
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000408 goto cleanup;
Tim Peters6cd6a822001-08-17 22:11:27 +0000409 }
410 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
411
Tim Peters6cd6a822001-08-17 22:11:27 +0000412 if (!dont_inherit) {
413 PyEval_MergeCompilerFlags(&cf);
414 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000415 result = Py_CompileStringFlags(str, filename, start, &cf);
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000416cleanup:
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000417 Py_XDECREF(tmp);
418 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000419}
420
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000421PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000422"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000423\n\
424Compile the source string (a Python module, statement or expression)\n\
425into a code object that can be executed by the exec statement or eval().\n\
426The filename will be used for run-time error messages.\n\
427The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000428single (interactive) statement, or 'eval' to compile an expression.\n\
429The flags argument, if present, controls which future statements influence\n\
430the compilation of the code.\n\
431The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
432the effects of any future statements in effect in the code calling\n\
433compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000434in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000435
Guido van Rossum79f25d91997-04-29 20:08:16 +0000436static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000437builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000438{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000439 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000440
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000441 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000442 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000443 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000444}
445
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000446PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000447"dir([object]) -> list of strings\n"
448"\n"
449"Return an alphabetized list of names comprising (some of) the attributes\n"
450"of the given object, and of attributes reachable from it:\n"
451"\n"
452"No argument: the names in the current scope.\n"
453"Module object: the module attributes.\n"
Tim Peters37a309d2001-09-04 01:20:04 +0000454"Type or class object: its attributes, and recursively the attributes of\n"
455" its bases.\n"
Tim Peters5d2b77c2001-09-03 05:47:38 +0000456"Otherwise: its attributes, its class's attributes, and recursively the\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000457" attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000458
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000460builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000461{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000462 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000463
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000464 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000465 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000466 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000467}
468
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000469PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000470"divmod(x, y) -> (div, mod)\n\
471\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000472Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000473
474
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000476builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000477{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000478 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000479 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000480 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000481 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000482
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000483 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000484 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000485 if (locals != Py_None && !PyMapping_Check(locals)) {
486 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000487 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000488 }
489 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000490 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000491 "globals must be a real dict; try eval(expr, {}, mapping)"
492 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000493 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000494 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000495 if (globals == Py_None) {
496 globals = PyEval_GetGlobals();
497 if (locals == Py_None)
498 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000499 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000500 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000501 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000502
Georg Brandl77c85e62005-09-15 10:46:13 +0000503 if (globals == NULL || locals == NULL) {
504 PyErr_SetString(PyExc_TypeError,
505 "eval must be given globals and locals "
506 "when called without a frame");
507 return NULL;
508 }
509
Guido van Rossum79f25d91997-04-29 20:08:16 +0000510 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
511 if (PyDict_SetItemString(globals, "__builtins__",
512 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000513 return NULL;
514 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000515
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000516 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000517 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000518 PyErr_SetString(PyExc_TypeError,
519 "code object passed to eval() may not contain free variables");
520 return NULL;
521 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000522 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000523 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000524
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000525 if (!PyString_Check(cmd) &&
526 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000528 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000529 return NULL;
530 }
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000531 cf.cf_flags = 0;
532
533#ifdef Py_USING_UNICODE
534 if (PyUnicode_Check(cmd)) {
535 tmp = PyUnicode_AsUTF8String(cmd);
536 if (tmp == NULL)
537 return NULL;
538 cmd = tmp;
539 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
540 }
541#endif
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000542 if (PyString_AsStringAndSize(cmd, &str, NULL)) {
543 Py_XDECREF(tmp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000544 return NULL;
Neal Norwitz3a9a3e72005-11-27 20:38:31 +0000545 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000546 while (*str == ' ' || *str == '\t')
547 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000548
Tim Peters9fa96be2001-08-17 23:04:59 +0000549 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000550 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
551 Py_XDECREF(tmp);
552 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000553}
554
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000555PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000556"eval(source[, globals[, locals]]) -> value\n\
557\n\
558Evaluate the source in the context of globals and locals.\n\
559The source may be a string representing a Python expression\n\
560or a code object as returned by compile().\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000561The globals must be a dictionary and locals can be any mappping,\n\
562defaulting to the current globals and locals.\n\
563If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000564
565
Guido van Rossum79f25d91997-04-29 20:08:16 +0000566static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000567builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000568{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000570 PyObject *globals = Py_None, *locals = Py_None;
571 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000572 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000573 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000574 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000576 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000577 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000578 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000579 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000580 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000581 if (locals != Py_None && !PyMapping_Check(locals)) {
582 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
583 return NULL;
584 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000585 if (globals == Py_None) {
586 globals = PyEval_GetGlobals();
587 if (locals == Py_None)
588 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000589 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000591 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
593 if (PyDict_SetItemString(globals, "__builtins__",
594 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000595 return NULL;
596 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000597
598 exists = 0;
599 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000600#if defined(PLAN9)
601 {
602 Dir *d;
603
604 if ((d = dirstat(filename))!=nil) {
605 if(d->mode & DMDIR)
606 werrstr("is a directory");
607 else
608 exists = 1;
609 free(d);
610 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000611 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000612#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000613 if (object_exists(filename)) {
614 if (isdir(filename))
615 errno = EISDIR;
616 else
617 exists = 1;
618 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000619#else /* standard Posix */
620 {
621 struct stat s;
622 if (stat(filename, &s) == 0) {
623 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000624# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000625 errno = EOS2ERR;
626# else
627 errno = EISDIR;
628# endif
629 else
630 exists = 1;
631 }
632 }
633#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000634
635 if (exists) {
636 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000637 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000638 Py_END_ALLOW_THREADS
639
640 if (fp == NULL) {
641 exists = 0;
642 }
643 }
644
645 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000646 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000647 return NULL;
648 }
Tim Peters5ba58662001-07-16 02:29:45 +0000649 cf.cf_flags = 0;
650 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000651 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000652 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000653 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000654 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000655 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000656 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000657}
658
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000659PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000660"execfile(filename[, globals[, locals]])\n\
661\n\
662Read and execute a Python script from a file.\n\
663The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000664globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000665
666
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000668builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000669{
Guido van Rossum950ff291998-06-29 13:38:57 +0000670 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000672
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000673 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000674 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000675#ifdef Py_USING_UNICODE
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000676 if (PyUnicode_Check(name)) {
677 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
678 if (name == NULL)
679 return NULL;
680 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000681#endif
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000682
683 if (!PyString_Check(name)) {
684 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000685 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000686 return NULL;
687 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000688 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000689 if (result == NULL && dflt != NULL &&
690 PyErr_ExceptionMatches(PyExc_AttributeError))
691 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000692 PyErr_Clear();
693 Py_INCREF(dflt);
694 result = dflt;
695 }
696 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000697}
698
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000699PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000700"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000701\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000702Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
703When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000704exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000705
706
Guido van Rossum79f25d91997-04-29 20:08:16 +0000707static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000708builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000709{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000711
Guido van Rossum79f25d91997-04-29 20:08:16 +0000712 d = PyEval_GetGlobals();
713 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000714 return d;
715}
716
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000718"globals() -> dictionary\n\
719\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000720Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000721
722
Guido van Rossum79f25d91997-04-29 20:08:16 +0000723static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000724builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000725{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 PyObject *v;
727 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000729 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000730 return NULL;
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000731#ifdef Py_USING_UNICODE
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000732 if (PyUnicode_Check(name)) {
733 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
734 if (name == NULL)
735 return NULL;
736 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000737#endif
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000738
739 if (!PyString_Check(name)) {
740 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000741 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000742 return NULL;
743 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000745 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000747 Py_INCREF(Py_False);
748 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000749 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000751 Py_INCREF(Py_True);
752 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000753}
754
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000755PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000756"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000757\n\
758Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000759(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000760
761
Guido van Rossum79f25d91997-04-29 20:08:16 +0000762static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000763builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000764{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000765 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000766}
767
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000768PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000769"id(object) -> integer\n\
770\n\
771Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000772simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000773
774
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000776builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000777{
778 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000779 PyObject *it; /* the iterator object */
780 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000781 } sequence;
782
Guido van Rossum79f25d91997-04-29 20:08:16 +0000783 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000784 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000785 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000786 register int i, j;
787
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000789 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000790 PyErr_SetString(PyExc_TypeError,
791 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000792 return NULL;
793 }
794
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000797
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000798 if (func == Py_None && n == 1) {
799 /* map(None, S) is the same as list(S). */
800 return PySequence_List(PyTuple_GetItem(args, 1));
801 }
802
Tim Peters4e9afdc2001-05-03 23:54:49 +0000803 /* Get space for sequence descriptors. Must NULL out the iterator
804 * pointers so that jumping to Fail_2 later doesn't see trash.
805 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
807 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000808 return NULL;
809 }
810 for (i = 0; i < n; ++i) {
811 seqs[i].it = (PyObject*)NULL;
812 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000813 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000814
Tim Peters4e9afdc2001-05-03 23:54:49 +0000815 /* Do a first pass to obtain iterators for the arguments, and set len
816 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000817 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000818 len = 0;
819 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
820 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000821 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000822
Tim Peters4e9afdc2001-05-03 23:54:49 +0000823 /* Get iterator. */
824 curseq = PyTuple_GetItem(args, i+1);
825 sqp->it = PyObject_GetIter(curseq);
826 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000827 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000828 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000829 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000830 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000831 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000832 goto Fail_2;
833 }
834
Tim Peters4e9afdc2001-05-03 23:54:49 +0000835 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000836 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000837 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000838 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
839 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
840 goto Fail_2;
841 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000842 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000843 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000844 }
845 if (curlen > len)
846 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000847 }
848
Tim Peters4e9afdc2001-05-03 23:54:49 +0000849 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000851 goto Fail_2;
852
Tim Peters4e9afdc2001-05-03 23:54:49 +0000853 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +0000854 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000856 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000857
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000859 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +0000860 else if ((alist = PyTuple_New(n)) == NULL)
861 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000862
863 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000864 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 Py_INCREF(Py_None);
866 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000867 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000868 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000869 item = PyIter_Next(sqp->it);
870 if (item)
871 ++numactive;
872 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000873 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +0000874 Py_XDECREF(alist);
875 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000876 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000877 Py_INCREF(Py_None);
878 item = Py_None;
879 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000880 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000881 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000882 if (alist)
883 PyTuple_SET_ITEM(alist, j, item);
884 else
Guido van Rossum2d951851994-08-29 12:52:16 +0000885 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000886 }
887
Guido van Rossum32120311995-07-10 13:52:21 +0000888 if (!alist)
889 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +0000890
Tim Peters4e9afdc2001-05-03 23:54:49 +0000891 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +0000893 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000894 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000895
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +0000897 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000898 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 value = PyEval_CallObject(func, alist);
900 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000901 if (value == NULL)
902 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000903 }
904 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +0000905 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +0000906 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +0000907 if (status < 0)
908 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000909 }
Tim Peters4e9afdc2001-05-03 23:54:49 +0000910 else if (PyList_SetItem(result, i, value) < 0)
911 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000912 }
913
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000914 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
915 goto Fail_1;
916
Tim Peters4e9afdc2001-05-03 23:54:49 +0000917 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000918
Guido van Rossum12d12c51993-10-26 17:58:25 +0000919Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000921Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +0000922 result = NULL;
923Succeed:
924 assert(seqs);
925 for (i = 0; i < n; ++i)
926 Py_XDECREF(seqs[i].it);
927 PyMem_DEL(seqs);
928 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000929}
930
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000931PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000932"map(function, sequence[, sequence, ...]) -> list\n\
933\n\
934Return a list of the results of applying the function to the items of\n\
935the argument sequence(s). If more than one sequence is given, the\n\
936function is called with an argument list consisting of the corresponding\n\
937item of each sequence, substituting None for missing values when not all\n\
938sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000939the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000940
941
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000943builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000944{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 PyObject *v;
946 PyObject *name;
947 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000948
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000949 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +0000950 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +0000952 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953 Py_INCREF(Py_None);
954 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +0000955}
956
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000957PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000958"setattr(object, name, value)\n\
959\n\
960Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000961``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000962
963
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000965builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000966{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967 PyObject *v;
968 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000970 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +0000971 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000972 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +0000973 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000974 Py_INCREF(Py_None);
975 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +0000976}
977
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000978PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +0000979"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000980\n\
981Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000982``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000983
984
Guido van Rossum79f25d91997-04-29 20:08:16 +0000985static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000986builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000987{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000988 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000989
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000991 if (x == -1)
992 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000993 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000994}
995
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000996PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000997"hash(object) -> integer\n\
998\n\
999Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001000the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001001
1002
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001004builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001005{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001007 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001008
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001009 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001010 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001011 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001012 "hex() argument can't be converted to hex");
1013 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001014 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001015 res = (*nb->nb_hex)(v);
1016 if (res && !PyString_Check(res)) {
1017 PyErr_Format(PyExc_TypeError,
1018 "__hex__ returned non-string (type %.200s)",
1019 res->ob_type->tp_name);
1020 Py_DECREF(res);
1021 return NULL;
1022 }
1023 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001024}
1025
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001026PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001027"hex(number) -> string\n\
1028\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030
1031
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001033builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001034{
1035 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001036 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001037 return NULL;
Jeremy Hylton4c989dd2004-08-07 19:20:05 +00001038 if (!PyString_CheckExact(s)) {
1039 PyErr_SetString(PyExc_TypeError,
1040 "can't intern subclass of string");
1041 return NULL;
1042 }
Guido van Rossume8811f81997-02-14 15:48:05 +00001043 Py_INCREF(s);
1044 PyString_InternInPlace(&s);
1045 return s;
1046}
1047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001048PyDoc_STRVAR(intern_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001049"intern(string) -> string\n\
1050\n\
1051``Intern'' the given string. This enters the string in the (global)\n\
1052table of interned strings whose purpose is to speed up dictionary lookups.\n\
1053Return the string itself or the previously interned string object with the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001054same value.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055
1056
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001058builtin_iter(PyObject *self, PyObject *args)
1059{
1060 PyObject *v, *w = NULL;
1061
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001062 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001063 return NULL;
1064 if (w == NULL)
1065 return PyObject_GetIter(v);
1066 if (!PyCallable_Check(v)) {
1067 PyErr_SetString(PyExc_TypeError,
1068 "iter(v, w): v must be callable");
1069 return NULL;
1070 }
1071 return PyCallIter_New(v, w);
1072}
1073
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001075"iter(collection) -> iterator\n\
1076iter(callable, sentinel) -> iterator\n\
1077\n\
1078Get an iterator from an object. In the first form, the argument must\n\
1079supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001080In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001081
1082
1083static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001084builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001085{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001086 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001087
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001088 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001089 if (res < 0 && PyErr_Occurred())
1090 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001091 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001092}
1093
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001094PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001095"len(object) -> integer\n\
1096\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001097Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001098
1099
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001101builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001102{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105 d = PyEval_GetLocals();
1106 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001107 return d;
1108}
1109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001110PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001111"locals() -> dictionary\n\
1112\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001113Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001114
1115
Guido van Rossum79f25d91997-04-29 20:08:16 +00001116static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001117min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001118{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001119 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001120 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001123 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001124 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001125 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001126
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001127 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1128 keyfunc = PyDict_GetItemString(kwds, "key");
1129 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001130 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001131 "%s() got an unexpected keyword argument", name);
1132 return NULL;
1133 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001134 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001135
Tim Petersc3074532001-05-03 07:00:32 +00001136 it = PyObject_GetIter(v);
1137 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001138 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001139
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001140 maxitem = NULL; /* the result */
1141 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001142 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001143 /* get the value from the key function */
1144 if (keyfunc != NULL) {
1145 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1146 if (val == NULL)
1147 goto Fail_it_item;
1148 }
1149 /* no key function; the value is the item */
1150 else {
1151 val = item;
1152 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001153 }
Tim Petersc3074532001-05-03 07:00:32 +00001154
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001155 /* maximum value and item are unset; set them */
1156 if (maxval == NULL) {
1157 maxitem = item;
1158 maxval = val;
1159 }
1160 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001161 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001162 int cmp = PyObject_RichCompareBool(val, maxval, op);
1163 if (cmp < 0)
1164 goto Fail_it_item_and_val;
1165 else if (cmp > 0) {
1166 Py_DECREF(maxval);
1167 Py_DECREF(maxitem);
1168 maxval = val;
1169 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001170 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001171 else {
1172 Py_DECREF(item);
1173 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001174 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001175 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001176 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001177 if (PyErr_Occurred())
1178 goto Fail_it;
1179 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001180 PyErr_Format(PyExc_ValueError,
1181 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001182 assert(maxitem == NULL);
1183 }
1184 else
1185 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001186 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001187 return maxitem;
1188
1189Fail_it_item_and_val:
1190 Py_DECREF(val);
1191Fail_it_item:
1192 Py_DECREF(item);
1193Fail_it:
1194 Py_XDECREF(maxval);
1195 Py_XDECREF(maxitem);
1196 Py_DECREF(it);
1197 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001198}
1199
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001201builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001202{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001203 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001204}
1205
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001206PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001207"min(iterable[, key=func]) -> value\n\
1208min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001210With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001212
1213
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001215builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001216{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001218}
1219
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001220PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001221"max(iterable[, key=func]) -> value\n\
1222max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001223\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001224With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001225With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226
1227
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001229builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001230{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001231 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001232 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001234 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1235 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001237 "oct() argument can't be converted to oct");
1238 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001239 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001240 res = (*nb->nb_oct)(v);
1241 if (res && !PyString_Check(res)) {
1242 PyErr_Format(PyExc_TypeError,
1243 "__oct__ returned non-string (type %.200s)",
1244 res->ob_type->tp_name);
1245 Py_DECREF(res);
1246 return NULL;
1247 }
1248 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001249}
1250
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001251PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001252"oct(number) -> string\n\
1253\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001254Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001255
1256
Guido van Rossum79f25d91997-04-29 20:08:16 +00001257static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001258builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001259{
Guido van Rossum09095f32000-03-10 23:00:52 +00001260 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001261 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001262
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001263 if (PyString_Check(obj)) {
1264 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001265 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001266 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001267 return PyInt_FromLong(ord);
1268 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001269#ifdef Py_USING_UNICODE
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001270 } else if (PyUnicode_Check(obj)) {
1271 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001272 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001273 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001274 return PyInt_FromLong(ord);
1275 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001276#endif
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001277 } else {
1278 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001279 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001280 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001281 return NULL;
1282 }
1283
Guido van Rossumad991772001-01-12 16:03:05 +00001284 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001285 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001286 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001287 size);
1288 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001289}
1290
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001291PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001292"ord(c) -> integer\n\
1293\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001294Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001295
1296
Guido van Rossum79f25d91997-04-29 20:08:16 +00001297static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001298builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001299{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001300 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001301
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001302 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001303 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001304 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001305}
1306
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001307PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001308"pow(x, y[, z]) -> number\n\
1309\n\
1310With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001311equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001312
1313
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001314
1315/* Return number of items in range (lo, hi, step), when arguments are
1316 * PyInt or PyLong objects. step > 0 required. Return a value < 0 if
1317 * & only if the true value is too large to fit in a signed long.
1318 * Arguments MUST return 1 with either PyInt_Check() or
1319 * PyLong_Check(). Return -1 when there is an error.
1320 */
1321static long
1322get_len_of_range_longs(PyObject *lo, PyObject *hi, PyObject *step)
1323{
1324 /* -------------------------------------------------------------
1325 Algorithm is equal to that of get_len_of_range(), but it operates
1326 on PyObjects (which are assumed to be PyLong or PyInt objects).
1327 ---------------------------------------------------------------*/
1328 long n;
1329 PyObject *diff = NULL;
1330 PyObject *one = NULL;
1331 PyObject *tmp1 = NULL, *tmp2 = NULL, *tmp3 = NULL;
1332 /* holds sub-expression evaluations */
1333
1334 /* if (lo >= hi), return length of 0. */
1335 if (PyObject_Compare(lo, hi) >= 0)
1336 return 0;
1337
1338 if ((one = PyLong_FromLong(1L)) == NULL)
1339 goto Fail;
1340
1341 if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
1342 goto Fail;
1343
1344 if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
1345 goto Fail;
1346
1347 if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
1348 goto Fail;
1349
1350 if ((tmp3 = PyNumber_Add(tmp2, one)) == NULL)
1351 goto Fail;
1352
1353 n = PyLong_AsLong(tmp3);
1354 if (PyErr_Occurred()) { /* Check for Overflow */
1355 PyErr_Clear();
1356 goto Fail;
1357 }
1358
1359 Py_DECREF(tmp3);
1360 Py_DECREF(tmp2);
1361 Py_DECREF(diff);
1362 Py_DECREF(tmp1);
1363 Py_DECREF(one);
1364 return n;
1365
1366 Fail:
1367 Py_XDECREF(tmp3);
1368 Py_XDECREF(tmp2);
1369 Py_XDECREF(diff);
1370 Py_XDECREF(tmp1);
1371 Py_XDECREF(one);
1372 return -1;
1373}
1374
1375/* An extension of builtin_range() that handles the case when PyLong
1376 * arguments are given. */
1377static PyObject *
1378handle_range_longs(PyObject *self, PyObject *args)
1379{
1380 PyObject *ilow;
Tim Peters874e1f72003-04-13 22:13:08 +00001381 PyObject *ihigh = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001382 PyObject *istep = NULL;
Tim Peters874e1f72003-04-13 22:13:08 +00001383
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001384 PyObject *curnum = NULL;
1385 PyObject *v = NULL;
1386 long bign;
1387 int i, n;
1388 int cmp_result;
1389
Tim Peters874e1f72003-04-13 22:13:08 +00001390 PyObject *zero = PyLong_FromLong(0);
1391
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001392 if (zero == NULL)
1393 return NULL;
1394
Tim Peters874e1f72003-04-13 22:13:08 +00001395 if (!PyArg_UnpackTuple(args, "range", 1, 3, &ilow, &ihigh, &istep)) {
1396 Py_DECREF(zero);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001397 return NULL;
1398 }
1399
Tim Peters874e1f72003-04-13 22:13:08 +00001400 /* Figure out which way we were called, supply defaults, and be
1401 * sure to incref everything so that the decrefs at the end
1402 * are correct.
1403 */
1404 assert(ilow != NULL);
1405 if (ihigh == NULL) {
1406 /* only 1 arg -- it's the upper limit */
1407 ihigh = ilow;
1408 ilow = NULL;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001409 }
Tim Peters874e1f72003-04-13 22:13:08 +00001410 assert(ihigh != NULL);
1411 Py_INCREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001412
Tim Peters874e1f72003-04-13 22:13:08 +00001413 /* ihigh correct now; do ilow */
1414 if (ilow == NULL)
1415 ilow = zero;
1416 Py_INCREF(ilow);
1417
1418 /* ilow and ihigh correct now; do istep */
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001419 if (istep == NULL) {
1420 istep = PyLong_FromLong(1L);
1421 if (istep == NULL)
1422 goto Fail;
1423 }
1424 else {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001425 Py_INCREF(istep);
1426 }
1427
Tim Peters874e1f72003-04-13 22:13:08 +00001428 if (!PyInt_Check(ilow) && !PyLong_Check(ilow)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001429 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001430 "range() integer start argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001431 ilow->ob_type->tp_name);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001432 goto Fail;
1433 }
1434
Tim Peters874e1f72003-04-13 22:13:08 +00001435 if (!PyInt_Check(ihigh) && !PyLong_Check(ihigh)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001436 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001437 "range() integer end argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001438 ihigh->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001439 goto Fail;
1440 }
1441
1442 if (!PyInt_Check(istep) && !PyLong_Check(istep)) {
Guido van Rossum28e83e32003-04-15 12:43:26 +00001443 PyErr_Format(PyExc_TypeError,
Alex Martellif471d472003-04-23 13:00:44 +00001444 "range() integer step argument expected, got %s.",
Guido van Rossum817d6c92003-04-14 18:25:04 +00001445 istep->ob_type->tp_name);
Tim Peters874e1f72003-04-13 22:13:08 +00001446 goto Fail;
1447 }
1448
1449 if (PyObject_Cmp(istep, zero, &cmp_result) == -1)
1450 goto Fail;
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001451 if (cmp_result == 0) {
1452 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001453 "range() step argument must not be zero");
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001454 goto Fail;
1455 }
1456
1457 if (cmp_result > 0)
1458 bign = get_len_of_range_longs(ilow, ihigh, istep);
1459 else {
1460 PyObject *neg_istep = PyNumber_Negative(istep);
1461 if (neg_istep == NULL)
1462 goto Fail;
1463 bign = get_len_of_range_longs(ihigh, ilow, neg_istep);
1464 Py_DECREF(neg_istep);
1465 }
1466
1467 n = (int)bign;
1468 if (bign < 0 || (long)n != bign) {
1469 PyErr_SetString(PyExc_OverflowError,
1470 "range() result has too many items");
1471 goto Fail;
1472 }
1473
1474 v = PyList_New(n);
1475 if (v == NULL)
1476 goto Fail;
1477
1478 curnum = ilow;
1479 Py_INCREF(curnum);
1480
1481 for (i = 0; i < n; i++) {
1482 PyObject *w = PyNumber_Long(curnum);
1483 PyObject *tmp_num;
1484 if (w == NULL)
1485 goto Fail;
1486
1487 PyList_SET_ITEM(v, i, w);
1488
1489 tmp_num = PyNumber_Add(curnum, istep);
1490 if (tmp_num == NULL)
1491 goto Fail;
1492
1493 Py_DECREF(curnum);
1494 curnum = tmp_num;
1495 }
Tim Peters874e1f72003-04-13 22:13:08 +00001496 Py_DECREF(ilow);
1497 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001498 Py_DECREF(istep);
1499 Py_DECREF(zero);
Tim Peters874e1f72003-04-13 22:13:08 +00001500 Py_DECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001501 return v;
1502
1503 Fail:
Tim Peters874e1f72003-04-13 22:13:08 +00001504 Py_DECREF(ilow);
1505 Py_DECREF(ihigh);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001506 Py_XDECREF(istep);
Tim Peters874e1f72003-04-13 22:13:08 +00001507 Py_DECREF(zero);
1508 Py_XDECREF(curnum);
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001509 Py_XDECREF(v);
1510 return NULL;
1511}
1512
Guido van Rossum124eff01999-02-23 16:11:01 +00001513/* Return number of items in range/xrange (lo, hi, step). step > 0
1514 * required. Return a value < 0 if & only if the true value is too
1515 * large to fit in a signed long.
1516 */
1517static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001518get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001519{
1520 /* -------------------------------------------------------------
1521 If lo >= hi, the range is empty.
1522 Else if n values are in the range, the last one is
1523 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1524 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1525 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1526 the RHS is non-negative and so truncation is the same as the
1527 floor. Letting M be the largest positive long, the worst case
1528 for the RHS numerator is hi=M, lo=-M-1, and then
1529 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1530 precision to compute the RHS exactly.
1531 ---------------------------------------------------------------*/
1532 long n = 0;
1533 if (lo < hi) {
1534 unsigned long uhi = (unsigned long)hi;
1535 unsigned long ulo = (unsigned long)lo;
1536 unsigned long diff = uhi - ulo - 1;
1537 n = (long)(diff / (unsigned long)step + 1);
1538 }
1539 return n;
1540}
1541
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001543builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001544{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001545 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001546 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001547 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001548
Guido van Rossum79f25d91997-04-29 20:08:16 +00001549 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001550
Guido van Rossum79f25d91997-04-29 20:08:16 +00001551 if (PyTuple_Size(args) <= 1) {
1552 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001553 "l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001554 &ihigh)) {
1555 PyErr_Clear();
1556 return handle_range_longs(self, args);
1557 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001558 }
1559 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001560 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001561 "ll|l;range() requires 1-3 int arguments",
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001562 &ilow, &ihigh, &istep)) {
1563 PyErr_Clear();
1564 return handle_range_longs(self, args);
1565 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001566 }
1567 if (istep == 0) {
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001568 PyErr_SetString(PyExc_ValueError,
Alex Martellif471d472003-04-23 13:00:44 +00001569 "range() step argument must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001570 return NULL;
1571 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001572 if (istep > 0)
1573 bign = get_len_of_range(ilow, ihigh, istep);
1574 else
1575 bign = get_len_of_range(ihigh, ilow, -istep);
1576 n = (int)bign;
1577 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001578 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001579 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001580 return NULL;
1581 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001582 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001583 if (v == NULL)
1584 return NULL;
1585 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001586 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001587 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001588 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001589 return NULL;
1590 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001591 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001592 ilow += istep;
1593 }
1594 return v;
1595}
1596
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001597PyDoc_STRVAR(range_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001598"range([start,] stop[, step]) -> list of integers\n\
1599\n\
1600Return a list containing an arithmetic progression of integers.\n\
1601range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1602When step is given, it specifies the increment (or decrement).\n\
1603For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001604These are exactly the valid indices for a list of 4 elements.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001605
1606
Guido van Rossum79f25d91997-04-29 20:08:16 +00001607static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001608builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001609{
Tim Peters15d81ef2001-05-04 04:39:21 +00001610 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001611
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001612 if (!PyArg_UnpackTuple(args, "reduce", 2, 3, &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001613 return NULL;
1614 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001615 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001616
Tim Peters15d81ef2001-05-04 04:39:21 +00001617 it = PyObject_GetIter(seq);
1618 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001619 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001620 "reduce() arg 2 must support iteration");
1621 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001622 return NULL;
1623 }
1624
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001626 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001627
Tim Peters15d81ef2001-05-04 04:39:21 +00001628 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001629 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001630
1631 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001632 Py_DECREF(args);
1633 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001634 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001635 }
1636
Tim Peters15d81ef2001-05-04 04:39:21 +00001637 op2 = PyIter_Next(it);
1638 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001639 if (PyErr_Occurred())
1640 goto Fail;
1641 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001642 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001643
Guido van Rossum2d951851994-08-29 12:52:16 +00001644 if (result == NULL)
1645 result = op2;
1646 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001647 PyTuple_SetItem(args, 0, result);
1648 PyTuple_SetItem(args, 1, op2);
1649 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001650 goto Fail;
1651 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001652 }
1653
Guido van Rossum79f25d91997-04-29 20:08:16 +00001654 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001655
Guido van Rossum2d951851994-08-29 12:52:16 +00001656 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001658 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001659
Tim Peters15d81ef2001-05-04 04:39:21 +00001660 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001661 return result;
1662
Guido van Rossum2d951851994-08-29 12:52:16 +00001663Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001664 Py_XDECREF(args);
1665 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001666 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001667 return NULL;
1668}
1669
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001670PyDoc_STRVAR(reduce_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001671"reduce(function, sequence[, initial]) -> value\n\
1672\n\
1673Apply a function of two arguments cumulatively to the items of a sequence,\n\
1674from left to right, so as to reduce the sequence to a single value.\n\
1675For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1676((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1677of the sequence in the calculation, and serves as a default when the\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001678sequence is empty.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001679
1680
Guido van Rossum79f25d91997-04-29 20:08:16 +00001681static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001682builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001683{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001684 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001685}
1686
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001687PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001688"reload(module) -> module\n\
1689\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001690Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001691
1692
Guido van Rossum79f25d91997-04-29 20:08:16 +00001693static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001694builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001695{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001697}
1698
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001699PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700"repr(object) -> string\n\
1701\n\
1702Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001703For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001704
1705
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001707builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001708{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001709 double x;
1710 double f;
1711 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001712 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001713
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001715 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001716 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001717 i = abs(ndigits);
1718 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001719 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001720 if (ndigits < 0)
1721 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001722 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001723 x *= f;
1724 if (x >= 0.0)
1725 x = floor(x + 0.5);
1726 else
1727 x = ceil(x - 0.5);
1728 if (ndigits < 0)
1729 x *= f;
1730 else
1731 x /= f;
1732 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001733}
1734
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001735PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001736"round(number[, ndigits]) -> floating point number\n\
1737\n\
1738Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001739This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001740
Raymond Hettinger64958a12003-12-17 20:43:33 +00001741static PyObject *
1742builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1743{
1744 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1745 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001746 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001747 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001748
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001749 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001750 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1751 kwlist, &seq, &compare, &keyfunc, &reverse))
1752 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001753
1754 newlist = PySequence_List(seq);
1755 if (newlist == NULL)
1756 return NULL;
1757
1758 callable = PyObject_GetAttrString(newlist, "sort");
1759 if (callable == NULL) {
1760 Py_DECREF(newlist);
1761 return NULL;
1762 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001763
Raymond Hettinger64958a12003-12-17 20:43:33 +00001764 newargs = PyTuple_GetSlice(args, 1, 4);
1765 if (newargs == NULL) {
1766 Py_DECREF(newlist);
1767 Py_DECREF(callable);
1768 return NULL;
1769 }
1770
1771 v = PyObject_Call(callable, newargs, kwds);
1772 Py_DECREF(newargs);
1773 Py_DECREF(callable);
1774 if (v == NULL) {
1775 Py_DECREF(newlist);
1776 return NULL;
1777 }
1778 Py_DECREF(v);
1779 return newlist;
1780}
1781
1782PyDoc_STRVAR(sorted_doc,
1783"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001784
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001786builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001787{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001788 PyObject *v = NULL;
1789 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001790
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001791 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001792 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001793 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001794 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001795 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796 if (!PyErr_Occurred())
1797 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001798 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001799 }
1800 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001802 }
1803 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001805 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001807 "vars() argument must have __dict__ attribute");
1808 return NULL;
1809 }
1810 }
1811 return d;
1812}
1813
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001814PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001815"vars([object]) -> dictionary\n\
1816\n\
1817Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001818With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001819
Alex Martellia70b1912003-04-22 08:12:33 +00001820
1821static PyObject*
1822builtin_sum(PyObject *self, PyObject *args)
1823{
1824 PyObject *seq;
1825 PyObject *result = NULL;
1826 PyObject *temp, *item, *iter;
1827
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001828 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001829 return NULL;
1830
1831 iter = PyObject_GetIter(seq);
1832 if (iter == NULL)
1833 return NULL;
1834
1835 if (result == NULL) {
1836 result = PyInt_FromLong(0);
1837 if (result == NULL) {
1838 Py_DECREF(iter);
1839 return NULL;
1840 }
1841 } else {
1842 /* reject string values for 'start' parameter */
1843 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1844 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001845 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001846 Py_DECREF(iter);
1847 return NULL;
1848 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001849 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001850 }
1851
1852 for(;;) {
1853 item = PyIter_Next(iter);
1854 if (item == NULL) {
1855 /* error, or end-of-sequence */
1856 if (PyErr_Occurred()) {
1857 Py_DECREF(result);
1858 result = NULL;
1859 }
1860 break;
1861 }
Alex Martellia253e182003-10-25 23:24:14 +00001862 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001863 Py_DECREF(result);
1864 Py_DECREF(item);
1865 result = temp;
1866 if (result == NULL)
1867 break;
1868 }
1869 Py_DECREF(iter);
1870 return result;
1871}
1872
1873PyDoc_STRVAR(sum_doc,
1874"sum(sequence, start=0) -> value\n\
1875\n\
1876Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
1877of parameter 'start'. When the sequence is empty, returns start.");
1878
1879
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001880static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001881builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001882{
1883 PyObject *inst;
1884 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001885 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001886
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001887 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001888 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001889
Guido van Rossum823649d2001-03-21 18:40:58 +00001890 retval = PyObject_IsInstance(inst, cls);
1891 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001892 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001893 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001894}
1895
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001896PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001897"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001898\n\
1899Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001900With a type as second argument, return whether that is the object's type.\n\
1901The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001902isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001903
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001904
1905static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001906builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001907{
1908 PyObject *derived;
1909 PyObject *cls;
1910 int retval;
1911
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001912 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001913 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001914
Guido van Rossum823649d2001-03-21 18:40:58 +00001915 retval = PyObject_IsSubclass(derived, cls);
1916 if (retval < 0)
1917 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001918 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001919}
1920
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001921PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001922"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001923\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001924Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1925When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1926is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001927
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001928
Barry Warsawbd599b52000-08-03 15:45:29 +00001929static PyObject*
1930builtin_zip(PyObject *self, PyObject *args)
1931{
1932 PyObject *ret;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001933 const Py_ssize_t itemsize = PySequence_Length(args);
1934 Py_ssize_t i;
Tim Peters8572b4f2001-05-06 01:05:02 +00001935 PyObject *itlist; /* tuple of iterators */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001936 Py_ssize_t len; /* guess at result length */
Barry Warsawbd599b52000-08-03 15:45:29 +00001937
Raymond Hettingereaef6152003-08-02 07:42:57 +00001938 if (itemsize == 0)
1939 return PyList_New(0);
1940
Barry Warsawbd599b52000-08-03 15:45:29 +00001941 /* args must be a tuple */
1942 assert(PyTuple_Check(args));
1943
Tim Peters39a86c22002-05-12 07:19:38 +00001944 /* Guess at result length: the shortest of the input lengths.
1945 If some argument refuses to say, we refuse to guess too, lest
1946 an argument like xrange(sys.maxint) lead us astray.*/
Tim Peters67d687a2002-04-29 21:27:32 +00001947 len = -1; /* unknown */
1948 for (i = 0; i < itemsize; ++i) {
1949 PyObject *item = PyTuple_GET_ITEM(args, i);
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001950 Py_ssize_t thislen = _PyObject_LengthHint(item);
Tim Peters39a86c22002-05-12 07:19:38 +00001951 if (thislen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001952 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1953 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1954 return NULL;
1955 }
Tim Peters67d687a2002-04-29 21:27:32 +00001956 PyErr_Clear();
Tim Peters39a86c22002-05-12 07:19:38 +00001957 len = -1;
1958 break;
1959 }
Tim Peters67d687a2002-04-29 21:27:32 +00001960 else if (len < 0 || thislen < len)
1961 len = thislen;
1962 }
1963
Tim Peters8572b4f2001-05-06 01:05:02 +00001964 /* allocate result list */
Tim Peters67d687a2002-04-29 21:27:32 +00001965 if (len < 0)
1966 len = 10; /* arbitrary */
1967 if ((ret = PyList_New(len)) == NULL)
Barry Warsawbd599b52000-08-03 15:45:29 +00001968 return NULL;
1969
Tim Peters8572b4f2001-05-06 01:05:02 +00001970 /* obtain iterators */
1971 itlist = PyTuple_New(itemsize);
1972 if (itlist == NULL)
1973 goto Fail_ret;
1974 for (i = 0; i < itemsize; ++i) {
1975 PyObject *item = PyTuple_GET_ITEM(args, i);
1976 PyObject *it = PyObject_GetIter(item);
1977 if (it == NULL) {
1978 if (PyErr_ExceptionMatches(PyExc_TypeError))
1979 PyErr_Format(PyExc_TypeError,
Neal Norwitza361bd82006-02-19 19:31:50 +00001980 "zip argument #%zd must support iteration",
Tim Peters8572b4f2001-05-06 01:05:02 +00001981 i+1);
1982 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00001983 }
Tim Peters8572b4f2001-05-06 01:05:02 +00001984 PyTuple_SET_ITEM(itlist, i, it);
1985 }
Barry Warsawbd599b52000-08-03 15:45:29 +00001986
Tim Peters8572b4f2001-05-06 01:05:02 +00001987 /* build result into ret list */
Tim Peters67d687a2002-04-29 21:27:32 +00001988 for (i = 0; ; ++i) {
1989 int j;
Tim Peters8572b4f2001-05-06 01:05:02 +00001990 PyObject *next = PyTuple_New(itemsize);
1991 if (!next)
1992 goto Fail_ret_itlist;
1993
Tim Peters67d687a2002-04-29 21:27:32 +00001994 for (j = 0; j < itemsize; j++) {
1995 PyObject *it = PyTuple_GET_ITEM(itlist, j);
Tim Peters8572b4f2001-05-06 01:05:02 +00001996 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00001997 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00001998 if (PyErr_Occurred()) {
1999 Py_DECREF(ret);
2000 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002001 }
2002 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002003 Py_DECREF(itlist);
Tim Peters67d687a2002-04-29 21:27:32 +00002004 goto Done;
Barry Warsawbd599b52000-08-03 15:45:29 +00002005 }
Tim Peters67d687a2002-04-29 21:27:32 +00002006 PyTuple_SET_ITEM(next, j, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002007 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002008
Tim Peters67d687a2002-04-29 21:27:32 +00002009 if (i < len)
2010 PyList_SET_ITEM(ret, i, next);
2011 else {
2012 int status = PyList_Append(ret, next);
2013 Py_DECREF(next);
2014 ++len;
2015 if (status < 0)
2016 goto Fail_ret_itlist;
2017 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002018 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002019
Tim Peters67d687a2002-04-29 21:27:32 +00002020Done:
2021 if (ret != NULL && i < len) {
2022 /* The list is too big. */
2023 if (PyList_SetSlice(ret, i, len, NULL) < 0)
2024 return NULL;
2025 }
2026 return ret;
2027
Tim Peters8572b4f2001-05-06 01:05:02 +00002028Fail_ret_itlist:
2029 Py_DECREF(itlist);
2030Fail_ret:
2031 Py_DECREF(ret);
2032 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002033}
2034
2035
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002036PyDoc_STRVAR(zip_doc,
Barry Warsawbd599b52000-08-03 15:45:29 +00002037"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2038\n\
2039Return a list of tuples, where each tuple contains the i-th element\n\
2040from each of the argument sequences. The returned list is truncated\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002041in length to the length of the shortest argument sequence.");
Barry Warsawbd599b52000-08-03 15:45:29 +00002042
2043
Guido van Rossum79f25d91997-04-29 20:08:16 +00002044static PyMethodDef builtin_methods[] = {
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002045 {"__import__", builtin___import__, METH_VARARGS, import_doc},
2046 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002047 {"all", builtin_all, METH_O, all_doc},
2048 {"any", builtin_any, METH_O, any_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002049 {"callable", builtin_callable, METH_O, callable_doc},
2050 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2051 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
2052 {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
2053 {"compile", builtin_compile, METH_VARARGS, compile_doc},
2054 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2055 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2056 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2057 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2058 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
2059 {"filter", builtin_filter, METH_VARARGS, filter_doc},
2060 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2061 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2062 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2063 {"hash", builtin_hash, METH_O, hash_doc},
2064 {"hex", builtin_hex, METH_O, hex_doc},
2065 {"id", builtin_id, METH_O, id_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002066 {"intern", builtin_intern, METH_VARARGS, intern_doc},
2067 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2068 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2069 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2070 {"len", builtin_len, METH_O, len_doc},
2071 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2072 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002073 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2074 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002075 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002076 {"ord", builtin_ord, METH_O, ord_doc},
2077 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2078 {"range", builtin_range, METH_VARARGS, range_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002079 {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
2080 {"reload", builtin_reload, METH_O, reload_doc},
2081 {"repr", builtin_repr, METH_O, repr_doc},
2082 {"round", builtin_round, METH_VARARGS, round_doc},
2083 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002084 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002085 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002086#ifdef Py_USING_UNICODE
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002087 {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002088#endif
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002089 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002090 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002091 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002092};
2093
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002094PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002095"Built-in functions, exceptions, and other objects.\n\
2096\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002097Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002098
Guido van Rossum25ce5661997-08-02 03:10:38 +00002099PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002100_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002101{
Fred Drake5550de32000-06-20 04:54:19 +00002102 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002103 mod = Py_InitModule4("__builtin__", builtin_methods,
2104 builtin_doc, (PyObject *)NULL,
2105 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002106 if (mod == NULL)
2107 return NULL;
2108 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002109
Tim Peters7571a0f2003-03-23 17:52:28 +00002110#ifdef Py_TRACE_REFS
2111 /* __builtin__ exposes a number of statically allocated objects
2112 * that, before this code was added in 2.3, never showed up in
2113 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2114 * result, programs leaking references to None and False (etc)
2115 * couldn't be diagnosed by examining sys.getobjects(0).
2116 */
2117#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2118#else
2119#define ADD_TO_ALL(OBJECT) (void)0
2120#endif
2121
Tim Peters4b7625e2001-09-13 21:37:17 +00002122#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002123 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2124 return NULL; \
2125 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002126
2127 SETBUILTIN("None", Py_None);
2128 SETBUILTIN("Ellipsis", Py_Ellipsis);
2129 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002130 SETBUILTIN("False", Py_False);
2131 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002132 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002133 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002134 SETBUILTIN("buffer", &PyBuffer_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002135 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002136#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002137 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002138#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002139 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002140 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002141 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002142 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002143 SETBUILTIN("property", &PyProperty_Type);
2144 SETBUILTIN("int", &PyInt_Type);
2145 SETBUILTIN("list", &PyList_Type);
2146 SETBUILTIN("long", &PyLong_Type);
2147 SETBUILTIN("object", &PyBaseObject_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002148 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002149 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002150 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002151 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2152 SETBUILTIN("str", &PyString_Type);
2153 SETBUILTIN("super", &PySuper_Type);
2154 SETBUILTIN("tuple", &PyTuple_Type);
2155 SETBUILTIN("type", &PyType_Type);
Raymond Hettingerc4c453f2002-06-05 23:12:45 +00002156 SETBUILTIN("xrange", &PyRange_Type);
Tim Peters742dfd62001-09-13 21:49:44 +00002157
2158 /* Note that open() is just an alias of file(). */
2159 SETBUILTIN("open", &PyFile_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002160 SETBUILTIN("file", &PyFile_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002161#ifdef Py_USING_UNICODE
Tim Peters4b7625e2001-09-13 21:37:17 +00002162 SETBUILTIN("unicode", &PyUnicode_Type);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002163#endif
Guido van Rossum77f6a652002-04-03 22:41:51 +00002164 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002165 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2166 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002167 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002168 }
2169 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002170
Guido van Rossum25ce5661997-08-02 03:10:38 +00002171 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002172#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002173#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002174}
2175
Guido van Rossume77a7571993-11-03 15:01:26 +00002176/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002177
Guido van Rossum79f25d91997-04-29 20:08:16 +00002178static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002179filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002180{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002181 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002182 Py_ssize_t i, j;
2183 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002184
Guido van Rossumb7b45621995-08-04 04:07:45 +00002185 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002186 if (PyTuple_CheckExact(tuple))
2187 Py_INCREF(tuple);
2188 else
2189 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002190 return tuple;
2191 }
2192
Guido van Rossum79f25d91997-04-29 20:08:16 +00002193 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002194 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002195
Guido van Rossum12d12c51993-10-26 17:58:25 +00002196 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002197 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002198 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002199
Walter Dörwald8dd19322003-02-10 17:36:40 +00002200 if (tuple->ob_type->tp_as_sequence &&
2201 tuple->ob_type->tp_as_sequence->sq_item) {
2202 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002203 if (item == NULL)
2204 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002205 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002206 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002207 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002208 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002209 if (func == Py_None) {
2210 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002211 good = item;
2212 }
2213 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002214 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002215 if (arg == NULL) {
2216 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002217 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002218 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002219 good = PyEval_CallObject(func, arg);
2220 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002221 if (good == NULL) {
2222 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002223 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002224 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002225 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002226 ok = PyObject_IsTrue(good);
2227 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002228 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002229 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002230 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002231 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002232 else
2233 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002234 }
2235
Tim Peters4324aa32001-05-28 22:30:08 +00002236 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002237 return NULL;
2238
Guido van Rossum12d12c51993-10-26 17:58:25 +00002239 return result;
2240
Guido van Rossum12d12c51993-10-26 17:58:25 +00002241Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002242 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002243 return NULL;
2244}
2245
2246
Guido van Rossume77a7571993-11-03 15:01:26 +00002247/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002248
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002250filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002251{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002252 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002253 Py_ssize_t i, j;
2254 Py_ssize_t len = PyString_Size(strobj);
2255 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002256
Guido van Rossum79f25d91997-04-29 20:08:16 +00002257 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002258 /* If it's a real string we can return the original,
2259 * as no character is ever false and __getitem__
2260 * does return this character. If it's a subclass
2261 * we must go through the __getitem__ loop */
2262 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002263 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002264 return strobj;
2265 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002266 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002267 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002268 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002269
Guido van Rossum12d12c51993-10-26 17:58:25 +00002270 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002271 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002272 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002273
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002274 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2275 if (item == NULL)
2276 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002277 if (func==Py_None) {
2278 ok = 1;
2279 } else {
2280 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002281 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002282 if (arg == NULL) {
2283 Py_DECREF(item);
2284 goto Fail_1;
2285 }
2286 good = PyEval_CallObject(func, arg);
2287 Py_DECREF(arg);
2288 if (good == NULL) {
2289 Py_DECREF(item);
2290 goto Fail_1;
2291 }
2292 ok = PyObject_IsTrue(good);
2293 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002294 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002295 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002296 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002297 if (!PyString_Check(item)) {
2298 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2299 " __getitem__ returned different type");
2300 Py_DECREF(item);
2301 goto Fail_1;
2302 }
2303 reslen = PyString_GET_SIZE(item);
2304 if (reslen == 1) {
2305 PyString_AS_STRING(result)[j++] =
2306 PyString_AS_STRING(item)[0];
2307 } else {
2308 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002309 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002310 if (need > outlen) {
2311 /* overallocate, to avoid reallocations */
2312 if (need<2*outlen)
2313 need = 2*outlen;
2314 if (_PyString_Resize(&result, need)) {
2315 Py_DECREF(item);
2316 return NULL;
2317 }
2318 outlen = need;
2319 }
2320 memcpy(
2321 PyString_AS_STRING(result) + j,
2322 PyString_AS_STRING(item),
2323 reslen
2324 );
2325 j += reslen;
2326 }
2327 }
Tim Peters388ed082001-04-07 20:34:48 +00002328 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002329 }
2330
Walter Dörwald903f1e02003-02-04 16:28:00 +00002331 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002332 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002333
Guido van Rossum12d12c51993-10-26 17:58:25 +00002334 return result;
2335
Guido van Rossum12d12c51993-10-26 17:58:25 +00002336Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002337 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002338 return NULL;
2339}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002340
2341#ifdef Py_USING_UNICODE
2342/* Helper for filter(): filter a Unicode object through a function */
2343
2344static PyObject *
2345filterunicode(PyObject *func, PyObject *strobj)
2346{
2347 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002348 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002349 Py_ssize_t len = PyUnicode_GetSize(strobj);
2350 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002351
2352 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002353 /* If it's a real string we can return the original,
2354 * as no character is ever false and __getitem__
2355 * does return this character. If it's a subclass
2356 * we must go through the __getitem__ loop */
2357 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002358 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002359 return strobj;
2360 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002361 }
2362 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2363 return NULL;
2364
2365 for (i = j = 0; i < len; ++i) {
2366 PyObject *item, *arg, *good;
2367 int ok;
2368
2369 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2370 if (item == NULL)
2371 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002372 if (func == Py_None) {
2373 ok = 1;
2374 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002375 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002376 if (arg == NULL) {
2377 Py_DECREF(item);
2378 goto Fail_1;
2379 }
2380 good = PyEval_CallObject(func, arg);
2381 Py_DECREF(arg);
2382 if (good == NULL) {
2383 Py_DECREF(item);
2384 goto Fail_1;
2385 }
2386 ok = PyObject_IsTrue(good);
2387 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002388 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002389 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002390 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002391 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002392 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002393 "can't filter unicode to unicode:"
2394 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002395 Py_DECREF(item);
2396 goto Fail_1;
2397 }
2398 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002399 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002400 PyUnicode_AS_UNICODE(result)[j++] =
2401 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002402 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002403 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002404 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002405 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002406 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002407 to avoid reallocations */
2408 if (need < 2 * outlen)
2409 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002410 if (PyUnicode_Resize(
2411 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002412 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002413 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002414 }
2415 outlen = need;
2416 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002417 memcpy(PyUnicode_AS_UNICODE(result) + j,
2418 PyUnicode_AS_UNICODE(item),
2419 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002420 j += reslen;
2421 }
2422 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002423 Py_DECREF(item);
2424 }
2425
Walter Dörwald903f1e02003-02-04 16:28:00 +00002426 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002427 PyUnicode_Resize(&result, j);
2428
2429 return result;
2430
2431Fail_1:
2432 Py_DECREF(result);
2433 return NULL;
2434}
2435#endif