blob: ed5519f257481e0a526447eded6fd5198b635a39 [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 Hammond26cffde2001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Fredrik Lundh5b979352001-06-26 17:46:10 +000019#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
21#else
22const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
23#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000024
Guido van Rossum12d12c51993-10-26 17:58:25 +000025/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000026static PyObject *filterstring(PyObject *, PyObject *);
27static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000031{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000033 PyObject *globals = NULL;
34 PyObject *locals = NULL;
35 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000038 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000040 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041}
42
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000043static char import_doc[] =
44"__import__(name, globals, locals, fromlist) -> module\n\
45\n\
46Import a module. The globals are only used to determine the context;\n\
47they are not modified. The locals are currently unused. The fromlist\n\
48should be a list of names to emulate ``from name import ...'', or an\n\
49empty list to emulate ``import name''.\n\
50When importing a module from a package, note that __import__('A.B', ...)\n\
51returns package A when fromlist is empty, but its submodule B when\n\
52fromlist is not empty.";
53
Guido van Rossum1ae940a1995-01-02 19:04:15 +000054
Guido van Rossum79f25d91997-04-29 20:08:16 +000055static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000056builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057{
Guido van Rossum79f25d91997-04-29 20:08:16 +000058 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000061 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000062 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000063}
64
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065static char abs_doc[] =
66"abs(number) -> number\n\
67\n\
68Return the absolute value of the argument.";
69
70
Guido van Rossum79f25d91997-04-29 20:08:16 +000071static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000072builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000073{
Guido van Rossum79f25d91997-04-29 20:08:16 +000074 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000075 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000076
Guido van Rossum79f25d91997-04-29 20:08:16 +000077 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000078 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000079 if (alist != NULL) {
80 if (!PyTuple_Check(alist)) {
81 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000082 PyErr_Format(PyExc_TypeError,
83 "apply() arg 2 expect sequence, found %s",
84 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000085 return NULL;
86 }
87 t = PySequence_Tuple(alist);
88 if (t == NULL)
89 return NULL;
90 alist = t;
91 }
Guido van Rossum2d951851994-08-29 12:52:16 +000092 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000093 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000094 PyErr_Format(PyExc_TypeError,
95 "apply() arg 3 expected dictionary, found %s",
96 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000097 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000098 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000099 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
100 finally:
101 Py_XDECREF(t);
102 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000103}
104
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000105static char apply_doc[] =
Fred Drakef1fbc622001-01-12 17:05:05 +0000106"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000107\n\
Fred Drake7b912121999-12-23 14:16:55 +0000108Call a callable object with positional arguments taken from the tuple args,\n\
109and keyword arguments taken from the optional dictionary kwargs.\n\
110Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000111
112
Guido van Rossum79f25d91997-04-29 20:08:16 +0000113static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000114builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000115{
116 PyObject *ob;
117 int offset = 0;
118 int size = Py_END_OF_BUFFER;
119
120 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
121 return NULL;
122 return PyBuffer_FromObject(ob, offset, size);
123}
124
125static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000126"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000127\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000128Create a new buffer object which references the given object.\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000129The buffer will reference a slice of the target object from the\n\
130start of the object (or at the specified offset). The slice will\n\
131extend to the end of the target object (or with the specified size).";
132
133
134static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000135builtin_unicode(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000136{
Guido van Rossum3afba762000-04-11 15:38:23 +0000137 PyObject *v;
Guido van Rossum09095f32000-03-10 23:00:52 +0000138 char *encoding = NULL;
139 char *errors = NULL;
140
Guido van Rossum3afba762000-04-11 15:38:23 +0000141 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000142 return NULL;
Marc-André Lemburg1b1bcc92000-07-07 13:48:25 +0000143 return PyUnicode_FromEncodedObject(v, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000144}
145
146static char unicode_doc[] =
147"unicode(string [, encoding[, errors]]) -> object\n\
148\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000149Create a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000150encoding defaults to the current default string encoding and \n\
151errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000152
153
154static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000155builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000156{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000157 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000158
Guido van Rossum79f25d91997-04-29 20:08:16 +0000159 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000160 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000161 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000162}
163
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000164static char callable_doc[] =
165"callable(object) -> Boolean\n\
166\n\
167Return whether the object is callable (i.e., some kind of function).\n\
168Note that classes are callable, as are instances with a __call__() method.";
169
170
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000172builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000173{
Tim Peters0e57abf2001-05-02 07:39:38 +0000174 PyObject *func, *seq, *result, *it;
175 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000176 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000177
Guido van Rossum79f25d91997-04-29 20:08:16 +0000178 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000179 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000180
Tim Peters0e57abf2001-05-02 07:39:38 +0000181 /* Strings and tuples return a result of the same type. */
182 if (PyString_Check(seq))
183 return filterstring(func, seq);
184 if (PyTuple_Check(seq))
185 return filtertuple(func, seq);
186
187 /* Get iterator. */
188 it = PyObject_GetIter(seq);
189 if (it == NULL)
190 return NULL;
191
192 /* Guess a result list size. */
193 len = -1; /* unknown */
194 if (PySequence_Check(seq) &&
195 seq->ob_type->tp_as_sequence->sq_length) {
196 len = PySequence_Size(seq);
197 if (len < 0)
198 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000199 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000200 if (len < 0)
201 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000202
Tim Peters0e57abf2001-05-02 07:39:38 +0000203 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000205 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000206 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207 result = seq;
208 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000209 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000210 result = PyList_New(len);
211 if (result == NULL)
212 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000213 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000214
Tim Peters0e57abf2001-05-02 07:39:38 +0000215 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000216 j = 0;
217 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000218 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000219 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000220
Tim Peters0e57abf2001-05-02 07:39:38 +0000221 item = PyIter_Next(it);
222 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000223 if (PyErr_Occurred())
224 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000225 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000226 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000227
Guido van Rossum79f25d91997-04-29 20:08:16 +0000228 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000229 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000230 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000231 }
232 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000233 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000234 if (arg == NULL) {
235 Py_DECREF(item);
236 goto Fail_result_it;
237 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000238 good = PyEval_CallObject(func, arg);
239 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000240 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000241 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000242 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000243 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000244 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000245 ok = PyObject_IsTrue(good);
246 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000247 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000248 if (j < len)
249 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000250 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000251 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000252 Py_DECREF(item);
253 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000254 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000255 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000256 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000257 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000258 else
259 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000260 }
261
Guido van Rossum12d12c51993-10-26 17:58:25 +0000262
Tim Peters0e57abf2001-05-02 07:39:38 +0000263 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000264 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000265 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266
Tim Peters3c6b1482001-05-21 08:07:05 +0000267 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000268 return result;
269
Tim Peters0e57abf2001-05-02 07:39:38 +0000270Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000272Fail_it:
273 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000274 return NULL;
275}
276
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000277static char filter_doc[] =
278"filter(function, sequence) -> list\n\
279\n\
280Return a list containing those items of sequence for which function(item)\n\
281is true. If function is None, return a list of items that are true.";
282
283
Guido van Rossum79f25d91997-04-29 20:08:16 +0000284static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000285builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000286{
287 long x;
288 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000289
Guido van Rossum79f25d91997-04-29 20:08:16 +0000290 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000291 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000292 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000293 PyErr_SetString(PyExc_ValueError,
294 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000295 return NULL;
296 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000297 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000298 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000299}
300
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000301static char chr_doc[] =
302"chr(i) -> character\n\
303\n\
304Return a string of one character with ordinal i; 0 <= i < 256.";
305
306
Guido van Rossum79f25d91997-04-29 20:08:16 +0000307static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000308builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000309{
310 long x;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000311 Py_UNICODE s[2];
Guido van Rossum09095f32000-03-10 23:00:52 +0000312
313 if (!PyArg_ParseTuple(args, "l:unichr", &x))
314 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000315
316 if (x < 0 || x > 0x10ffff) {
Guido van Rossum09095f32000-03-10 23:00:52 +0000317 PyErr_SetString(PyExc_ValueError,
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000318 "unichr() arg not in range(0x10ffff)");
Guido van Rossum09095f32000-03-10 23:00:52 +0000319 return NULL;
320 }
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000321
322 if (x <= 0xffff) {
323 /* UCS-2 character */
324 s[0] = (Py_UNICODE) x;
325 return PyUnicode_FromUnicode(s, 1);
326 } else {
327 /* UCS-4 character. store as two surrogate characters */
328 x -= 0x10000L;
329 s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
330 s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
331 return PyUnicode_FromUnicode(s, 2);
332 }
Guido van Rossum09095f32000-03-10 23:00:52 +0000333}
334
335static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000336"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000337\n\
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000338Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000339
340
341static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000342builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000343{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000344 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000345 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000346
Guido van Rossum79f25d91997-04-29 20:08:16 +0000347 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000348 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000349 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000350 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000351 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000352}
353
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000354static char cmp_doc[] =
355"cmp(x, y) -> integer\n\
356\n\
357Return negative if x<y, zero if x==y, positive if x>y.";
358
359
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000361builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000362{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000363 PyObject *v, *w;
364 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000365
Guido van Rossum79f25d91997-04-29 20:08:16 +0000366 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000367 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000368 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000369 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000370 res = Py_BuildValue("(OO)", v, w);
371 Py_DECREF(v);
372 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000373 return res;
374}
375
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000376static char coerce_doc[] =
377"coerce(x, y) -> None or (x1, y1)\n\
378\n\
379When x and y can be coerced to values of the same type, return a tuple\n\
380containing the coerced values. When they can't be coerced, return None.";
381
382
Guido van Rossum79f25d91997-04-29 20:08:16 +0000383static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000384builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000385{
386 char *str;
387 char *filename;
388 char *startstr;
389 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000390
Guido van Rossum79f25d91997-04-29 20:08:16 +0000391 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000392 return NULL;
393 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000394 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000395 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000396 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000397 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000398 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000399 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000400 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000401 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000402 return NULL;
403 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000404 if (PyEval_GetNestedScopes()) {
405 PyCompilerFlags cf;
406 cf.cf_nested_scopes = 1;
407 return Py_CompileStringFlags(str, filename, start, &cf);
408 } else
409 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000410}
411
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000412static char compile_doc[] =
413"compile(source, filename, mode) -> code object\n\
414\n\
415Compile the source string (a Python module, statement or expression)\n\
416into a code object that can be executed by the exec statement or eval().\n\
417The filename will be used for run-time error messages.\n\
418The mode must be 'exec' to compile a module, 'single' to compile a\n\
419single (interactive) statement, or 'eval' to compile an expression.";
420
421
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000422#ifndef WITHOUT_COMPLEX
423
Guido van Rossum79f25d91997-04-29 20:08:16 +0000424static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000425complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000426{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000427 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000428 const char *s, *start;
429 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000430 double x=0.0, y=0.0, z;
431 int got_re=0, got_im=0, done=0;
432 int digit_or_dot;
433 int sw_error=0;
434 int sign;
435 char buffer[256]; /* For errors */
Barry Warsaw5ca1ef92000-08-18 05:02:16 +0000436 char s_buffer[256];
Guido van Rossum9e896b32000-04-05 20:11:21 +0000437 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000438
Guido van Rossum9e896b32000-04-05 20:11:21 +0000439 if (PyString_Check(v)) {
440 s = PyString_AS_STRING(v);
441 len = PyString_GET_SIZE(v);
442 }
443 else if (PyUnicode_Check(v)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +0000444 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
445 PyErr_SetString(PyExc_ValueError,
446 "complex() literal too large to convert");
447 return NULL;
448 }
Guido van Rossumad991772001-01-12 16:03:05 +0000449 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000450 PyUnicode_GET_SIZE(v),
Guido van Rossumad991772001-01-12 16:03:05 +0000451 s_buffer,
Guido van Rossum9e896b32000-04-05 20:11:21 +0000452 NULL))
453 return NULL;
454 s = s_buffer;
Trent Mick29b83812000-08-12 21:35:36 +0000455 len = (int)strlen(s);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000456 }
457 else if (PyObject_AsCharBuffer(v, &s, &len)) {
458 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000459 "complex() arg is not a string");
Guido van Rossum9e896b32000-04-05 20:11:21 +0000460 return NULL;
461 }
Guido van Rossum11950231999-03-25 21:16:07 +0000462
463 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000464 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000465 while (*s && isspace(Py_CHARMASK(*s)))
466 s++;
467 if (s[0] == '\0') {
468 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000469 "complex() arg is an empty string");
Guido van Rossum11950231999-03-25 21:16:07 +0000470 return NULL;
471 }
472
473 z = -1.0;
474 sign = 1;
475 do {
Guido van Rossumad991772001-01-12 16:03:05 +0000476
Guido van Rossum11950231999-03-25 21:16:07 +0000477 switch (*s) {
478
479 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000480 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000481 PyErr_SetString(
482 PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000483 "complex() arg contains a null byte");
Guido van Rossum11950231999-03-25 21:16:07 +0000484 return NULL;
485 }
486 if(!done) sw_error=1;
487 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000488
Guido van Rossum11950231999-03-25 21:16:07 +0000489 case '-':
490 sign = -1;
491 /* Fallthrough */
492 case '+':
493 if (done) sw_error=1;
494 s++;
495 if ( *s=='\0'||*s=='+'||*s=='-' ||
496 isspace(Py_CHARMASK(*s)) ) sw_error=1;
497 break;
498
499 case 'J':
500 case 'j':
501 if (got_im || done) {
502 sw_error = 1;
503 break;
504 }
505 if (z<0.0) {
506 y=sign;
507 }
508 else{
509 y=sign*z;
510 }
511 got_im=1;
512 s++;
513 if (*s!='+' && *s!='-' )
514 done=1;
515 break;
516
517 default:
518 if (isspace(Py_CHARMASK(*s))) {
519 while (*s && isspace(Py_CHARMASK(*s)))
520 s++;
521 if (s[0] != '\0')
522 sw_error=1;
523 else
524 done = 1;
525 break;
526 }
527 digit_or_dot =
528 (*s=='.' || isdigit(Py_CHARMASK(*s)));
529 if (done||!digit_or_dot) {
530 sw_error=1;
531 break;
532 }
533 errno = 0;
534 PyFPE_START_PROTECT("strtod", return 0)
535 z = strtod(s, &end) ;
536 PyFPE_END_PROTECT(z)
537 if (errno != 0) {
538 sprintf(buffer,
539 "float() out of range: %.150s", s);
540 PyErr_SetString(
541 PyExc_ValueError,
542 buffer);
543 return NULL;
544 }
545 s=end;
546 if (*s=='J' || *s=='j') {
Guido van Rossumad991772001-01-12 16:03:05 +0000547
Guido van Rossum11950231999-03-25 21:16:07 +0000548 break;
549 }
550 if (got_re) {
551 sw_error=1;
552 break;
553 }
554
555 /* accept a real part */
556 x=sign*z;
557 got_re=1;
558 if (got_im) done=1;
559 z = -1.0;
560 sign = 1;
561 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000562
Guido van Rossum11950231999-03-25 21:16:07 +0000563 } /* end of switch */
564
565 } while (*s!='\0' && !sw_error);
566
567 if (sw_error) {
568 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000569 "complex() arg is a malformed string");
Guido van Rossum11950231999-03-25 21:16:07 +0000570 return NULL;
571 }
572
573 return PyComplex_FromDoubles(x,y);
574}
575
576static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000577builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000578{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 PyObject *r, *i, *tmp;
580 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000581 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000582 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000583
584 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000585 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000586 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000587 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000588 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000589 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000590 nbr->nb_float == NULL ||
591 (i != NULL &&
592 ((nbi = i->ob_type->tp_as_number) == NULL ||
593 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000595 "complex() arg can't be converted to complex");
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000596 return NULL;
597 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000598 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000599 if (PyInstance_Check(r)) {
600 static PyObject *complexstr;
601 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000602 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000603 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000604 if (complexstr == NULL)
605 return NULL;
606 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000607 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000608 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000610 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000612 if (args == NULL)
613 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614 r = PyEval_CallObject(f, args);
615 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000616 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000617 if (r == NULL)
618 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000619 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000620 }
621 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000622 if (PyComplex_Check(r)) {
623 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000624 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000626 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000627 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000628 else {
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000629 tmp = PyNumber_Float(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000630 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000632 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000633 if (tmp == NULL)
634 return NULL;
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000635 if (!PyFloat_Check(tmp)) {
636 PyErr_SetString(PyExc_TypeError,
637 "float(r) didn't return a float");
638 Py_DECREF(tmp);
639 return NULL;
640 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 cr.real = PyFloat_AsDouble(tmp);
642 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000643 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000644 }
645 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000646 ci.real = 0.0;
647 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000648 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000649 else if (PyComplex_Check(i))
650 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000651 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000652 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000653 if (tmp == NULL)
654 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655 ci.real = PyFloat_AsDouble(tmp);
656 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000657 ci.imag = 0.;
658 }
659 cr.real -= ci.imag;
660 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000662}
663
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000664static char complex_doc[] =
665"complex(real[, imag]) -> complex number\n\
666\n\
667Create a complex number from a real part and an optional imaginary part.\n\
668This is equivalent to (real + imag*1j) where imag defaults to 0.";
669
670
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000671#endif
672
Guido van Rossum79f25d91997-04-29 20:08:16 +0000673static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000674builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000675{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000676 static char *attrlist[] = {"__members__", "__methods__", NULL};
677 PyObject *v = NULL, *l = NULL, *m = NULL;
678 PyObject *d, *x;
679 int i;
680 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000681
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000683 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000684 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000685 x = PyEval_GetLocals();
686 if (x == NULL)
687 goto error;
688 l = PyMapping_Keys(x);
689 if (l == NULL)
690 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000691 }
692 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000694 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000695 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000696 else {
697 l = PyMapping_Keys(d);
698 if (l == NULL)
699 PyErr_Clear();
700 Py_DECREF(d);
701 }
702 if (l == NULL) {
703 l = PyList_New(0);
704 if (l == NULL)
705 goto error;
706 }
707 for (s = attrlist; *s != NULL; s++) {
708 m = PyObject_GetAttrString(v, *s);
709 if (m == NULL) {
710 PyErr_Clear();
711 continue;
712 }
713 for (i = 0; ; i++) {
714 x = PySequence_GetItem(m, i);
715 if (x == NULL) {
716 PyErr_Clear();
717 break;
718 }
719 if (PyList_Append(l, x) != 0) {
720 Py_DECREF(x);
721 Py_DECREF(m);
722 goto error;
723 }
724 Py_DECREF(x);
725 }
726 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000727 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000728 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000729 if (PyList_Sort(l) != 0)
730 goto error;
731 return l;
732 error:
733 Py_XDECREF(l);
734 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000735}
736
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000737static char dir_doc[] =
738"dir([object]) -> list of strings\n\
739\n\
740Return an alphabetized list of names comprising (some of) the attributes\n\
741of the given object. Without an argument, the names in the current scope\n\
742are listed. With an instance argument, only the instance attributes are\n\
743returned. With a class argument, attributes of the base class are not\n\
744returned. For other types or arguments, this may list members or methods.";
745
746
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000748builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000749{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000751
Guido van Rossum79f25d91997-04-29 20:08:16 +0000752 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000753 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000754 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000755}
756
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000757static char divmod_doc[] =
758"divmod(x, y) -> (div, mod)\n\
759\n\
760Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
761
762
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000764builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000765{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 PyObject *cmd;
767 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000768 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000769
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000771 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 &PyDict_Type, &globals,
773 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 if (globals == Py_None) {
776 globals = PyEval_GetGlobals();
777 if (locals == Py_None)
778 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000779 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000780 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000781 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
783 if (PyDict_SetItemString(globals, "__builtins__",
784 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000785 return NULL;
786 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787 if (PyCode_Check(cmd))
788 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000789 if (!PyString_Check(cmd) &&
790 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000792 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000793 return NULL;
794 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000795 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000797 while (*str == ' ' || *str == '\t')
798 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000799 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000800}
801
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000802static char eval_doc[] =
803"eval(source[, globals[, locals]]) -> value\n\
804\n\
805Evaluate the source in the context of globals and locals.\n\
806The source may be a string representing a Python expression\n\
807or a code object as returned by compile().\n\
808The globals and locals are dictionaries, defaulting to the current\n\
809globals and locals. If only globals is given, locals defaults to it.";
810
811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000813builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000814{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000815 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 PyObject *globals = Py_None, *locals = Py_None;
817 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000818 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819
Guido van Rossum79f25d91997-04-29 20:08:16 +0000820 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000821 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 &PyDict_Type, &globals,
823 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000824 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000825 if (globals == Py_None) {
826 globals = PyEval_GetGlobals();
827 if (locals == Py_None)
828 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000829 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000830 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000831 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000832 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
833 if (PyDict_SetItemString(globals, "__builtins__",
834 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000835 return NULL;
836 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000838 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000840 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000841 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000842 return NULL;
843 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000844 if (PyEval_GetNestedScopes()) {
845 PyCompilerFlags cf;
846 cf.cf_nested_scopes = 1;
Tim Peters748b8bb2001-04-28 08:20:22 +0000847 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000848 locals, 1, &cf);
Tim Peters748b8bb2001-04-28 08:20:22 +0000849 } else
850 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000851 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000852 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000853}
854
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000855static char execfile_doc[] =
856"execfile(filename[, globals[, locals]])\n\
857\n\
858Read and execute a Python script from a file.\n\
859The globals and locals are dictionaries, defaulting to the current\n\
860globals and locals. If only globals is given, locals defaults to it.";
861
862
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000864builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000865{
Guido van Rossum950ff291998-06-29 13:38:57 +0000866 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000869 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000870 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000871 result = PyObject_GetAttr(v, name);
872 if (result == NULL && dflt != NULL) {
873 PyErr_Clear();
874 Py_INCREF(dflt);
875 result = dflt;
876 }
877 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000878}
879
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000880static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000881"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000882\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000883Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
884When a default argument is given, it is returned when the attribute doesn't\n\
885exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000886
887
Guido van Rossum79f25d91997-04-29 20:08:16 +0000888static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000889builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000890{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000892
Guido van Rossum43713e52000-02-29 13:59:29 +0000893 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000894 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895 d = PyEval_GetGlobals();
896 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000897 return d;
898}
899
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000900static char globals_doc[] =
901"globals() -> dictionary\n\
902\n\
903Return the dictionary containing the current scope's global variables.";
904
905
Guido van Rossum79f25d91997-04-29 20:08:16 +0000906static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000907builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000908{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 PyObject *v;
910 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000911
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000912 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000913 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000915 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000917 Py_INCREF(Py_False);
918 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000919 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000921 Py_INCREF(Py_True);
922 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000923}
924
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000925static char hasattr_doc[] =
926"hasattr(object, name) -> Boolean\n\
927\n\
928Return whether the object has an attribute with the given name.\n\
929(This is done by calling getattr(object, name) and catching exceptions.)";
930
931
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000933builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000934{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000938 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000939 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000940}
941
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000942static char id_doc[] =
943"id(object) -> integer\n\
944\n\
945Return the identity of an object. This is guaranteed to be unique among\n\
946simultaneously existing objects. (Hint: it's the object's memory address.)";
947
948
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000950builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000951{
952 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000953 PyObject *it; /* the iterator object */
954 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000955 } sequence;
956
Guido van Rossum79f25d91997-04-29 20:08:16 +0000957 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000958 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000959 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000960 register int i, j;
961
Guido van Rossum79f25d91997-04-29 20:08:16 +0000962 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000963 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 PyErr_SetString(PyExc_TypeError,
965 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000966 return NULL;
967 }
968
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000970 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000971
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000972 if (func == Py_None && n == 1) {
973 /* map(None, S) is the same as list(S). */
974 return PySequence_List(PyTuple_GetItem(args, 1));
975 }
976
Tim Peters4e9afdc2001-05-03 23:54:49 +0000977 /* Get space for sequence descriptors. Must NULL out the iterator
978 * pointers so that jumping to Fail_2 later doesn't see trash.
979 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
981 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000982 return NULL;
983 }
984 for (i = 0; i < n; ++i) {
985 seqs[i].it = (PyObject*)NULL;
986 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000987 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000988
Tim Peters4e9afdc2001-05-03 23:54:49 +0000989 /* Do a first pass to obtain iterators for the arguments, and set len
990 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000991 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000992 len = 0;
993 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
994 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000995 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000996
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 /* Get iterator. */
998 curseq = PyTuple_GetItem(args, i+1);
999 sqp->it = PyObject_GetIter(curseq);
1000 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001001 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001002 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001003 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001005 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001006 goto Fail_2;
1007 }
1008
Tim Peters4e9afdc2001-05-03 23:54:49 +00001009 /* Update len. */
1010 curlen = -1; /* unknown */
1011 if (PySequence_Check(curseq) &&
1012 curseq->ob_type->tp_as_sequence->sq_length) {
1013 curlen = PySequence_Size(curseq);
1014 if (curlen < 0)
1015 PyErr_Clear();
1016 }
Tim Peters748b8bb2001-04-28 08:20:22 +00001017 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 curlen = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001019 if (curlen > len)
1020 len = curlen;
1021 }
1022
Tim Peters4e9afdc2001-05-03 23:54:49 +00001023 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001024 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001025 goto Fail_2;
1026
Tim Peters4e9afdc2001-05-03 23:54:49 +00001027 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001028 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001029 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001030 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001031
Guido van Rossum79f25d91997-04-29 20:08:16 +00001032 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001033 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001034 else if ((alist = PyTuple_New(n)) == NULL)
1035 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001036
1037 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001038 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001039 Py_INCREF(Py_None);
1040 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001041 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001042 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001043 item = PyIter_Next(sqp->it);
1044 if (item)
1045 ++numactive;
1046 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001047 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001048 Py_XDECREF(alist);
1049 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001050 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001051 Py_INCREF(Py_None);
1052 item = Py_None;
1053 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001054 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001055 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001056 if (alist)
1057 PyTuple_SET_ITEM(alist, j, item);
1058 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001059 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060 }
1061
Guido van Rossum32120311995-07-10 13:52:21 +00001062 if (!alist)
1063 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001064
Tim Peters4e9afdc2001-05-03 23:54:49 +00001065 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001066 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001067 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001068 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001069
Guido van Rossum79f25d91997-04-29 20:08:16 +00001070 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001071 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001072 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073 value = PyEval_CallObject(func, alist);
1074 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001075 if (value == NULL)
1076 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001077 }
1078 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001079 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001080 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001081 if (status < 0)
1082 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001083 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001084 else if (PyList_SetItem(result, i, value) < 0)
1085 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001086 }
1087
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001088 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1089 goto Fail_1;
1090
Tim Peters4e9afdc2001-05-03 23:54:49 +00001091 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001092
Guido van Rossum12d12c51993-10-26 17:58:25 +00001093Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001095Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001096 result = NULL;
1097Succeed:
1098 assert(seqs);
1099 for (i = 0; i < n; ++i)
1100 Py_XDECREF(seqs[i].it);
1101 PyMem_DEL(seqs);
1102 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001103}
1104
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001105static char map_doc[] =
1106"map(function, sequence[, sequence, ...]) -> list\n\
1107\n\
1108Return a list of the results of applying the function to the items of\n\
1109the argument sequence(s). If more than one sequence is given, the\n\
1110function is called with an argument list consisting of the corresponding\n\
1111item of each sequence, substituting None for missing values when not all\n\
1112sequences have the same length. If the function is None, return a list of\n\
1113the items of the sequence (or a list of tuples if more than one sequence).";
1114
1115
Guido van Rossum79f25d91997-04-29 20:08:16 +00001116static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001117builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001118{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001119 PyObject *v;
1120 PyObject *name;
1121 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001122
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001123 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001124 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001126 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 Py_INCREF(Py_None);
1128 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001129}
1130
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001131static char setattr_doc[] =
1132"setattr(object, name, value)\n\
1133\n\
1134Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1135``x.y = v''.";
1136
1137
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001139builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001140{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141 PyObject *v;
1142 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001143
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001144 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001145 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001147 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001148 Py_INCREF(Py_None);
1149 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001150}
1151
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001153"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154\n\
1155Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1156``del x.y''.";
1157
1158
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001160builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001161{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001163 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001164
Guido van Rossum79f25d91997-04-29 20:08:16 +00001165 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001166 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001167 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001168 if (x == -1)
1169 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001171}
1172
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001173static char hash_doc[] =
1174"hash(object) -> integer\n\
1175\n\
1176Return a hash value for the object. Two objects with the same value have\n\
1177the same hash value. The reverse is not necessarily true, but likely.";
1178
1179
Guido van Rossum79f25d91997-04-29 20:08:16 +00001180static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001181builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001182{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001183 PyObject *v;
1184 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001185
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001187 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001188
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001189 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001190 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001192 "hex() argument can't be converted to hex");
1193 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001194 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001195 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001196}
1197
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001198static char hex_doc[] =
1199"hex(number) -> string\n\
1200\n\
1201Return the hexadecimal representation of an integer or long integer.";
1202
1203
Tim Petersdbd9ba62000-07-09 03:09:57 +00001204static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001205
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001207builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001208{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211 PyObject *res;
1212 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001213
1214 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001215 if (line == NULL)
1216 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001217 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001218 return NULL;
1219 while (*str == ' ' || *str == '\t')
1220 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221 globals = PyEval_GetGlobals();
1222 locals = PyEval_GetLocals();
1223 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1224 if (PyDict_SetItemString(globals, "__builtins__",
1225 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001226 return NULL;
1227 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001228 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001229 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001230 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001231}
1232
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001233static char input_doc[] =
1234"input([prompt]) -> value\n\
1235\n\
1236Equivalent to eval(raw_input(prompt)).";
1237
1238
Guido van Rossume8811f81997-02-14 15:48:05 +00001239static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001240builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001241{
1242 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001243 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001244 return NULL;
1245 Py_INCREF(s);
1246 PyString_InternInPlace(&s);
1247 return s;
1248}
1249
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001250static char intern_doc[] =
1251"intern(string) -> string\n\
1252\n\
1253``Intern'' the given string. This enters the string in the (global)\n\
1254table of interned strings whose purpose is to speed up dictionary lookups.\n\
1255Return the string itself or the previously interned string object with the\n\
1256same value.";
1257
1258
Guido van Rossum79f25d91997-04-29 20:08:16 +00001259static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001260builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001262 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001263 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001264
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001265 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001266 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001267 if (base == -909)
1268 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001269 else if (PyString_Check(v))
1270 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1271 else if (PyUnicode_Check(v))
1272 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1273 PyUnicode_GET_SIZE(v),
1274 base);
1275 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001276 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001277 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001278 return NULL;
1279 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001280}
1281
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001282static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001283"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001284\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001285Convert a string or number to an integer, if possible. A floating point\n\
1286argument will be truncated towards zero (this does not include a string\n\
1287representation of a floating point number!) When converting a string, use\n\
1288the optional base. It is an error to supply a base when converting a\n\
1289non-string.";
1290
1291
1292static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001293builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001294{
1295 PyObject *v;
1296 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001297
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001298 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1299 return NULL;
1300 if (base == -909)
1301 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001302 else if (PyString_Check(v))
1303 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1304 else if (PyUnicode_Check(v))
1305 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1306 PyUnicode_GET_SIZE(v),
1307 base);
1308 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001309 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001310 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001311 return NULL;
1312 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001313}
1314
1315static char long_doc[] =
1316"long(x) -> long integer\n\
1317long(x, base) -> long integer\n\
1318\n\
1319Convert a string or number to a long integer, if possible. A floating\n\
1320point argument will be truncated towards zero (this does not include a\n\
1321string representation of a floating point number!) When converting a\n\
1322string, use the given base. It is an error to supply a base when\n\
1323converting a non-string.";
1324
1325
1326static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001327builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001328{
1329 PyObject *v;
1330
1331 if (!PyArg_ParseTuple(args, "O:float", &v))
1332 return NULL;
1333 if (PyString_Check(v))
1334 return PyFloat_FromString(v, NULL);
1335 return PyNumber_Float(v);
1336}
1337
1338static char float_doc[] =
1339"float(x) -> floating point number\n\
1340\n\
1341Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001342
1343
Guido van Rossum79f25d91997-04-29 20:08:16 +00001344static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001345builtin_iter(PyObject *self, PyObject *args)
1346{
1347 PyObject *v, *w = NULL;
1348
1349 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1350 return NULL;
1351 if (w == NULL)
1352 return PyObject_GetIter(v);
1353 if (!PyCallable_Check(v)) {
1354 PyErr_SetString(PyExc_TypeError,
1355 "iter(v, w): v must be callable");
1356 return NULL;
1357 }
1358 return PyCallIter_New(v, w);
1359}
1360
1361static char iter_doc[] =
1362"iter(collection) -> iterator\n\
1363iter(callable, sentinel) -> iterator\n\
1364\n\
1365Get an iterator from an object. In the first form, the argument must\n\
1366supply its own iterator, or be a sequence.\n\
1367In the second form, the callable is called until it returns the sentinel.";
1368
1369
1370static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001371builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001372{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001374 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001375
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001377 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001378 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001379 if (res < 0 && PyErr_Occurred())
1380 return NULL;
1381 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001382}
1383
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001384static char len_doc[] =
1385"len(object) -> integer\n\
1386\n\
1387Return the number of items of a sequence or mapping.";
1388
1389
Guido van Rossum79f25d91997-04-29 20:08:16 +00001390static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001391builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001392{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001393 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001394
Guido van Rossum79f25d91997-04-29 20:08:16 +00001395 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001396 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001397 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001398}
1399
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001400static char list_doc[] =
1401"list(sequence) -> list\n\
1402\n\
1403Return a new list whose items are the same as those of the argument sequence.";
1404
Guido van Rossum8861b741996-07-30 16:49:37 +00001405
1406static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001407builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001408{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001409 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001410
Guido van Rossum09df08a1998-05-22 00:51:39 +00001411 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001412
Guido van Rossum09df08a1998-05-22 00:51:39 +00001413 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1414 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001415
Guido van Rossum09df08a1998-05-22 00:51:39 +00001416 /* This swapping of stop and start is to maintain similarity with
1417 range(). */
1418 if (stop == NULL) {
1419 stop = start;
1420 start = NULL;
1421 }
1422 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001423}
1424
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001425static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001426"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001427\n\
1428Create a slice object. This is used for slicing by the Numeric extensions.";
1429
1430
Guido van Rossum79f25d91997-04-29 20:08:16 +00001431static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001432builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001433{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001434 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001435
Guido van Rossum43713e52000-02-29 13:59:29 +00001436 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001437 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001438 d = PyEval_GetLocals();
1439 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001440 return d;
1441}
1442
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001443static char locals_doc[] =
1444"locals() -> dictionary\n\
1445\n\
1446Return the dictionary containing the current scope's local variables.";
1447
1448
Guido van Rossum79f25d91997-04-29 20:08:16 +00001449static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001450min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001451{
Tim Petersc3074532001-05-03 07:00:32 +00001452 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001453
Guido van Rossum79f25d91997-04-29 20:08:16 +00001454 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001455 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001456 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001457 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001458
1459 it = PyObject_GetIter(v);
1460 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001461 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001462
1463 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001464 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001465 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001466 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001467 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001468 Py_XDECREF(w);
1469 Py_DECREF(it);
1470 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001471 }
Tim Petersc3074532001-05-03 07:00:32 +00001472 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001473 }
Tim Petersc3074532001-05-03 07:00:32 +00001474
Guido van Rossum2d951851994-08-29 12:52:16 +00001475 if (w == NULL)
1476 w = x;
1477 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001478 int cmp = PyObject_RichCompareBool(x, w, op);
1479 if (cmp > 0) {
1480 Py_DECREF(w);
1481 w = x;
1482 }
1483 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001484 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001485 Py_DECREF(w);
1486 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001487 return NULL;
1488 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001489 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001490 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001491 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001492 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001493 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001494 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001495 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001496 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001497 return w;
1498}
1499
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001501builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001502{
Guido van Rossum53451b32001-01-17 15:47:24 +00001503 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001504}
1505
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001506static char min_doc[] =
1507"min(sequence) -> value\n\
1508min(a, b, c, ...) -> value\n\
1509\n\
1510With a single sequence argument, return its smallest item.\n\
1511With two or more arguments, return the smallest argument.";
1512
1513
Guido van Rossum79f25d91997-04-29 20:08:16 +00001514static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001515builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001516{
Guido van Rossum53451b32001-01-17 15:47:24 +00001517 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001518}
1519
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001520static char max_doc[] =
1521"max(sequence) -> value\n\
1522max(a, b, c, ...) -> value\n\
1523\n\
1524With a single sequence argument, return its largest item.\n\
1525With two or more arguments, return the largest argument.";
1526
1527
Guido van Rossum79f25d91997-04-29 20:08:16 +00001528static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001529builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001530{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001531 PyObject *v;
1532 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001533
Guido van Rossum79f25d91997-04-29 20:08:16 +00001534 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001535 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001536 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1537 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001539 "oct() argument can't be converted to oct");
1540 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001541 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001542 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001543}
1544
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001545static char oct_doc[] =
1546"oct(number) -> string\n\
1547\n\
1548Return the octal representation of an integer or long integer.";
1549
1550
Guido van Rossum79f25d91997-04-29 20:08:16 +00001551static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001552builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001553{
Mark Hammondef8b6542001-05-13 08:04:26 +00001554 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001555 char *mode = "r";
1556 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001557 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001558
Mark Hammondef8b6542001-05-13 08:04:26 +00001559 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1560 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001561 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001562 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001563 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001564 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001565 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001566 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001567}
1568
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001569static char open_doc[] =
1570"open(filename[, mode[, buffering]]) -> file object\n\
1571\n\
1572Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1573writing or appending. The file will be created if it doesn't exist\n\
1574when opened for writing or appending; it will be truncated when\n\
1575opened for writing. Add a 'b' to the mode for binary files.\n\
1576Add a '+' to the mode to allow simultaneous reading and writing.\n\
1577If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1578buffered, and larger numbers specify the buffer size.";
1579
1580
Guido van Rossum79f25d91997-04-29 20:08:16 +00001581static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001582builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001583{
Guido van Rossum09095f32000-03-10 23:00:52 +00001584 PyObject *obj;
1585 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001586 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001587
Guido van Rossum09095f32000-03-10 23:00:52 +00001588 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001589 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001590
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001591 if (PyString_Check(obj)) {
1592 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001593 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001594 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001595 return PyInt_FromLong(ord);
1596 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001597 } else if (PyUnicode_Check(obj)) {
1598 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001599 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001600 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001601 return PyInt_FromLong(ord);
1602 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001603 } else {
1604 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001605 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001606 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001607 return NULL;
1608 }
1609
Guido van Rossumad991772001-01-12 16:03:05 +00001610 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001611 "ord() expected a character, "
1612 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001613 size);
1614 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001615}
1616
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001617static char ord_doc[] =
1618"ord(c) -> integer\n\
1619\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001620Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001621
1622
Guido van Rossum79f25d91997-04-29 20:08:16 +00001623static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001624builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001625{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001626 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001627
Guido van Rossum79f25d91997-04-29 20:08:16 +00001628 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001629 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001630 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001631}
1632
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001633static char pow_doc[] =
1634"pow(x, y[, z]) -> number\n\
1635\n\
1636With two arguments, equivalent to x**y. With three arguments,\n\
1637equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1638
1639
Guido van Rossum124eff01999-02-23 16:11:01 +00001640/* Return number of items in range/xrange (lo, hi, step). step > 0
1641 * required. Return a value < 0 if & only if the true value is too
1642 * large to fit in a signed long.
1643 */
1644static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001645get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001646{
1647 /* -------------------------------------------------------------
1648 If lo >= hi, the range is empty.
1649 Else if n values are in the range, the last one is
1650 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1651 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1652 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1653 the RHS is non-negative and so truncation is the same as the
1654 floor. Letting M be the largest positive long, the worst case
1655 for the RHS numerator is hi=M, lo=-M-1, and then
1656 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1657 precision to compute the RHS exactly.
1658 ---------------------------------------------------------------*/
1659 long n = 0;
1660 if (lo < hi) {
1661 unsigned long uhi = (unsigned long)hi;
1662 unsigned long ulo = (unsigned long)lo;
1663 unsigned long diff = uhi - ulo - 1;
1664 n = (long)(diff / (unsigned long)step + 1);
1665 }
1666 return n;
1667}
1668
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001670builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001671{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001672 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001673 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001674 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001675
Guido van Rossum79f25d91997-04-29 20:08:16 +00001676 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001677
Guido van Rossum79f25d91997-04-29 20:08:16 +00001678 if (PyTuple_Size(args) <= 1) {
1679 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001680 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001681 &ihigh))
1682 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001683 }
1684 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001686 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001688 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001689 }
1690 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001691 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001692 return NULL;
1693 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001694 if (istep > 0)
1695 bign = get_len_of_range(ilow, ihigh, istep);
1696 else
1697 bign = get_len_of_range(ihigh, ilow, -istep);
1698 n = (int)bign;
1699 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001700 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001701 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001702 return NULL;
1703 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001704 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001705 if (v == NULL)
1706 return NULL;
1707 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001708 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001709 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001710 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001711 return NULL;
1712 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001713 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001714 ilow += istep;
1715 }
1716 return v;
1717}
1718
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001719static char range_doc[] =
1720"range([start,] stop[, step]) -> list of integers\n\
1721\n\
1722Return a list containing an arithmetic progression of integers.\n\
1723range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1724When step is given, it specifies the increment (or decrement).\n\
1725For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1726These are exactly the valid indices for a list of 4 elements.";
1727
1728
Guido van Rossum79f25d91997-04-29 20:08:16 +00001729static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001730builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001731{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001732 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001733 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001734
Guido van Rossum79f25d91997-04-29 20:08:16 +00001735 if (PyTuple_Size(args) <= 1) {
1736 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001737 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001738 &ihigh))
1739 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001740 }
1741 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001742 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001743 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001744 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001745 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001746 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001747 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001748 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001749 return NULL;
1750 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001751 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001752 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001753 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001754 n = get_len_of_range(ihigh, ilow, -istep);
1755 if (n < 0) {
1756 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001757 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001758 return NULL;
1759 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001760 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001761}
1762
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001763static char xrange_doc[] =
1764"xrange([start,] stop[, step]) -> xrange object\n\
1765\n\
1766Like range(), but instead of returning a list, returns an object that\n\
1767generates the numbers in the range on demand. This is slightly slower\n\
1768than range() but more memory efficient.";
1769
1770
Guido van Rossum79f25d91997-04-29 20:08:16 +00001771static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001772builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001773{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001774 PyObject *v = NULL;
1775 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001776
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001778 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1780 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001781 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001782 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001783 char *prompt;
1784 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001786 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001787 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001788 if (po == NULL)
1789 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001790 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001791 if (prompt == NULL)
1792 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001793 }
1794 else {
1795 po = NULL;
1796 prompt = "";
1797 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 s = PyOS_Readline(prompt);
1799 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001800 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001802 return NULL;
1803 }
1804 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001806 result = NULL;
1807 }
1808 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001809 size_t len = strlen(s);
1810 if (len > INT_MAX) {
1811 PyErr_SetString(PyExc_OverflowError, "input too long");
1812 result = NULL;
1813 }
1814 else {
1815 result = PyString_FromStringAndSize(s, (int)(len-1));
1816 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001817 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001818 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001819 return result;
1820 }
Guido van Rossum90933611991-06-07 16:10:43 +00001821 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001823 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001825 return NULL;
1826 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001827 if (Py_FlushLine() != 0 ||
1828 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001829 return NULL;
1830 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834 return NULL;
1835 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001836 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001837}
1838
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001839static char raw_input_doc[] =
1840"raw_input([prompt]) -> string\n\
1841\n\
1842Read a string from standard input. The trailing newline is stripped.\n\
1843If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1844On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1845is printed without a trailing newline before reading.";
1846
1847
Guido van Rossum79f25d91997-04-29 20:08:16 +00001848static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001849builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001850{
Tim Peters15d81ef2001-05-04 04:39:21 +00001851 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001852
Guido van Rossum79f25d91997-04-29 20:08:16 +00001853 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001854 return NULL;
1855 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001856 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001857
Tim Peters15d81ef2001-05-04 04:39:21 +00001858 it = PyObject_GetIter(seq);
1859 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001860 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001861 "reduce() arg 2 must support iteration");
1862 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001863 return NULL;
1864 }
1865
Guido van Rossum79f25d91997-04-29 20:08:16 +00001866 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001867 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001868
Tim Peters15d81ef2001-05-04 04:39:21 +00001869 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001871
1872 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001873 Py_DECREF(args);
1874 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001875 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001876 }
1877
Tim Peters15d81ef2001-05-04 04:39:21 +00001878 op2 = PyIter_Next(it);
1879 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001880 if (PyErr_Occurred())
1881 goto Fail;
1882 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001883 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001884
Guido van Rossum2d951851994-08-29 12:52:16 +00001885 if (result == NULL)
1886 result = op2;
1887 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001888 PyTuple_SetItem(args, 0, result);
1889 PyTuple_SetItem(args, 1, op2);
1890 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001891 goto Fail;
1892 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001893 }
1894
Guido van Rossum79f25d91997-04-29 20:08:16 +00001895 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001896
Guido van Rossum2d951851994-08-29 12:52:16 +00001897 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001898 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001899 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001900
Tim Peters15d81ef2001-05-04 04:39:21 +00001901 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001902 return result;
1903
Guido van Rossum2d951851994-08-29 12:52:16 +00001904Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001905 Py_XDECREF(args);
1906 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001907 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001908 return NULL;
1909}
1910
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001911static char reduce_doc[] =
1912"reduce(function, sequence[, initial]) -> value\n\
1913\n\
1914Apply a function of two arguments cumulatively to the items of a sequence,\n\
1915from left to right, so as to reduce the sequence to a single value.\n\
1916For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1917((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1918of the sequence in the calculation, and serves as a default when the\n\
1919sequence is empty.";
1920
1921
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001923builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001924{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001925 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001926
Guido van Rossum79f25d91997-04-29 20:08:16 +00001927 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001928 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001929 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001930}
1931
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001932static char reload_doc[] =
1933"reload(module) -> module\n\
1934\n\
1935Reload the module. The module must have been successfully imported before.";
1936
1937
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001939builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001940{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001941 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001942
Guido van Rossum79f25d91997-04-29 20:08:16 +00001943 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001944 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001946}
1947
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001948static char repr_doc[] =
1949"repr(object) -> string\n\
1950\n\
1951Return the canonical string representation of the object.\n\
1952For most object types, eval(repr(object)) == object.";
1953
1954
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001956builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001957{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001958 double x;
1959 double f;
1960 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001961 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001962
Guido van Rossum79f25d91997-04-29 20:08:16 +00001963 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001964 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001965 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001966 i = abs(ndigits);
1967 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001968 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001969 if (ndigits < 0)
1970 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001971 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001972 x *= f;
1973 if (x >= 0.0)
1974 x = floor(x + 0.5);
1975 else
1976 x = ceil(x - 0.5);
1977 if (ndigits < 0)
1978 x *= f;
1979 else
1980 x /= f;
1981 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001982}
1983
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001984static char round_doc[] =
1985"round(number[, ndigits]) -> floating point number\n\
1986\n\
1987Round a number to a given precision in decimal digits (default 0 digits).\n\
1988This always returns a floating point number. Precision may be negative.";
1989
1990
Guido van Rossum79f25d91997-04-29 20:08:16 +00001991static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001992builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001993{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001995
Guido van Rossum79f25d91997-04-29 20:08:16 +00001996 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001997 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001998 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001999}
2000
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002001static char str_doc[] =
2002"str(object) -> string\n\
2003\n\
2004Return a nice string representation of the object.\n\
2005If the argument is a string, the return value is the same object.";
2006
2007
Guido van Rossum79f25d91997-04-29 20:08:16 +00002008static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002009builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00002010{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002011 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002012
Guido van Rossum79f25d91997-04-29 20:08:16 +00002013 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002014 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00002015 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00002016}
2017
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002018static char tuple_doc[] =
2019"tuple(sequence) -> list\n\
2020\n\
2021Return a tuple whose items are the same as those of the argument sequence.\n\
2022If the argument is a tuple, the return value is the same object.";
2023
2024
Guido van Rossum79f25d91997-04-29 20:08:16 +00002025static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002026builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002027{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002028 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002029
Guido van Rossum79f25d91997-04-29 20:08:16 +00002030 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002031 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002032 v = (PyObject *)v->ob_type;
2033 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002034 return v;
2035}
2036
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002037static char type_doc[] =
2038"type(object) -> type object\n\
2039\n\
2040Return the type of the object.";
2041
2042
Guido van Rossum79f25d91997-04-29 20:08:16 +00002043static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002044builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002045{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002046 PyObject *v = NULL;
2047 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002048
Guido van Rossum79f25d91997-04-29 20:08:16 +00002049 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002050 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002051 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002053 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002054 if (!PyErr_Occurred())
2055 PyErr_SetString(PyExc_SystemError,
2056 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002057 }
2058 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002059 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002060 }
2061 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002062 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002063 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002065 "vars() argument must have __dict__ attribute");
2066 return NULL;
2067 }
2068 }
2069 return d;
2070}
2071
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002072static char vars_doc[] =
2073"vars([object]) -> dictionary\n\
2074\n\
2075Without arguments, equivalent to locals().\n\
2076With an argument, equivalent to object.__dict__.";
2077
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002078static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002079builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002080{
2081 PyObject *inst;
2082 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002083 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002084
Guido van Rossum43713e52000-02-29 13:59:29 +00002085 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002086 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002087
Guido van Rossum823649d2001-03-21 18:40:58 +00002088 retval = PyObject_IsInstance(inst, cls);
2089 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002090 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002091 return PyInt_FromLong(retval);
2092}
2093
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002094static char isinstance_doc[] =
2095"isinstance(object, class-or-type) -> Boolean\n\
2096\n\
2097Return whether an object is an instance of a class or of a subclass thereof.\n\
2098With a type as second argument, return whether that is the object's type.";
2099
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002100
2101static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002102builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002103{
2104 PyObject *derived;
2105 PyObject *cls;
2106 int retval;
2107
Guido van Rossum43713e52000-02-29 13:59:29 +00002108 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002109 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002110
Guido van Rossum823649d2001-03-21 18:40:58 +00002111 retval = PyObject_IsSubclass(derived, cls);
2112 if (retval < 0)
2113 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002114 return PyInt_FromLong(retval);
2115}
2116
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002117static char issubclass_doc[] =
2118"issubclass(C, B) -> Boolean\n\
2119\n\
2120Return whether class C is a subclass (i.e., a derived class) of class B.";
2121
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002122
Barry Warsawbd599b52000-08-03 15:45:29 +00002123static PyObject*
2124builtin_zip(PyObject *self, PyObject *args)
2125{
2126 PyObject *ret;
2127 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002128 int i;
2129 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00002130
2131 if (itemsize < 1) {
2132 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002133 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002134 return NULL;
2135 }
2136 /* args must be a tuple */
2137 assert(PyTuple_Check(args));
2138
Tim Peters8572b4f2001-05-06 01:05:02 +00002139 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00002140 if ((ret = PyList_New(0)) == NULL)
2141 return NULL;
2142
Tim Peters8572b4f2001-05-06 01:05:02 +00002143 /* obtain iterators */
2144 itlist = PyTuple_New(itemsize);
2145 if (itlist == NULL)
2146 goto Fail_ret;
2147 for (i = 0; i < itemsize; ++i) {
2148 PyObject *item = PyTuple_GET_ITEM(args, i);
2149 PyObject *it = PyObject_GetIter(item);
2150 if (it == NULL) {
2151 if (PyErr_ExceptionMatches(PyExc_TypeError))
2152 PyErr_Format(PyExc_TypeError,
2153 "zip argument #%d must support iteration",
2154 i+1);
2155 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002156 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002157 PyTuple_SET_ITEM(itlist, i, it);
2158 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002159
Tim Peters8572b4f2001-05-06 01:05:02 +00002160 /* build result into ret list */
2161 for (;;) {
2162 int status;
2163 PyObject *next = PyTuple_New(itemsize);
2164 if (!next)
2165 goto Fail_ret_itlist;
2166
2167 for (i = 0; i < itemsize; i++) {
2168 PyObject *it = PyTuple_GET_ITEM(itlist, i);
2169 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002170 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002171 if (PyErr_Occurred()) {
2172 Py_DECREF(ret);
2173 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002174 }
2175 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002176 Py_DECREF(itlist);
2177 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00002178 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002179 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002180 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002181
2182 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00002183 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002184 if (status < 0)
2185 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002186 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002187
2188Fail_ret_itlist:
2189 Py_DECREF(itlist);
2190Fail_ret:
2191 Py_DECREF(ret);
2192 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002193}
2194
2195
2196static char zip_doc[] =
2197"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2198\n\
2199Return a list of tuples, where each tuple contains the i-th element\n\
2200from each of the argument sequences. The returned list is truncated\n\
2201in length to the length of the shortest argument sequence.";
2202
2203
Guido van Rossum79f25d91997-04-29 20:08:16 +00002204static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002205 {"__import__", builtin___import__, 1, import_doc},
2206 {"abs", builtin_abs, 1, abs_doc},
2207 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002208 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002209 {"callable", builtin_callable, 1, callable_doc},
2210 {"chr", builtin_chr, 1, chr_doc},
2211 {"cmp", builtin_cmp, 1, cmp_doc},
2212 {"coerce", builtin_coerce, 1, coerce_doc},
2213 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002214#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002215 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002216#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002217 {"delattr", builtin_delattr, 1, delattr_doc},
2218 {"dir", builtin_dir, 1, dir_doc},
2219 {"divmod", builtin_divmod, 1, divmod_doc},
2220 {"eval", builtin_eval, 1, eval_doc},
2221 {"execfile", builtin_execfile, 1, execfile_doc},
2222 {"filter", builtin_filter, 1, filter_doc},
2223 {"float", builtin_float, 1, float_doc},
2224 {"getattr", builtin_getattr, 1, getattr_doc},
2225 {"globals", builtin_globals, 1, globals_doc},
2226 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2227 {"hash", builtin_hash, 1, hash_doc},
2228 {"hex", builtin_hex, 1, hex_doc},
2229 {"id", builtin_id, 1, id_doc},
2230 {"input", builtin_input, 1, input_doc},
2231 {"intern", builtin_intern, 1, intern_doc},
2232 {"int", builtin_int, 1, int_doc},
2233 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2234 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002235 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002236 {"len", builtin_len, 1, len_doc},
2237 {"list", builtin_list, 1, list_doc},
2238 {"locals", builtin_locals, 1, locals_doc},
2239 {"long", builtin_long, 1, long_doc},
2240 {"map", builtin_map, 1, map_doc},
2241 {"max", builtin_max, 1, max_doc},
2242 {"min", builtin_min, 1, min_doc},
2243 {"oct", builtin_oct, 1, oct_doc},
2244 {"open", builtin_open, 1, open_doc},
2245 {"ord", builtin_ord, 1, ord_doc},
2246 {"pow", builtin_pow, 1, pow_doc},
2247 {"range", builtin_range, 1, range_doc},
2248 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2249 {"reduce", builtin_reduce, 1, reduce_doc},
2250 {"reload", builtin_reload, 1, reload_doc},
2251 {"repr", builtin_repr, 1, repr_doc},
2252 {"round", builtin_round, 1, round_doc},
2253 {"setattr", builtin_setattr, 1, setattr_doc},
2254 {"slice", builtin_slice, 1, slice_doc},
2255 {"str", builtin_str, 1, str_doc},
2256 {"tuple", builtin_tuple, 1, tuple_doc},
2257 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002258 {"unicode", builtin_unicode, 1, unicode_doc},
2259 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002260 {"vars", builtin_vars, 1, vars_doc},
2261 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002262 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002263 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002264};
2265
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002266static char builtin_doc[] =
2267"Built-in functions, exceptions, and other objects.\n\
2268\n\
2269Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2270
Guido van Rossum25ce5661997-08-02 03:10:38 +00002271PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002272_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002273{
Fred Drake5550de32000-06-20 04:54:19 +00002274 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002275 mod = Py_InitModule4("__builtin__", builtin_methods,
2276 builtin_doc, (PyObject *)NULL,
2277 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002278 if (mod == NULL)
2279 return NULL;
2280 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002281 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2282 return NULL;
2283 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2284 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002285 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002286 Py_NotImplemented) < 0)
2287 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002288 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2289 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2290 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002291 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002292 }
2293 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002294
Guido van Rossum25ce5661997-08-02 03:10:38 +00002295 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002296}
2297
Guido van Rossume77a7571993-11-03 15:01:26 +00002298/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002299
Guido van Rossum79f25d91997-04-29 20:08:16 +00002300static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002301filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002302{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002303 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002304 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002305 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002306
Guido van Rossumb7b45621995-08-04 04:07:45 +00002307 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002308 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002309 return tuple;
2310 }
2311
Guido van Rossum79f25d91997-04-29 20:08:16 +00002312 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002313 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002314
Guido van Rossum12d12c51993-10-26 17:58:25 +00002315 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002316 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002317 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002318
Guido van Rossum79f25d91997-04-29 20:08:16 +00002319 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002320 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002321 if (func == Py_None) {
2322 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002323 good = item;
2324 }
2325 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002326 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002327 if (arg == NULL)
2328 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002329 good = PyEval_CallObject(func, arg);
2330 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002331 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002332 goto Fail_1;
2333 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002334 ok = PyObject_IsTrue(good);
2335 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002336 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002337 Py_INCREF(item);
2338 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002339 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002340 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002341 }
2342
Tim Peters4324aa32001-05-28 22:30:08 +00002343 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002344 return NULL;
2345
Guido van Rossum12d12c51993-10-26 17:58:25 +00002346 return result;
2347
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002350 return NULL;
2351}
2352
2353
Guido van Rossume77a7571993-11-03 15:01:26 +00002354/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossum79f25d91997-04-29 20:08:16 +00002356static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002357filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002358{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002359 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002360 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002361 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002362
Guido van Rossum79f25d91997-04-29 20:08:16 +00002363 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002364 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002365 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002366 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002367 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002368 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002369 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002370
Guido van Rossum12d12c51993-10-26 17:58:25 +00002371 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002372 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002373 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002375 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2376 if (item == NULL)
2377 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002379 if (arg == NULL) {
2380 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002381 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002382 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002383 good = PyEval_CallObject(func, arg);
2384 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002385 if (good == NULL) {
2386 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002387 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002388 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002389 ok = PyObject_IsTrue(good);
2390 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002391 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002392 PyString_AS_STRING((PyStringObject *)result)[j++] =
2393 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002394 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002395 }
2396
Guido van Rossum79f25d91997-04-29 20:08:16 +00002397 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002398 return NULL;
2399
Guido van Rossum12d12c51993-10-26 17:58:25 +00002400 return result;
2401
Guido van Rossum12d12c51993-10-26 17:58:25 +00002402Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002403 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002404 return NULL;
2405}