blob: 5ffecb3443e43c1f18d6bb1153182847697d51b3 [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
Mark Hammondef8b6542001-05-13 08:04:26 +000016extern const char *Py_FileSystemDefaultEncoding;
17
Guido van Rossum12d12c51993-10-26 17:58:25 +000018/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000019static PyObject *filterstring(PyObject *, PyObject *);
20static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000021
Guido van Rossum79f25d91997-04-29 20:08:16 +000022static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000023builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000024{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000025 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000026 PyObject *globals = NULL;
27 PyObject *locals = NULL;
28 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000029
Guido van Rossum79f25d91997-04-29 20:08:16 +000030 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000031 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000033 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000034}
35
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000036static char import_doc[] =
37"__import__(name, globals, locals, fromlist) -> module\n\
38\n\
39Import a module. The globals are only used to determine the context;\n\
40they are not modified. The locals are currently unused. The fromlist\n\
41should be a list of names to emulate ``from name import ...'', or an\n\
42empty list to emulate ``import name''.\n\
43When importing a module from a package, note that __import__('A.B', ...)\n\
44returns package A when fromlist is empty, but its submodule B when\n\
45fromlist is not empty.";
46
Guido van Rossum1ae940a1995-01-02 19:04:15 +000047
Guido van Rossum79f25d91997-04-29 20:08:16 +000048static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000049builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000050{
Guido van Rossum79f25d91997-04-29 20:08:16 +000051 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000052
Guido van Rossum79f25d91997-04-29 20:08:16 +000053 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000054 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000055 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000056}
57
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000058static char abs_doc[] =
59"abs(number) -> number\n\
60\n\
61Return the absolute value of the argument.";
62
63
Guido van Rossum79f25d91997-04-29 20:08:16 +000064static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000065builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000066{
Guido van Rossum79f25d91997-04-29 20:08:16 +000067 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000068 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000069
Guido van Rossum79f25d91997-04-29 20:08:16 +000070 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000071 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000072 if (alist != NULL) {
73 if (!PyTuple_Check(alist)) {
74 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000075 PyErr_Format(PyExc_TypeError,
76 "apply() arg 2 expect sequence, found %s",
77 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000078 return NULL;
79 }
80 t = PySequence_Tuple(alist);
81 if (t == NULL)
82 return NULL;
83 alist = t;
84 }
Guido van Rossum2d951851994-08-29 12:52:16 +000085 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000086 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000087 PyErr_Format(PyExc_TypeError,
88 "apply() arg 3 expected dictionary, found %s",
89 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000090 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000091 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000092 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
93 finally:
94 Py_XDECREF(t);
95 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +000096}
97
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000098static char apply_doc[] =
Fred Drakef1fbc622001-01-12 17:05:05 +000099"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000100\n\
Fred Drake7b912121999-12-23 14:16:55 +0000101Call a callable object with positional arguments taken from the tuple args,\n\
102and keyword arguments taken from the optional dictionary kwargs.\n\
103Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000104
105
Guido van Rossum79f25d91997-04-29 20:08:16 +0000106static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000107builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000108{
109 PyObject *ob;
110 int offset = 0;
111 int size = Py_END_OF_BUFFER;
112
113 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
114 return NULL;
115 return PyBuffer_FromObject(ob, offset, size);
116}
117
118static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000119"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000120\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000121Create a new buffer object which references the given object.\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000122The buffer will reference a slice of the target object from the\n\
123start of the object (or at the specified offset). The slice will\n\
124extend to the end of the target object (or with the specified size).";
125
126
127static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000128builtin_unicode(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000129{
Guido van Rossum3afba762000-04-11 15:38:23 +0000130 PyObject *v;
Guido van Rossum09095f32000-03-10 23:00:52 +0000131 char *encoding = NULL;
132 char *errors = NULL;
133
Guido van Rossum3afba762000-04-11 15:38:23 +0000134 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000135 return NULL;
Marc-André Lemburg1b1bcc92000-07-07 13:48:25 +0000136 return PyUnicode_FromEncodedObject(v, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000137}
138
139static char unicode_doc[] =
140"unicode(string [, encoding[, errors]]) -> object\n\
141\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000142Create a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000143encoding defaults to the current default string encoding and \n\
144errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000145
146
147static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000148builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000149{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000150 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000151
Guido van Rossum79f25d91997-04-29 20:08:16 +0000152 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000153 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000154 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000155}
156
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000157static char callable_doc[] =
158"callable(object) -> Boolean\n\
159\n\
160Return whether the object is callable (i.e., some kind of function).\n\
161Note that classes are callable, as are instances with a __call__() method.";
162
163
Guido van Rossum79f25d91997-04-29 20:08:16 +0000164static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000165builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000166{
Tim Peters0e57abf2001-05-02 07:39:38 +0000167 PyObject *func, *seq, *result, *it;
168 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000169 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000170
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000172 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000173
Tim Peters0e57abf2001-05-02 07:39:38 +0000174 /* Strings and tuples return a result of the same type. */
175 if (PyString_Check(seq))
176 return filterstring(func, seq);
177 if (PyTuple_Check(seq))
178 return filtertuple(func, seq);
179
180 /* Get iterator. */
181 it = PyObject_GetIter(seq);
182 if (it == NULL)
183 return NULL;
184
185 /* Guess a result list size. */
186 len = -1; /* unknown */
187 if (PySequence_Check(seq) &&
188 seq->ob_type->tp_as_sequence->sq_length) {
189 len = PySequence_Size(seq);
190 if (len < 0)
191 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000192 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000193 if (len < 0)
194 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000195
Tim Peters0e57abf2001-05-02 07:39:38 +0000196 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000198 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000199 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000200 result = seq;
201 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000202 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000203 result = PyList_New(len);
204 if (result == NULL)
205 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000206 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207
Tim Peters0e57abf2001-05-02 07:39:38 +0000208 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000209 j = 0;
210 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000211 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000212 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000213
Tim Peters0e57abf2001-05-02 07:39:38 +0000214 item = PyIter_Next(it);
215 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000216 if (PyErr_Occurred())
217 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000218 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000219 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000220
Guido van Rossum79f25d91997-04-29 20:08:16 +0000221 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000222 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000223 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000224 }
225 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000226 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000227 if (arg == NULL) {
228 Py_DECREF(item);
229 goto Fail_result_it;
230 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000231 good = PyEval_CallObject(func, arg);
232 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000233 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000234 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000235 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000236 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000237 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000238 ok = PyObject_IsTrue(good);
239 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000240 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000241 if (j < len)
242 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000243 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000244 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000245 Py_DECREF(item);
246 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000247 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000248 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000249 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000250 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000251 else
252 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000253 }
254
Guido van Rossum12d12c51993-10-26 17:58:25 +0000255
Tim Peters0e57abf2001-05-02 07:39:38 +0000256 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000257 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000258 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000259
Guido van Rossum12d12c51993-10-26 17:58:25 +0000260 return result;
261
Tim Peters0e57abf2001-05-02 07:39:38 +0000262Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000263 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000264Fail_it:
265 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266 return NULL;
267}
268
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000269static char filter_doc[] =
270"filter(function, sequence) -> list\n\
271\n\
272Return a list containing those items of sequence for which function(item)\n\
273is true. If function is None, return a list of items that are true.";
274
275
Guido van Rossum79f25d91997-04-29 20:08:16 +0000276static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000277builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000278{
279 long x;
280 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281
Guido van Rossum79f25d91997-04-29 20:08:16 +0000282 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000283 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000284 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000285 PyErr_SetString(PyExc_ValueError,
286 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000287 return NULL;
288 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000289 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000290 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000291}
292
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000293static char chr_doc[] =
294"chr(i) -> character\n\
295\n\
296Return a string of one character with ordinal i; 0 <= i < 256.";
297
298
Guido van Rossum79f25d91997-04-29 20:08:16 +0000299static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000300builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000301{
302 long x;
303 Py_UNICODE s[1];
304
305 if (!PyArg_ParseTuple(args, "l:unichr", &x))
306 return NULL;
307 if (x < 0 || x >= 65536) {
308 PyErr_SetString(PyExc_ValueError,
309 "unichr() arg not in range(65536)");
310 return NULL;
311 }
312 s[0] = (Py_UNICODE)x;
313 return PyUnicode_FromUnicode(s, 1);
314}
315
316static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000317"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000318\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000319Return a Unicode string of one character with ordinal i; 0 <= i < 65536.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000320
321
322static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000323builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000324{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000325 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000326 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000327
Guido van Rossum79f25d91997-04-29 20:08:16 +0000328 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000329 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000330 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000331 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000332 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000333}
334
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000335static char cmp_doc[] =
336"cmp(x, y) -> integer\n\
337\n\
338Return negative if x<y, zero if x==y, positive if x>y.";
339
340
Guido van Rossum79f25d91997-04-29 20:08:16 +0000341static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000342builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000343{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000344 PyObject *v, *w;
345 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000346
Guido van Rossum79f25d91997-04-29 20:08:16 +0000347 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000348 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000349 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000350 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000351 res = Py_BuildValue("(OO)", v, w);
352 Py_DECREF(v);
353 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000354 return res;
355}
356
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000357static char coerce_doc[] =
358"coerce(x, y) -> None or (x1, y1)\n\
359\n\
360When x and y can be coerced to values of the same type, return a tuple\n\
361containing the coerced values. When they can't be coerced, return None.";
362
363
Guido van Rossum79f25d91997-04-29 20:08:16 +0000364static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000365builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000366{
367 char *str;
368 char *filename;
369 char *startstr;
370 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000371
Guido van Rossum79f25d91997-04-29 20:08:16 +0000372 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000373 return NULL;
374 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000375 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000376 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000377 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000378 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000379 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000380 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000381 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000382 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000383 return NULL;
384 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000385 if (PyEval_GetNestedScopes()) {
386 PyCompilerFlags cf;
387 cf.cf_nested_scopes = 1;
388 return Py_CompileStringFlags(str, filename, start, &cf);
389 } else
390 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000391}
392
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000393static char compile_doc[] =
394"compile(source, filename, mode) -> code object\n\
395\n\
396Compile the source string (a Python module, statement or expression)\n\
397into a code object that can be executed by the exec statement or eval().\n\
398The filename will be used for run-time error messages.\n\
399The mode must be 'exec' to compile a module, 'single' to compile a\n\
400single (interactive) statement, or 'eval' to compile an expression.";
401
402
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000403#ifndef WITHOUT_COMPLEX
404
Guido van Rossum79f25d91997-04-29 20:08:16 +0000405static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000406complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000407{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000408 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000409 const char *s, *start;
410 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000411 double x=0.0, y=0.0, z;
412 int got_re=0, got_im=0, done=0;
413 int digit_or_dot;
414 int sw_error=0;
415 int sign;
416 char buffer[256]; /* For errors */
Barry Warsaw5ca1ef92000-08-18 05:02:16 +0000417 char s_buffer[256];
Guido van Rossum9e896b32000-04-05 20:11:21 +0000418 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000419
Guido van Rossum9e896b32000-04-05 20:11:21 +0000420 if (PyString_Check(v)) {
421 s = PyString_AS_STRING(v);
422 len = PyString_GET_SIZE(v);
423 }
424 else if (PyUnicode_Check(v)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +0000425 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
426 PyErr_SetString(PyExc_ValueError,
427 "complex() literal too large to convert");
428 return NULL;
429 }
Guido van Rossumad991772001-01-12 16:03:05 +0000430 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000431 PyUnicode_GET_SIZE(v),
Guido van Rossumad991772001-01-12 16:03:05 +0000432 s_buffer,
Guido van Rossum9e896b32000-04-05 20:11:21 +0000433 NULL))
434 return NULL;
435 s = s_buffer;
Trent Mick29b83812000-08-12 21:35:36 +0000436 len = (int)strlen(s);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000437 }
438 else if (PyObject_AsCharBuffer(v, &s, &len)) {
439 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000440 "complex() arg is not a string");
Guido van Rossum9e896b32000-04-05 20:11:21 +0000441 return NULL;
442 }
Guido van Rossum11950231999-03-25 21:16:07 +0000443
444 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000445 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000446 while (*s && isspace(Py_CHARMASK(*s)))
447 s++;
448 if (s[0] == '\0') {
449 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000450 "complex() arg is an empty string");
Guido van Rossum11950231999-03-25 21:16:07 +0000451 return NULL;
452 }
453
454 z = -1.0;
455 sign = 1;
456 do {
Guido van Rossumad991772001-01-12 16:03:05 +0000457
Guido van Rossum11950231999-03-25 21:16:07 +0000458 switch (*s) {
459
460 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000461 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000462 PyErr_SetString(
463 PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000464 "complex() arg contains a null byte");
Guido van Rossum11950231999-03-25 21:16:07 +0000465 return NULL;
466 }
467 if(!done) sw_error=1;
468 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000469
Guido van Rossum11950231999-03-25 21:16:07 +0000470 case '-':
471 sign = -1;
472 /* Fallthrough */
473 case '+':
474 if (done) sw_error=1;
475 s++;
476 if ( *s=='\0'||*s=='+'||*s=='-' ||
477 isspace(Py_CHARMASK(*s)) ) sw_error=1;
478 break;
479
480 case 'J':
481 case 'j':
482 if (got_im || done) {
483 sw_error = 1;
484 break;
485 }
486 if (z<0.0) {
487 y=sign;
488 }
489 else{
490 y=sign*z;
491 }
492 got_im=1;
493 s++;
494 if (*s!='+' && *s!='-' )
495 done=1;
496 break;
497
498 default:
499 if (isspace(Py_CHARMASK(*s))) {
500 while (*s && isspace(Py_CHARMASK(*s)))
501 s++;
502 if (s[0] != '\0')
503 sw_error=1;
504 else
505 done = 1;
506 break;
507 }
508 digit_or_dot =
509 (*s=='.' || isdigit(Py_CHARMASK(*s)));
510 if (done||!digit_or_dot) {
511 sw_error=1;
512 break;
513 }
514 errno = 0;
515 PyFPE_START_PROTECT("strtod", return 0)
516 z = strtod(s, &end) ;
517 PyFPE_END_PROTECT(z)
518 if (errno != 0) {
519 sprintf(buffer,
520 "float() out of range: %.150s", s);
521 PyErr_SetString(
522 PyExc_ValueError,
523 buffer);
524 return NULL;
525 }
526 s=end;
527 if (*s=='J' || *s=='j') {
Guido van Rossumad991772001-01-12 16:03:05 +0000528
Guido van Rossum11950231999-03-25 21:16:07 +0000529 break;
530 }
531 if (got_re) {
532 sw_error=1;
533 break;
534 }
535
536 /* accept a real part */
537 x=sign*z;
538 got_re=1;
539 if (got_im) done=1;
540 z = -1.0;
541 sign = 1;
542 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000543
Guido van Rossum11950231999-03-25 21:16:07 +0000544 } /* end of switch */
545
546 } while (*s!='\0' && !sw_error);
547
548 if (sw_error) {
549 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000550 "complex() arg is a malformed string");
Guido van Rossum11950231999-03-25 21:16:07 +0000551 return NULL;
552 }
553
554 return PyComplex_FromDoubles(x,y);
555}
556
557static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000558builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000559{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000560 PyObject *r, *i, *tmp;
561 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000562 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000563 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000564
565 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000566 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000567 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000568 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000569 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000570 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000571 nbr->nb_float == NULL ||
572 (i != NULL &&
573 ((nbi = i->ob_type->tp_as_number) == NULL ||
574 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000575 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000576 "complex() arg can't be converted to complex");
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000577 return NULL;
578 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000579 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000580 if (PyInstance_Check(r)) {
581 static PyObject *complexstr;
582 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000583 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000584 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000585 if (complexstr == NULL)
586 return NULL;
587 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000589 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000591 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000593 if (args == NULL)
594 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595 r = PyEval_CallObject(f, args);
596 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000597 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000598 if (r == NULL)
599 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000600 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000601 }
602 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 if (PyComplex_Check(r)) {
604 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000605 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000606 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000607 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000608 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000609 else {
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000610 tmp = PyNumber_Float(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000611 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000613 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000614 if (tmp == NULL)
615 return NULL;
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000616 if (!PyFloat_Check(tmp)) {
617 PyErr_SetString(PyExc_TypeError,
618 "float(r) didn't return a float");
619 Py_DECREF(tmp);
620 return NULL;
621 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000622 cr.real = PyFloat_AsDouble(tmp);
623 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000624 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000625 }
626 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000627 ci.real = 0.0;
628 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000629 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000630 else if (PyComplex_Check(i))
631 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000632 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000633 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000634 if (tmp == NULL)
635 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 ci.real = PyFloat_AsDouble(tmp);
637 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000638 ci.imag = 0.;
639 }
640 cr.real -= ci.imag;
641 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000642 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000643}
644
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000645static char complex_doc[] =
646"complex(real[, imag]) -> complex number\n\
647\n\
648Create a complex number from a real part and an optional imaginary part.\n\
649This is equivalent to (real + imag*1j) where imag defaults to 0.";
650
651
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000652#endif
653
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000655builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000656{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000657 static char *attrlist[] = {"__members__", "__methods__", NULL};
658 PyObject *v = NULL, *l = NULL, *m = NULL;
659 PyObject *d, *x;
660 int i;
661 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000662
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000664 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000665 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000666 x = PyEval_GetLocals();
667 if (x == NULL)
668 goto error;
669 l = PyMapping_Keys(x);
670 if (l == NULL)
671 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000672 }
673 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000675 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000676 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000677 else {
678 l = PyMapping_Keys(d);
679 if (l == NULL)
680 PyErr_Clear();
681 Py_DECREF(d);
682 }
683 if (l == NULL) {
684 l = PyList_New(0);
685 if (l == NULL)
686 goto error;
687 }
688 for (s = attrlist; *s != NULL; s++) {
689 m = PyObject_GetAttrString(v, *s);
690 if (m == NULL) {
691 PyErr_Clear();
692 continue;
693 }
694 for (i = 0; ; i++) {
695 x = PySequence_GetItem(m, i);
696 if (x == NULL) {
697 PyErr_Clear();
698 break;
699 }
700 if (PyList_Append(l, x) != 0) {
701 Py_DECREF(x);
702 Py_DECREF(m);
703 goto error;
704 }
705 Py_DECREF(x);
706 }
707 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000708 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000709 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000710 if (PyList_Sort(l) != 0)
711 goto error;
712 return l;
713 error:
714 Py_XDECREF(l);
715 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000716}
717
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000718static char dir_doc[] =
719"dir([object]) -> list of strings\n\
720\n\
721Return an alphabetized list of names comprising (some of) the attributes\n\
722of the given object. Without an argument, the names in the current scope\n\
723are listed. With an instance argument, only the instance attributes are\n\
724returned. With a class argument, attributes of the base class are not\n\
725returned. For other types or arguments, this may list members or methods.";
726
727
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000729builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000730{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000732
Guido van Rossum79f25d91997-04-29 20:08:16 +0000733 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000734 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000735 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000736}
737
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000738static char divmod_doc[] =
739"divmod(x, y) -> (div, mod)\n\
740\n\
741Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
742
743
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000745builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000746{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747 PyObject *cmd;
748 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000749 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000750
Guido van Rossum79f25d91997-04-29 20:08:16 +0000751 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 &PyDict_Type, &globals,
754 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 if (globals == Py_None) {
757 globals = PyEval_GetGlobals();
758 if (locals == Py_None)
759 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000760 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000762 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
764 if (PyDict_SetItemString(globals, "__builtins__",
765 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000766 return NULL;
767 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 if (PyCode_Check(cmd))
769 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000770 if (!PyString_Check(cmd) &&
771 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000773 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000774 return NULL;
775 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000776 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000778 while (*str == ' ' || *str == '\t')
779 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000780 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000781}
782
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000783static char eval_doc[] =
784"eval(source[, globals[, locals]]) -> value\n\
785\n\
786Evaluate the source in the context of globals and locals.\n\
787The source may be a string representing a Python expression\n\
788or a code object as returned by compile().\n\
789The globals and locals are dictionaries, defaulting to the current\n\
790globals and locals. If only globals is given, locals defaults to it.";
791
792
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000794builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000795{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 PyObject *globals = Py_None, *locals = Py_None;
798 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000799 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800
Guido van Rossum79f25d91997-04-29 20:08:16 +0000801 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000802 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803 &PyDict_Type, &globals,
804 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000805 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 if (globals == Py_None) {
807 globals = PyEval_GetGlobals();
808 if (locals == Py_None)
809 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000810 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000811 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000812 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
814 if (PyDict_SetItemString(globals, "__builtins__",
815 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000816 return NULL;
817 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000820 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000821 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000823 return NULL;
824 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000825 if (PyEval_GetNestedScopes()) {
826 PyCompilerFlags cf;
827 cf.cf_nested_scopes = 1;
Tim Peters748b8bb2001-04-28 08:20:22 +0000828 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000829 locals, 1, &cf);
Tim Peters748b8bb2001-04-28 08:20:22 +0000830 } else
831 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000832 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000833 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000834}
835
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000836static char execfile_doc[] =
837"execfile(filename[, globals[, locals]])\n\
838\n\
839Read and execute a Python script from a file.\n\
840The globals and locals are dictionaries, defaulting to the current\n\
841globals and locals. If only globals is given, locals defaults to it.";
842
843
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000845builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000846{
Guido van Rossum950ff291998-06-29 13:38:57 +0000847 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000849
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000850 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000851 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000852 result = PyObject_GetAttr(v, name);
853 if (result == NULL && dflt != NULL) {
854 PyErr_Clear();
855 Py_INCREF(dflt);
856 result = dflt;
857 }
858 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000859}
860
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000862"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000863\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000864Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
865When a default argument is given, it is returned when the attribute doesn't\n\
866exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000867
868
Guido van Rossum79f25d91997-04-29 20:08:16 +0000869static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000870builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000871{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000872 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000873
Guido van Rossum43713e52000-02-29 13:59:29 +0000874 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000875 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876 d = PyEval_GetGlobals();
877 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000878 return d;
879}
880
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000881static char globals_doc[] =
882"globals() -> dictionary\n\
883\n\
884Return the dictionary containing the current scope's global variables.";
885
886
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000888builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000889{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890 PyObject *v;
891 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000892
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000893 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000896 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000898 Py_INCREF(Py_False);
899 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000900 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000902 Py_INCREF(Py_True);
903 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000904}
905
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000906static char hasattr_doc[] =
907"hasattr(object, name) -> Boolean\n\
908\n\
909Return whether the object has an attribute with the given name.\n\
910(This is done by calling getattr(object, name) and catching exceptions.)";
911
912
Guido van Rossum79f25d91997-04-29 20:08:16 +0000913static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000914builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000915{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000917
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000919 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000920 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000921}
922
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923static char id_doc[] =
924"id(object) -> integer\n\
925\n\
926Return the identity of an object. This is guaranteed to be unique among\n\
927simultaneously existing objects. (Hint: it's the object's memory address.)";
928
929
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000931builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000932{
933 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000934 PyObject *it; /* the iterator object */
935 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000936 } sequence;
937
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000939 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000940 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000941 register int i, j;
942
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000945 PyErr_SetString(PyExc_TypeError,
946 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000947 return NULL;
948 }
949
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000951 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000952
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000953 if (func == Py_None && n == 1) {
954 /* map(None, S) is the same as list(S). */
955 return PySequence_List(PyTuple_GetItem(args, 1));
956 }
957
Tim Peters4e9afdc2001-05-03 23:54:49 +0000958 /* Get space for sequence descriptors. Must NULL out the iterator
959 * pointers so that jumping to Fail_2 later doesn't see trash.
960 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000961 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
962 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000963 return NULL;
964 }
965 for (i = 0; i < n; ++i) {
966 seqs[i].it = (PyObject*)NULL;
967 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000968 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000969
Tim Peters4e9afdc2001-05-03 23:54:49 +0000970 /* Do a first pass to obtain iterators for the arguments, and set len
971 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000972 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000973 len = 0;
974 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
975 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000977
Tim Peters4e9afdc2001-05-03 23:54:49 +0000978 /* Get iterator. */
979 curseq = PyTuple_GetItem(args, i+1);
980 sqp->it = PyObject_GetIter(curseq);
981 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000982 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000983 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000984 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000985 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000987 goto Fail_2;
988 }
989
Tim Peters4e9afdc2001-05-03 23:54:49 +0000990 /* Update len. */
991 curlen = -1; /* unknown */
992 if (PySequence_Check(curseq) &&
993 curseq->ob_type->tp_as_sequence->sq_length) {
994 curlen = PySequence_Size(curseq);
995 if (curlen < 0)
996 PyErr_Clear();
997 }
Tim Peters748b8bb2001-04-28 08:20:22 +0000998 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +0000999 curlen = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001000 if (curlen > len)
1001 len = curlen;
1002 }
1003
Tim Peters4e9afdc2001-05-03 23:54:49 +00001004 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001005 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001006 goto Fail_2;
1007
Tim Peters4e9afdc2001-05-03 23:54:49 +00001008 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001009 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001010 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001011 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001012
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001014 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 else if ((alist = PyTuple_New(n)) == NULL)
1016 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001017
1018 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001019 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001020 Py_INCREF(Py_None);
1021 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001023 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001024 item = PyIter_Next(sqp->it);
1025 if (item)
1026 ++numactive;
1027 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001028 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001029 Py_XDECREF(alist);
1030 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001031 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001032 Py_INCREF(Py_None);
1033 item = Py_None;
1034 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001035 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001036 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001037 if (alist)
1038 PyTuple_SET_ITEM(alist, j, item);
1039 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001040 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001041 }
1042
Guido van Rossum32120311995-07-10 13:52:21 +00001043 if (!alist)
1044 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001045
Tim Peters4e9afdc2001-05-03 23:54:49 +00001046 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001047 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001048 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001049 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001050
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001052 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001053 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054 value = PyEval_CallObject(func, alist);
1055 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001056 if (value == NULL)
1057 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001058 }
1059 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001060 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001061 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001062 if (status < 0)
1063 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001064 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001065 else if (PyList_SetItem(result, i, value) < 0)
1066 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001067 }
1068
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001069 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1070 goto Fail_1;
1071
Tim Peters4e9afdc2001-05-03 23:54:49 +00001072 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001073
Guido van Rossum12d12c51993-10-26 17:58:25 +00001074Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001076Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001077 result = NULL;
1078Succeed:
1079 assert(seqs);
1080 for (i = 0; i < n; ++i)
1081 Py_XDECREF(seqs[i].it);
1082 PyMem_DEL(seqs);
1083 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001084}
1085
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001086static char map_doc[] =
1087"map(function, sequence[, sequence, ...]) -> list\n\
1088\n\
1089Return a list of the results of applying the function to the items of\n\
1090the argument sequence(s). If more than one sequence is given, the\n\
1091function is called with an argument list consisting of the corresponding\n\
1092item of each sequence, substituting None for missing values when not all\n\
1093sequences have the same length. If the function is None, return a list of\n\
1094the items of the sequence (or a list of tuples if more than one sequence).";
1095
1096
Guido van Rossum79f25d91997-04-29 20:08:16 +00001097static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001098builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001099{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100 PyObject *v;
1101 PyObject *name;
1102 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001103
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001104 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001105 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001107 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001108 Py_INCREF(Py_None);
1109 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001110}
1111
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001112static char setattr_doc[] =
1113"setattr(object, name, value)\n\
1114\n\
1115Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1116``x.y = v''.";
1117
1118
Guido van Rossum79f25d91997-04-29 20:08:16 +00001119static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001120builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001121{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122 PyObject *v;
1123 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001124
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001125 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001126 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001128 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 Py_INCREF(Py_None);
1130 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001131}
1132
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001133static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001134"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001135\n\
1136Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1137``del x.y''.";
1138
1139
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001141builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001142{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001144 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001145
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001147 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001149 if (x == -1)
1150 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001151 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001152}
1153
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154static char hash_doc[] =
1155"hash(object) -> integer\n\
1156\n\
1157Return a hash value for the object. Two objects with the same value have\n\
1158the same hash value. The reverse is not necessarily true, but likely.";
1159
1160
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001162builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001163{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001164 PyObject *v;
1165 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001166
Guido van Rossum79f25d91997-04-29 20:08:16 +00001167 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001168 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001169
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001170 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001171 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001173 "hex() argument can't be converted to hex");
1174 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001175 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001176 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001177}
1178
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179static char hex_doc[] =
1180"hex(number) -> string\n\
1181\n\
1182Return the hexadecimal representation of an integer or long integer.";
1183
1184
Tim Petersdbd9ba62000-07-09 03:09:57 +00001185static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001188builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001189{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001191 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 PyObject *res;
1193 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001194
1195 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001196 if (line == NULL)
1197 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199 return NULL;
1200 while (*str == ' ' || *str == '\t')
1201 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202 globals = PyEval_GetGlobals();
1203 locals = PyEval_GetLocals();
1204 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1205 if (PyDict_SetItemString(globals, "__builtins__",
1206 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001207 return NULL;
1208 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001209 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001210 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001211 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001212}
1213
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214static char input_doc[] =
1215"input([prompt]) -> value\n\
1216\n\
1217Equivalent to eval(raw_input(prompt)).";
1218
1219
Guido van Rossume8811f81997-02-14 15:48:05 +00001220static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001221builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001222{
1223 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001224 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001225 return NULL;
1226 Py_INCREF(s);
1227 PyString_InternInPlace(&s);
1228 return s;
1229}
1230
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001231static char intern_doc[] =
1232"intern(string) -> string\n\
1233\n\
1234``Intern'' the given string. This enters the string in the (global)\n\
1235table of interned strings whose purpose is to speed up dictionary lookups.\n\
1236Return the string itself or the previously interned string object with the\n\
1237same value.";
1238
1239
Guido van Rossum79f25d91997-04-29 20:08:16 +00001240static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001241builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001242{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001244 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001245
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001246 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001247 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001248 if (base == -909)
1249 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001250 else if (PyString_Check(v))
1251 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1252 else if (PyUnicode_Check(v))
1253 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1254 PyUnicode_GET_SIZE(v),
1255 base);
1256 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001257 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001258 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001259 return NULL;
1260 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261}
1262
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001263static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001264"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001265\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001266Convert a string or number to an integer, if possible. A floating point\n\
1267argument will be truncated towards zero (this does not include a string\n\
1268representation of a floating point number!) When converting a string, use\n\
1269the optional base. It is an error to supply a base when converting a\n\
1270non-string.";
1271
1272
1273static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001274builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001275{
1276 PyObject *v;
1277 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001278
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001279 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1280 return NULL;
1281 if (base == -909)
1282 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001283 else if (PyString_Check(v))
1284 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1285 else if (PyUnicode_Check(v))
1286 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1287 PyUnicode_GET_SIZE(v),
1288 base);
1289 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001290 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001291 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001292 return NULL;
1293 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001294}
1295
1296static char long_doc[] =
1297"long(x) -> long integer\n\
1298long(x, base) -> long integer\n\
1299\n\
1300Convert a string or number to a long integer, if possible. A floating\n\
1301point argument will be truncated towards zero (this does not include a\n\
1302string representation of a floating point number!) When converting a\n\
1303string, use the given base. It is an error to supply a base when\n\
1304converting a non-string.";
1305
1306
1307static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001308builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001309{
1310 PyObject *v;
1311
1312 if (!PyArg_ParseTuple(args, "O:float", &v))
1313 return NULL;
1314 if (PyString_Check(v))
1315 return PyFloat_FromString(v, NULL);
1316 return PyNumber_Float(v);
1317}
1318
1319static char float_doc[] =
1320"float(x) -> floating point number\n\
1321\n\
1322Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001323
1324
Guido van Rossum79f25d91997-04-29 20:08:16 +00001325static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001326builtin_iter(PyObject *self, PyObject *args)
1327{
1328 PyObject *v, *w = NULL;
1329
1330 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1331 return NULL;
1332 if (w == NULL)
1333 return PyObject_GetIter(v);
1334 if (!PyCallable_Check(v)) {
1335 PyErr_SetString(PyExc_TypeError,
1336 "iter(v, w): v must be callable");
1337 return NULL;
1338 }
1339 return PyCallIter_New(v, w);
1340}
1341
1342static char iter_doc[] =
1343"iter(collection) -> iterator\n\
1344iter(callable, sentinel) -> iterator\n\
1345\n\
1346Get an iterator from an object. In the first form, the argument must\n\
1347supply its own iterator, or be a sequence.\n\
1348In the second form, the callable is called until it returns the sentinel.";
1349
1350
1351static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001352builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001353{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001354 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001355 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001356
Guido van Rossum79f25d91997-04-29 20:08:16 +00001357 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001358 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001359 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001360 if (res < 0 && PyErr_Occurred())
1361 return NULL;
1362 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001363}
1364
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001365static char len_doc[] =
1366"len(object) -> integer\n\
1367\n\
1368Return the number of items of a sequence or mapping.";
1369
1370
Guido van Rossum79f25d91997-04-29 20:08:16 +00001371static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001372builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001373{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001375
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001377 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001378 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001379}
1380
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001381static char list_doc[] =
1382"list(sequence) -> list\n\
1383\n\
1384Return a new list whose items are the same as those of the argument sequence.";
1385
Guido van Rossum8861b741996-07-30 16:49:37 +00001386
1387static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001388builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001389{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001390 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001391
Guido van Rossum09df08a1998-05-22 00:51:39 +00001392 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001393
Guido van Rossum09df08a1998-05-22 00:51:39 +00001394 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1395 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001396
Guido van Rossum09df08a1998-05-22 00:51:39 +00001397 /* This swapping of stop and start is to maintain similarity with
1398 range(). */
1399 if (stop == NULL) {
1400 stop = start;
1401 start = NULL;
1402 }
1403 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001404}
1405
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001406static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001407"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001408\n\
1409Create a slice object. This is used for slicing by the Numeric extensions.";
1410
1411
Guido van Rossum79f25d91997-04-29 20:08:16 +00001412static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001413builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001414{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001416
Guido van Rossum43713e52000-02-29 13:59:29 +00001417 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001418 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001419 d = PyEval_GetLocals();
1420 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001421 return d;
1422}
1423
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424static char locals_doc[] =
1425"locals() -> dictionary\n\
1426\n\
1427Return the dictionary containing the current scope's local variables.";
1428
1429
Guido van Rossum79f25d91997-04-29 20:08:16 +00001430static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001431min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001432{
Tim Petersc3074532001-05-03 07:00:32 +00001433 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001434
Guido van Rossum79f25d91997-04-29 20:08:16 +00001435 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001436 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001437 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001438 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001439
1440 it = PyObject_GetIter(v);
1441 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001442 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001443
1444 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001445 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001446 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001447 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001448 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001449 Py_XDECREF(w);
1450 Py_DECREF(it);
1451 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001452 }
Tim Petersc3074532001-05-03 07:00:32 +00001453 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001454 }
Tim Petersc3074532001-05-03 07:00:32 +00001455
Guido van Rossum2d951851994-08-29 12:52:16 +00001456 if (w == NULL)
1457 w = x;
1458 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001459 int cmp = PyObject_RichCompareBool(x, w, op);
1460 if (cmp > 0) {
1461 Py_DECREF(w);
1462 w = x;
1463 }
1464 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001465 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001466 Py_DECREF(w);
1467 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001468 return NULL;
1469 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001470 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001472 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001473 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001474 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001475 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001476 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001477 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001478 return w;
1479}
1480
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001482builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001483{
Guido van Rossum53451b32001-01-17 15:47:24 +00001484 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001485}
1486
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001487static char min_doc[] =
1488"min(sequence) -> value\n\
1489min(a, b, c, ...) -> value\n\
1490\n\
1491With a single sequence argument, return its smallest item.\n\
1492With two or more arguments, return the smallest argument.";
1493
1494
Guido van Rossum79f25d91997-04-29 20:08:16 +00001495static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001496builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497{
Guido van Rossum53451b32001-01-17 15:47:24 +00001498 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001499}
1500
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001501static char max_doc[] =
1502"max(sequence) -> value\n\
1503max(a, b, c, ...) -> value\n\
1504\n\
1505With a single sequence argument, return its largest item.\n\
1506With two or more arguments, return the largest argument.";
1507
1508
Guido van Rossum79f25d91997-04-29 20:08:16 +00001509static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001510builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001511{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001512 PyObject *v;
1513 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001514
Guido van Rossum79f25d91997-04-29 20:08:16 +00001515 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001516 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001517 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1518 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001519 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001520 "oct() argument can't be converted to oct");
1521 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001522 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001523 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001524}
1525
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001526static char oct_doc[] =
1527"oct(number) -> string\n\
1528\n\
1529Return the octal representation of an integer or long integer.";
1530
1531
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001533builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001534{
Mark Hammondef8b6542001-05-13 08:04:26 +00001535 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001536 char *mode = "r";
1537 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001539
Mark Hammondef8b6542001-05-13 08:04:26 +00001540 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1541 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001542 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001543 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001544 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001545 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001546 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001547 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001548}
1549
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001550static char open_doc[] =
1551"open(filename[, mode[, buffering]]) -> file object\n\
1552\n\
1553Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1554writing or appending. The file will be created if it doesn't exist\n\
1555when opened for writing or appending; it will be truncated when\n\
1556opened for writing. Add a 'b' to the mode for binary files.\n\
1557Add a '+' to the mode to allow simultaneous reading and writing.\n\
1558If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1559buffered, and larger numbers specify the buffer size.";
1560
1561
Guido van Rossum79f25d91997-04-29 20:08:16 +00001562static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001563builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001564{
Guido van Rossum09095f32000-03-10 23:00:52 +00001565 PyObject *obj;
1566 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001567 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001568
Guido van Rossum09095f32000-03-10 23:00:52 +00001569 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001570 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001571
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001572 if (PyString_Check(obj)) {
1573 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001574 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001575 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001576 return PyInt_FromLong(ord);
1577 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001578 } else if (PyUnicode_Check(obj)) {
1579 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001580 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001581 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001582 return PyInt_FromLong(ord);
1583 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001584 } else {
1585 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001586 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001587 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001588 return NULL;
1589 }
1590
Guido van Rossumad991772001-01-12 16:03:05 +00001591 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001592 "ord() expected a character, "
1593 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001594 size);
1595 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001596}
1597
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001598static char ord_doc[] =
1599"ord(c) -> integer\n\
1600\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001601Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001602
1603
Guido van Rossum79f25d91997-04-29 20:08:16 +00001604static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001605builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001606{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001607 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001608
Guido van Rossum79f25d91997-04-29 20:08:16 +00001609 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001610 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001611 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001612}
1613
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001614static char pow_doc[] =
1615"pow(x, y[, z]) -> number\n\
1616\n\
1617With two arguments, equivalent to x**y. With three arguments,\n\
1618equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1619
1620
Guido van Rossum124eff01999-02-23 16:11:01 +00001621/* Return number of items in range/xrange (lo, hi, step). step > 0
1622 * required. Return a value < 0 if & only if the true value is too
1623 * large to fit in a signed long.
1624 */
1625static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001626get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001627{
1628 /* -------------------------------------------------------------
1629 If lo >= hi, the range is empty.
1630 Else if n values are in the range, the last one is
1631 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1632 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1633 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1634 the RHS is non-negative and so truncation is the same as the
1635 floor. Letting M be the largest positive long, the worst case
1636 for the RHS numerator is hi=M, lo=-M-1, and then
1637 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1638 precision to compute the RHS exactly.
1639 ---------------------------------------------------------------*/
1640 long n = 0;
1641 if (lo < hi) {
1642 unsigned long uhi = (unsigned long)hi;
1643 unsigned long ulo = (unsigned long)lo;
1644 unsigned long diff = uhi - ulo - 1;
1645 n = (long)(diff / (unsigned long)step + 1);
1646 }
1647 return n;
1648}
1649
Guido van Rossum79f25d91997-04-29 20:08:16 +00001650static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001651builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001652{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001653 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001654 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001655 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001656
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001658
Guido van Rossum79f25d91997-04-29 20:08:16 +00001659 if (PyTuple_Size(args) <= 1) {
1660 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001661 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001662 &ihigh))
1663 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001664 }
1665 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001666 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001667 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001668 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001669 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001670 }
1671 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001672 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001673 return NULL;
1674 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001675 if (istep > 0)
1676 bign = get_len_of_range(ilow, ihigh, istep);
1677 else
1678 bign = get_len_of_range(ihigh, ilow, -istep);
1679 n = (int)bign;
1680 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001681 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001682 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001683 return NULL;
1684 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686 if (v == NULL)
1687 return NULL;
1688 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001690 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001691 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001692 return NULL;
1693 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001694 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001695 ilow += istep;
1696 }
1697 return v;
1698}
1699
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700static char range_doc[] =
1701"range([start,] stop[, step]) -> list of integers\n\
1702\n\
1703Return a list containing an arithmetic progression of integers.\n\
1704range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1705When step is given, it specifies the increment (or decrement).\n\
1706For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1707These are exactly the valid indices for a list of 4 elements.";
1708
1709
Guido van Rossum79f25d91997-04-29 20:08:16 +00001710static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001711builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001712{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001713 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001714 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001715
Guido van Rossum79f25d91997-04-29 20:08:16 +00001716 if (PyTuple_Size(args) <= 1) {
1717 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001718 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001719 &ihigh))
1720 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001721 }
1722 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001724 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001725 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001726 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001727 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001728 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001729 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001730 return NULL;
1731 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001732 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001733 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001734 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001735 n = get_len_of_range(ihigh, ilow, -istep);
1736 if (n < 0) {
1737 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001738 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001739 return NULL;
1740 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001742}
1743
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001744static char xrange_doc[] =
1745"xrange([start,] stop[, step]) -> xrange object\n\
1746\n\
1747Like range(), but instead of returning a list, returns an object that\n\
1748generates the numbers in the range on demand. This is slightly slower\n\
1749than range() but more memory efficient.";
1750
1751
Guido van Rossum79f25d91997-04-29 20:08:16 +00001752static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001753builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001754{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001755 PyObject *v = NULL;
1756 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001757
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001759 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001760 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1761 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001762 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001763 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001764 char *prompt;
1765 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001767 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001769 if (po == NULL)
1770 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001771 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001772 if (prompt == NULL)
1773 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001774 }
1775 else {
1776 po = NULL;
1777 prompt = "";
1778 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 s = PyOS_Readline(prompt);
1780 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001781 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001782 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001783 return NULL;
1784 }
1785 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001786 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001787 result = NULL;
1788 }
1789 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001790 size_t len = strlen(s);
1791 if (len > INT_MAX) {
1792 PyErr_SetString(PyExc_OverflowError, "input too long");
1793 result = NULL;
1794 }
1795 else {
1796 result = PyString_FromStringAndSize(s, (int)(len-1));
1797 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001798 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001799 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001800 return result;
1801 }
Guido van Rossum90933611991-06-07 16:10:43 +00001802 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001803 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001804 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001806 return NULL;
1807 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001808 if (Py_FlushLine() != 0 ||
1809 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001810 return NULL;
1811 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001815 return NULL;
1816 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001818}
1819
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001820static char raw_input_doc[] =
1821"raw_input([prompt]) -> string\n\
1822\n\
1823Read a string from standard input. The trailing newline is stripped.\n\
1824If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1825On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1826is printed without a trailing newline before reading.";
1827
1828
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001830builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001831{
Tim Peters15d81ef2001-05-04 04:39:21 +00001832 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001833
Guido van Rossum79f25d91997-04-29 20:08:16 +00001834 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001835 return NULL;
1836 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001838
Tim Peters15d81ef2001-05-04 04:39:21 +00001839 it = PyObject_GetIter(seq);
1840 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001841 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001842 "reduce() arg 2 must support iteration");
1843 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001844 return NULL;
1845 }
1846
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001848 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001849
Tim Peters15d81ef2001-05-04 04:39:21 +00001850 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001851 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001852
1853 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854 Py_DECREF(args);
1855 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001856 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001857 }
1858
Tim Peters15d81ef2001-05-04 04:39:21 +00001859 op2 = PyIter_Next(it);
1860 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001861 if (PyErr_Occurred())
1862 goto Fail;
1863 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001864 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001865
Guido van Rossum2d951851994-08-29 12:52:16 +00001866 if (result == NULL)
1867 result = op2;
1868 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869 PyTuple_SetItem(args, 0, result);
1870 PyTuple_SetItem(args, 1, op2);
1871 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001872 goto Fail;
1873 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001874 }
1875
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001877
Guido van Rossum2d951851994-08-29 12:52:16 +00001878 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001880 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001881
Tim Peters15d81ef2001-05-04 04:39:21 +00001882 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001883 return result;
1884
Guido van Rossum2d951851994-08-29 12:52:16 +00001885Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 Py_XDECREF(args);
1887 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001888 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001889 return NULL;
1890}
1891
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001892static char reduce_doc[] =
1893"reduce(function, sequence[, initial]) -> value\n\
1894\n\
1895Apply a function of two arguments cumulatively to the items of a sequence,\n\
1896from left to right, so as to reduce the sequence to a single value.\n\
1897For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1898((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1899of the sequence in the calculation, and serves as a default when the\n\
1900sequence is empty.";
1901
1902
Guido van Rossum79f25d91997-04-29 20:08:16 +00001903static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001904builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001905{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001907
Guido van Rossum79f25d91997-04-29 20:08:16 +00001908 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001909 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001910 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001911}
1912
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001913static char reload_doc[] =
1914"reload(module) -> module\n\
1915\n\
1916Reload the module. The module must have been successfully imported before.";
1917
1918
Guido van Rossum79f25d91997-04-29 20:08:16 +00001919static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001920builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001921{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001923
Guido van Rossum79f25d91997-04-29 20:08:16 +00001924 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001925 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001927}
1928
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001929static char repr_doc[] =
1930"repr(object) -> string\n\
1931\n\
1932Return the canonical string representation of the object.\n\
1933For most object types, eval(repr(object)) == object.";
1934
1935
Guido van Rossum79f25d91997-04-29 20:08:16 +00001936static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001937builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001938{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001939 double x;
1940 double f;
1941 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001942 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001943
Guido van Rossum79f25d91997-04-29 20:08:16 +00001944 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001945 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001946 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001947 i = abs(ndigits);
1948 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001949 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001950 if (ndigits < 0)
1951 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001952 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001953 x *= f;
1954 if (x >= 0.0)
1955 x = floor(x + 0.5);
1956 else
1957 x = ceil(x - 0.5);
1958 if (ndigits < 0)
1959 x *= f;
1960 else
1961 x /= f;
1962 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001963}
1964
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001965static char round_doc[] =
1966"round(number[, ndigits]) -> floating point number\n\
1967\n\
1968Round a number to a given precision in decimal digits (default 0 digits).\n\
1969This always returns a floating point number. Precision may be negative.";
1970
1971
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001973builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001974{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001976
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001978 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001980}
1981
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001982static char str_doc[] =
1983"str(object) -> string\n\
1984\n\
1985Return a nice string representation of the object.\n\
1986If the argument is a string, the return value is the same object.";
1987
1988
Guido van Rossum79f25d91997-04-29 20:08:16 +00001989static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001990builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00001991{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001993
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001995 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001996 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00001997}
1998
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001999static char tuple_doc[] =
2000"tuple(sequence) -> list\n\
2001\n\
2002Return a tuple whose items are the same as those of the argument sequence.\n\
2003If the argument is a tuple, the return value is the same object.";
2004
2005
Guido van Rossum79f25d91997-04-29 20:08:16 +00002006static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002007builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002008{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002009 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002010
Guido van Rossum79f25d91997-04-29 20:08:16 +00002011 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002012 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002013 v = (PyObject *)v->ob_type;
2014 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002015 return v;
2016}
2017
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002018static char type_doc[] =
2019"type(object) -> type object\n\
2020\n\
2021Return the type of the object.";
2022
2023
Guido van Rossum79f25d91997-04-29 20:08:16 +00002024static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002025builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002026{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002027 PyObject *v = NULL;
2028 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002029
Guido van Rossum79f25d91997-04-29 20:08:16 +00002030 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002031 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002032 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002033 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002034 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002035 if (!PyErr_Occurred())
2036 PyErr_SetString(PyExc_SystemError,
2037 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002038 }
2039 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002040 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002041 }
2042 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002043 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002044 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002045 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002046 "vars() argument must have __dict__ attribute");
2047 return NULL;
2048 }
2049 }
2050 return d;
2051}
2052
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002053static char vars_doc[] =
2054"vars([object]) -> dictionary\n\
2055\n\
2056Without arguments, equivalent to locals().\n\
2057With an argument, equivalent to object.__dict__.";
2058
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002059static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002060builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002061{
2062 PyObject *inst;
2063 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002064 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002065
Guido van Rossum43713e52000-02-29 13:59:29 +00002066 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002067 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002068
Guido van Rossum823649d2001-03-21 18:40:58 +00002069 retval = PyObject_IsInstance(inst, cls);
2070 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002071 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002072 return PyInt_FromLong(retval);
2073}
2074
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002075static char isinstance_doc[] =
2076"isinstance(object, class-or-type) -> Boolean\n\
2077\n\
2078Return whether an object is an instance of a class or of a subclass thereof.\n\
2079With a type as second argument, return whether that is the object's type.";
2080
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002081
2082static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002083builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002084{
2085 PyObject *derived;
2086 PyObject *cls;
2087 int retval;
2088
Guido van Rossum43713e52000-02-29 13:59:29 +00002089 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002090 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002091
Guido van Rossum823649d2001-03-21 18:40:58 +00002092 retval = PyObject_IsSubclass(derived, cls);
2093 if (retval < 0)
2094 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002095 return PyInt_FromLong(retval);
2096}
2097
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002098static char issubclass_doc[] =
2099"issubclass(C, B) -> Boolean\n\
2100\n\
2101Return whether class C is a subclass (i.e., a derived class) of class B.";
2102
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002103
Barry Warsawbd599b52000-08-03 15:45:29 +00002104static PyObject*
2105builtin_zip(PyObject *self, PyObject *args)
2106{
2107 PyObject *ret;
2108 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002109 int i;
2110 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00002111
2112 if (itemsize < 1) {
2113 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002114 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002115 return NULL;
2116 }
2117 /* args must be a tuple */
2118 assert(PyTuple_Check(args));
2119
Tim Peters8572b4f2001-05-06 01:05:02 +00002120 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00002121 if ((ret = PyList_New(0)) == NULL)
2122 return NULL;
2123
Tim Peters8572b4f2001-05-06 01:05:02 +00002124 /* obtain iterators */
2125 itlist = PyTuple_New(itemsize);
2126 if (itlist == NULL)
2127 goto Fail_ret;
2128 for (i = 0; i < itemsize; ++i) {
2129 PyObject *item = PyTuple_GET_ITEM(args, i);
2130 PyObject *it = PyObject_GetIter(item);
2131 if (it == NULL) {
2132 if (PyErr_ExceptionMatches(PyExc_TypeError))
2133 PyErr_Format(PyExc_TypeError,
2134 "zip argument #%d must support iteration",
2135 i+1);
2136 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002137 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002138 PyTuple_SET_ITEM(itlist, i, it);
2139 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002140
Tim Peters8572b4f2001-05-06 01:05:02 +00002141 /* build result into ret list */
2142 for (;;) {
2143 int status;
2144 PyObject *next = PyTuple_New(itemsize);
2145 if (!next)
2146 goto Fail_ret_itlist;
2147
2148 for (i = 0; i < itemsize; i++) {
2149 PyObject *it = PyTuple_GET_ITEM(itlist, i);
2150 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002151 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002152 if (PyErr_Occurred()) {
2153 Py_DECREF(ret);
2154 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002155 }
2156 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002157 Py_DECREF(itlist);
2158 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00002159 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002160 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002161 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002162
2163 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00002164 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002165 if (status < 0)
2166 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002167 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002168
2169Fail_ret_itlist:
2170 Py_DECREF(itlist);
2171Fail_ret:
2172 Py_DECREF(ret);
2173 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002174}
2175
2176
2177static char zip_doc[] =
2178"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2179\n\
2180Return a list of tuples, where each tuple contains the i-th element\n\
2181from each of the argument sequences. The returned list is truncated\n\
2182in length to the length of the shortest argument sequence.";
2183
2184
Guido van Rossum79f25d91997-04-29 20:08:16 +00002185static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002186 {"__import__", builtin___import__, 1, import_doc},
2187 {"abs", builtin_abs, 1, abs_doc},
2188 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002189 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002190 {"callable", builtin_callable, 1, callable_doc},
2191 {"chr", builtin_chr, 1, chr_doc},
2192 {"cmp", builtin_cmp, 1, cmp_doc},
2193 {"coerce", builtin_coerce, 1, coerce_doc},
2194 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002195#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002196 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002197#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002198 {"delattr", builtin_delattr, 1, delattr_doc},
2199 {"dir", builtin_dir, 1, dir_doc},
2200 {"divmod", builtin_divmod, 1, divmod_doc},
2201 {"eval", builtin_eval, 1, eval_doc},
2202 {"execfile", builtin_execfile, 1, execfile_doc},
2203 {"filter", builtin_filter, 1, filter_doc},
2204 {"float", builtin_float, 1, float_doc},
2205 {"getattr", builtin_getattr, 1, getattr_doc},
2206 {"globals", builtin_globals, 1, globals_doc},
2207 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2208 {"hash", builtin_hash, 1, hash_doc},
2209 {"hex", builtin_hex, 1, hex_doc},
2210 {"id", builtin_id, 1, id_doc},
2211 {"input", builtin_input, 1, input_doc},
2212 {"intern", builtin_intern, 1, intern_doc},
2213 {"int", builtin_int, 1, int_doc},
2214 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2215 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002216 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002217 {"len", builtin_len, 1, len_doc},
2218 {"list", builtin_list, 1, list_doc},
2219 {"locals", builtin_locals, 1, locals_doc},
2220 {"long", builtin_long, 1, long_doc},
2221 {"map", builtin_map, 1, map_doc},
2222 {"max", builtin_max, 1, max_doc},
2223 {"min", builtin_min, 1, min_doc},
2224 {"oct", builtin_oct, 1, oct_doc},
2225 {"open", builtin_open, 1, open_doc},
2226 {"ord", builtin_ord, 1, ord_doc},
2227 {"pow", builtin_pow, 1, pow_doc},
2228 {"range", builtin_range, 1, range_doc},
2229 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2230 {"reduce", builtin_reduce, 1, reduce_doc},
2231 {"reload", builtin_reload, 1, reload_doc},
2232 {"repr", builtin_repr, 1, repr_doc},
2233 {"round", builtin_round, 1, round_doc},
2234 {"setattr", builtin_setattr, 1, setattr_doc},
2235 {"slice", builtin_slice, 1, slice_doc},
2236 {"str", builtin_str, 1, str_doc},
2237 {"tuple", builtin_tuple, 1, tuple_doc},
2238 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002239 {"unicode", builtin_unicode, 1, unicode_doc},
2240 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002241 {"vars", builtin_vars, 1, vars_doc},
2242 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002243 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002244 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002245};
2246
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002247static char builtin_doc[] =
2248"Built-in functions, exceptions, and other objects.\n\
2249\n\
2250Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2251
Guido van Rossum25ce5661997-08-02 03:10:38 +00002252PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002253_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002254{
Fred Drake5550de32000-06-20 04:54:19 +00002255 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002256 mod = Py_InitModule4("__builtin__", builtin_methods,
2257 builtin_doc, (PyObject *)NULL,
2258 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002259 if (mod == NULL)
2260 return NULL;
2261 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002262 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2263 return NULL;
2264 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2265 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002266 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002267 Py_NotImplemented) < 0)
2268 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002269 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2270 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2271 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002272 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002273 }
2274 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002275
Guido van Rossum25ce5661997-08-02 03:10:38 +00002276 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002277}
2278
Guido van Rossume77a7571993-11-03 15:01:26 +00002279/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002280
Guido van Rossum79f25d91997-04-29 20:08:16 +00002281static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002282filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002283{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002284 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002285 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002286 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002287
Guido van Rossumb7b45621995-08-04 04:07:45 +00002288 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002290 return tuple;
2291 }
2292
Guido van Rossum79f25d91997-04-29 20:08:16 +00002293 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002294 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002295
Guido van Rossum12d12c51993-10-26 17:58:25 +00002296 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002297 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002298 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002299
Guido van Rossum79f25d91997-04-29 20:08:16 +00002300 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002301 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002302 if (func == Py_None) {
2303 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002304 good = item;
2305 }
2306 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002307 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002308 if (arg == NULL)
2309 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002310 good = PyEval_CallObject(func, arg);
2311 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002312 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002313 goto Fail_1;
2314 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002315 ok = PyObject_IsTrue(good);
2316 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002317 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002318 Py_INCREF(item);
2319 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002320 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002321 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002322 }
2323
Guido van Rossum79f25d91997-04-29 20:08:16 +00002324 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002325 return NULL;
2326
Guido van Rossum12d12c51993-10-26 17:58:25 +00002327 return result;
2328
Guido van Rossum12d12c51993-10-26 17:58:25 +00002329Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002330 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002331 return NULL;
2332}
2333
2334
Guido van Rossume77a7571993-11-03 15:01:26 +00002335/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002336
Guido van Rossum79f25d91997-04-29 20:08:16 +00002337static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002338filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002339{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002340 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002341 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002342 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343
Guido van Rossum79f25d91997-04-29 20:08:16 +00002344 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002345 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002346 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002347 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002350 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351
Guido van Rossum12d12c51993-10-26 17:58:25 +00002352 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002353 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002354 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002356 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2357 if (item == NULL)
2358 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002359 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002360 if (arg == NULL) {
2361 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002362 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002363 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002364 good = PyEval_CallObject(func, arg);
2365 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002366 if (good == NULL) {
2367 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002368 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002369 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002370 ok = PyObject_IsTrue(good);
2371 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002372 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002373 PyString_AS_STRING((PyStringObject *)result)[j++] =
2374 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002375 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002376 }
2377
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002379 return NULL;
2380
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381 return result;
2382
Guido van Rossum12d12c51993-10-26 17:58:25 +00002383Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002384 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002385 return NULL;
2386}