blob: ec55928cccc1efb17be3a5f2208330f348b7b7e8 [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
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000316#ifdef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000317 if (x < 0 || x > 0x10ffff) {
Guido van Rossum09095f32000-03-10 23:00:52 +0000318 PyErr_SetString(PyExc_ValueError,
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000319 "unichr() arg not in range(0x110000) "
320 "(wide Python build)");
Guido van Rossum09095f32000-03-10 23:00:52 +0000321 return NULL;
322 }
Marc-André Lemburgae21df52001-07-26 16:29:25 +0000323#else
324 if (x < 0 || x > 0xffff) {
325 PyErr_SetString(PyExc_ValueError,
326 "unichr() arg not in range(0x10000) "
327 "(narrow Python build)");
328 return NULL;
329 }
330#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000331
332 if (x <= 0xffff) {
333 /* UCS-2 character */
334 s[0] = (Py_UNICODE) x;
335 return PyUnicode_FromUnicode(s, 1);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000336 }
337 else {
Fredrik Lundh8f455852001-06-27 18:59:43 +0000338#ifndef Py_UNICODE_WIDE
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000339 /* UCS-4 character. store as two surrogate characters */
340 x -= 0x10000L;
341 s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
342 s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
343 return PyUnicode_FromUnicode(s, 2);
Guido van Rossum236d8b72001-06-26 23:12:25 +0000344#else
345 s[0] = (Py_UNICODE)x;
346 return PyUnicode_FromUnicode(s, 1);
Martin v. Löwis0ba70cc2001-06-26 22:22:37 +0000347#endif
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000348 }
Guido van Rossum09095f32000-03-10 23:00:52 +0000349}
350
351static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000352"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000353\n\
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000354Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000355
356
357static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000358builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000359{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000361 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000362
Guido van Rossum79f25d91997-04-29 20:08:16 +0000363 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000364 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000365 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000366 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000367 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000368}
369
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000370static char cmp_doc[] =
371"cmp(x, y) -> integer\n\
372\n\
373Return negative if x<y, zero if x==y, positive if x>y.";
374
375
Guido van Rossum79f25d91997-04-29 20:08:16 +0000376static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000377builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000378{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379 PyObject *v, *w;
380 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000381
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000383 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000385 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000386 res = Py_BuildValue("(OO)", v, w);
387 Py_DECREF(v);
388 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000389 return res;
390}
391
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000392static char coerce_doc[] =
393"coerce(x, y) -> None or (x1, y1)\n\
394\n\
395When x and y can be coerced to values of the same type, return a tuple\n\
396containing the coerced values. When they can't be coerced, return None.";
397
398
Guido van Rossum79f25d91997-04-29 20:08:16 +0000399static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000400builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000401{
402 char *str;
403 char *filename;
404 char *startstr;
405 int start;
Tim Peters5ba58662001-07-16 02:29:45 +0000406 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000407
Guido van Rossum79f25d91997-04-29 20:08:16 +0000408 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000409 return NULL;
410 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000411 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000412 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000413 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000414 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000415 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000416 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000418 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000419 return NULL;
420 }
Tim Peters5ba58662001-07-16 02:29:45 +0000421 cf.cf_flags = 0;
422 if (PyEval_MergeCompilerFlags(&cf))
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000423 return Py_CompileStringFlags(str, filename, start, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000424 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000425 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000426}
427
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000428static char compile_doc[] =
429"compile(source, filename, mode) -> code object\n\
430\n\
431Compile the source string (a Python module, statement or expression)\n\
432into a code object that can be executed by the exec statement or eval().\n\
433The filename will be used for run-time error messages.\n\
434The mode must be 'exec' to compile a module, 'single' to compile a\n\
435single (interactive) statement, or 'eval' to compile an expression.";
436
437
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000438#ifndef WITHOUT_COMPLEX
439
Guido van Rossum79f25d91997-04-29 20:08:16 +0000440static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000441complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000442{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000443 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000444 const char *s, *start;
445 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000446 double x=0.0, y=0.0, z;
447 int got_re=0, got_im=0, done=0;
448 int digit_or_dot;
449 int sw_error=0;
450 int sign;
451 char buffer[256]; /* For errors */
Barry Warsaw5ca1ef92000-08-18 05:02:16 +0000452 char s_buffer[256];
Guido van Rossum9e896b32000-04-05 20:11:21 +0000453 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000454
Guido van Rossum9e896b32000-04-05 20:11:21 +0000455 if (PyString_Check(v)) {
456 s = PyString_AS_STRING(v);
457 len = PyString_GET_SIZE(v);
458 }
459 else if (PyUnicode_Check(v)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +0000460 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
461 PyErr_SetString(PyExc_ValueError,
462 "complex() literal too large to convert");
463 return NULL;
464 }
Guido van Rossumad991772001-01-12 16:03:05 +0000465 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000466 PyUnicode_GET_SIZE(v),
Guido van Rossumad991772001-01-12 16:03:05 +0000467 s_buffer,
Guido van Rossum9e896b32000-04-05 20:11:21 +0000468 NULL))
469 return NULL;
470 s = s_buffer;
Trent Mick29b83812000-08-12 21:35:36 +0000471 len = (int)strlen(s);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000472 }
473 else if (PyObject_AsCharBuffer(v, &s, &len)) {
474 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000475 "complex() arg is not a string");
Guido van Rossum9e896b32000-04-05 20:11:21 +0000476 return NULL;
477 }
Guido van Rossum11950231999-03-25 21:16:07 +0000478
479 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000480 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000481 while (*s && isspace(Py_CHARMASK(*s)))
482 s++;
483 if (s[0] == '\0') {
484 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000485 "complex() arg is an empty string");
Guido van Rossum11950231999-03-25 21:16:07 +0000486 return NULL;
487 }
488
489 z = -1.0;
490 sign = 1;
491 do {
Guido van Rossumad991772001-01-12 16:03:05 +0000492
Guido van Rossum11950231999-03-25 21:16:07 +0000493 switch (*s) {
494
495 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000496 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000497 PyErr_SetString(
498 PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000499 "complex() arg contains a null byte");
Guido van Rossum11950231999-03-25 21:16:07 +0000500 return NULL;
501 }
502 if(!done) sw_error=1;
503 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000504
Guido van Rossum11950231999-03-25 21:16:07 +0000505 case '-':
506 sign = -1;
507 /* Fallthrough */
508 case '+':
509 if (done) sw_error=1;
510 s++;
511 if ( *s=='\0'||*s=='+'||*s=='-' ||
512 isspace(Py_CHARMASK(*s)) ) sw_error=1;
513 break;
514
515 case 'J':
516 case 'j':
517 if (got_im || done) {
518 sw_error = 1;
519 break;
520 }
521 if (z<0.0) {
522 y=sign;
523 }
524 else{
525 y=sign*z;
526 }
527 got_im=1;
528 s++;
529 if (*s!='+' && *s!='-' )
530 done=1;
531 break;
532
533 default:
534 if (isspace(Py_CHARMASK(*s))) {
535 while (*s && isspace(Py_CHARMASK(*s)))
536 s++;
537 if (s[0] != '\0')
538 sw_error=1;
539 else
540 done = 1;
541 break;
542 }
543 digit_or_dot =
544 (*s=='.' || isdigit(Py_CHARMASK(*s)));
545 if (done||!digit_or_dot) {
546 sw_error=1;
547 break;
548 }
549 errno = 0;
550 PyFPE_START_PROTECT("strtod", return 0)
551 z = strtod(s, &end) ;
552 PyFPE_END_PROTECT(z)
553 if (errno != 0) {
554 sprintf(buffer,
555 "float() out of range: %.150s", s);
556 PyErr_SetString(
557 PyExc_ValueError,
558 buffer);
559 return NULL;
560 }
561 s=end;
562 if (*s=='J' || *s=='j') {
Guido van Rossumad991772001-01-12 16:03:05 +0000563
Guido van Rossum11950231999-03-25 21:16:07 +0000564 break;
565 }
566 if (got_re) {
567 sw_error=1;
568 break;
569 }
570
571 /* accept a real part */
572 x=sign*z;
573 got_re=1;
574 if (got_im) done=1;
575 z = -1.0;
576 sign = 1;
577 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000578
Guido van Rossum11950231999-03-25 21:16:07 +0000579 } /* end of switch */
580
581 } while (*s!='\0' && !sw_error);
582
583 if (sw_error) {
584 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000585 "complex() arg is a malformed string");
Guido van Rossum11950231999-03-25 21:16:07 +0000586 return NULL;
587 }
588
589 return PyComplex_FromDoubles(x,y);
590}
591
592static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000593builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000594{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595 PyObject *r, *i, *tmp;
596 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000597 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000598 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000599
600 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000602 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000603 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000604 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000605 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000606 nbr->nb_float == NULL ||
607 (i != NULL &&
608 ((nbi = i->ob_type->tp_as_number) == NULL ||
609 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000611 "complex() arg can't be converted to complex");
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000612 return NULL;
613 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000614 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 if (PyInstance_Check(r)) {
616 static PyObject *complexstr;
617 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000618 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000619 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000620 if (complexstr == NULL)
621 return NULL;
622 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000623 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000624 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000626 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000628 if (args == NULL)
629 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000630 r = PyEval_CallObject(f, args);
631 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000632 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000633 if (r == NULL)
634 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000635 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000636 }
637 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000638 if (PyComplex_Check(r)) {
639 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000640 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000642 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000643 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000644 else {
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000645 tmp = PyNumber_Float(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000646 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000647 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000648 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000649 if (tmp == NULL)
650 return NULL;
Guido van Rossum8dabbf12001-01-19 02:11:59 +0000651 if (!PyFloat_Check(tmp)) {
652 PyErr_SetString(PyExc_TypeError,
653 "float(r) didn't return a float");
654 Py_DECREF(tmp);
655 return NULL;
656 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000657 cr.real = PyFloat_AsDouble(tmp);
658 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000659 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000660 }
661 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000662 ci.real = 0.0;
663 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000664 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665 else if (PyComplex_Check(i))
666 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000667 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000668 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000669 if (tmp == NULL)
670 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671 ci.real = PyFloat_AsDouble(tmp);
672 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000673 ci.imag = 0.;
674 }
675 cr.real -= ci.imag;
676 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000678}
679
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000680static char complex_doc[] =
681"complex(real[, imag]) -> complex number\n\
682\n\
683Create a complex number from a real part and an optional imaginary part.\n\
684This is equivalent to (real + imag*1j) where imag defaults to 0.";
685
686
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000687#endif
688
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000690builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000691{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000692 static char *attrlist[] = {"__members__", "__methods__", NULL};
693 PyObject *v = NULL, *l = NULL, *m = NULL;
694 PyObject *d, *x;
695 int i;
696 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000699 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000700 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000701 x = PyEval_GetLocals();
702 if (x == NULL)
703 goto error;
704 l = PyMapping_Keys(x);
705 if (l == NULL)
706 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000707 }
708 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000709 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000710 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000711 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000712 else {
713 l = PyMapping_Keys(d);
714 if (l == NULL)
715 PyErr_Clear();
716 Py_DECREF(d);
717 }
718 if (l == NULL) {
719 l = PyList_New(0);
720 if (l == NULL)
721 goto error;
722 }
723 for (s = attrlist; *s != NULL; s++) {
724 m = PyObject_GetAttrString(v, *s);
725 if (m == NULL) {
726 PyErr_Clear();
727 continue;
728 }
729 for (i = 0; ; i++) {
730 x = PySequence_GetItem(m, i);
731 if (x == NULL) {
732 PyErr_Clear();
733 break;
734 }
735 if (PyList_Append(l, x) != 0) {
736 Py_DECREF(x);
737 Py_DECREF(m);
738 goto error;
739 }
740 Py_DECREF(x);
741 }
742 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000743 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000744 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000745 if (PyList_Sort(l) != 0)
746 goto error;
747 return l;
748 error:
749 Py_XDECREF(l);
750 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000751}
752
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000753static char dir_doc[] =
754"dir([object]) -> list of strings\n\
755\n\
756Return an alphabetized list of names comprising (some of) the attributes\n\
757of the given object. Without an argument, the names in the current scope\n\
758are listed. With an instance argument, only the instance attributes are\n\
759returned. With a class argument, attributes of the base class are not\n\
760returned. For other types or arguments, this may list members or methods.";
761
762
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000764builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000765{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000767
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000769 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000770 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000771}
772
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000773static char divmod_doc[] =
774"divmod(x, y) -> (div, mod)\n\
775\n\
776Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
777
778
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000780builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000781{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782 PyObject *cmd;
783 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000784 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000785
Guido van Rossum79f25d91997-04-29 20:08:16 +0000786 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000787 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 &PyDict_Type, &globals,
789 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000790 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 if (globals == Py_None) {
792 globals = PyEval_GetGlobals();
793 if (locals == Py_None)
794 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000795 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000796 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000797 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
799 if (PyDict_SetItemString(globals, "__builtins__",
800 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000801 return NULL;
802 }
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000803 if (PyCode_Check(cmd)) {
804 if (PyTuple_GET_SIZE(((PyCodeObject *)cmd)->co_freevars) > 0) {
805 PyErr_SetString(PyExc_TypeError,
806 "code object passed to eval() may not contain free variables");
807 return NULL;
808 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000810 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000811 if (!PyString_Check(cmd) &&
812 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000814 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000815 return NULL;
816 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000817 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000818 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819 while (*str == ' ' || *str == '\t')
820 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000821 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000822}
823
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000824static char eval_doc[] =
825"eval(source[, globals[, locals]]) -> value\n\
826\n\
827Evaluate the source in the context of globals and locals.\n\
828The source may be a string representing a Python expression\n\
829or a code object as returned by compile().\n\
830The globals and locals are dictionaries, defaulting to the current\n\
831globals and locals. If only globals is given, locals defaults to it.";
832
833
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000835builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000836{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000837 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 PyObject *globals = Py_None, *locals = Py_None;
839 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000840 FILE* fp;
Tim Peters5ba58662001-07-16 02:29:45 +0000841 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000842
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000844 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000845 &PyDict_Type, &globals,
846 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000847 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000848 if (globals == Py_None) {
849 globals = PyEval_GetGlobals();
850 if (locals == Py_None)
851 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000852 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000854 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
856 if (PyDict_SetItemString(globals, "__builtins__",
857 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000858 return NULL;
859 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000861 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000863 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000865 return NULL;
866 }
Tim Peters5ba58662001-07-16 02:29:45 +0000867 cf.cf_flags = 0;
868 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000869 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000870 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000871 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000872 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000873 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000874 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000875}
876
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000877static char execfile_doc[] =
878"execfile(filename[, globals[, locals]])\n\
879\n\
880Read and execute a Python script from a file.\n\
881The globals and locals are dictionaries, defaulting to the current\n\
882globals and locals. If only globals is given, locals defaults to it.";
883
884
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000886builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000887{
Guido van Rossum950ff291998-06-29 13:38:57 +0000888 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000890
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000891 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000892 return NULL;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000893 if (PyUnicode_Check(name)) {
894 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
895 if (name == NULL)
896 return NULL;
897 }
898
899 if (!PyString_Check(name)) {
900 PyErr_SetString(PyExc_TypeError,
901 "attribute name must be string");
902 return NULL;
903 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000904 result = PyObject_GetAttr(v, name);
905 if (result == NULL && dflt != NULL) {
906 PyErr_Clear();
907 Py_INCREF(dflt);
908 result = dflt;
909 }
910 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000911}
912
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000913static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000914"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000915\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000916Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
917When a default argument is given, it is returned when the attribute doesn't\n\
918exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919
920
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000922builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000923{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000925
Guido van Rossum43713e52000-02-29 13:59:29 +0000926 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000927 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 d = PyEval_GetGlobals();
929 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000930 return d;
931}
932
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000933static char globals_doc[] =
934"globals() -> dictionary\n\
935\n\
936Return the dictionary containing the current scope's global variables.";
937
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000940builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000941{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942 PyObject *v;
943 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000945 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000946 return NULL;
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000947 if (PyUnicode_Check(name)) {
948 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
949 if (name == NULL)
950 return NULL;
951 }
952
953 if (!PyString_Check(name)) {
954 PyErr_SetString(PyExc_TypeError,
955 "attribute name must be string");
956 return NULL;
957 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000959 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000961 Py_INCREF(Py_False);
962 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000963 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000965 Py_INCREF(Py_True);
966 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000967}
968
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000969static char hasattr_doc[] =
970"hasattr(object, name) -> Boolean\n\
971\n\
972Return whether the object has an attribute with the given name.\n\
973(This is done by calling getattr(object, name) and catching exceptions.)";
974
975
Guido van Rossum79f25d91997-04-29 20:08:16 +0000976static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000977builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000978{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000980
Guido van Rossum79f25d91997-04-29 20:08:16 +0000981 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000982 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000983 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000984}
985
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000986static char id_doc[] =
987"id(object) -> integer\n\
988\n\
989Return the identity of an object. This is guaranteed to be unique among\n\
990simultaneously existing objects. (Hint: it's the object's memory address.)";
991
992
Guido van Rossum79f25d91997-04-29 20:08:16 +0000993static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000994builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000995{
996 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000997 PyObject *it; /* the iterator object */
998 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000999 } sequence;
1000
Guido van Rossum79f25d91997-04-29 20:08:16 +00001001 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001002 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004 register int i, j;
1005
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001007 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 PyErr_SetString(PyExc_TypeError,
1009 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001010 return NULL;
1011 }
1012
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001014 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001015
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001016 if (func == Py_None && n == 1) {
1017 /* map(None, S) is the same as list(S). */
1018 return PySequence_List(PyTuple_GetItem(args, 1));
1019 }
1020
Tim Peters4e9afdc2001-05-03 23:54:49 +00001021 /* Get space for sequence descriptors. Must NULL out the iterator
1022 * pointers so that jumping to Fail_2 later doesn't see trash.
1023 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001024 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
1025 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001026 return NULL;
1027 }
1028 for (i = 0; i < n; ++i) {
1029 seqs[i].it = (PyObject*)NULL;
1030 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001031 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001032
Tim Peters4e9afdc2001-05-03 23:54:49 +00001033 /* Do a first pass to obtain iterators for the arguments, and set len
1034 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +00001035 */
Tim Peters4e9afdc2001-05-03 23:54:49 +00001036 len = 0;
1037 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
1038 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +00001040
Tim Peters4e9afdc2001-05-03 23:54:49 +00001041 /* Get iterator. */
1042 curseq = PyTuple_GetItem(args, i+1);
1043 sqp->it = PyObject_GetIter(curseq);
1044 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001045 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001046 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001047 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +00001048 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001049 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001050 goto Fail_2;
1051 }
1052
Tim Peters4e9afdc2001-05-03 23:54:49 +00001053 /* Update len. */
1054 curlen = -1; /* unknown */
1055 if (PySequence_Check(curseq) &&
1056 curseq->ob_type->tp_as_sequence->sq_length) {
1057 curlen = PySequence_Size(curseq);
1058 if (curlen < 0)
1059 PyErr_Clear();
1060 }
Tim Peters748b8bb2001-04-28 08:20:22 +00001061 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +00001062 curlen = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001063 if (curlen > len)
1064 len = curlen;
1065 }
1066
Tim Peters4e9afdc2001-05-03 23:54:49 +00001067 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001068 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001069 goto Fail_2;
1070
Tim Peters4e9afdc2001-05-03 23:54:49 +00001071 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001072 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001073 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001074 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001075
Guido van Rossum79f25d91997-04-29 20:08:16 +00001076 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001077 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001078 else if ((alist = PyTuple_New(n)) == NULL)
1079 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001080
1081 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001082 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001083 Py_INCREF(Py_None);
1084 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001085 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001086 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001087 item = PyIter_Next(sqp->it);
1088 if (item)
1089 ++numactive;
1090 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001091 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001092 Py_XDECREF(alist);
1093 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001094 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001095 Py_INCREF(Py_None);
1096 item = Py_None;
1097 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001098 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001099 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001100 if (alist)
1101 PyTuple_SET_ITEM(alist, j, item);
1102 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001103 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001104 }
1105
Guido van Rossum32120311995-07-10 13:52:21 +00001106 if (!alist)
1107 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001108
Tim Peters4e9afdc2001-05-03 23:54:49 +00001109 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001111 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001112 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001113
Guido van Rossum79f25d91997-04-29 20:08:16 +00001114 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001115 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001116 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 value = PyEval_CallObject(func, alist);
1118 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001119 if (value == NULL)
1120 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001121 }
1122 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001123 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001124 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001125 if (status < 0)
1126 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001127 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001128 else if (PyList_SetItem(result, i, value) < 0)
1129 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001130 }
1131
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001132 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1133 goto Fail_1;
1134
Tim Peters4e9afdc2001-05-03 23:54:49 +00001135 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001136
Guido van Rossum12d12c51993-10-26 17:58:25 +00001137Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001139Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001140 result = NULL;
1141Succeed:
1142 assert(seqs);
1143 for (i = 0; i < n; ++i)
1144 Py_XDECREF(seqs[i].it);
1145 PyMem_DEL(seqs);
1146 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001147}
1148
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001149static char map_doc[] =
1150"map(function, sequence[, sequence, ...]) -> list\n\
1151\n\
1152Return a list of the results of applying the function to the items of\n\
1153the argument sequence(s). If more than one sequence is given, the\n\
1154function is called with an argument list consisting of the corresponding\n\
1155item of each sequence, substituting None for missing values when not all\n\
1156sequences have the same length. If the function is None, return a list of\n\
1157the items of the sequence (or a list of tuples if more than one sequence).";
1158
1159
Guido van Rossum79f25d91997-04-29 20:08:16 +00001160static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001161builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001162{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163 PyObject *v;
1164 PyObject *name;
1165 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001166
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001167 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001168 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001170 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171 Py_INCREF(Py_None);
1172 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001173}
1174
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001175static char setattr_doc[] =
1176"setattr(object, name, value)\n\
1177\n\
1178Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1179``x.y = v''.";
1180
1181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001183builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001184{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001185 PyObject *v;
1186 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001187
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001188 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001189 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001191 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 Py_INCREF(Py_None);
1193 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001194}
1195
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001196static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001197"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001198\n\
1199Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1200``del x.y''.";
1201
1202
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001204builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001205{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001207 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001208
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001210 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001212 if (x == -1)
1213 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001215}
1216
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001217static char hash_doc[] =
1218"hash(object) -> integer\n\
1219\n\
1220Return a hash value for the object. Two objects with the same value have\n\
1221the same hash value. The reverse is not necessarily true, but likely.";
1222
1223
Guido van Rossum79f25d91997-04-29 20:08:16 +00001224static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001225builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001226{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227 PyObject *v;
1228 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229
Guido van Rossum79f25d91997-04-29 20:08:16 +00001230 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001231 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001232
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001234 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001235 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001236 "hex() argument can't be converted to hex");
1237 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001238 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001239 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001240}
1241
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001242static char hex_doc[] =
1243"hex(number) -> string\n\
1244\n\
1245Return the hexadecimal representation of an integer or long integer.";
1246
1247
Tim Petersdbd9ba62000-07-09 03:09:57 +00001248static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001249
Guido van Rossum79f25d91997-04-29 20:08:16 +00001250static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001251builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001252{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001253 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001254 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001255 PyObject *res;
1256 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001257
1258 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001259 if (line == NULL)
1260 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001261 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001262 return NULL;
1263 while (*str == ' ' || *str == '\t')
1264 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001265 globals = PyEval_GetGlobals();
1266 locals = PyEval_GetLocals();
1267 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1268 if (PyDict_SetItemString(globals, "__builtins__",
1269 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001270 return NULL;
1271 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001272 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001273 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001274 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001275}
1276
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001277static char input_doc[] =
1278"input([prompt]) -> value\n\
1279\n\
1280Equivalent to eval(raw_input(prompt)).";
1281
1282
Guido van Rossume8811f81997-02-14 15:48:05 +00001283static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001284builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001285{
1286 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001287 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001288 return NULL;
1289 Py_INCREF(s);
1290 PyString_InternInPlace(&s);
1291 return s;
1292}
1293
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001294static char intern_doc[] =
1295"intern(string) -> string\n\
1296\n\
1297``Intern'' the given string. This enters the string in the (global)\n\
1298table of interned strings whose purpose is to speed up dictionary lookups.\n\
1299Return the string itself or the previously interned string object with the\n\
1300same value.";
1301
1302
Guido van Rossum79f25d91997-04-29 20:08:16 +00001303static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001304builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001305{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001306 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001307 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001308
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001309 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001310 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001311 if (base == -909)
1312 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001313 else if (PyString_Check(v))
1314 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1315 else if (PyUnicode_Check(v))
1316 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1317 PyUnicode_GET_SIZE(v),
1318 base);
1319 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001320 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001321 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001322 return NULL;
1323 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001324}
1325
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001327"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001328\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001329Convert a string or number to an integer, if possible. A floating point\n\
1330argument will be truncated towards zero (this does not include a string\n\
1331representation of a floating point number!) When converting a string, use\n\
1332the optional base. It is an error to supply a base when converting a\n\
1333non-string.";
1334
1335
1336static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001337builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001338{
1339 PyObject *v;
1340 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001341
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001342 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1343 return NULL;
1344 if (base == -909)
1345 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001346 else if (PyString_Check(v))
1347 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1348 else if (PyUnicode_Check(v))
1349 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1350 PyUnicode_GET_SIZE(v),
1351 base);
1352 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001353 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001354 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001355 return NULL;
1356 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001357}
1358
1359static char long_doc[] =
1360"long(x) -> long integer\n\
1361long(x, base) -> long integer\n\
1362\n\
1363Convert a string or number to a long integer, if possible. A floating\n\
1364point argument will be truncated towards zero (this does not include a\n\
1365string representation of a floating point number!) When converting a\n\
1366string, use the given base. It is an error to supply a base when\n\
1367converting a non-string.";
1368
1369
1370static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001371builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001372{
1373 PyObject *v;
1374
1375 if (!PyArg_ParseTuple(args, "O:float", &v))
1376 return NULL;
1377 if (PyString_Check(v))
1378 return PyFloat_FromString(v, NULL);
1379 return PyNumber_Float(v);
1380}
1381
1382static char float_doc[] =
1383"float(x) -> floating point number\n\
1384\n\
1385Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001386
1387
Guido van Rossum79f25d91997-04-29 20:08:16 +00001388static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001389builtin_iter(PyObject *self, PyObject *args)
1390{
1391 PyObject *v, *w = NULL;
1392
1393 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1394 return NULL;
1395 if (w == NULL)
1396 return PyObject_GetIter(v);
1397 if (!PyCallable_Check(v)) {
1398 PyErr_SetString(PyExc_TypeError,
1399 "iter(v, w): v must be callable");
1400 return NULL;
1401 }
1402 return PyCallIter_New(v, w);
1403}
1404
1405static char iter_doc[] =
1406"iter(collection) -> iterator\n\
1407iter(callable, sentinel) -> iterator\n\
1408\n\
1409Get an iterator from an object. In the first form, the argument must\n\
1410supply its own iterator, or be a sequence.\n\
1411In the second form, the callable is called until it returns the sentinel.";
1412
1413
1414static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001415builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001416{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001417 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001418 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001419
Guido van Rossum79f25d91997-04-29 20:08:16 +00001420 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001421 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001422 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001423 if (res < 0 && PyErr_Occurred())
1424 return NULL;
1425 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001426}
1427
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001428static char len_doc[] =
1429"len(object) -> integer\n\
1430\n\
1431Return the number of items of a sequence or mapping.";
1432
1433
Guido van Rossum79f25d91997-04-29 20:08:16 +00001434static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001435builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001436{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001437 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001438
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001440 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001441 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001442}
1443
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001444static char list_doc[] =
1445"list(sequence) -> list\n\
1446\n\
1447Return a new list whose items are the same as those of the argument sequence.";
1448
Guido van Rossum8861b741996-07-30 16:49:37 +00001449
1450static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001451builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001452{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001453 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001454
Guido van Rossum09df08a1998-05-22 00:51:39 +00001455 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001456
Guido van Rossum09df08a1998-05-22 00:51:39 +00001457 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1458 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001459
Guido van Rossum09df08a1998-05-22 00:51:39 +00001460 /* This swapping of stop and start is to maintain similarity with
1461 range(). */
1462 if (stop == NULL) {
1463 stop = start;
1464 start = NULL;
1465 }
1466 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001467}
1468
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001469static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001470"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001471\n\
1472Create a slice object. This is used for slicing by the Numeric extensions.";
1473
1474
Guido van Rossum79f25d91997-04-29 20:08:16 +00001475static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001476builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001477{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001478 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001479
Guido van Rossum43713e52000-02-29 13:59:29 +00001480 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001481 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482 d = PyEval_GetLocals();
1483 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001484 return d;
1485}
1486
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001487static char locals_doc[] =
1488"locals() -> dictionary\n\
1489\n\
1490Return the dictionary containing the current scope's local variables.";
1491
1492
Guido van Rossum79f25d91997-04-29 20:08:16 +00001493static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001494min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001495{
Tim Petersc3074532001-05-03 07:00:32 +00001496 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001497
Guido van Rossum79f25d91997-04-29 20:08:16 +00001498 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001499 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001501 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001502
1503 it = PyObject_GetIter(v);
1504 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001505 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001506
1507 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001508 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001509 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001510 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001511 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001512 Py_XDECREF(w);
1513 Py_DECREF(it);
1514 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001515 }
Tim Petersc3074532001-05-03 07:00:32 +00001516 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001517 }
Tim Petersc3074532001-05-03 07:00:32 +00001518
Guido van Rossum2d951851994-08-29 12:52:16 +00001519 if (w == NULL)
1520 w = x;
1521 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001522 int cmp = PyObject_RichCompareBool(x, w, op);
1523 if (cmp > 0) {
1524 Py_DECREF(w);
1525 w = x;
1526 }
1527 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001528 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001529 Py_DECREF(w);
1530 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001531 return NULL;
1532 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001533 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001534 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001535 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001536 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001537 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001539 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001540 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001541 return w;
1542}
1543
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001545builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001546{
Guido van Rossum53451b32001-01-17 15:47:24 +00001547 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001548}
1549
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001550static char min_doc[] =
1551"min(sequence) -> value\n\
1552min(a, b, c, ...) -> value\n\
1553\n\
1554With a single sequence argument, return its smallest item.\n\
1555With two or more arguments, return the smallest argument.";
1556
1557
Guido van Rossum79f25d91997-04-29 20:08:16 +00001558static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001559builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001560{
Guido van Rossum53451b32001-01-17 15:47:24 +00001561 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001562}
1563
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001564static char max_doc[] =
1565"max(sequence) -> value\n\
1566max(a, b, c, ...) -> value\n\
1567\n\
1568With a single sequence argument, return its largest item.\n\
1569With two or more arguments, return the largest argument.";
1570
1571
Guido van Rossum79f25d91997-04-29 20:08:16 +00001572static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001573builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001574{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001575 PyObject *v;
1576 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001577
Guido van Rossum79f25d91997-04-29 20:08:16 +00001578 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001579 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001580 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1581 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001582 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001583 "oct() argument can't be converted to oct");
1584 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001585 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001586 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001587}
1588
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001589static char oct_doc[] =
1590"oct(number) -> string\n\
1591\n\
1592Return the octal representation of an integer or long integer.";
1593
1594
Guido van Rossum79f25d91997-04-29 20:08:16 +00001595static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001596builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001597{
Mark Hammondef8b6542001-05-13 08:04:26 +00001598 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001599 char *mode = "r";
1600 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001601 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001602
Mark Hammondef8b6542001-05-13 08:04:26 +00001603 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1604 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001605 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001606 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001607 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001608 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001609 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001610 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001611}
1612
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001613static char open_doc[] =
1614"open(filename[, mode[, buffering]]) -> file object\n\
1615\n\
1616Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1617writing or appending. The file will be created if it doesn't exist\n\
1618when opened for writing or appending; it will be truncated when\n\
1619opened for writing. Add a 'b' to the mode for binary files.\n\
1620Add a '+' to the mode to allow simultaneous reading and writing.\n\
1621If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1622buffered, and larger numbers specify the buffer size.";
1623
1624
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001626builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001627{
Guido van Rossum09095f32000-03-10 23:00:52 +00001628 PyObject *obj;
1629 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001630 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001631
Guido van Rossum09095f32000-03-10 23:00:52 +00001632 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001633 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001634
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001635 if (PyString_Check(obj)) {
1636 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001637 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001638 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001639 return PyInt_FromLong(ord);
1640 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001641 } else if (PyUnicode_Check(obj)) {
1642 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001643 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001644 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001645 return PyInt_FromLong(ord);
1646 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001647 } else {
1648 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001649 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001650 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001651 return NULL;
1652 }
1653
Guido van Rossumad991772001-01-12 16:03:05 +00001654 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001655 "ord() expected a character, "
1656 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001657 size);
1658 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001659}
1660
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001661static char ord_doc[] =
1662"ord(c) -> integer\n\
1663\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001664Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001665
1666
Guido van Rossum79f25d91997-04-29 20:08:16 +00001667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001668builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001669{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001670 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001671
Guido van Rossum79f25d91997-04-29 20:08:16 +00001672 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001673 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001674 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001675}
1676
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001677static char pow_doc[] =
1678"pow(x, y[, z]) -> number\n\
1679\n\
1680With two arguments, equivalent to x**y. With three arguments,\n\
1681equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1682
1683
Guido van Rossum124eff01999-02-23 16:11:01 +00001684/* Return number of items in range/xrange (lo, hi, step). step > 0
1685 * required. Return a value < 0 if & only if the true value is too
1686 * large to fit in a signed long.
1687 */
1688static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001689get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001690{
1691 /* -------------------------------------------------------------
1692 If lo >= hi, the range is empty.
1693 Else if n values are in the range, the last one is
1694 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1695 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1696 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1697 the RHS is non-negative and so truncation is the same as the
1698 floor. Letting M be the largest positive long, the worst case
1699 for the RHS numerator is hi=M, lo=-M-1, and then
1700 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1701 precision to compute the RHS exactly.
1702 ---------------------------------------------------------------*/
1703 long n = 0;
1704 if (lo < hi) {
1705 unsigned long uhi = (unsigned long)hi;
1706 unsigned long ulo = (unsigned long)lo;
1707 unsigned long diff = uhi - ulo - 1;
1708 n = (long)(diff / (unsigned long)step + 1);
1709 }
1710 return n;
1711}
1712
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001714builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001715{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001716 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001717 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001718 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001719
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001721
Guido van Rossum79f25d91997-04-29 20:08:16 +00001722 if (PyTuple_Size(args) <= 1) {
1723 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001724 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001725 &ihigh))
1726 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001727 }
1728 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001729 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001730 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001731 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001732 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001733 }
1734 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001735 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001736 return NULL;
1737 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001738 if (istep > 0)
1739 bign = get_len_of_range(ilow, ihigh, istep);
1740 else
1741 bign = get_len_of_range(ihigh, ilow, -istep);
1742 n = (int)bign;
1743 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001744 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001745 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001746 return NULL;
1747 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001749 if (v == NULL)
1750 return NULL;
1751 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001752 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001753 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001754 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001755 return NULL;
1756 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001757 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001758 ilow += istep;
1759 }
1760 return v;
1761}
1762
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001763static char range_doc[] =
1764"range([start,] stop[, step]) -> list of integers\n\
1765\n\
1766Return a list containing an arithmetic progression of integers.\n\
1767range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1768When step is given, it specifies the increment (or decrement).\n\
1769For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1770These are exactly the valid indices for a list of 4 elements.";
1771
1772
Guido van Rossum79f25d91997-04-29 20:08:16 +00001773static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001774builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001775{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001776 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001777 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001778
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 if (PyTuple_Size(args) <= 1) {
1780 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001781 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782 &ihigh))
1783 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001784 }
1785 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001786 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001787 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001788 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001789 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001790 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001791 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001792 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001793 return NULL;
1794 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001795 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001796 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001797 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001798 n = get_len_of_range(ihigh, ilow, -istep);
1799 if (n < 0) {
1800 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001801 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001802 return NULL;
1803 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001804 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001805}
1806
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807static char xrange_doc[] =
1808"xrange([start,] stop[, step]) -> xrange object\n\
1809\n\
1810Like range(), but instead of returning a list, returns an object that\n\
1811generates the numbers in the range on demand. This is slightly slower\n\
1812than range() but more memory efficient.";
1813
1814
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001816builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001817{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 PyObject *v = NULL;
1819 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001820
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001822 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1824 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001825 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001826 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001827 char *prompt;
1828 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001830 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001832 if (po == NULL)
1833 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001834 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001835 if (prompt == NULL)
1836 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001837 }
1838 else {
1839 po = NULL;
1840 prompt = "";
1841 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001842 s = PyOS_Readline(prompt);
1843 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001844 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001845 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001846 return NULL;
1847 }
1848 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001850 result = NULL;
1851 }
1852 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001853 size_t len = strlen(s);
1854 if (len > INT_MAX) {
1855 PyErr_SetString(PyExc_OverflowError, "input too long");
1856 result = NULL;
1857 }
1858 else {
1859 result = PyString_FromStringAndSize(s, (int)(len-1));
1860 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001861 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001862 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001863 return result;
1864 }
Guido van Rossum90933611991-06-07 16:10:43 +00001865 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001866 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001867 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001869 return NULL;
1870 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001871 if (Py_FlushLine() != 0 ||
1872 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001873 return NULL;
1874 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001875 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001876 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001877 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001878 return NULL;
1879 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001880 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001881}
1882
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001883static char raw_input_doc[] =
1884"raw_input([prompt]) -> string\n\
1885\n\
1886Read a string from standard input. The trailing newline is stripped.\n\
1887If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1888On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1889is printed without a trailing newline before reading.";
1890
1891
Guido van Rossum79f25d91997-04-29 20:08:16 +00001892static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001893builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001894{
Tim Peters15d81ef2001-05-04 04:39:21 +00001895 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001896
Guido van Rossum79f25d91997-04-29 20:08:16 +00001897 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001898 return NULL;
1899 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001900 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001901
Tim Peters15d81ef2001-05-04 04:39:21 +00001902 it = PyObject_GetIter(seq);
1903 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001905 "reduce() arg 2 must support iteration");
1906 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001907 return NULL;
1908 }
1909
Guido van Rossum79f25d91997-04-29 20:08:16 +00001910 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001911 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001912
Tim Peters15d81ef2001-05-04 04:39:21 +00001913 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001915
1916 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001917 Py_DECREF(args);
1918 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001919 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001920 }
1921
Tim Peters15d81ef2001-05-04 04:39:21 +00001922 op2 = PyIter_Next(it);
1923 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001924 if (PyErr_Occurred())
1925 goto Fail;
1926 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001927 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001928
Guido van Rossum2d951851994-08-29 12:52:16 +00001929 if (result == NULL)
1930 result = op2;
1931 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001932 PyTuple_SetItem(args, 0, result);
1933 PyTuple_SetItem(args, 1, op2);
1934 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001935 goto Fail;
1936 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001937 }
1938
Guido van Rossum79f25d91997-04-29 20:08:16 +00001939 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001940
Guido van Rossum2d951851994-08-29 12:52:16 +00001941 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001942 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001943 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001944
Tim Peters15d81ef2001-05-04 04:39:21 +00001945 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001946 return result;
1947
Guido van Rossum2d951851994-08-29 12:52:16 +00001948Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001949 Py_XDECREF(args);
1950 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001951 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001952 return NULL;
1953}
1954
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001955static char reduce_doc[] =
1956"reduce(function, sequence[, initial]) -> value\n\
1957\n\
1958Apply a function of two arguments cumulatively to the items of a sequence,\n\
1959from left to right, so as to reduce the sequence to a single value.\n\
1960For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1961((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1962of the sequence in the calculation, and serves as a default when the\n\
1963sequence is empty.";
1964
1965
Guido van Rossum79f25d91997-04-29 20:08:16 +00001966static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001967builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001968{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001970
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001974}
1975
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001976static char reload_doc[] =
1977"reload(module) -> module\n\
1978\n\
1979Reload the module. The module must have been successfully imported before.";
1980
1981
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001983builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001984{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001986
Guido van Rossum79f25d91997-04-29 20:08:16 +00001987 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001988 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001989 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001990}
1991
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001992static char repr_doc[] =
1993"repr(object) -> string\n\
1994\n\
1995Return the canonical string representation of the object.\n\
1996For most object types, eval(repr(object)) == object.";
1997
1998
Guido van Rossum79f25d91997-04-29 20:08:16 +00001999static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002000builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002001{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002002 double x;
2003 double f;
2004 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002005 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002006
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002008 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002009 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002010 i = abs(ndigits);
2011 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002012 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002013 if (ndigits < 0)
2014 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002015 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00002016 x *= f;
2017 if (x >= 0.0)
2018 x = floor(x + 0.5);
2019 else
2020 x = ceil(x - 0.5);
2021 if (ndigits < 0)
2022 x *= f;
2023 else
2024 x /= f;
2025 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002026}
2027
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002028static char round_doc[] =
2029"round(number[, ndigits]) -> floating point number\n\
2030\n\
2031Round a number to a given precision in decimal digits (default 0 digits).\n\
2032This always returns a floating point number. Precision may be negative.";
2033
2034
Guido van Rossum79f25d91997-04-29 20:08:16 +00002035static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002036builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002037{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002038 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002039
Guido van Rossum79f25d91997-04-29 20:08:16 +00002040 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00002041 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002042 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002043}
2044
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002045static char str_doc[] =
2046"str(object) -> string\n\
2047\n\
2048Return a nice string representation of the object.\n\
2049If the argument is a string, the return value is the same object.";
2050
2051
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002053builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00002054{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002055 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002056
Guido van Rossum79f25d91997-04-29 20:08:16 +00002057 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002058 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00002059 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00002060}
2061
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002062static char tuple_doc[] =
2063"tuple(sequence) -> list\n\
2064\n\
2065Return a tuple whose items are the same as those of the argument sequence.\n\
2066If the argument is a tuple, the return value is the same object.";
2067
2068
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002070builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002071{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002073
Guido van Rossum79f25d91997-04-29 20:08:16 +00002074 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002075 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002076 v = (PyObject *)v->ob_type;
2077 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002078 return v;
2079}
2080
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002081static char type_doc[] =
2082"type(object) -> type object\n\
2083\n\
2084Return the type of the object.";
2085
2086
Guido van Rossum79f25d91997-04-29 20:08:16 +00002087static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002088builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002089{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002090 PyObject *v = NULL;
2091 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002092
Guido van Rossum79f25d91997-04-29 20:08:16 +00002093 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002094 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002095 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002096 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002097 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002098 if (!PyErr_Occurred())
2099 PyErr_SetString(PyExc_SystemError,
2100 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002101 }
2102 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002103 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002104 }
2105 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002106 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002107 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002108 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002109 "vars() argument must have __dict__ attribute");
2110 return NULL;
2111 }
2112 }
2113 return d;
2114}
2115
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002116static char vars_doc[] =
2117"vars([object]) -> dictionary\n\
2118\n\
2119Without arguments, equivalent to locals().\n\
2120With an argument, equivalent to object.__dict__.";
2121
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002123builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002124{
2125 PyObject *inst;
2126 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002127 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002128
Guido van Rossum43713e52000-02-29 13:59:29 +00002129 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002130 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002131
Guido van Rossum823649d2001-03-21 18:40:58 +00002132 retval = PyObject_IsInstance(inst, cls);
2133 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002134 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002135 return PyInt_FromLong(retval);
2136}
2137
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002138static char isinstance_doc[] =
2139"isinstance(object, class-or-type) -> Boolean\n\
2140\n\
2141Return whether an object is an instance of a class or of a subclass thereof.\n\
2142With a type as second argument, return whether that is the object's type.";
2143
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002144
2145static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002146builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002147{
2148 PyObject *derived;
2149 PyObject *cls;
2150 int retval;
2151
Guido van Rossum43713e52000-02-29 13:59:29 +00002152 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002153 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002154
Guido van Rossum823649d2001-03-21 18:40:58 +00002155 retval = PyObject_IsSubclass(derived, cls);
2156 if (retval < 0)
2157 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002158 return PyInt_FromLong(retval);
2159}
2160
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002161static char issubclass_doc[] =
2162"issubclass(C, B) -> Boolean\n\
2163\n\
2164Return whether class C is a subclass (i.e., a derived class) of class B.";
2165
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002166
Barry Warsawbd599b52000-08-03 15:45:29 +00002167static PyObject*
2168builtin_zip(PyObject *self, PyObject *args)
2169{
2170 PyObject *ret;
2171 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002172 int i;
2173 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00002174
2175 if (itemsize < 1) {
2176 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002177 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002178 return NULL;
2179 }
2180 /* args must be a tuple */
2181 assert(PyTuple_Check(args));
2182
Tim Peters8572b4f2001-05-06 01:05:02 +00002183 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00002184 if ((ret = PyList_New(0)) == NULL)
2185 return NULL;
2186
Tim Peters8572b4f2001-05-06 01:05:02 +00002187 /* obtain iterators */
2188 itlist = PyTuple_New(itemsize);
2189 if (itlist == NULL)
2190 goto Fail_ret;
2191 for (i = 0; i < itemsize; ++i) {
2192 PyObject *item = PyTuple_GET_ITEM(args, i);
2193 PyObject *it = PyObject_GetIter(item);
2194 if (it == NULL) {
2195 if (PyErr_ExceptionMatches(PyExc_TypeError))
2196 PyErr_Format(PyExc_TypeError,
2197 "zip argument #%d must support iteration",
2198 i+1);
2199 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002200 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002201 PyTuple_SET_ITEM(itlist, i, it);
2202 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002203
Tim Peters8572b4f2001-05-06 01:05:02 +00002204 /* build result into ret list */
2205 for (;;) {
2206 int status;
2207 PyObject *next = PyTuple_New(itemsize);
2208 if (!next)
2209 goto Fail_ret_itlist;
2210
2211 for (i = 0; i < itemsize; i++) {
2212 PyObject *it = PyTuple_GET_ITEM(itlist, i);
2213 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002214 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002215 if (PyErr_Occurred()) {
2216 Py_DECREF(ret);
2217 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002218 }
2219 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002220 Py_DECREF(itlist);
2221 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00002222 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002223 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002224 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002225
2226 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00002227 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002228 if (status < 0)
2229 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002230 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002231
2232Fail_ret_itlist:
2233 Py_DECREF(itlist);
2234Fail_ret:
2235 Py_DECREF(ret);
2236 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002237}
2238
2239
2240static char zip_doc[] =
2241"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2242\n\
2243Return a list of tuples, where each tuple contains the i-th element\n\
2244from each of the argument sequences. The returned list is truncated\n\
2245in length to the length of the shortest argument sequence.";
2246
2247
Guido van Rossum79f25d91997-04-29 20:08:16 +00002248static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002249 {"__import__", builtin___import__, 1, import_doc},
2250 {"abs", builtin_abs, 1, abs_doc},
2251 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002252 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002253 {"callable", builtin_callable, 1, callable_doc},
2254 {"chr", builtin_chr, 1, chr_doc},
2255 {"cmp", builtin_cmp, 1, cmp_doc},
2256 {"coerce", builtin_coerce, 1, coerce_doc},
2257 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002258#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002259 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002260#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002261 {"delattr", builtin_delattr, 1, delattr_doc},
2262 {"dir", builtin_dir, 1, dir_doc},
2263 {"divmod", builtin_divmod, 1, divmod_doc},
2264 {"eval", builtin_eval, 1, eval_doc},
2265 {"execfile", builtin_execfile, 1, execfile_doc},
2266 {"filter", builtin_filter, 1, filter_doc},
2267 {"float", builtin_float, 1, float_doc},
2268 {"getattr", builtin_getattr, 1, getattr_doc},
2269 {"globals", builtin_globals, 1, globals_doc},
2270 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2271 {"hash", builtin_hash, 1, hash_doc},
2272 {"hex", builtin_hex, 1, hex_doc},
2273 {"id", builtin_id, 1, id_doc},
2274 {"input", builtin_input, 1, input_doc},
2275 {"intern", builtin_intern, 1, intern_doc},
2276 {"int", builtin_int, 1, int_doc},
2277 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2278 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002279 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002280 {"len", builtin_len, 1, len_doc},
2281 {"list", builtin_list, 1, list_doc},
2282 {"locals", builtin_locals, 1, locals_doc},
2283 {"long", builtin_long, 1, long_doc},
2284 {"map", builtin_map, 1, map_doc},
2285 {"max", builtin_max, 1, max_doc},
2286 {"min", builtin_min, 1, min_doc},
2287 {"oct", builtin_oct, 1, oct_doc},
2288 {"open", builtin_open, 1, open_doc},
2289 {"ord", builtin_ord, 1, ord_doc},
2290 {"pow", builtin_pow, 1, pow_doc},
2291 {"range", builtin_range, 1, range_doc},
2292 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2293 {"reduce", builtin_reduce, 1, reduce_doc},
2294 {"reload", builtin_reload, 1, reload_doc},
2295 {"repr", builtin_repr, 1, repr_doc},
2296 {"round", builtin_round, 1, round_doc},
2297 {"setattr", builtin_setattr, 1, setattr_doc},
2298 {"slice", builtin_slice, 1, slice_doc},
2299 {"str", builtin_str, 1, str_doc},
2300 {"tuple", builtin_tuple, 1, tuple_doc},
2301 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002302 {"unicode", builtin_unicode, 1, unicode_doc},
2303 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002304 {"vars", builtin_vars, 1, vars_doc},
2305 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002306 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002307 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002308};
2309
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002310static char builtin_doc[] =
2311"Built-in functions, exceptions, and other objects.\n\
2312\n\
2313Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2314
Guido van Rossum25ce5661997-08-02 03:10:38 +00002315PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002316_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002317{
Fred Drake5550de32000-06-20 04:54:19 +00002318 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002319 mod = Py_InitModule4("__builtin__", builtin_methods,
2320 builtin_doc, (PyObject *)NULL,
2321 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002322 if (mod == NULL)
2323 return NULL;
2324 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002325 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2326 return NULL;
2327 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2328 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002329 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002330 Py_NotImplemented) < 0)
2331 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002332 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2333 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2334 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002335 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002336 }
2337 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002338
Guido van Rossum25ce5661997-08-02 03:10:38 +00002339 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002340}
2341
Guido van Rossume77a7571993-11-03 15:01:26 +00002342/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343
Guido van Rossum79f25d91997-04-29 20:08:16 +00002344static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002345filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002346{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002347 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002350
Guido van Rossumb7b45621995-08-04 04:07:45 +00002351 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002352 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002353 return tuple;
2354 }
2355
Guido van Rossum79f25d91997-04-29 20:08:16 +00002356 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002357 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002358
Guido van Rossum12d12c51993-10-26 17:58:25 +00002359 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002360 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002361 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002362
Guido van Rossum79f25d91997-04-29 20:08:16 +00002363 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002364 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002365 if (func == Py_None) {
2366 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002367 good = item;
2368 }
2369 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002370 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002371 if (arg == NULL)
2372 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002373 good = PyEval_CallObject(func, arg);
2374 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002375 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002376 goto Fail_1;
2377 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378 ok = PyObject_IsTrue(good);
2379 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002380 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002381 Py_INCREF(item);
2382 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002383 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002384 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002385 }
2386
Tim Peters4324aa32001-05-28 22:30:08 +00002387 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002388 return NULL;
2389
Guido van Rossum12d12c51993-10-26 17:58:25 +00002390 return result;
2391
Guido van Rossum12d12c51993-10-26 17:58:25 +00002392Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002393 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002394 return NULL;
2395}
2396
2397
Guido van Rossume77a7571993-11-03 15:01:26 +00002398/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002399
Guido van Rossum79f25d91997-04-29 20:08:16 +00002400static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002401filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002402{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002403 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002404 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002405 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002406
Guido van Rossum79f25d91997-04-29 20:08:16 +00002407 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002408 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002409 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002410 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002411 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002412 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002413 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002414
Guido van Rossum12d12c51993-10-26 17:58:25 +00002415 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002416 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002417 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002418
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002419 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2420 if (item == NULL)
2421 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002422 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002423 if (arg == NULL) {
2424 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002425 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002426 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002427 good = PyEval_CallObject(func, arg);
2428 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002429 if (good == NULL) {
2430 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002431 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002432 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002433 ok = PyObject_IsTrue(good);
2434 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002435 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002436 PyString_AS_STRING((PyStringObject *)result)[j++] =
2437 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002438 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002439 }
2440
Guido van Rossum79f25d91997-04-29 20:08:16 +00002441 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002442 return NULL;
2443
Guido van Rossum12d12c51993-10-26 17:58:25 +00002444 return result;
2445
Guido van Rossum12d12c51993-10-26 17:58:25 +00002446Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002447 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002448 return NULL;
2449}