blob: 8917f450efcc8db2b0879df614397ec9937a4915 [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 Hammond26cffde42001-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 Hammond26cffde42001-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,
Guido van Rossum236d8b72001-06-26 23:12:25 +0000318 "unichr() arg not in range(0x110000)");
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);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000326 }
327 else {
Martin v. Löwis0ba70cc2001-06-26 22:22:37 +0000328#if Py_UNICODE_SIZE == 2
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000329 /* UCS-4 character. store as two surrogate characters */
330 x -= 0x10000L;
331 s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
332 s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
333 return PyUnicode_FromUnicode(s, 2);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000334#else
335 s[0] = (Py_UNICODE)x;
336 return PyUnicode_FromUnicode(s, 1);
Martin v. Löwis0ba70cc2001-06-26 22:22:37 +0000337#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000338 }
Guido van Rossum09095f32000-03-10 23:00:52 +0000339}
340
341static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000342"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000343\n\
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000344Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000345
346
347static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000348builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000349{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000350 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000351 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000352
Guido van Rossum79f25d91997-04-29 20:08:16 +0000353 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000354 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000355 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000356 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000357 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000358}
359
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000360static char cmp_doc[] =
361"cmp(x, y) -> integer\n\
362\n\
363Return negative if x<y, zero if x==y, positive if x>y.";
364
365
Guido van Rossum79f25d91997-04-29 20:08:16 +0000366static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000367builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000368{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000369 PyObject *v, *w;
370 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000371
Guido van Rossum79f25d91997-04-29 20:08:16 +0000372 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000373 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000375 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000376 res = Py_BuildValue("(OO)", v, w);
377 Py_DECREF(v);
378 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000379 return res;
380}
381
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000382static char coerce_doc[] =
383"coerce(x, y) -> None or (x1, y1)\n\
384\n\
385When x and y can be coerced to values of the same type, return a tuple\n\
386containing the coerced values. When they can't be coerced, return None.";
387
388
Guido van Rossum79f25d91997-04-29 20:08:16 +0000389static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000390builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000391{
392 char *str;
393 char *filename;
394 char *startstr;
395 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000396
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000398 return NULL;
399 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000400 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000401 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000402 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000403 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000404 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000405 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000406 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000407 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000408 return NULL;
409 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000410 if (PyEval_GetNestedScopes()) {
411 PyCompilerFlags cf;
412 cf.cf_nested_scopes = 1;
413 return Py_CompileStringFlags(str, filename, start, &cf);
414 } else
415 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000416}
417
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000418static char compile_doc[] =
419"compile(source, filename, mode) -> code object\n\
420\n\
421Compile the source string (a Python module, statement or expression)\n\
422into a code object that can be executed by the exec statement or eval().\n\
423The filename will be used for run-time error messages.\n\
424The mode must be 'exec' to compile a module, 'single' to compile a\n\
425single (interactive) statement, or 'eval' to compile an expression.";
426
427
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000428#ifndef WITHOUT_COMPLEX
429
Guido van Rossum79f25d91997-04-29 20:08:16 +0000430static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000431complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000432{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000433 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000434 const char *s, *start;
435 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000436 double x=0.0, y=0.0, z;
437 int got_re=0, got_im=0, done=0;
438 int digit_or_dot;
439 int sw_error=0;
440 int sign;
441 char buffer[256]; /* For errors */
Barry Warsaw5ca1ef92000-08-18 05:02:16 +0000442 char s_buffer[256];
Guido van Rossum9e896b32000-04-05 20:11:21 +0000443 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000444
Guido van Rossum9e896b32000-04-05 20:11:21 +0000445 if (PyString_Check(v)) {
446 s = PyString_AS_STRING(v);
447 len = PyString_GET_SIZE(v);
448 }
449 else if (PyUnicode_Check(v)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +0000450 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
451 PyErr_SetString(PyExc_ValueError,
452 "complex() literal too large to convert");
453 return NULL;
454 }
Guido van Rossumad991772001-01-12 16:03:05 +0000455 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000456 PyUnicode_GET_SIZE(v),
Guido van Rossumad991772001-01-12 16:03:05 +0000457 s_buffer,
Guido van Rossum9e896b32000-04-05 20:11:21 +0000458 NULL))
459 return NULL;
460 s = s_buffer;
Trent Mick29b83812000-08-12 21:35:36 +0000461 len = (int)strlen(s);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000462 }
463 else if (PyObject_AsCharBuffer(v, &s, &len)) {
464 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000465 "complex() arg is not a string");
Guido van Rossum9e896b32000-04-05 20:11:21 +0000466 return NULL;
467 }
Guido van Rossum11950231999-03-25 21:16:07 +0000468
469 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000470 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000471 while (*s && isspace(Py_CHARMASK(*s)))
472 s++;
473 if (s[0] == '\0') {
474 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000475 "complex() arg is an empty string");
Guido van Rossum11950231999-03-25 21:16:07 +0000476 return NULL;
477 }
478
479 z = -1.0;
480 sign = 1;
481 do {
Guido van Rossumad991772001-01-12 16:03:05 +0000482
Guido van Rossum11950231999-03-25 21:16:07 +0000483 switch (*s) {
484
485 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000486 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000487 PyErr_SetString(
488 PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000489 "complex() arg contains a null byte");
Guido van Rossum11950231999-03-25 21:16:07 +0000490 return NULL;
491 }
492 if(!done) sw_error=1;
493 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000494
Guido van Rossum11950231999-03-25 21:16:07 +0000495 case '-':
496 sign = -1;
497 /* Fallthrough */
498 case '+':
499 if (done) sw_error=1;
500 s++;
501 if ( *s=='\0'||*s=='+'||*s=='-' ||
502 isspace(Py_CHARMASK(*s)) ) sw_error=1;
503 break;
504
505 case 'J':
506 case 'j':
507 if (got_im || done) {
508 sw_error = 1;
509 break;
510 }
511 if (z<0.0) {
512 y=sign;
513 }
514 else{
515 y=sign*z;
516 }
517 got_im=1;
518 s++;
519 if (*s!='+' && *s!='-' )
520 done=1;
521 break;
522
523 default:
524 if (isspace(Py_CHARMASK(*s))) {
525 while (*s && isspace(Py_CHARMASK(*s)))
526 s++;
527 if (s[0] != '\0')
528 sw_error=1;
529 else
530 done = 1;
531 break;
532 }
533 digit_or_dot =
534 (*s=='.' || isdigit(Py_CHARMASK(*s)));
535 if (done||!digit_or_dot) {
536 sw_error=1;
537 break;
538 }
539 errno = 0;
540 PyFPE_START_PROTECT("strtod", return 0)
541 z = strtod(s, &end) ;
542 PyFPE_END_PROTECT(z)
543 if (errno != 0) {
544 sprintf(buffer,
545 "float() out of range: %.150s", s);
546 PyErr_SetString(
547 PyExc_ValueError,
548 buffer);
549 return NULL;
550 }
551 s=end;
552 if (*s=='J' || *s=='j') {
Guido van Rossumad991772001-01-12 16:03:05 +0000553
Guido van Rossum11950231999-03-25 21:16:07 +0000554 break;
555 }
556 if (got_re) {
557 sw_error=1;
558 break;
559 }
560
561 /* accept a real part */
562 x=sign*z;
563 got_re=1;
564 if (got_im) done=1;
565 z = -1.0;
566 sign = 1;
567 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000568
Guido van Rossum11950231999-03-25 21:16:07 +0000569 } /* end of switch */
570
571 } while (*s!='\0' && !sw_error);
572
573 if (sw_error) {
574 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000575 "complex() arg is a malformed string");
Guido van Rossum11950231999-03-25 21:16:07 +0000576 return NULL;
577 }
578
579 return PyComplex_FromDoubles(x,y);
580}
581
582static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000583builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000584{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000585 PyObject *r, *i, *tmp;
586 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000587 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000588 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000589
590 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000592 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000593 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000594 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000595 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000596 nbr->nb_float == NULL ||
597 (i != NULL &&
598 ((nbi = i->ob_type->tp_as_number) == NULL ||
599 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000601 "complex() arg can't be converted to complex");
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000602 return NULL;
603 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000604 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000605 if (PyInstance_Check(r)) {
606 static PyObject *complexstr;
607 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000608 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000609 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000610 if (complexstr == NULL)
611 return NULL;
612 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000614 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000616 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000617 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000618 if (args == NULL)
619 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000620 r = PyEval_CallObject(f, args);
621 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000622 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000623 if (r == NULL)
624 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000625 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000626 }
627 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628 if (PyComplex_Check(r)) {
629 cr = ((PyComplexObject*)r)->cval;
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 Rossumc6472e91997-03-31 17:15:43 +0000633 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000634 else {
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000635 tmp = PyNumber_Float(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000636 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000637 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000638 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000639 if (tmp == NULL)
640 return NULL;
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000641 if (!PyFloat_Check(tmp)) {
642 PyErr_SetString(PyExc_TypeError,
643 "float(r) didn't return a float");
644 Py_DECREF(tmp);
645 return NULL;
646 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000647 cr.real = PyFloat_AsDouble(tmp);
648 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000649 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000650 }
651 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000652 ci.real = 0.0;
653 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000654 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655 else if (PyComplex_Check(i))
656 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000657 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000658 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000659 if (tmp == NULL)
660 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 ci.real = PyFloat_AsDouble(tmp);
662 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000663 ci.imag = 0.;
664 }
665 cr.real -= ci.imag;
666 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000668}
669
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000670static char complex_doc[] =
671"complex(real[, imag]) -> complex number\n\
672\n\
673Create a complex number from a real part and an optional imaginary part.\n\
674This is equivalent to (real + imag*1j) where imag defaults to 0.";
675
676
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000677#endif
678
Guido van Rossum79f25d91997-04-29 20:08:16 +0000679static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000680builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000681{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000682 static char *attrlist[] = {"__members__", "__methods__", NULL};
683 PyObject *v = NULL, *l = NULL, *m = NULL;
684 PyObject *d, *x;
685 int i;
686 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000687
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000689 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000690 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000691 x = PyEval_GetLocals();
692 if (x == NULL)
693 goto error;
694 l = PyMapping_Keys(x);
695 if (l == NULL)
696 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000697 }
698 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000699 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000700 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000701 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000702 else {
703 l = PyMapping_Keys(d);
704 if (l == NULL)
705 PyErr_Clear();
706 Py_DECREF(d);
707 }
708 if (l == NULL) {
709 l = PyList_New(0);
710 if (l == NULL)
711 goto error;
712 }
713 for (s = attrlist; *s != NULL; s++) {
714 m = PyObject_GetAttrString(v, *s);
715 if (m == NULL) {
716 PyErr_Clear();
717 continue;
718 }
719 for (i = 0; ; i++) {
720 x = PySequence_GetItem(m, i);
721 if (x == NULL) {
722 PyErr_Clear();
723 break;
724 }
725 if (PyList_Append(l, x) != 0) {
726 Py_DECREF(x);
727 Py_DECREF(m);
728 goto error;
729 }
730 Py_DECREF(x);
731 }
732 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000733 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000734 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000735 if (PyList_Sort(l) != 0)
736 goto error;
737 return l;
738 error:
739 Py_XDECREF(l);
740 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000741}
742
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000743static char dir_doc[] =
744"dir([object]) -> list of strings\n\
745\n\
746Return an alphabetized list of names comprising (some of) the attributes\n\
747of the given object. Without an argument, the names in the current scope\n\
748are listed. With an instance argument, only the instance attributes are\n\
749returned. With a class argument, attributes of the base class are not\n\
750returned. For other types or arguments, this may list members or methods.";
751
752
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000754builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000755{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000757
Guido van Rossum79f25d91997-04-29 20:08:16 +0000758 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000759 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000760 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000761}
762
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000763static char divmod_doc[] =
764"divmod(x, y) -> (div, mod)\n\
765\n\
766Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
767
768
Guido van Rossum79f25d91997-04-29 20:08:16 +0000769static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000770builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000771{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 PyObject *cmd;
773 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000775
Guido van Rossum79f25d91997-04-29 20:08:16 +0000776 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 &PyDict_Type, &globals,
779 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000780 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000781 if (globals == Py_None) {
782 globals = PyEval_GetGlobals();
783 if (locals == Py_None)
784 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000785 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000786 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000787 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
789 if (PyDict_SetItemString(globals, "__builtins__",
790 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000791 return NULL;
792 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793 if (PyCode_Check(cmd))
794 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000795 if (!PyString_Check(cmd) &&
796 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000798 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000799 return NULL;
800 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000801 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000802 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000803 while (*str == ' ' || *str == '\t')
804 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000805 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000806}
807
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000808static char eval_doc[] =
809"eval(source[, globals[, locals]]) -> value\n\
810\n\
811Evaluate the source in the context of globals and locals.\n\
812The source may be a string representing a Python expression\n\
813or a code object as returned by compile().\n\
814The globals and locals are dictionaries, defaulting to the current\n\
815globals and locals. If only globals is given, locals defaults to it.";
816
817
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000819builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000820{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000821 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 PyObject *globals = Py_None, *locals = Py_None;
823 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000824 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000825
Guido van Rossum79f25d91997-04-29 20:08:16 +0000826 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000827 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000828 &PyDict_Type, &globals,
829 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000830 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000831 if (globals == Py_None) {
832 globals = PyEval_GetGlobals();
833 if (locals == Py_None)
834 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000835 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000837 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
839 if (PyDict_SetItemString(globals, "__builtins__",
840 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000841 return NULL;
842 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000844 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000846 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000848 return NULL;
849 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000850 if (PyEval_GetNestedScopes()) {
851 PyCompilerFlags cf;
852 cf.cf_nested_scopes = 1;
Tim Peters748b8bb2001-04-28 08:20:22 +0000853 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000854 locals, 1, &cf);
Tim Peters748b8bb2001-04-28 08:20:22 +0000855 } else
856 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000857 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000858 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000859}
860
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861static char execfile_doc[] =
862"execfile(filename[, globals[, locals]])\n\
863\n\
864Read and execute a Python script from a file.\n\
865The globals and locals are dictionaries, defaulting to the current\n\
866globals and locals. If only globals is given, locals defaults to it.";
867
868
Guido van Rossum79f25d91997-04-29 20:08:16 +0000869static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000870builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000871{
Guido van Rossum950ff291998-06-29 13:38:57 +0000872 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000874
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000875 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000876 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000877 result = PyObject_GetAttr(v, name);
878 if (result == NULL && dflt != NULL) {
879 PyErr_Clear();
880 Py_INCREF(dflt);
881 result = dflt;
882 }
883 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000884}
885
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000886static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000887"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000888\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000889Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
890When a default argument is given, it is returned when the attribute doesn't\n\
891exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000892
893
Guido van Rossum79f25d91997-04-29 20:08:16 +0000894static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000895builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000896{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000897 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000898
Guido van Rossum43713e52000-02-29 13:59:29 +0000899 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000900 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901 d = PyEval_GetGlobals();
902 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000903 return d;
904}
905
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000906static char globals_doc[] =
907"globals() -> dictionary\n\
908\n\
909Return the dictionary containing the current scope's global variables.";
910
911
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000913builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000914{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 PyObject *v;
916 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000917
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000918 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000919 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000921 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000923 Py_INCREF(Py_False);
924 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000925 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000927 Py_INCREF(Py_True);
928 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000929}
930
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000931static char hasattr_doc[] =
932"hasattr(object, name) -> Boolean\n\
933\n\
934Return whether the object has an attribute with the given name.\n\
935(This is done by calling getattr(object, name) and catching exceptions.)";
936
937
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000939builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000940{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000942
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000944 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000945 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000946}
947
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000948static char id_doc[] =
949"id(object) -> integer\n\
950\n\
951Return the identity of an object. This is guaranteed to be unique among\n\
952simultaneously existing objects. (Hint: it's the object's memory address.)";
953
954
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000956builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000957{
958 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000959 PyObject *it; /* the iterator object */
960 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000961 } sequence;
962
Guido van Rossum79f25d91997-04-29 20:08:16 +0000963 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000964 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000965 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000966 register int i, j;
967
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970 PyErr_SetString(PyExc_TypeError,
971 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000972 return NULL;
973 }
974
Guido van Rossum79f25d91997-04-29 20:08:16 +0000975 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000976 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000977
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000978 if (func == Py_None && n == 1) {
979 /* map(None, S) is the same as list(S). */
980 return PySequence_List(PyTuple_GetItem(args, 1));
981 }
982
Tim Peters4e9afdc2001-05-03 23:54:49 +0000983 /* Get space for sequence descriptors. Must NULL out the iterator
984 * pointers so that jumping to Fail_2 later doesn't see trash.
985 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
987 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000988 return NULL;
989 }
990 for (i = 0; i < n; ++i) {
991 seqs[i].it = (PyObject*)NULL;
992 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000993 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000994
Tim Peters4e9afdc2001-05-03 23:54:49 +0000995 /* Do a first pass to obtain iterators for the arguments, and set len
996 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000997 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000998 len = 0;
999 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
1000 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001001 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +00001002
Tim Peters4e9afdc2001-05-03 23:54:49 +00001003 /* Get iterator. */
1004 curseq = PyTuple_GetItem(args, i+1);
1005 sqp->it = PyObject_GetIter(curseq);
1006 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001007 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001008 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001009 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +00001010 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001011 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001012 goto Fail_2;
1013 }
1014
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 /* Update len. */
1016 curlen = -1; /* unknown */
1017 if (PySequence_Check(curseq) &&
1018 curseq->ob_type->tp_as_sequence->sq_length) {
1019 curlen = PySequence_Size(curseq);
1020 if (curlen < 0)
1021 PyErr_Clear();
1022 }
Tim Peters748b8bb2001-04-28 08:20:22 +00001023 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +00001024 curlen = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001025 if (curlen > len)
1026 len = curlen;
1027 }
1028
Tim Peters4e9afdc2001-05-03 23:54:49 +00001029 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001030 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001031 goto Fail_2;
1032
Tim Peters4e9afdc2001-05-03 23:54:49 +00001033 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001034 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001035 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001036 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001037
Guido van Rossum79f25d91997-04-29 20:08:16 +00001038 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001039 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001040 else if ((alist = PyTuple_New(n)) == NULL)
1041 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001042
1043 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001044 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 Py_INCREF(Py_None);
1046 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001047 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001048 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001049 item = PyIter_Next(sqp->it);
1050 if (item)
1051 ++numactive;
1052 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001053 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001054 Py_XDECREF(alist);
1055 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001056 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001057 Py_INCREF(Py_None);
1058 item = Py_None;
1059 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001060 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001061 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001062 if (alist)
1063 PyTuple_SET_ITEM(alist, j, item);
1064 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001065 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001066 }
1067
Guido van Rossum32120311995-07-10 13:52:21 +00001068 if (!alist)
1069 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001070
Tim Peters4e9afdc2001-05-03 23:54:49 +00001071 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001072 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001073 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001074 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001075
Guido van Rossum79f25d91997-04-29 20:08:16 +00001076 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001077 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001078 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001079 value = PyEval_CallObject(func, alist);
1080 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001081 if (value == NULL)
1082 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001083 }
1084 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001085 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001086 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001087 if (status < 0)
1088 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001089 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001090 else if (PyList_SetItem(result, i, value) < 0)
1091 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001092 }
1093
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001094 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1095 goto Fail_1;
1096
Tim Peters4e9afdc2001-05-03 23:54:49 +00001097 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001098
Guido van Rossum12d12c51993-10-26 17:58:25 +00001099Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001101Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001102 result = NULL;
1103Succeed:
1104 assert(seqs);
1105 for (i = 0; i < n; ++i)
1106 Py_XDECREF(seqs[i].it);
1107 PyMem_DEL(seqs);
1108 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001109}
1110
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001111static char map_doc[] =
1112"map(function, sequence[, sequence, ...]) -> list\n\
1113\n\
1114Return a list of the results of applying the function to the items of\n\
1115the argument sequence(s). If more than one sequence is given, the\n\
1116function is called with an argument list consisting of the corresponding\n\
1117item of each sequence, substituting None for missing values when not all\n\
1118sequences have the same length. If the function is None, return a list of\n\
1119the items of the sequence (or a list of tuples if more than one sequence).";
1120
1121
Guido van Rossum79f25d91997-04-29 20:08:16 +00001122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001123builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001124{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125 PyObject *v;
1126 PyObject *name;
1127 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001128
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001129 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001130 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001131 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001132 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001133 Py_INCREF(Py_None);
1134 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001135}
1136
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001137static char setattr_doc[] =
1138"setattr(object, name, value)\n\
1139\n\
1140Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1141``x.y = v''.";
1142
1143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001145builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001146{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001147 PyObject *v;
1148 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001149
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001150 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001151 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001153 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154 Py_INCREF(Py_None);
1155 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001156}
1157
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001158static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001159"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001160\n\
1161Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1162``del x.y''.";
1163
1164
Guido van Rossum79f25d91997-04-29 20:08:16 +00001165static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001166builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001167{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001169 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001170
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001172 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001174 if (x == -1)
1175 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001177}
1178
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179static char hash_doc[] =
1180"hash(object) -> integer\n\
1181\n\
1182Return a hash value for the object. Two objects with the same value have\n\
1183the same hash value. The reverse is not necessarily true, but likely.";
1184
1185
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001187builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001188{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189 PyObject *v;
1190 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001191
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001193 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001194
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001195 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001196 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001197 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001198 "hex() argument can't be converted to hex");
1199 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001200 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001201 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001202}
1203
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001204static char hex_doc[] =
1205"hex(number) -> string\n\
1206\n\
1207Return the hexadecimal representation of an integer or long integer.";
1208
1209
Tim Petersdbd9ba62000-07-09 03:09:57 +00001210static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001211
Guido van Rossum79f25d91997-04-29 20:08:16 +00001212static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001213builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001214{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001216 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001217 PyObject *res;
1218 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001219
1220 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001221 if (line == NULL)
1222 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001223 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001224 return NULL;
1225 while (*str == ' ' || *str == '\t')
1226 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227 globals = PyEval_GetGlobals();
1228 locals = PyEval_GetLocals();
1229 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1230 if (PyDict_SetItemString(globals, "__builtins__",
1231 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001232 return NULL;
1233 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001234 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001235 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001236 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001237}
1238
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001239static char input_doc[] =
1240"input([prompt]) -> value\n\
1241\n\
1242Equivalent to eval(raw_input(prompt)).";
1243
1244
Guido van Rossume8811f81997-02-14 15:48:05 +00001245static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001246builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001247{
1248 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001249 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001250 return NULL;
1251 Py_INCREF(s);
1252 PyString_InternInPlace(&s);
1253 return s;
1254}
1255
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001256static char intern_doc[] =
1257"intern(string) -> string\n\
1258\n\
1259``Intern'' the given string. This enters the string in the (global)\n\
1260table of interned strings whose purpose is to speed up dictionary lookups.\n\
1261Return the string itself or the previously interned string object with the\n\
1262same value.";
1263
1264
Guido van Rossum79f25d91997-04-29 20:08:16 +00001265static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001266builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001267{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001268 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001269 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001270
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001271 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001272 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001273 if (base == -909)
1274 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001275 else if (PyString_Check(v))
1276 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1277 else if (PyUnicode_Check(v))
1278 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1279 PyUnicode_GET_SIZE(v),
1280 base);
1281 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001282 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001283 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001284 return NULL;
1285 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001286}
1287
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001288static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001289"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001290\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001291Convert a string or number to an integer, if possible. A floating point\n\
1292argument will be truncated towards zero (this does not include a string\n\
1293representation of a floating point number!) When converting a string, use\n\
1294the optional base. It is an error to supply a base when converting a\n\
1295non-string.";
1296
1297
1298static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001299builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001300{
1301 PyObject *v;
1302 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001303
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001304 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1305 return NULL;
1306 if (base == -909)
1307 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001308 else if (PyString_Check(v))
1309 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1310 else if (PyUnicode_Check(v))
1311 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1312 PyUnicode_GET_SIZE(v),
1313 base);
1314 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001315 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001316 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001317 return NULL;
1318 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001319}
1320
1321static char long_doc[] =
1322"long(x) -> long integer\n\
1323long(x, base) -> long integer\n\
1324\n\
1325Convert a string or number to a long integer, if possible. A floating\n\
1326point argument will be truncated towards zero (this does not include a\n\
1327string representation of a floating point number!) When converting a\n\
1328string, use the given base. It is an error to supply a base when\n\
1329converting a non-string.";
1330
1331
1332static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001333builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001334{
1335 PyObject *v;
1336
1337 if (!PyArg_ParseTuple(args, "O:float", &v))
1338 return NULL;
1339 if (PyString_Check(v))
1340 return PyFloat_FromString(v, NULL);
1341 return PyNumber_Float(v);
1342}
1343
1344static char float_doc[] =
1345"float(x) -> floating point number\n\
1346\n\
1347Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001348
1349
Guido van Rossum79f25d91997-04-29 20:08:16 +00001350static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001351builtin_iter(PyObject *self, PyObject *args)
1352{
1353 PyObject *v, *w = NULL;
1354
1355 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1356 return NULL;
1357 if (w == NULL)
1358 return PyObject_GetIter(v);
1359 if (!PyCallable_Check(v)) {
1360 PyErr_SetString(PyExc_TypeError,
1361 "iter(v, w): v must be callable");
1362 return NULL;
1363 }
1364 return PyCallIter_New(v, w);
1365}
1366
1367static char iter_doc[] =
1368"iter(collection) -> iterator\n\
1369iter(callable, sentinel) -> iterator\n\
1370\n\
1371Get an iterator from an object. In the first form, the argument must\n\
1372supply its own iterator, or be a sequence.\n\
1373In the second form, the callable is called until it returns the sentinel.";
1374
1375
1376static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001377builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001378{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001379 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001380 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001381
Guido van Rossum79f25d91997-04-29 20:08:16 +00001382 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001383 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001384 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001385 if (res < 0 && PyErr_Occurred())
1386 return NULL;
1387 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001388}
1389
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001390static char len_doc[] =
1391"len(object) -> integer\n\
1392\n\
1393Return the number of items of a sequence or mapping.";
1394
1395
Guido van Rossum79f25d91997-04-29 20:08:16 +00001396static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001397builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001398{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001399 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001400
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001402 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001403 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001404}
1405
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001406static char list_doc[] =
1407"list(sequence) -> list\n\
1408\n\
1409Return a new list whose items are the same as those of the argument sequence.";
1410
Guido van Rossum8861b741996-07-30 16:49:37 +00001411
1412static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001413builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001414{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001415 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001416
Guido van Rossum09df08a1998-05-22 00:51:39 +00001417 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001418
Guido van Rossum09df08a1998-05-22 00:51:39 +00001419 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1420 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001421
Guido van Rossum09df08a1998-05-22 00:51:39 +00001422 /* This swapping of stop and start is to maintain similarity with
1423 range(). */
1424 if (stop == NULL) {
1425 stop = start;
1426 start = NULL;
1427 }
1428 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001429}
1430
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001431static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001432"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001433\n\
1434Create a slice object. This is used for slicing by the Numeric extensions.";
1435
1436
Guido van Rossum79f25d91997-04-29 20:08:16 +00001437static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001438builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001439{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001440 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001441
Guido van Rossum43713e52000-02-29 13:59:29 +00001442 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001443 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001444 d = PyEval_GetLocals();
1445 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001446 return d;
1447}
1448
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449static char locals_doc[] =
1450"locals() -> dictionary\n\
1451\n\
1452Return the dictionary containing the current scope's local variables.";
1453
1454
Guido van Rossum79f25d91997-04-29 20:08:16 +00001455static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001456min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001457{
Tim Petersc3074532001-05-03 07:00:32 +00001458 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001459
Guido van Rossum79f25d91997-04-29 20:08:16 +00001460 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001461 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001463 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001464
1465 it = PyObject_GetIter(v);
1466 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001467 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001468
1469 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001470 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001471 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001472 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001473 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001474 Py_XDECREF(w);
1475 Py_DECREF(it);
1476 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001477 }
Tim Petersc3074532001-05-03 07:00:32 +00001478 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001479 }
Tim Petersc3074532001-05-03 07:00:32 +00001480
Guido van Rossum2d951851994-08-29 12:52:16 +00001481 if (w == NULL)
1482 w = x;
1483 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001484 int cmp = PyObject_RichCompareBool(x, w, op);
1485 if (cmp > 0) {
1486 Py_DECREF(w);
1487 w = x;
1488 }
1489 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001490 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001491 Py_DECREF(w);
1492 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001493 return NULL;
1494 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001495 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001497 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001498 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001499 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001501 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001502 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001503 return w;
1504}
1505
Guido van Rossum79f25d91997-04-29 20:08:16 +00001506static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001507builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001508{
Guido van Rossum53451b32001-01-17 15:47:24 +00001509 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001510}
1511
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001512static char min_doc[] =
1513"min(sequence) -> value\n\
1514min(a, b, c, ...) -> value\n\
1515\n\
1516With a single sequence argument, return its smallest item.\n\
1517With two or more arguments, return the smallest argument.";
1518
1519
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001521builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001522{
Guido van Rossum53451b32001-01-17 15:47:24 +00001523 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001524}
1525
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001526static char max_doc[] =
1527"max(sequence) -> value\n\
1528max(a, b, c, ...) -> value\n\
1529\n\
1530With a single sequence argument, return its largest item.\n\
1531With two or more arguments, return the largest argument.";
1532
1533
Guido van Rossum79f25d91997-04-29 20:08:16 +00001534static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001535builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001536{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001537 PyObject *v;
1538 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001539
Guido van Rossum79f25d91997-04-29 20:08:16 +00001540 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001541 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001542 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1543 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001545 "oct() argument can't be converted to oct");
1546 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001547 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001548 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001549}
1550
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001551static char oct_doc[] =
1552"oct(number) -> string\n\
1553\n\
1554Return the octal representation of an integer or long integer.";
1555
1556
Guido van Rossum79f25d91997-04-29 20:08:16 +00001557static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001558builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001559{
Mark Hammondef8b6542001-05-13 08:04:26 +00001560 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001561 char *mode = "r";
1562 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001563 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001564
Mark Hammondef8b6542001-05-13 08:04:26 +00001565 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1566 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001567 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001569 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001570 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001571 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001572 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001573}
1574
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001575static char open_doc[] =
1576"open(filename[, mode[, buffering]]) -> file object\n\
1577\n\
1578Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1579writing or appending. The file will be created if it doesn't exist\n\
1580when opened for writing or appending; it will be truncated when\n\
1581opened for writing. Add a 'b' to the mode for binary files.\n\
1582Add a '+' to the mode to allow simultaneous reading and writing.\n\
1583If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1584buffered, and larger numbers specify the buffer size.";
1585
1586
Guido van Rossum79f25d91997-04-29 20:08:16 +00001587static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001588builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001589{
Guido van Rossum09095f32000-03-10 23:00:52 +00001590 PyObject *obj;
1591 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001592 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001593
Guido van Rossum09095f32000-03-10 23:00:52 +00001594 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001595 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001596
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001597 if (PyString_Check(obj)) {
1598 size = PyString_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)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001601 return PyInt_FromLong(ord);
1602 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001603 } else if (PyUnicode_Check(obj)) {
1604 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001605 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001606 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001607 return PyInt_FromLong(ord);
1608 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001609 } else {
1610 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001611 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001612 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001613 return NULL;
1614 }
1615
Guido van Rossumad991772001-01-12 16:03:05 +00001616 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001617 "ord() expected a character, "
1618 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001619 size);
1620 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001621}
1622
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001623static char ord_doc[] =
1624"ord(c) -> integer\n\
1625\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001626Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001627
1628
Guido van Rossum79f25d91997-04-29 20:08:16 +00001629static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001630builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001631{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001632 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001633
Guido van Rossum79f25d91997-04-29 20:08:16 +00001634 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001635 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001636 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001637}
1638
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001639static char pow_doc[] =
1640"pow(x, y[, z]) -> number\n\
1641\n\
1642With two arguments, equivalent to x**y. With three arguments,\n\
1643equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1644
1645
Guido van Rossum124eff01999-02-23 16:11:01 +00001646/* Return number of items in range/xrange (lo, hi, step). step > 0
1647 * required. Return a value < 0 if & only if the true value is too
1648 * large to fit in a signed long.
1649 */
1650static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001651get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001652{
1653 /* -------------------------------------------------------------
1654 If lo >= hi, the range is empty.
1655 Else if n values are in the range, the last one is
1656 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1657 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1658 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1659 the RHS is non-negative and so truncation is the same as the
1660 floor. Letting M be the largest positive long, the worst case
1661 for the RHS numerator is hi=M, lo=-M-1, and then
1662 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1663 precision to compute the RHS exactly.
1664 ---------------------------------------------------------------*/
1665 long n = 0;
1666 if (lo < hi) {
1667 unsigned long uhi = (unsigned long)hi;
1668 unsigned long ulo = (unsigned long)lo;
1669 unsigned long diff = uhi - ulo - 1;
1670 n = (long)(diff / (unsigned long)step + 1);
1671 }
1672 return n;
1673}
1674
Guido van Rossum79f25d91997-04-29 20:08:16 +00001675static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001676builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001677{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001678 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001679 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001680 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001681
Guido van Rossum79f25d91997-04-29 20:08:16 +00001682 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001683
Guido van Rossum79f25d91997-04-29 20:08:16 +00001684 if (PyTuple_Size(args) <= 1) {
1685 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001686 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687 &ihigh))
1688 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001689 }
1690 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001691 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001692 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001693 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001694 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001695 }
1696 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001697 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001698 return NULL;
1699 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001700 if (istep > 0)
1701 bign = get_len_of_range(ilow, ihigh, istep);
1702 else
1703 bign = get_len_of_range(ihigh, ilow, -istep);
1704 n = (int)bign;
1705 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001706 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001707 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001708 return NULL;
1709 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001710 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001711 if (v == NULL)
1712 return NULL;
1713 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001715 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001716 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001717 return NULL;
1718 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001719 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001720 ilow += istep;
1721 }
1722 return v;
1723}
1724
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001725static char range_doc[] =
1726"range([start,] stop[, step]) -> list of integers\n\
1727\n\
1728Return a list containing an arithmetic progression of integers.\n\
1729range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1730When step is given, it specifies the increment (or decrement).\n\
1731For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1732These are exactly the valid indices for a list of 4 elements.";
1733
1734
Guido van Rossum79f25d91997-04-29 20:08:16 +00001735static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001736builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001737{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001738 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001739 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001740
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 if (PyTuple_Size(args) <= 1) {
1742 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001743 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001744 &ihigh))
1745 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001746 }
1747 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001749 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001750 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001751 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001752 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001753 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001754 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001755 return NULL;
1756 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001757 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001758 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001759 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001760 n = get_len_of_range(ihigh, ilow, -istep);
1761 if (n < 0) {
1762 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001763 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001764 return NULL;
1765 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001767}
1768
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001769static char xrange_doc[] =
1770"xrange([start,] stop[, step]) -> xrange object\n\
1771\n\
1772Like range(), but instead of returning a list, returns an object that\n\
1773generates the numbers in the range on demand. This is slightly slower\n\
1774than range() but more memory efficient.";
1775
1776
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001778builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001779{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 PyObject *v = NULL;
1781 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782
Guido van Rossum79f25d91997-04-29 20:08:16 +00001783 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001784 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1786 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001787 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001788 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001789 char *prompt;
1790 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001791 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001792 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001794 if (po == NULL)
1795 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001797 if (prompt == NULL)
1798 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001799 }
1800 else {
1801 po = NULL;
1802 prompt = "";
1803 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804 s = PyOS_Readline(prompt);
1805 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001806 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001808 return NULL;
1809 }
1810 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001812 result = NULL;
1813 }
1814 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001815 size_t len = strlen(s);
1816 if (len > INT_MAX) {
1817 PyErr_SetString(PyExc_OverflowError, "input too long");
1818 result = NULL;
1819 }
1820 else {
1821 result = PyString_FromStringAndSize(s, (int)(len-1));
1822 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001823 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001824 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001825 return result;
1826 }
Guido van Rossum90933611991-06-07 16:10:43 +00001827 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001831 return NULL;
1832 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001833 if (Py_FlushLine() != 0 ||
1834 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001835 return NULL;
1836 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001838 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001839 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001840 return NULL;
1841 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001842 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001843}
1844
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001845static char raw_input_doc[] =
1846"raw_input([prompt]) -> string\n\
1847\n\
1848Read a string from standard input. The trailing newline is stripped.\n\
1849If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1850On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1851is printed without a trailing newline before reading.";
1852
1853
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001855builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001856{
Tim Peters15d81ef2001-05-04 04:39:21 +00001857 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001858
Guido van Rossum79f25d91997-04-29 20:08:16 +00001859 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001860 return NULL;
1861 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001862 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001863
Tim Peters15d81ef2001-05-04 04:39:21 +00001864 it = PyObject_GetIter(seq);
1865 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001866 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001867 "reduce() arg 2 must support iteration");
1868 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001869 return NULL;
1870 }
1871
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001873 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001874
Tim Peters15d81ef2001-05-04 04:39:21 +00001875 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001877
1878 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 Py_DECREF(args);
1880 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001881 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001882 }
1883
Tim Peters15d81ef2001-05-04 04:39:21 +00001884 op2 = PyIter_Next(it);
1885 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001886 if (PyErr_Occurred())
1887 goto Fail;
1888 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001889 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001890
Guido van Rossum2d951851994-08-29 12:52:16 +00001891 if (result == NULL)
1892 result = op2;
1893 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894 PyTuple_SetItem(args, 0, result);
1895 PyTuple_SetItem(args, 1, op2);
1896 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001897 goto Fail;
1898 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001899 }
1900
Guido van Rossum79f25d91997-04-29 20:08:16 +00001901 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001902
Guido van Rossum2d951851994-08-29 12:52:16 +00001903 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001905 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001906
Tim Peters15d81ef2001-05-04 04:39:21 +00001907 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001908 return result;
1909
Guido van Rossum2d951851994-08-29 12:52:16 +00001910Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001911 Py_XDECREF(args);
1912 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001913 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001914 return NULL;
1915}
1916
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001917static char reduce_doc[] =
1918"reduce(function, sequence[, initial]) -> value\n\
1919\n\
1920Apply a function of two arguments cumulatively to the items of a sequence,\n\
1921from left to right, so as to reduce the sequence to a single value.\n\
1922For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1923((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1924of the sequence in the calculation, and serves as a default when the\n\
1925sequence is empty.";
1926
1927
Guido van Rossum79f25d91997-04-29 20:08:16 +00001928static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001929builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001930{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001932
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001934 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001935 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001936}
1937
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001938static char reload_doc[] =
1939"reload(module) -> module\n\
1940\n\
1941Reload the module. The module must have been successfully imported before.";
1942
1943
Guido van Rossum79f25d91997-04-29 20:08:16 +00001944static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001945builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001946{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001947 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001948
Guido van Rossum79f25d91997-04-29 20:08:16 +00001949 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001950 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001952}
1953
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001954static char repr_doc[] =
1955"repr(object) -> string\n\
1956\n\
1957Return the canonical string representation of the object.\n\
1958For most object types, eval(repr(object)) == object.";
1959
1960
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001962builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001963{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001964 double x;
1965 double f;
1966 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001967 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001968
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001970 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001971 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001972 i = abs(ndigits);
1973 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001974 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001975 if (ndigits < 0)
1976 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001977 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001978 x *= f;
1979 if (x >= 0.0)
1980 x = floor(x + 0.5);
1981 else
1982 x = ceil(x - 0.5);
1983 if (ndigits < 0)
1984 x *= f;
1985 else
1986 x /= f;
1987 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001988}
1989
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001990static char round_doc[] =
1991"round(number[, ndigits]) -> floating point number\n\
1992\n\
1993Round a number to a given precision in decimal digits (default 0 digits).\n\
1994This always returns a floating point number. Precision may be negative.";
1995
1996
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001998builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001999{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002000 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002001
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00002003 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002004 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002005}
2006
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002007static char str_doc[] =
2008"str(object) -> string\n\
2009\n\
2010Return a nice string representation of the object.\n\
2011If the argument is a string, the return value is the same object.";
2012
2013
Guido van Rossum79f25d91997-04-29 20:08:16 +00002014static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002015builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00002016{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002017 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002018
Guido van Rossum79f25d91997-04-29 20:08:16 +00002019 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002020 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00002021 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00002022}
2023
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002024static char tuple_doc[] =
2025"tuple(sequence) -> list\n\
2026\n\
2027Return a tuple whose items are the same as those of the argument sequence.\n\
2028If the argument is a tuple, the return value is the same object.";
2029
2030
Guido van Rossum79f25d91997-04-29 20:08:16 +00002031static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002032builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002033{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002034 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002035
Guido van Rossum79f25d91997-04-29 20:08:16 +00002036 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002037 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002038 v = (PyObject *)v->ob_type;
2039 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002040 return v;
2041}
2042
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002043static char type_doc[] =
2044"type(object) -> type object\n\
2045\n\
2046Return the type of the object.";
2047
2048
Guido van Rossum79f25d91997-04-29 20:08:16 +00002049static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002050builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002051{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052 PyObject *v = NULL;
2053 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002054
Guido van Rossum79f25d91997-04-29 20:08:16 +00002055 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002056 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002057 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002058 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002059 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002060 if (!PyErr_Occurred())
2061 PyErr_SetString(PyExc_SystemError,
2062 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002063 }
2064 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002065 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002066 }
2067 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002068 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002069 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002070 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002071 "vars() argument must have __dict__ attribute");
2072 return NULL;
2073 }
2074 }
2075 return d;
2076}
2077
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002078static char vars_doc[] =
2079"vars([object]) -> dictionary\n\
2080\n\
2081Without arguments, equivalent to locals().\n\
2082With an argument, equivalent to object.__dict__.";
2083
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002084static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002085builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002086{
2087 PyObject *inst;
2088 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002089 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002090
Guido van Rossum43713e52000-02-29 13:59:29 +00002091 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002092 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002093
Guido van Rossum823649d2001-03-21 18:40:58 +00002094 retval = PyObject_IsInstance(inst, cls);
2095 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002096 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002097 return PyInt_FromLong(retval);
2098}
2099
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002100static char isinstance_doc[] =
2101"isinstance(object, class-or-type) -> Boolean\n\
2102\n\
2103Return whether an object is an instance of a class or of a subclass thereof.\n\
2104With a type as second argument, return whether that is the object's type.";
2105
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002106
2107static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002108builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002109{
2110 PyObject *derived;
2111 PyObject *cls;
2112 int retval;
2113
Guido van Rossum43713e52000-02-29 13:59:29 +00002114 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002115 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002116
Guido van Rossum823649d2001-03-21 18:40:58 +00002117 retval = PyObject_IsSubclass(derived, cls);
2118 if (retval < 0)
2119 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002120 return PyInt_FromLong(retval);
2121}
2122
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002123static char issubclass_doc[] =
2124"issubclass(C, B) -> Boolean\n\
2125\n\
2126Return whether class C is a subclass (i.e., a derived class) of class B.";
2127
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002128
Barry Warsawbd599b52000-08-03 15:45:29 +00002129static PyObject*
2130builtin_zip(PyObject *self, PyObject *args)
2131{
2132 PyObject *ret;
2133 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002134 int i;
2135 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00002136
2137 if (itemsize < 1) {
2138 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002139 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002140 return NULL;
2141 }
2142 /* args must be a tuple */
2143 assert(PyTuple_Check(args));
2144
Tim Peters8572b4f2001-05-06 01:05:02 +00002145 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00002146 if ((ret = PyList_New(0)) == NULL)
2147 return NULL;
2148
Tim Peters8572b4f2001-05-06 01:05:02 +00002149 /* obtain iterators */
2150 itlist = PyTuple_New(itemsize);
2151 if (itlist == NULL)
2152 goto Fail_ret;
2153 for (i = 0; i < itemsize; ++i) {
2154 PyObject *item = PyTuple_GET_ITEM(args, i);
2155 PyObject *it = PyObject_GetIter(item);
2156 if (it == NULL) {
2157 if (PyErr_ExceptionMatches(PyExc_TypeError))
2158 PyErr_Format(PyExc_TypeError,
2159 "zip argument #%d must support iteration",
2160 i+1);
2161 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002162 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002163 PyTuple_SET_ITEM(itlist, i, it);
2164 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002165
Tim Peters8572b4f2001-05-06 01:05:02 +00002166 /* build result into ret list */
2167 for (;;) {
2168 int status;
2169 PyObject *next = PyTuple_New(itemsize);
2170 if (!next)
2171 goto Fail_ret_itlist;
2172
2173 for (i = 0; i < itemsize; i++) {
2174 PyObject *it = PyTuple_GET_ITEM(itlist, i);
2175 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002176 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002177 if (PyErr_Occurred()) {
2178 Py_DECREF(ret);
2179 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002180 }
2181 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002182 Py_DECREF(itlist);
2183 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00002184 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002185 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002186 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002187
2188 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00002189 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002190 if (status < 0)
2191 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002192 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002193
2194Fail_ret_itlist:
2195 Py_DECREF(itlist);
2196Fail_ret:
2197 Py_DECREF(ret);
2198 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002199}
2200
2201
2202static char zip_doc[] =
2203"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2204\n\
2205Return a list of tuples, where each tuple contains the i-th element\n\
2206from each of the argument sequences. The returned list is truncated\n\
2207in length to the length of the shortest argument sequence.";
2208
2209
Guido van Rossum79f25d91997-04-29 20:08:16 +00002210static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002211 {"__import__", builtin___import__, 1, import_doc},
2212 {"abs", builtin_abs, 1, abs_doc},
2213 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002214 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002215 {"callable", builtin_callable, 1, callable_doc},
2216 {"chr", builtin_chr, 1, chr_doc},
2217 {"cmp", builtin_cmp, 1, cmp_doc},
2218 {"coerce", builtin_coerce, 1, coerce_doc},
2219 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002220#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002221 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002222#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002223 {"delattr", builtin_delattr, 1, delattr_doc},
2224 {"dir", builtin_dir, 1, dir_doc},
2225 {"divmod", builtin_divmod, 1, divmod_doc},
2226 {"eval", builtin_eval, 1, eval_doc},
2227 {"execfile", builtin_execfile, 1, execfile_doc},
2228 {"filter", builtin_filter, 1, filter_doc},
2229 {"float", builtin_float, 1, float_doc},
2230 {"getattr", builtin_getattr, 1, getattr_doc},
2231 {"globals", builtin_globals, 1, globals_doc},
2232 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2233 {"hash", builtin_hash, 1, hash_doc},
2234 {"hex", builtin_hex, 1, hex_doc},
2235 {"id", builtin_id, 1, id_doc},
2236 {"input", builtin_input, 1, input_doc},
2237 {"intern", builtin_intern, 1, intern_doc},
2238 {"int", builtin_int, 1, int_doc},
2239 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2240 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002241 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002242 {"len", builtin_len, 1, len_doc},
2243 {"list", builtin_list, 1, list_doc},
2244 {"locals", builtin_locals, 1, locals_doc},
2245 {"long", builtin_long, 1, long_doc},
2246 {"map", builtin_map, 1, map_doc},
2247 {"max", builtin_max, 1, max_doc},
2248 {"min", builtin_min, 1, min_doc},
2249 {"oct", builtin_oct, 1, oct_doc},
2250 {"open", builtin_open, 1, open_doc},
2251 {"ord", builtin_ord, 1, ord_doc},
2252 {"pow", builtin_pow, 1, pow_doc},
2253 {"range", builtin_range, 1, range_doc},
2254 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2255 {"reduce", builtin_reduce, 1, reduce_doc},
2256 {"reload", builtin_reload, 1, reload_doc},
2257 {"repr", builtin_repr, 1, repr_doc},
2258 {"round", builtin_round, 1, round_doc},
2259 {"setattr", builtin_setattr, 1, setattr_doc},
2260 {"slice", builtin_slice, 1, slice_doc},
2261 {"str", builtin_str, 1, str_doc},
2262 {"tuple", builtin_tuple, 1, tuple_doc},
2263 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002264 {"unicode", builtin_unicode, 1, unicode_doc},
2265 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002266 {"vars", builtin_vars, 1, vars_doc},
2267 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002268 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002269 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002270};
2271
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002272static char builtin_doc[] =
2273"Built-in functions, exceptions, and other objects.\n\
2274\n\
2275Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2276
Guido van Rossum25ce5661997-08-02 03:10:38 +00002277PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002278_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002279{
Fred Drake5550de32000-06-20 04:54:19 +00002280 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002281 mod = Py_InitModule4("__builtin__", builtin_methods,
2282 builtin_doc, (PyObject *)NULL,
2283 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002284 if (mod == NULL)
2285 return NULL;
2286 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002287 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2288 return NULL;
2289 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2290 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002291 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002292 Py_NotImplemented) < 0)
2293 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002294 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2295 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2296 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002297 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002298 }
2299 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002300
Guido van Rossum25ce5661997-08-02 03:10:38 +00002301 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002302}
2303
Guido van Rossume77a7571993-11-03 15:01:26 +00002304/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002305
Guido van Rossum79f25d91997-04-29 20:08:16 +00002306static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002307filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002308{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002309 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002310 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002311 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002312
Guido van Rossumb7b45621995-08-04 04:07:45 +00002313 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002314 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002315 return tuple;
2316 }
2317
Guido van Rossum79f25d91997-04-29 20:08:16 +00002318 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002319 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002320
Guido van Rossum12d12c51993-10-26 17:58:25 +00002321 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002322 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002323 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002324
Guido van Rossum79f25d91997-04-29 20:08:16 +00002325 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002326 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002327 if (func == Py_None) {
2328 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002329 good = item;
2330 }
2331 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002332 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002333 if (arg == NULL)
2334 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002335 good = PyEval_CallObject(func, arg);
2336 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002337 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002338 goto Fail_1;
2339 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002340 ok = PyObject_IsTrue(good);
2341 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002342 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002343 Py_INCREF(item);
2344 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002345 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002346 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347 }
2348
Tim Peters4324aa32001-05-28 22:30:08 +00002349 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002350 return NULL;
2351
Guido van Rossum12d12c51993-10-26 17:58:25 +00002352 return result;
2353
Guido van Rossum12d12c51993-10-26 17:58:25 +00002354Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002355 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002356 return NULL;
2357}
2358
2359
Guido van Rossume77a7571993-11-03 15:01:26 +00002360/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002361
Guido van Rossum79f25d91997-04-29 20:08:16 +00002362static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002363filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002364{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002365 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002366 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002367 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002368
Guido van Rossum79f25d91997-04-29 20:08:16 +00002369 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002370 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002371 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002372 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002373 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002374 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002375 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002376
Guido van Rossum12d12c51993-10-26 17:58:25 +00002377 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002379 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002380
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002381 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2382 if (item == NULL)
2383 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002384 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002385 if (arg == 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 good = PyEval_CallObject(func, arg);
2390 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002391 if (good == NULL) {
2392 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002393 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002394 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002395 ok = PyObject_IsTrue(good);
2396 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002397 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002398 PyString_AS_STRING((PyStringObject *)result)[j++] =
2399 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002400 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002401 }
2402
Guido van Rossum79f25d91997-04-29 20:08:16 +00002403 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002404 return NULL;
2405
Guido van Rossum12d12c51993-10-26 17:58:25 +00002406 return result;
2407
Guido van Rossum12d12c51993-10-26 17:58:25 +00002408Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002409 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002410 return NULL;
2411}