blob: cc1bc957a96cae7735a26d6cdc09147c8e7bcc14 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000012#ifdef HAVE_UNISTD_H
13#include <unistd.h>
14#endif
15
Guido van Rossum12d12c51993-10-26 17:58:25 +000016/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000017static PyObject *filterstring(PyObject *, PyObject *);
18static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000019
Guido van Rossum79f25d91997-04-29 20:08:16 +000020static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000021builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000022{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000023 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000024 PyObject *globals = NULL;
25 PyObject *locals = NULL;
26 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000027
Guido van Rossum79f25d91997-04-29 20:08:16 +000028 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000029 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000030 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000031 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032}
33
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000034static char import_doc[] =
35"__import__(name, globals, locals, fromlist) -> module\n\
36\n\
37Import a module. The globals are only used to determine the context;\n\
38they are not modified. The locals are currently unused. The fromlist\n\
39should be a list of names to emulate ``from name import ...'', or an\n\
40empty list to emulate ``import name''.\n\
41When importing a module from a package, note that __import__('A.B', ...)\n\
42returns package A when fromlist is empty, but its submodule B when\n\
43fromlist is not empty.";
44
Guido van Rossum1ae940a1995-01-02 19:04:15 +000045
Guido van Rossum79f25d91997-04-29 20:08:16 +000046static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000047builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000048{
Guido van Rossum79f25d91997-04-29 20:08:16 +000049 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000050
Guido van Rossum79f25d91997-04-29 20:08:16 +000051 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000052 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000053 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000054}
55
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000056static char abs_doc[] =
57"abs(number) -> number\n\
58\n\
59Return the absolute value of the argument.";
60
61
Guido van Rossum79f25d91997-04-29 20:08:16 +000062static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000063builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000064{
Guido van Rossum79f25d91997-04-29 20:08:16 +000065 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000066 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000067
Guido van Rossum79f25d91997-04-29 20:08:16 +000068 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000069 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000070 if (alist != NULL) {
71 if (!PyTuple_Check(alist)) {
72 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000073 PyErr_Format(PyExc_TypeError,
74 "apply() arg 2 expect sequence, found %s",
75 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000076 return NULL;
77 }
78 t = PySequence_Tuple(alist);
79 if (t == NULL)
80 return NULL;
81 alist = t;
82 }
Guido van Rossum2d951851994-08-29 12:52:16 +000083 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000084 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000085 PyErr_Format(PyExc_TypeError,
86 "apply() arg 3 expected dictionary, found %s",
87 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000088 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000089 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000090 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
91 finally:
92 Py_XDECREF(t);
93 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +000094}
95
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000096static char apply_doc[] =
Fred Drakef1fbc622001-01-12 17:05:05 +000097"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000098\n\
Fred Drake7b912121999-12-23 14:16:55 +000099Call a callable object with positional arguments taken from the tuple args,\n\
100and keyword arguments taken from the optional dictionary kwargs.\n\
101Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000102
103
Guido van Rossum79f25d91997-04-29 20:08:16 +0000104static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000105builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000106{
107 PyObject *ob;
108 int offset = 0;
109 int size = Py_END_OF_BUFFER;
110
111 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
112 return NULL;
113 return PyBuffer_FromObject(ob, offset, size);
114}
115
116static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000117"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000118\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000119Create a new buffer object which references the given object.\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000120The buffer will reference a slice of the target object from the\n\
121start of the object (or at the specified offset). The slice will\n\
122extend to the end of the target object (or with the specified size).";
123
124
125static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000126builtin_unicode(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000127{
Guido van Rossum3afba762000-04-11 15:38:23 +0000128 PyObject *v;
Guido van Rossum09095f32000-03-10 23:00:52 +0000129 char *encoding = NULL;
130 char *errors = NULL;
131
Guido van Rossum3afba762000-04-11 15:38:23 +0000132 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000133 return NULL;
Marc-André Lemburg1b1bcc92000-07-07 13:48:25 +0000134 return PyUnicode_FromEncodedObject(v, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000135}
136
137static char unicode_doc[] =
138"unicode(string [, encoding[, errors]]) -> object\n\
139\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000140Create a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000141encoding defaults to the current default string encoding and \n\
142errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000143
144
145static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000146builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000147{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000148 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149
Guido van Rossum79f25d91997-04-29 20:08:16 +0000150 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000151 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000152 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000153}
154
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000155static char callable_doc[] =
156"callable(object) -> Boolean\n\
157\n\
158Return whether the object is callable (i.e., some kind of function).\n\
159Note that classes are callable, as are instances with a __call__() method.";
160
161
Guido van Rossum79f25d91997-04-29 20:08:16 +0000162static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000163builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000164{
Tim Peters0e57abf2001-05-02 07:39:38 +0000165 PyObject *func, *seq, *result, *it;
166 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000167 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000168
Guido van Rossum79f25d91997-04-29 20:08:16 +0000169 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000170 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000171
Tim Peters0e57abf2001-05-02 07:39:38 +0000172 /* Strings and tuples return a result of the same type. */
173 if (PyString_Check(seq))
174 return filterstring(func, seq);
175 if (PyTuple_Check(seq))
176 return filtertuple(func, seq);
177
178 /* Get iterator. */
179 it = PyObject_GetIter(seq);
180 if (it == NULL)
181 return NULL;
182
183 /* Guess a result list size. */
184 len = -1; /* unknown */
185 if (PySequence_Check(seq) &&
186 seq->ob_type->tp_as_sequence->sq_length) {
187 len = PySequence_Size(seq);
188 if (len < 0)
189 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000190 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000191 if (len < 0)
192 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000193
Tim Peters0e57abf2001-05-02 07:39:38 +0000194 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000195 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000196 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000198 result = seq;
199 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000200 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000201 result = PyList_New(len);
202 if (result == NULL)
203 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000204 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000205
Tim Peters0e57abf2001-05-02 07:39:38 +0000206 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000207 j = 0;
208 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000209 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000210 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000211
Tim Peters0e57abf2001-05-02 07:39:38 +0000212 item = PyIter_Next(it);
213 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000214 if (PyErr_Occurred())
215 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000216 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000217 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000218
Guido van Rossum79f25d91997-04-29 20:08:16 +0000219 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000220 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000221 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000222 }
223 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000224 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000225 if (arg == NULL) {
226 Py_DECREF(item);
227 goto Fail_result_it;
228 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000229 good = PyEval_CallObject(func, arg);
230 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000231 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000232 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000233 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000234 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000235 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000236 ok = PyObject_IsTrue(good);
237 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000238 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000239 if (j < len)
240 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000241 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000242 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000243 Py_DECREF(item);
244 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000245 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000246 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000247 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000248 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000249 else
250 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000251 }
252
Guido van Rossum12d12c51993-10-26 17:58:25 +0000253
Tim Peters0e57abf2001-05-02 07:39:38 +0000254 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000255 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000256 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000257
Guido van Rossum12d12c51993-10-26 17:58:25 +0000258 return result;
259
Tim Peters0e57abf2001-05-02 07:39:38 +0000260Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000262Fail_it:
263 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000264 return NULL;
265}
266
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267static char filter_doc[] =
268"filter(function, sequence) -> list\n\
269\n\
270Return a list containing those items of sequence for which function(item)\n\
271is true. If function is None, return a list of items that are true.";
272
273
Guido van Rossum79f25d91997-04-29 20:08:16 +0000274static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000275builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000276{
277 long x;
278 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000279
Guido van Rossum79f25d91997-04-29 20:08:16 +0000280 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000281 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000282 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000283 PyErr_SetString(PyExc_ValueError,
284 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000285 return NULL;
286 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000287 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000288 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000289}
290
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000291static char chr_doc[] =
292"chr(i) -> character\n\
293\n\
294Return a string of one character with ordinal i; 0 <= i < 256.";
295
296
Guido van Rossum79f25d91997-04-29 20:08:16 +0000297static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000298builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000299{
300 long x;
301 Py_UNICODE s[1];
302
303 if (!PyArg_ParseTuple(args, "l:unichr", &x))
304 return NULL;
305 if (x < 0 || x >= 65536) {
306 PyErr_SetString(PyExc_ValueError,
307 "unichr() arg not in range(65536)");
308 return NULL;
309 }
310 s[0] = (Py_UNICODE)x;
311 return PyUnicode_FromUnicode(s, 1);
312}
313
314static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000315"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000316\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000317Return a Unicode string of one character with ordinal i; 0 <= i < 65536.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000318
319
320static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000321builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000322{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000323 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000324 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000325
Guido van Rossum79f25d91997-04-29 20:08:16 +0000326 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000327 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000328 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000329 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000330 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000331}
332
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000333static char cmp_doc[] =
334"cmp(x, y) -> integer\n\
335\n\
336Return negative if x<y, zero if x==y, positive if x>y.";
337
338
Guido van Rossum79f25d91997-04-29 20:08:16 +0000339static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000340builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000341{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000342 PyObject *v, *w;
343 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000344
Guido van Rossum79f25d91997-04-29 20:08:16 +0000345 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000346 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000347 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000348 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000349 res = Py_BuildValue("(OO)", v, w);
350 Py_DECREF(v);
351 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000352 return res;
353}
354
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000355static char coerce_doc[] =
356"coerce(x, y) -> None or (x1, y1)\n\
357\n\
358When x and y can be coerced to values of the same type, return a tuple\n\
359containing the coerced values. When they can't be coerced, return None.";
360
361
Guido van Rossum79f25d91997-04-29 20:08:16 +0000362static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000363builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000364{
365 char *str;
366 char *filename;
367 char *startstr;
368 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000369
Guido van Rossum79f25d91997-04-29 20:08:16 +0000370 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000371 return NULL;
372 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000373 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000374 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000375 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000376 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000377 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000378 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000380 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000381 return NULL;
382 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000383 if (PyEval_GetNestedScopes()) {
384 PyCompilerFlags cf;
385 cf.cf_nested_scopes = 1;
386 return Py_CompileStringFlags(str, filename, start, &cf);
387 } else
388 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000389}
390
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000391static char compile_doc[] =
392"compile(source, filename, mode) -> code object\n\
393\n\
394Compile the source string (a Python module, statement or expression)\n\
395into a code object that can be executed by the exec statement or eval().\n\
396The filename will be used for run-time error messages.\n\
397The mode must be 'exec' to compile a module, 'single' to compile a\n\
398single (interactive) statement, or 'eval' to compile an expression.";
399
400
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000401#ifndef WITHOUT_COMPLEX
402
Guido van Rossum79f25d91997-04-29 20:08:16 +0000403static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000404complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000405{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000406 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000407 const char *s, *start;
408 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000409 double x=0.0, y=0.0, z;
410 int got_re=0, got_im=0, done=0;
411 int digit_or_dot;
412 int sw_error=0;
413 int sign;
414 char buffer[256]; /* For errors */
Barry Warsaw5ca1ef92000-08-18 05:02:16 +0000415 char s_buffer[256];
Guido van Rossum9e896b32000-04-05 20:11:21 +0000416 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000417
Guido van Rossum9e896b32000-04-05 20:11:21 +0000418 if (PyString_Check(v)) {
419 s = PyString_AS_STRING(v);
420 len = PyString_GET_SIZE(v);
421 }
422 else if (PyUnicode_Check(v)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +0000423 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
424 PyErr_SetString(PyExc_ValueError,
425 "complex() literal too large to convert");
426 return NULL;
427 }
Guido van Rossumad991772001-01-12 16:03:05 +0000428 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000429 PyUnicode_GET_SIZE(v),
Guido van Rossumad991772001-01-12 16:03:05 +0000430 s_buffer,
Guido van Rossum9e896b32000-04-05 20:11:21 +0000431 NULL))
432 return NULL;
433 s = s_buffer;
Trent Mick29b83812000-08-12 21:35:36 +0000434 len = (int)strlen(s);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000435 }
436 else if (PyObject_AsCharBuffer(v, &s, &len)) {
437 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000438 "complex() arg is not a string");
Guido van Rossum9e896b32000-04-05 20:11:21 +0000439 return NULL;
440 }
Guido van Rossum11950231999-03-25 21:16:07 +0000441
442 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000443 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000444 while (*s && isspace(Py_CHARMASK(*s)))
445 s++;
446 if (s[0] == '\0') {
447 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000448 "complex() arg is an empty string");
Guido van Rossum11950231999-03-25 21:16:07 +0000449 return NULL;
450 }
451
452 z = -1.0;
453 sign = 1;
454 do {
Guido van Rossumad991772001-01-12 16:03:05 +0000455
Guido van Rossum11950231999-03-25 21:16:07 +0000456 switch (*s) {
457
458 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000459 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000460 PyErr_SetString(
461 PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000462 "complex() arg contains a null byte");
Guido van Rossum11950231999-03-25 21:16:07 +0000463 return NULL;
464 }
465 if(!done) sw_error=1;
466 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000467
Guido van Rossum11950231999-03-25 21:16:07 +0000468 case '-':
469 sign = -1;
470 /* Fallthrough */
471 case '+':
472 if (done) sw_error=1;
473 s++;
474 if ( *s=='\0'||*s=='+'||*s=='-' ||
475 isspace(Py_CHARMASK(*s)) ) sw_error=1;
476 break;
477
478 case 'J':
479 case 'j':
480 if (got_im || done) {
481 sw_error = 1;
482 break;
483 }
484 if (z<0.0) {
485 y=sign;
486 }
487 else{
488 y=sign*z;
489 }
490 got_im=1;
491 s++;
492 if (*s!='+' && *s!='-' )
493 done=1;
494 break;
495
496 default:
497 if (isspace(Py_CHARMASK(*s))) {
498 while (*s && isspace(Py_CHARMASK(*s)))
499 s++;
500 if (s[0] != '\0')
501 sw_error=1;
502 else
503 done = 1;
504 break;
505 }
506 digit_or_dot =
507 (*s=='.' || isdigit(Py_CHARMASK(*s)));
508 if (done||!digit_or_dot) {
509 sw_error=1;
510 break;
511 }
512 errno = 0;
513 PyFPE_START_PROTECT("strtod", return 0)
514 z = strtod(s, &end) ;
515 PyFPE_END_PROTECT(z)
516 if (errno != 0) {
517 sprintf(buffer,
518 "float() out of range: %.150s", s);
519 PyErr_SetString(
520 PyExc_ValueError,
521 buffer);
522 return NULL;
523 }
524 s=end;
525 if (*s=='J' || *s=='j') {
Guido van Rossumad991772001-01-12 16:03:05 +0000526
Guido van Rossum11950231999-03-25 21:16:07 +0000527 break;
528 }
529 if (got_re) {
530 sw_error=1;
531 break;
532 }
533
534 /* accept a real part */
535 x=sign*z;
536 got_re=1;
537 if (got_im) done=1;
538 z = -1.0;
539 sign = 1;
540 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000541
Guido van Rossum11950231999-03-25 21:16:07 +0000542 } /* end of switch */
543
544 } while (*s!='\0' && !sw_error);
545
546 if (sw_error) {
547 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000548 "complex() arg is a malformed string");
Guido van Rossum11950231999-03-25 21:16:07 +0000549 return NULL;
550 }
551
552 return PyComplex_FromDoubles(x,y);
553}
554
555static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000556builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000557{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000558 PyObject *r, *i, *tmp;
559 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000560 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000561 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000562
563 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000564 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000565 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000566 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000567 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000568 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000569 nbr->nb_float == NULL ||
570 (i != NULL &&
571 ((nbi = i->ob_type->tp_as_number) == NULL ||
572 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000573 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000574 "complex() arg can't be converted to complex");
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000575 return NULL;
576 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000577 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000578 if (PyInstance_Check(r)) {
579 static PyObject *complexstr;
580 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000581 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000582 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000583 if (complexstr == NULL)
584 return NULL;
585 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000587 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000589 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000591 if (args == NULL)
592 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000593 r = PyEval_CallObject(f, args);
594 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000595 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000596 if (r == NULL)
597 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000598 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000599 }
600 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601 if (PyComplex_Check(r)) {
602 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000603 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000604 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000605 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000606 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000607 else {
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000608 tmp = PyNumber_Float(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000609 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000611 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000612 if (tmp == NULL)
613 return NULL;
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000614 if (!PyFloat_Check(tmp)) {
615 PyErr_SetString(PyExc_TypeError,
616 "float(r) didn't return a float");
617 Py_DECREF(tmp);
618 return NULL;
619 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000620 cr.real = PyFloat_AsDouble(tmp);
621 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000622 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000623 }
624 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000625 ci.real = 0.0;
626 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000627 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628 else if (PyComplex_Check(i))
629 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000630 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000631 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000632 if (tmp == NULL)
633 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 ci.real = PyFloat_AsDouble(tmp);
635 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000636 ci.imag = 0.;
637 }
638 cr.real -= ci.imag;
639 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000640 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000641}
642
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000643static char complex_doc[] =
644"complex(real[, imag]) -> complex number\n\
645\n\
646Create a complex number from a real part and an optional imaginary part.\n\
647This is equivalent to (real + imag*1j) where imag defaults to 0.";
648
649
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000650#endif
651
Guido van Rossum79f25d91997-04-29 20:08:16 +0000652static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000653builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000654{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000655 static char *attrlist[] = {"__members__", "__methods__", NULL};
656 PyObject *v = NULL, *l = NULL, *m = NULL;
657 PyObject *d, *x;
658 int i;
659 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000660
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000662 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000663 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000664 x = PyEval_GetLocals();
665 if (x == NULL)
666 goto error;
667 l = PyMapping_Keys(x);
668 if (l == NULL)
669 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000670 }
671 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000672 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000673 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000674 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000675 else {
676 l = PyMapping_Keys(d);
677 if (l == NULL)
678 PyErr_Clear();
679 Py_DECREF(d);
680 }
681 if (l == NULL) {
682 l = PyList_New(0);
683 if (l == NULL)
684 goto error;
685 }
686 for (s = attrlist; *s != NULL; s++) {
687 m = PyObject_GetAttrString(v, *s);
688 if (m == NULL) {
689 PyErr_Clear();
690 continue;
691 }
692 for (i = 0; ; i++) {
693 x = PySequence_GetItem(m, i);
694 if (x == NULL) {
695 PyErr_Clear();
696 break;
697 }
698 if (PyList_Append(l, x) != 0) {
699 Py_DECREF(x);
700 Py_DECREF(m);
701 goto error;
702 }
703 Py_DECREF(x);
704 }
705 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000706 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000707 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000708 if (PyList_Sort(l) != 0)
709 goto error;
710 return l;
711 error:
712 Py_XDECREF(l);
713 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000714}
715
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000716static char dir_doc[] =
717"dir([object]) -> list of strings\n\
718\n\
719Return an alphabetized list of names comprising (some of) the attributes\n\
720of the given object. Without an argument, the names in the current scope\n\
721are listed. With an instance argument, only the instance attributes are\n\
722returned. With a class argument, attributes of the base class are not\n\
723returned. For other types or arguments, this may list members or methods.";
724
725
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000727builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000728{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000730
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000732 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000733 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000734}
735
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000736static char divmod_doc[] =
737"divmod(x, y) -> (div, mod)\n\
738\n\
739Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
740
741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000743builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000744{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745 PyObject *cmd;
746 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000747 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000748
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 &PyDict_Type, &globals,
752 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 if (globals == Py_None) {
755 globals = PyEval_GetGlobals();
756 if (locals == Py_None)
757 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000758 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000760 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
762 if (PyDict_SetItemString(globals, "__builtins__",
763 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000764 return NULL;
765 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 if (PyCode_Check(cmd))
767 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000768 if (!PyString_Check(cmd) &&
769 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000771 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000772 return NULL;
773 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000774 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000775 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000776 while (*str == ' ' || *str == '\t')
777 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000778 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000779}
780
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000781static char eval_doc[] =
782"eval(source[, globals[, locals]]) -> value\n\
783\n\
784Evaluate the source in the context of globals and locals.\n\
785The source may be a string representing a Python expression\n\
786or a code object as returned by compile().\n\
787The globals and locals are dictionaries, defaulting to the current\n\
788globals and locals. If only globals is given, locals defaults to it.";
789
790
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000792builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000793{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000794 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795 PyObject *globals = Py_None, *locals = Py_None;
796 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000797 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000798
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000801 &PyDict_Type, &globals,
802 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000803 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 if (globals == Py_None) {
805 globals = PyEval_GetGlobals();
806 if (locals == Py_None)
807 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000808 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000810 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
812 if (PyDict_SetItemString(globals, "__builtins__",
813 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000814 return NULL;
815 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000817 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000819 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000820 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000821 return NULL;
822 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000823 if (PyEval_GetNestedScopes()) {
824 PyCompilerFlags cf;
825 cf.cf_nested_scopes = 1;
Tim Peters748b8bb2001-04-28 08:20:22 +0000826 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000827 locals, 1, &cf);
Tim Peters748b8bb2001-04-28 08:20:22 +0000828 } else
829 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000830 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000831 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000832}
833
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000834static char execfile_doc[] =
835"execfile(filename[, globals[, locals]])\n\
836\n\
837Read and execute a Python script from a file.\n\
838The globals and locals are dictionaries, defaulting to the current\n\
839globals and locals. If only globals is given, locals defaults to it.";
840
841
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000843builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000844{
Guido van Rossum950ff291998-06-29 13:38:57 +0000845 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000848 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000849 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000850 result = PyObject_GetAttr(v, name);
851 if (result == NULL && dflt != NULL) {
852 PyErr_Clear();
853 Py_INCREF(dflt);
854 result = dflt;
855 }
856 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000857}
858
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000859static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000860"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000862Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
863When a default argument is given, it is returned when the attribute doesn't\n\
864exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865
866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000868builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000869{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000871
Guido van Rossum43713e52000-02-29 13:59:29 +0000872 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000873 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874 d = PyEval_GetGlobals();
875 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000876 return d;
877}
878
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879static char globals_doc[] =
880"globals() -> dictionary\n\
881\n\
882Return the dictionary containing the current scope's global variables.";
883
884
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000886builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000887{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000888 PyObject *v;
889 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000890
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000891 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000892 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000896 Py_INCREF(Py_False);
897 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000898 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000900 Py_INCREF(Py_True);
901 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000902}
903
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904static char hasattr_doc[] =
905"hasattr(object, name) -> Boolean\n\
906\n\
907Return whether the object has an attribute with the given name.\n\
908(This is done by calling getattr(object, name) and catching exceptions.)";
909
910
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000912builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000913{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000917 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000918 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000919}
920
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921static char id_doc[] =
922"id(object) -> integer\n\
923\n\
924Return the identity of an object. This is guaranteed to be unique among\n\
925simultaneously existing objects. (Hint: it's the object's memory address.)";
926
927
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000929builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000930{
931 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000932 PyObject *it; /* the iterator object */
933 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000934 } sequence;
935
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000937 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000938 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000939 register int i, j;
940
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000942 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 PyErr_SetString(PyExc_TypeError,
944 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000945 return NULL;
946 }
947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000949 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000950
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000951 if (func == Py_None && n == 1) {
952 /* map(None, S) is the same as list(S). */
953 return PySequence_List(PyTuple_GetItem(args, 1));
954 }
955
Tim Peters4e9afdc2001-05-03 23:54:49 +0000956 /* Get space for sequence descriptors. Must NULL out the iterator
957 * pointers so that jumping to Fail_2 later doesn't see trash.
958 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
960 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000961 return NULL;
962 }
963 for (i = 0; i < n; ++i) {
964 seqs[i].it = (PyObject*)NULL;
965 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000966 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000967
Tim Peters4e9afdc2001-05-03 23:54:49 +0000968 /* Do a first pass to obtain iterators for the arguments, and set len
969 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000970 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000971 len = 0;
972 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
973 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000974 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000975
Tim Peters4e9afdc2001-05-03 23:54:49 +0000976 /* Get iterator. */
977 curseq = PyTuple_GetItem(args, i+1);
978 sqp->it = PyObject_GetIter(curseq);
979 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000980 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000981 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000982 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000983 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000985 goto Fail_2;
986 }
987
Tim Peters4e9afdc2001-05-03 23:54:49 +0000988 /* Update len. */
989 curlen = -1; /* unknown */
990 if (PySequence_Check(curseq) &&
991 curseq->ob_type->tp_as_sequence->sq_length) {
992 curlen = PySequence_Size(curseq);
993 if (curlen < 0)
994 PyErr_Clear();
995 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000996 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 curlen = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000998 if (curlen > len)
999 len = curlen;
1000 }
1001
Tim Peters4e9afdc2001-05-03 23:54:49 +00001002 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004 goto Fail_2;
1005
Tim Peters4e9afdc2001-05-03 23:54:49 +00001006 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001007 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001009 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001010
Guido van Rossum79f25d91997-04-29 20:08:16 +00001011 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001012 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001013 else if ((alist = PyTuple_New(n)) == NULL)
1014 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001015
1016 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001017 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001018 Py_INCREF(Py_None);
1019 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001020 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001021 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001022 item = PyIter_Next(sqp->it);
1023 if (item)
1024 ++numactive;
1025 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001026 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001027 Py_XDECREF(alist);
1028 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001029 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001030 Py_INCREF(Py_None);
1031 item = Py_None;
1032 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001033 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001034 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001035 if (alist)
1036 PyTuple_SET_ITEM(alist, j, item);
1037 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001038 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039 }
1040
Guido van Rossum32120311995-07-10 13:52:21 +00001041 if (!alist)
1042 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001043
Tim Peters4e9afdc2001-05-03 23:54:49 +00001044 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001046 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001047 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001048
Guido van Rossum79f25d91997-04-29 20:08:16 +00001049 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001050 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001051 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001052 value = PyEval_CallObject(func, alist);
1053 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001054 if (value == NULL)
1055 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001056 }
1057 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001058 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001059 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001060 if (status < 0)
1061 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001062 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001063 else if (PyList_SetItem(result, i, value) < 0)
1064 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001065 }
1066
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001067 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1068 goto Fail_1;
1069
Tim Peters4e9afdc2001-05-03 23:54:49 +00001070 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001071
Guido van Rossum12d12c51993-10-26 17:58:25 +00001072Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001074Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001075 result = NULL;
1076Succeed:
1077 assert(seqs);
1078 for (i = 0; i < n; ++i)
1079 Py_XDECREF(seqs[i].it);
1080 PyMem_DEL(seqs);
1081 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001082}
1083
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001084static char map_doc[] =
1085"map(function, sequence[, sequence, ...]) -> list\n\
1086\n\
1087Return a list of the results of applying the function to the items of\n\
1088the argument sequence(s). If more than one sequence is given, the\n\
1089function is called with an argument list consisting of the corresponding\n\
1090item of each sequence, substituting None for missing values when not all\n\
1091sequences have the same length. If the function is None, return a list of\n\
1092the items of the sequence (or a list of tuples if more than one sequence).";
1093
1094
Guido van Rossum79f25d91997-04-29 20:08:16 +00001095static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001096builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001097{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 PyObject *v;
1099 PyObject *name;
1100 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001101
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001102 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001103 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001104 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001105 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 Py_INCREF(Py_None);
1107 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001108}
1109
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001110static char setattr_doc[] =
1111"setattr(object, name, value)\n\
1112\n\
1113Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1114``x.y = v''.";
1115
1116
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001118builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001119{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001120 PyObject *v;
1121 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001122
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001123 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001124 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001126 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 Py_INCREF(Py_None);
1128 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001129}
1130
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001131static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001132"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001133\n\
1134Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1135``del x.y''.";
1136
1137
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001139builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001140{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001142 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001145 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001147 if (x == -1)
1148 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001150}
1151
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152static char hash_doc[] =
1153"hash(object) -> integer\n\
1154\n\
1155Return a hash value for the object. Two objects with the same value have\n\
1156the same hash value. The reverse is not necessarily true, but likely.";
1157
1158
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001160builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001161{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 PyObject *v;
1163 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001164
Guido van Rossum79f25d91997-04-29 20:08:16 +00001165 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001166 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001167
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001168 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001169 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001171 "hex() argument can't be converted to hex");
1172 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001173 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001174 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001175}
1176
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001177static char hex_doc[] =
1178"hex(number) -> string\n\
1179\n\
1180Return the hexadecimal representation of an integer or long integer.";
1181
1182
Tim Petersdbd9ba62000-07-09 03:09:57 +00001183static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001184
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001186builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001187{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001189 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 PyObject *res;
1191 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001192
1193 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001194 if (line == NULL)
1195 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001196 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001197 return NULL;
1198 while (*str == ' ' || *str == '\t')
1199 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200 globals = PyEval_GetGlobals();
1201 locals = PyEval_GetLocals();
1202 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1203 if (PyDict_SetItemString(globals, "__builtins__",
1204 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001205 return NULL;
1206 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001207 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001208 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001209 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001210}
1211
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001212static char input_doc[] =
1213"input([prompt]) -> value\n\
1214\n\
1215Equivalent to eval(raw_input(prompt)).";
1216
1217
Guido van Rossume8811f81997-02-14 15:48:05 +00001218static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001219builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001220{
1221 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001222 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001223 return NULL;
1224 Py_INCREF(s);
1225 PyString_InternInPlace(&s);
1226 return s;
1227}
1228
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001229static char intern_doc[] =
1230"intern(string) -> string\n\
1231\n\
1232``Intern'' the given string. This enters the string in the (global)\n\
1233table of interned strings whose purpose is to speed up dictionary lookups.\n\
1234Return the string itself or the previously interned string object with the\n\
1235same value.";
1236
1237
Guido van Rossum79f25d91997-04-29 20:08:16 +00001238static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001239builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001240{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001241 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001242 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001243
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001244 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001245 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001246 if (base == -909)
1247 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001248 else if (PyString_Check(v))
1249 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1250 else if (PyUnicode_Check(v))
1251 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1252 PyUnicode_GET_SIZE(v),
1253 base);
1254 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001255 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001256 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001257 return NULL;
1258 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001259}
1260
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001261static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001262"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001263\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001264Convert a string or number to an integer, if possible. A floating point\n\
1265argument will be truncated towards zero (this does not include a string\n\
1266representation of a floating point number!) When converting a string, use\n\
1267the optional base. It is an error to supply a base when converting a\n\
1268non-string.";
1269
1270
1271static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001272builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001273{
1274 PyObject *v;
1275 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001276
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001277 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1278 return NULL;
1279 if (base == -909)
1280 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001281 else if (PyString_Check(v))
1282 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1283 else if (PyUnicode_Check(v))
1284 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1285 PyUnicode_GET_SIZE(v),
1286 base);
1287 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001288 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001289 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001290 return NULL;
1291 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001292}
1293
1294static char long_doc[] =
1295"long(x) -> long integer\n\
1296long(x, base) -> long integer\n\
1297\n\
1298Convert a string or number to a long integer, if possible. A floating\n\
1299point argument will be truncated towards zero (this does not include a\n\
1300string representation of a floating point number!) When converting a\n\
1301string, use the given base. It is an error to supply a base when\n\
1302converting a non-string.";
1303
1304
1305static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001306builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001307{
1308 PyObject *v;
1309
1310 if (!PyArg_ParseTuple(args, "O:float", &v))
1311 return NULL;
1312 if (PyString_Check(v))
1313 return PyFloat_FromString(v, NULL);
1314 return PyNumber_Float(v);
1315}
1316
1317static char float_doc[] =
1318"float(x) -> floating point number\n\
1319\n\
1320Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001321
1322
Guido van Rossum79f25d91997-04-29 20:08:16 +00001323static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001324builtin_iter(PyObject *self, PyObject *args)
1325{
1326 PyObject *v, *w = NULL;
1327
1328 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1329 return NULL;
1330 if (w == NULL)
1331 return PyObject_GetIter(v);
1332 if (!PyCallable_Check(v)) {
1333 PyErr_SetString(PyExc_TypeError,
1334 "iter(v, w): v must be callable");
1335 return NULL;
1336 }
1337 return PyCallIter_New(v, w);
1338}
1339
1340static char iter_doc[] =
1341"iter(collection) -> iterator\n\
1342iter(callable, sentinel) -> iterator\n\
1343\n\
1344Get an iterator from an object. In the first form, the argument must\n\
1345supply its own iterator, or be a sequence.\n\
1346In the second form, the callable is called until it returns the sentinel.";
1347
1348
1349static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001350builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001351{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001352 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001353 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001354
Guido van Rossum79f25d91997-04-29 20:08:16 +00001355 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001356 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001357 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001358 if (res < 0 && PyErr_Occurred())
1359 return NULL;
1360 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001361}
1362
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001363static char len_doc[] =
1364"len(object) -> integer\n\
1365\n\
1366Return the number of items of a sequence or mapping.";
1367
1368
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001370builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001371{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001372 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001373
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001375 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001376 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001377}
1378
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001379static char list_doc[] =
1380"list(sequence) -> list\n\
1381\n\
1382Return a new list whose items are the same as those of the argument sequence.";
1383
Guido van Rossum8861b741996-07-30 16:49:37 +00001384
1385static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001386builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001387{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001388 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001389
Guido van Rossum09df08a1998-05-22 00:51:39 +00001390 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001391
Guido van Rossum09df08a1998-05-22 00:51:39 +00001392 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1393 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001394
Guido van Rossum09df08a1998-05-22 00:51:39 +00001395 /* This swapping of stop and start is to maintain similarity with
1396 range(). */
1397 if (stop == NULL) {
1398 stop = start;
1399 start = NULL;
1400 }
1401 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001402}
1403
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001404static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001405"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001406\n\
1407Create a slice object. This is used for slicing by the Numeric extensions.";
1408
1409
Guido van Rossum79f25d91997-04-29 20:08:16 +00001410static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001411builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001412{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001413 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001414
Guido van Rossum43713e52000-02-29 13:59:29 +00001415 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001416 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001417 d = PyEval_GetLocals();
1418 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001419 return d;
1420}
1421
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001422static char locals_doc[] =
1423"locals() -> dictionary\n\
1424\n\
1425Return the dictionary containing the current scope's local variables.";
1426
1427
Guido van Rossum79f25d91997-04-29 20:08:16 +00001428static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001429min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001430{
Tim Petersc3074532001-05-03 07:00:32 +00001431 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001432
Guido van Rossum79f25d91997-04-29 20:08:16 +00001433 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001434 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001435 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001436 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001437
1438 it = PyObject_GetIter(v);
1439 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001440 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001441
1442 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001443 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001444 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001445 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001446 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001447 Py_XDECREF(w);
1448 Py_DECREF(it);
1449 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001450 }
Tim Petersc3074532001-05-03 07:00:32 +00001451 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001452 }
Tim Petersc3074532001-05-03 07:00:32 +00001453
Guido van Rossum2d951851994-08-29 12:52:16 +00001454 if (w == NULL)
1455 w = x;
1456 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001457 int cmp = PyObject_RichCompareBool(x, w, op);
1458 if (cmp > 0) {
1459 Py_DECREF(w);
1460 w = x;
1461 }
1462 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001463 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001464 Py_DECREF(w);
1465 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001466 return NULL;
1467 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001468 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001469 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001470 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001471 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001472 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001473 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001474 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001475 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001476 return w;
1477}
1478
Guido van Rossum79f25d91997-04-29 20:08:16 +00001479static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001480builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001481{
Guido van Rossum53451b32001-01-17 15:47:24 +00001482 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001483}
1484
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001485static char min_doc[] =
1486"min(sequence) -> value\n\
1487min(a, b, c, ...) -> value\n\
1488\n\
1489With a single sequence argument, return its smallest item.\n\
1490With two or more arguments, return the smallest argument.";
1491
1492
Guido van Rossum79f25d91997-04-29 20:08:16 +00001493static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001494builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001495{
Guido van Rossum53451b32001-01-17 15:47:24 +00001496 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497}
1498
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001499static char max_doc[] =
1500"max(sequence) -> value\n\
1501max(a, b, c, ...) -> value\n\
1502\n\
1503With a single sequence argument, return its largest item.\n\
1504With two or more arguments, return the largest argument.";
1505
1506
Guido van Rossum79f25d91997-04-29 20:08:16 +00001507static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001508builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001509{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001510 PyObject *v;
1511 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001512
Guido van Rossum79f25d91997-04-29 20:08:16 +00001513 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001514 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001515 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1516 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001517 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001518 "oct() argument can't be converted to oct");
1519 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001520 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001521 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001522}
1523
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001524static char oct_doc[] =
1525"oct(number) -> string\n\
1526\n\
1527Return the octal representation of an integer or long integer.";
1528
1529
Guido van Rossum79f25d91997-04-29 20:08:16 +00001530static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001531builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001532{
Guido van Rossum2d951851994-08-29 12:52:16 +00001533 char *name;
1534 char *mode = "r";
1535 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001536 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001537
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 if (!PyArg_ParseTuple(args, "s|si:open", &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001539 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001540 f = PyFile_FromString(name, mode);
Guido van Rossum2d951851994-08-29 12:52:16 +00001541 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001542 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001543 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001544}
1545
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001546static char open_doc[] =
1547"open(filename[, mode[, buffering]]) -> file object\n\
1548\n\
1549Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1550writing or appending. The file will be created if it doesn't exist\n\
1551when opened for writing or appending; it will be truncated when\n\
1552opened for writing. Add a 'b' to the mode for binary files.\n\
1553Add a '+' to the mode to allow simultaneous reading and writing.\n\
1554If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1555buffered, and larger numbers specify the buffer size.";
1556
1557
Guido van Rossum79f25d91997-04-29 20:08:16 +00001558static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001559builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001560{
Guido van Rossum09095f32000-03-10 23:00:52 +00001561 PyObject *obj;
1562 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001563 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001564
Guido van Rossum09095f32000-03-10 23:00:52 +00001565 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001566 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001567
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001568 if (PyString_Check(obj)) {
1569 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001570 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001571 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001572 return PyInt_FromLong(ord);
1573 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001574 } else if (PyUnicode_Check(obj)) {
1575 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001576 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001577 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001578 return PyInt_FromLong(ord);
1579 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001580 } else {
1581 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001582 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001583 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001584 return NULL;
1585 }
1586
Guido van Rossumad991772001-01-12 16:03:05 +00001587 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001588 "ord() expected a character, "
1589 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001590 size);
1591 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001592}
1593
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001594static char ord_doc[] =
1595"ord(c) -> integer\n\
1596\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001597Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001598
1599
Guido van Rossum79f25d91997-04-29 20:08:16 +00001600static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001601builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001602{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001603 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001604
Guido van Rossum79f25d91997-04-29 20:08:16 +00001605 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001606 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001607 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001608}
1609
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001610static char pow_doc[] =
1611"pow(x, y[, z]) -> number\n\
1612\n\
1613With two arguments, equivalent to x**y. With three arguments,\n\
1614equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1615
1616
Guido van Rossum124eff01999-02-23 16:11:01 +00001617/* Return number of items in range/xrange (lo, hi, step). step > 0
1618 * required. Return a value < 0 if & only if the true value is too
1619 * large to fit in a signed long.
1620 */
1621static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001622get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001623{
1624 /* -------------------------------------------------------------
1625 If lo >= hi, the range is empty.
1626 Else if n values are in the range, the last one is
1627 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1628 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1629 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1630 the RHS is non-negative and so truncation is the same as the
1631 floor. Letting M be the largest positive long, the worst case
1632 for the RHS numerator is hi=M, lo=-M-1, and then
1633 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1634 precision to compute the RHS exactly.
1635 ---------------------------------------------------------------*/
1636 long n = 0;
1637 if (lo < hi) {
1638 unsigned long uhi = (unsigned long)hi;
1639 unsigned long ulo = (unsigned long)lo;
1640 unsigned long diff = uhi - ulo - 1;
1641 n = (long)(diff / (unsigned long)step + 1);
1642 }
1643 return n;
1644}
1645
Guido van Rossum79f25d91997-04-29 20:08:16 +00001646static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001647builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001648{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001649 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001650 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001651 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001652
Guido van Rossum79f25d91997-04-29 20:08:16 +00001653 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001654
Guido van Rossum79f25d91997-04-29 20:08:16 +00001655 if (PyTuple_Size(args) <= 1) {
1656 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001657 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001658 &ihigh))
1659 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001660 }
1661 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001662 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001663 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001664 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001665 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001666 }
1667 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001668 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001669 return NULL;
1670 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001671 if (istep > 0)
1672 bign = get_len_of_range(ilow, ihigh, istep);
1673 else
1674 bign = get_len_of_range(ihigh, ilow, -istep);
1675 n = (int)bign;
1676 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001677 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001678 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001679 return NULL;
1680 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001681 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001682 if (v == NULL)
1683 return NULL;
1684 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001687 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001688 return NULL;
1689 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001690 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001691 ilow += istep;
1692 }
1693 return v;
1694}
1695
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001696static char range_doc[] =
1697"range([start,] stop[, step]) -> list of integers\n\
1698\n\
1699Return a list containing an arithmetic progression of integers.\n\
1700range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1701When step is given, it specifies the increment (or decrement).\n\
1702For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1703These are exactly the valid indices for a list of 4 elements.";
1704
1705
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001707builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001708{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001709 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001710 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001711
Guido van Rossum79f25d91997-04-29 20:08:16 +00001712 if (PyTuple_Size(args) <= 1) {
1713 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001714 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001715 &ihigh))
1716 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001717 }
1718 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001719 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001720 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001721 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001722 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001723 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001724 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001725 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001726 return NULL;
1727 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001728 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001729 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001730 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001731 n = get_len_of_range(ihigh, ilow, -istep);
1732 if (n < 0) {
1733 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001734 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001735 return NULL;
1736 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001737 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001738}
1739
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001740static char xrange_doc[] =
1741"xrange([start,] stop[, step]) -> xrange object\n\
1742\n\
1743Like range(), but instead of returning a list, returns an object that\n\
1744generates the numbers in the range on demand. This is slightly slower\n\
1745than range() but more memory efficient.";
1746
1747
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001749builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001750{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751 PyObject *v = NULL;
1752 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001753
Guido van Rossum79f25d91997-04-29 20:08:16 +00001754 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001755 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001756 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1757 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001758 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001759 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001760 char *prompt;
1761 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001763 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001764 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001765 if (po == NULL)
1766 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001767 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001768 if (prompt == NULL)
1769 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001770 }
1771 else {
1772 po = NULL;
1773 prompt = "";
1774 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001775 s = PyOS_Readline(prompt);
1776 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001777 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001778 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001779 return NULL;
1780 }
1781 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001782 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001783 result = NULL;
1784 }
1785 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001786 size_t len = strlen(s);
1787 if (len > INT_MAX) {
1788 PyErr_SetString(PyExc_OverflowError, "input too long");
1789 result = NULL;
1790 }
1791 else {
1792 result = PyString_FromStringAndSize(s, (int)(len-1));
1793 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001794 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001795 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001796 return result;
1797 }
Guido van Rossum90933611991-06-07 16:10:43 +00001798 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001799 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001800 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001802 return NULL;
1803 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001804 if (Py_FlushLine() != 0 ||
1805 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001806 return NULL;
1807 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001808 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001809 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001811 return NULL;
1812 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001814}
1815
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001816static char raw_input_doc[] =
1817"raw_input([prompt]) -> string\n\
1818\n\
1819Read a string from standard input. The trailing newline is stripped.\n\
1820If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1821On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1822is printed without a trailing newline before reading.";
1823
1824
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001826builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001827{
Tim Peters15d81ef2001-05-04 04:39:21 +00001828 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001829
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001831 return NULL;
1832 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001834
Tim Peters15d81ef2001-05-04 04:39:21 +00001835 it = PyObject_GetIter(seq);
1836 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001838 "reduce() arg 2 must support iteration");
1839 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001840 return NULL;
1841 }
1842
Guido van Rossum79f25d91997-04-29 20:08:16 +00001843 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001844 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001845
Tim Peters15d81ef2001-05-04 04:39:21 +00001846 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001848
1849 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001850 Py_DECREF(args);
1851 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001852 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001853 }
1854
Tim Peters15d81ef2001-05-04 04:39:21 +00001855 op2 = PyIter_Next(it);
1856 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001857 if (PyErr_Occurred())
1858 goto Fail;
1859 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001860 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001861
Guido van Rossum2d951851994-08-29 12:52:16 +00001862 if (result == NULL)
1863 result = op2;
1864 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865 PyTuple_SetItem(args, 0, result);
1866 PyTuple_SetItem(args, 1, op2);
1867 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001868 goto Fail;
1869 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001870 }
1871
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001873
Guido van Rossum2d951851994-08-29 12:52:16 +00001874 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001875 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001876 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001877
Tim Peters15d81ef2001-05-04 04:39:21 +00001878 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001879 return result;
1880
Guido van Rossum2d951851994-08-29 12:52:16 +00001881Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001882 Py_XDECREF(args);
1883 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001884 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885 return NULL;
1886}
1887
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001888static char reduce_doc[] =
1889"reduce(function, sequence[, initial]) -> value\n\
1890\n\
1891Apply a function of two arguments cumulatively to the items of a sequence,\n\
1892from left to right, so as to reduce the sequence to a single value.\n\
1893For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1894((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1895of the sequence in the calculation, and serves as a default when the\n\
1896sequence is empty.";
1897
1898
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001900builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001901{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001902 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001903
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001905 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001907}
1908
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001909static char reload_doc[] =
1910"reload(module) -> module\n\
1911\n\
1912Reload the module. The module must have been successfully imported before.";
1913
1914
Guido van Rossum79f25d91997-04-29 20:08:16 +00001915static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001916builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001917{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001918 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001919
Guido van Rossum79f25d91997-04-29 20:08:16 +00001920 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001921 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001923}
1924
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001925static char repr_doc[] =
1926"repr(object) -> string\n\
1927\n\
1928Return the canonical string representation of the object.\n\
1929For most object types, eval(repr(object)) == object.";
1930
1931
Guido van Rossum79f25d91997-04-29 20:08:16 +00001932static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001933builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001934{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001935 double x;
1936 double f;
1937 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001938 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001939
Guido van Rossum79f25d91997-04-29 20:08:16 +00001940 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001941 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001942 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001943 i = abs(ndigits);
1944 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001945 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001946 if (ndigits < 0)
1947 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001948 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001949 x *= f;
1950 if (x >= 0.0)
1951 x = floor(x + 0.5);
1952 else
1953 x = ceil(x - 0.5);
1954 if (ndigits < 0)
1955 x *= f;
1956 else
1957 x /= f;
1958 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001959}
1960
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001961static char round_doc[] =
1962"round(number[, ndigits]) -> floating point number\n\
1963\n\
1964Round a number to a given precision in decimal digits (default 0 digits).\n\
1965This always returns a floating point number. Precision may be negative.";
1966
1967
Guido van Rossum79f25d91997-04-29 20:08:16 +00001968static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001969builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001970{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001974 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001976}
1977
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001978static char str_doc[] =
1979"str(object) -> string\n\
1980\n\
1981Return a nice string representation of the object.\n\
1982If the argument is a string, the return value is the same object.";
1983
1984
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001986builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00001987{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001988 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001989
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001991 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001992 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00001993}
1994
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001995static char tuple_doc[] =
1996"tuple(sequence) -> list\n\
1997\n\
1998Return a tuple whose items are the same as those of the argument sequence.\n\
1999If the argument is a tuple, the return value is the same object.";
2000
2001
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002003builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002004{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002005 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002006
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002008 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002009 v = (PyObject *)v->ob_type;
2010 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002011 return v;
2012}
2013
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002014static char type_doc[] =
2015"type(object) -> type object\n\
2016\n\
2017Return the type of the object.";
2018
2019
Guido van Rossum79f25d91997-04-29 20:08:16 +00002020static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002021builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002022{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002023 PyObject *v = NULL;
2024 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002025
Guido van Rossum79f25d91997-04-29 20:08:16 +00002026 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002027 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002028 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002029 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002030 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002031 if (!PyErr_Occurred())
2032 PyErr_SetString(PyExc_SystemError,
2033 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002034 }
2035 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002036 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002037 }
2038 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002039 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002040 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002041 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002042 "vars() argument must have __dict__ attribute");
2043 return NULL;
2044 }
2045 }
2046 return d;
2047}
2048
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002049static char vars_doc[] =
2050"vars([object]) -> dictionary\n\
2051\n\
2052Without arguments, equivalent to locals().\n\
2053With an argument, equivalent to object.__dict__.";
2054
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002055static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002056builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002057{
2058 PyObject *inst;
2059 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002060 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002061
Guido van Rossum43713e52000-02-29 13:59:29 +00002062 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002063 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002064
Guido van Rossum823649d2001-03-21 18:40:58 +00002065 retval = PyObject_IsInstance(inst, cls);
2066 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002067 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002068 return PyInt_FromLong(retval);
2069}
2070
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002071static char isinstance_doc[] =
2072"isinstance(object, class-or-type) -> Boolean\n\
2073\n\
2074Return whether an object is an instance of a class or of a subclass thereof.\n\
2075With a type as second argument, return whether that is the object's type.";
2076
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002077
2078static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002079builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002080{
2081 PyObject *derived;
2082 PyObject *cls;
2083 int retval;
2084
Guido van Rossum43713e52000-02-29 13:59:29 +00002085 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002086 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002087
Guido van Rossum823649d2001-03-21 18:40:58 +00002088 retval = PyObject_IsSubclass(derived, cls);
2089 if (retval < 0)
2090 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002091 return PyInt_FromLong(retval);
2092}
2093
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002094static char issubclass_doc[] =
2095"issubclass(C, B) -> Boolean\n\
2096\n\
2097Return whether class C is a subclass (i.e., a derived class) of class B.";
2098
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002099
Barry Warsawbd599b52000-08-03 15:45:29 +00002100static PyObject*
2101builtin_zip(PyObject *self, PyObject *args)
2102{
2103 PyObject *ret;
2104 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002105 int i;
2106 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00002107
2108 if (itemsize < 1) {
2109 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002110 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002111 return NULL;
2112 }
2113 /* args must be a tuple */
2114 assert(PyTuple_Check(args));
2115
Tim Peters8572b4f2001-05-06 01:05:02 +00002116 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00002117 if ((ret = PyList_New(0)) == NULL)
2118 return NULL;
2119
Tim Peters8572b4f2001-05-06 01:05:02 +00002120 /* obtain iterators */
2121 itlist = PyTuple_New(itemsize);
2122 if (itlist == NULL)
2123 goto Fail_ret;
2124 for (i = 0; i < itemsize; ++i) {
2125 PyObject *item = PyTuple_GET_ITEM(args, i);
2126 PyObject *it = PyObject_GetIter(item);
2127 if (it == NULL) {
2128 if (PyErr_ExceptionMatches(PyExc_TypeError))
2129 PyErr_Format(PyExc_TypeError,
2130 "zip argument #%d must support iteration",
2131 i+1);
2132 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002133 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002134 PyTuple_SET_ITEM(itlist, i, it);
2135 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002136
Tim Peters8572b4f2001-05-06 01:05:02 +00002137 /* build result into ret list */
2138 for (;;) {
2139 int status;
2140 PyObject *next = PyTuple_New(itemsize);
2141 if (!next)
2142 goto Fail_ret_itlist;
2143
2144 for (i = 0; i < itemsize; i++) {
2145 PyObject *it = PyTuple_GET_ITEM(itlist, i);
2146 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002147 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002148 if (PyErr_Occurred()) {
2149 Py_DECREF(ret);
2150 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002151 }
2152 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002153 Py_DECREF(itlist);
2154 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00002155 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002156 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002157 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002158
2159 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00002160 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002161 if (status < 0)
2162 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002163 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002164
2165Fail_ret_itlist:
2166 Py_DECREF(itlist);
2167Fail_ret:
2168 Py_DECREF(ret);
2169 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002170}
2171
2172
2173static char zip_doc[] =
2174"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2175\n\
2176Return a list of tuples, where each tuple contains the i-th element\n\
2177from each of the argument sequences. The returned list is truncated\n\
2178in length to the length of the shortest argument sequence.";
2179
2180
Guido van Rossum79f25d91997-04-29 20:08:16 +00002181static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002182 {"__import__", builtin___import__, 1, import_doc},
2183 {"abs", builtin_abs, 1, abs_doc},
2184 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002185 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002186 {"callable", builtin_callable, 1, callable_doc},
2187 {"chr", builtin_chr, 1, chr_doc},
2188 {"cmp", builtin_cmp, 1, cmp_doc},
2189 {"coerce", builtin_coerce, 1, coerce_doc},
2190 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002191#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002192 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002193#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002194 {"delattr", builtin_delattr, 1, delattr_doc},
2195 {"dir", builtin_dir, 1, dir_doc},
2196 {"divmod", builtin_divmod, 1, divmod_doc},
2197 {"eval", builtin_eval, 1, eval_doc},
2198 {"execfile", builtin_execfile, 1, execfile_doc},
2199 {"filter", builtin_filter, 1, filter_doc},
2200 {"float", builtin_float, 1, float_doc},
2201 {"getattr", builtin_getattr, 1, getattr_doc},
2202 {"globals", builtin_globals, 1, globals_doc},
2203 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2204 {"hash", builtin_hash, 1, hash_doc},
2205 {"hex", builtin_hex, 1, hex_doc},
2206 {"id", builtin_id, 1, id_doc},
2207 {"input", builtin_input, 1, input_doc},
2208 {"intern", builtin_intern, 1, intern_doc},
2209 {"int", builtin_int, 1, int_doc},
2210 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2211 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002212 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002213 {"len", builtin_len, 1, len_doc},
2214 {"list", builtin_list, 1, list_doc},
2215 {"locals", builtin_locals, 1, locals_doc},
2216 {"long", builtin_long, 1, long_doc},
2217 {"map", builtin_map, 1, map_doc},
2218 {"max", builtin_max, 1, max_doc},
2219 {"min", builtin_min, 1, min_doc},
2220 {"oct", builtin_oct, 1, oct_doc},
2221 {"open", builtin_open, 1, open_doc},
2222 {"ord", builtin_ord, 1, ord_doc},
2223 {"pow", builtin_pow, 1, pow_doc},
2224 {"range", builtin_range, 1, range_doc},
2225 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2226 {"reduce", builtin_reduce, 1, reduce_doc},
2227 {"reload", builtin_reload, 1, reload_doc},
2228 {"repr", builtin_repr, 1, repr_doc},
2229 {"round", builtin_round, 1, round_doc},
2230 {"setattr", builtin_setattr, 1, setattr_doc},
2231 {"slice", builtin_slice, 1, slice_doc},
2232 {"str", builtin_str, 1, str_doc},
2233 {"tuple", builtin_tuple, 1, tuple_doc},
2234 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002235 {"unicode", builtin_unicode, 1, unicode_doc},
2236 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002237 {"vars", builtin_vars, 1, vars_doc},
2238 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002239 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002240 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002241};
2242
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002243static char builtin_doc[] =
2244"Built-in functions, exceptions, and other objects.\n\
2245\n\
2246Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2247
Guido van Rossum25ce5661997-08-02 03:10:38 +00002248PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002249_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002250{
Fred Drake5550de32000-06-20 04:54:19 +00002251 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002252 mod = Py_InitModule4("__builtin__", builtin_methods,
2253 builtin_doc, (PyObject *)NULL,
2254 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002255 if (mod == NULL)
2256 return NULL;
2257 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002258 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2259 return NULL;
2260 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2261 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002262 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002263 Py_NotImplemented) < 0)
2264 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002265 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2266 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2267 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002268 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002269 }
2270 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002271
Guido van Rossum25ce5661997-08-02 03:10:38 +00002272 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002273}
2274
Guido van Rossume77a7571993-11-03 15:01:26 +00002275/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002276
Guido van Rossum79f25d91997-04-29 20:08:16 +00002277static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002278filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002279{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002280 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002281 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002282 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002283
Guido van Rossumb7b45621995-08-04 04:07:45 +00002284 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002285 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002286 return tuple;
2287 }
2288
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002290 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002291
Guido van Rossum12d12c51993-10-26 17:58:25 +00002292 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002293 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002294 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002295
Guido van Rossum79f25d91997-04-29 20:08:16 +00002296 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002297 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002298 if (func == Py_None) {
2299 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002300 good = item;
2301 }
2302 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002303 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002304 if (arg == NULL)
2305 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002306 good = PyEval_CallObject(func, arg);
2307 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002308 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002309 goto Fail_1;
2310 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002311 ok = PyObject_IsTrue(good);
2312 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002313 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002314 Py_INCREF(item);
2315 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002316 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002317 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002318 }
2319
Guido van Rossum79f25d91997-04-29 20:08:16 +00002320 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002321 return NULL;
2322
Guido van Rossum12d12c51993-10-26 17:58:25 +00002323 return result;
2324
Guido van Rossum12d12c51993-10-26 17:58:25 +00002325Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002326 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002327 return NULL;
2328}
2329
2330
Guido van Rossume77a7571993-11-03 15:01:26 +00002331/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002332
Guido van Rossum79f25d91997-04-29 20:08:16 +00002333static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002334filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002335{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002336 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002337 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002338 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002339
Guido van Rossum79f25d91997-04-29 20:08:16 +00002340 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002341 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002342 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002343 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002344 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002345 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002346 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002350 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002352 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2353 if (item == NULL)
2354 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002355 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002356 if (arg == NULL) {
2357 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002358 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002359 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002360 good = PyEval_CallObject(func, arg);
2361 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002362 if (good == NULL) {
2363 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002364 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002365 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002366 ok = PyObject_IsTrue(good);
2367 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002368 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002369 PyString_AS_STRING((PyStringObject *)result)[j++] =
2370 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002371 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002372 }
2373
Guido van Rossum79f25d91997-04-29 20:08:16 +00002374 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002375 return NULL;
2376
Guido van Rossum12d12c51993-10-26 17:58:25 +00002377 return result;
2378
Guido van Rossum12d12c51993-10-26 17:58:25 +00002379Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002380 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381 return NULL;
2382}