blob: 571cfe2c8a108d6d800040365723aeb33f514d52 [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;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000948 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000950 Py_INCREF(Py_False);
951 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000952 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000954 Py_INCREF(Py_True);
955 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000956}
957
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000958static char hasattr_doc[] =
959"hasattr(object, name) -> Boolean\n\
960\n\
961Return whether the object has an attribute with the given name.\n\
962(This is done by calling getattr(object, name) and catching exceptions.)";
963
964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000966builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000967{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000969
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000971 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000972 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000973}
974
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000975static char id_doc[] =
976"id(object) -> integer\n\
977\n\
978Return the identity of an object. This is guaranteed to be unique among\n\
979simultaneously existing objects. (Hint: it's the object's memory address.)";
980
981
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000983builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000984{
985 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000986 PyObject *it; /* the iterator object */
987 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000988 } sequence;
989
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000991 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000992 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000993 register int i, j;
994
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000997 PyErr_SetString(PyExc_TypeError,
998 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000999 return NULL;
1000 }
1001
Guido van Rossum79f25d91997-04-29 20:08:16 +00001002 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001005 if (func == Py_None && n == 1) {
1006 /* map(None, S) is the same as list(S). */
1007 return PySequence_List(PyTuple_GetItem(args, 1));
1008 }
1009
Tim Peters4e9afdc2001-05-03 23:54:49 +00001010 /* Get space for sequence descriptors. Must NULL out the iterator
1011 * pointers so that jumping to Fail_2 later doesn't see trash.
1012 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
1014 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001015 return NULL;
1016 }
1017 for (i = 0; i < n; ++i) {
1018 seqs[i].it = (PyObject*)NULL;
1019 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001020 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001021
Tim Peters4e9afdc2001-05-03 23:54:49 +00001022 /* Do a first pass to obtain iterators for the arguments, and set len
1023 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +00001024 */
Tim Peters4e9afdc2001-05-03 23:54:49 +00001025 len = 0;
1026 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
1027 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001028 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +00001029
Tim Peters4e9afdc2001-05-03 23:54:49 +00001030 /* Get iterator. */
1031 curseq = PyTuple_GetItem(args, i+1);
1032 sqp->it = PyObject_GetIter(curseq);
1033 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001034 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001035 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001036 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +00001037 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001038 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039 goto Fail_2;
1040 }
1041
Tim Peters4e9afdc2001-05-03 23:54:49 +00001042 /* Update len. */
1043 curlen = -1; /* unknown */
1044 if (PySequence_Check(curseq) &&
1045 curseq->ob_type->tp_as_sequence->sq_length) {
1046 curlen = PySequence_Size(curseq);
1047 if (curlen < 0)
1048 PyErr_Clear();
1049 }
Tim Peters748b8bb2001-04-28 08:20:22 +00001050 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +00001051 curlen = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001052 if (curlen > len)
1053 len = curlen;
1054 }
1055
Tim Peters4e9afdc2001-05-03 23:54:49 +00001056 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001058 goto Fail_2;
1059
Tim Peters4e9afdc2001-05-03 23:54:49 +00001060 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001061 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001062 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001063 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001064
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001066 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001067 else if ((alist = PyTuple_New(n)) == NULL)
1068 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001069
1070 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001071 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001072 Py_INCREF(Py_None);
1073 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001074 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001075 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001076 item = PyIter_Next(sqp->it);
1077 if (item)
1078 ++numactive;
1079 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001080 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001081 Py_XDECREF(alist);
1082 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001083 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001084 Py_INCREF(Py_None);
1085 item = Py_None;
1086 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001087 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001088 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001089 if (alist)
1090 PyTuple_SET_ITEM(alist, j, item);
1091 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001092 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001093 }
1094
Guido van Rossum32120311995-07-10 13:52:21 +00001095 if (!alist)
1096 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001097
Tim Peters4e9afdc2001-05-03 23:54:49 +00001098 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001099 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001100 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001101 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001102
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001104 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001105 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 value = PyEval_CallObject(func, alist);
1107 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001108 if (value == NULL)
1109 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001110 }
1111 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001112 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001113 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001114 if (status < 0)
1115 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001116 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001117 else if (PyList_SetItem(result, i, value) < 0)
1118 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001119 }
1120
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001121 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1122 goto Fail_1;
1123
Tim Peters4e9afdc2001-05-03 23:54:49 +00001124 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001125
Guido van Rossum12d12c51993-10-26 17:58:25 +00001126Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001128Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001129 result = NULL;
1130Succeed:
1131 assert(seqs);
1132 for (i = 0; i < n; ++i)
1133 Py_XDECREF(seqs[i].it);
1134 PyMem_DEL(seqs);
1135 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001136}
1137
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001138static char map_doc[] =
1139"map(function, sequence[, sequence, ...]) -> list\n\
1140\n\
1141Return a list of the results of applying the function to the items of\n\
1142the argument sequence(s). If more than one sequence is given, the\n\
1143function is called with an argument list consisting of the corresponding\n\
1144item of each sequence, substituting None for missing values when not all\n\
1145sequences have the same length. If the function is None, return a list of\n\
1146the items of the sequence (or a list of tuples if more than one sequence).";
1147
1148
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001150builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001151{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152 PyObject *v;
1153 PyObject *name;
1154 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001155
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001156 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001157 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001159 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001160 Py_INCREF(Py_None);
1161 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001162}
1163
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001164static char setattr_doc[] =
1165"setattr(object, name, value)\n\
1166\n\
1167Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1168``x.y = v''.";
1169
1170
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001172builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001173{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001174 PyObject *v;
1175 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001176
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001177 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001178 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001180 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181 Py_INCREF(Py_None);
1182 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001183}
1184
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001186"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001187\n\
1188Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1189``del x.y''.";
1190
1191
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001193builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001194{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001196 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001197
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001199 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001201 if (x == -1)
1202 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001204}
1205
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001206static char hash_doc[] =
1207"hash(object) -> integer\n\
1208\n\
1209Return a hash value for the object. Two objects with the same value have\n\
1210the same hash value. The reverse is not necessarily true, but likely.";
1211
1212
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001214builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001215{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216 PyObject *v;
1217 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001218
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001221
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001222 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001223 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001224 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001225 "hex() argument can't be converted to hex");
1226 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001227 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001228 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001229}
1230
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001231static char hex_doc[] =
1232"hex(number) -> string\n\
1233\n\
1234Return the hexadecimal representation of an integer or long integer.";
1235
1236
Tim Petersdbd9ba62000-07-09 03:09:57 +00001237static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001238
Guido van Rossum79f25d91997-04-29 20:08:16 +00001239static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001240builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001241{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001243 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001244 PyObject *res;
1245 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001246
1247 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001248 if (line == NULL)
1249 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001250 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001251 return NULL;
1252 while (*str == ' ' || *str == '\t')
1253 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001254 globals = PyEval_GetGlobals();
1255 locals = PyEval_GetLocals();
1256 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1257 if (PyDict_SetItemString(globals, "__builtins__",
1258 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001259 return NULL;
1260 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001261 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001262 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001263 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001264}
1265
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001266static char input_doc[] =
1267"input([prompt]) -> value\n\
1268\n\
1269Equivalent to eval(raw_input(prompt)).";
1270
1271
Guido van Rossume8811f81997-02-14 15:48:05 +00001272static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001273builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001274{
1275 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001276 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001277 return NULL;
1278 Py_INCREF(s);
1279 PyString_InternInPlace(&s);
1280 return s;
1281}
1282
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001283static char intern_doc[] =
1284"intern(string) -> string\n\
1285\n\
1286``Intern'' the given string. This enters the string in the (global)\n\
1287table of interned strings whose purpose is to speed up dictionary lookups.\n\
1288Return the string itself or the previously interned string object with the\n\
1289same value.";
1290
1291
Guido van Rossum79f25d91997-04-29 20:08:16 +00001292static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001293builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001294{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001295 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001296 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001297
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001298 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001299 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001300 if (base == -909)
1301 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001302 else if (PyString_Check(v))
1303 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1304 else if (PyUnicode_Check(v))
1305 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1306 PyUnicode_GET_SIZE(v),
1307 base);
1308 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001309 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001310 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001311 return NULL;
1312 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001313}
1314
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001315static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001316"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001317\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001318Convert a string or number to an integer, if possible. A floating point\n\
1319argument will be truncated towards zero (this does not include a string\n\
1320representation of a floating point number!) When converting a string, use\n\
1321the optional base. It is an error to supply a base when converting a\n\
1322non-string.";
1323
1324
1325static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001326builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001327{
1328 PyObject *v;
1329 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001330
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001331 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1332 return NULL;
1333 if (base == -909)
1334 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001335 else if (PyString_Check(v))
1336 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1337 else if (PyUnicode_Check(v))
1338 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1339 PyUnicode_GET_SIZE(v),
1340 base);
1341 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001342 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001343 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001344 return NULL;
1345 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001346}
1347
1348static char long_doc[] =
1349"long(x) -> long integer\n\
1350long(x, base) -> long integer\n\
1351\n\
1352Convert a string or number to a long integer, if possible. A floating\n\
1353point argument will be truncated towards zero (this does not include a\n\
1354string representation of a floating point number!) When converting a\n\
1355string, use the given base. It is an error to supply a base when\n\
1356converting a non-string.";
1357
1358
1359static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001360builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001361{
1362 PyObject *v;
1363
1364 if (!PyArg_ParseTuple(args, "O:float", &v))
1365 return NULL;
1366 if (PyString_Check(v))
1367 return PyFloat_FromString(v, NULL);
1368 return PyNumber_Float(v);
1369}
1370
1371static char float_doc[] =
1372"float(x) -> floating point number\n\
1373\n\
1374Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001375
1376
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001378builtin_iter(PyObject *self, PyObject *args)
1379{
1380 PyObject *v, *w = NULL;
1381
1382 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1383 return NULL;
1384 if (w == NULL)
1385 return PyObject_GetIter(v);
1386 if (!PyCallable_Check(v)) {
1387 PyErr_SetString(PyExc_TypeError,
1388 "iter(v, w): v must be callable");
1389 return NULL;
1390 }
1391 return PyCallIter_New(v, w);
1392}
1393
1394static char iter_doc[] =
1395"iter(collection) -> iterator\n\
1396iter(callable, sentinel) -> iterator\n\
1397\n\
1398Get an iterator from an object. In the first form, the argument must\n\
1399supply its own iterator, or be a sequence.\n\
1400In the second form, the callable is called until it returns the sentinel.";
1401
1402
1403static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001404builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001405{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001406 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001407 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001408
Guido van Rossum79f25d91997-04-29 20:08:16 +00001409 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001410 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001411 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001412 if (res < 0 && PyErr_Occurred())
1413 return NULL;
1414 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001415}
1416
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001417static char len_doc[] =
1418"len(object) -> integer\n\
1419\n\
1420Return the number of items of a sequence or mapping.";
1421
1422
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001424builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001425{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001427
Guido van Rossum79f25d91997-04-29 20:08:16 +00001428 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001429 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001430 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001431}
1432
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001433static char list_doc[] =
1434"list(sequence) -> list\n\
1435\n\
1436Return a new list whose items are the same as those of the argument sequence.";
1437
Guido van Rossum8861b741996-07-30 16:49:37 +00001438
1439static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001440builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001441{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001442 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001443
Guido van Rossum09df08a1998-05-22 00:51:39 +00001444 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001445
Guido van Rossum09df08a1998-05-22 00:51:39 +00001446 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1447 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001448
Guido van Rossum09df08a1998-05-22 00:51:39 +00001449 /* This swapping of stop and start is to maintain similarity with
1450 range(). */
1451 if (stop == NULL) {
1452 stop = start;
1453 start = NULL;
1454 }
1455 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001456}
1457
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001458static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001459"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001460\n\
1461Create a slice object. This is used for slicing by the Numeric extensions.";
1462
1463
Guido van Rossum79f25d91997-04-29 20:08:16 +00001464static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001465builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001466{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001467 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001468
Guido van Rossum43713e52000-02-29 13:59:29 +00001469 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001470 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471 d = PyEval_GetLocals();
1472 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001473 return d;
1474}
1475
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001476static char locals_doc[] =
1477"locals() -> dictionary\n\
1478\n\
1479Return the dictionary containing the current scope's local variables.";
1480
1481
Guido van Rossum79f25d91997-04-29 20:08:16 +00001482static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001483min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001484{
Tim Petersc3074532001-05-03 07:00:32 +00001485 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001486
Guido van Rossum79f25d91997-04-29 20:08:16 +00001487 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001488 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001489 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001490 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001491
1492 it = PyObject_GetIter(v);
1493 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001494 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001495
1496 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001497 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001498 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001499 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001500 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001501 Py_XDECREF(w);
1502 Py_DECREF(it);
1503 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001504 }
Tim Petersc3074532001-05-03 07:00:32 +00001505 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001506 }
Tim Petersc3074532001-05-03 07:00:32 +00001507
Guido van Rossum2d951851994-08-29 12:52:16 +00001508 if (w == NULL)
1509 w = x;
1510 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001511 int cmp = PyObject_RichCompareBool(x, w, op);
1512 if (cmp > 0) {
1513 Py_DECREF(w);
1514 w = x;
1515 }
1516 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001517 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001518 Py_DECREF(w);
1519 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001520 return NULL;
1521 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001522 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001523 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001524 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001525 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001526 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001527 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001528 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001529 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001530 return w;
1531}
1532
Guido van Rossum79f25d91997-04-29 20:08:16 +00001533static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001534builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001535{
Guido van Rossum53451b32001-01-17 15:47:24 +00001536 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001537}
1538
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001539static char min_doc[] =
1540"min(sequence) -> value\n\
1541min(a, b, c, ...) -> value\n\
1542\n\
1543With a single sequence argument, return its smallest item.\n\
1544With two or more arguments, return the smallest argument.";
1545
1546
Guido van Rossum79f25d91997-04-29 20:08:16 +00001547static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001548builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001549{
Guido van Rossum53451b32001-01-17 15:47:24 +00001550 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001551}
1552
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001553static char max_doc[] =
1554"max(sequence) -> value\n\
1555max(a, b, c, ...) -> value\n\
1556\n\
1557With a single sequence argument, return its largest item.\n\
1558With two or more arguments, return the largest argument.";
1559
1560
Guido van Rossum79f25d91997-04-29 20:08:16 +00001561static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001562builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001563{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001564 PyObject *v;
1565 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001566
Guido van Rossum79f25d91997-04-29 20:08:16 +00001567 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001568 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001569 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1570 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001571 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001572 "oct() argument can't be converted to oct");
1573 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001574 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001575 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001576}
1577
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001578static char oct_doc[] =
1579"oct(number) -> string\n\
1580\n\
1581Return the octal representation of an integer or long integer.";
1582
1583
Guido van Rossum79f25d91997-04-29 20:08:16 +00001584static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001585builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001586{
Mark Hammondef8b6542001-05-13 08:04:26 +00001587 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001588 char *mode = "r";
1589 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001590 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001591
Mark Hammondef8b6542001-05-13 08:04:26 +00001592 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1593 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001594 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001595 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001596 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001597 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001598 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001599 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001600}
1601
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001602static char open_doc[] =
1603"open(filename[, mode[, buffering]]) -> file object\n\
1604\n\
1605Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1606writing or appending. The file will be created if it doesn't exist\n\
1607when opened for writing or appending; it will be truncated when\n\
1608opened for writing. Add a 'b' to the mode for binary files.\n\
1609Add a '+' to the mode to allow simultaneous reading and writing.\n\
1610If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1611buffered, and larger numbers specify the buffer size.";
1612
1613
Guido van Rossum79f25d91997-04-29 20:08:16 +00001614static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001615builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001616{
Guido van Rossum09095f32000-03-10 23:00:52 +00001617 PyObject *obj;
1618 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001619 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001620
Guido van Rossum09095f32000-03-10 23:00:52 +00001621 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001622 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001623
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001624 if (PyString_Check(obj)) {
1625 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001626 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001627 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001628 return PyInt_FromLong(ord);
1629 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001630 } else if (PyUnicode_Check(obj)) {
1631 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001632 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001633 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001634 return PyInt_FromLong(ord);
1635 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001636 } else {
1637 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001638 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001639 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001640 return NULL;
1641 }
1642
Guido van Rossumad991772001-01-12 16:03:05 +00001643 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001644 "ord() expected a character, "
1645 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001646 size);
1647 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001648}
1649
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001650static char ord_doc[] =
1651"ord(c) -> integer\n\
1652\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001653Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001654
1655
Guido van Rossum79f25d91997-04-29 20:08:16 +00001656static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001657builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001658{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001659 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001660
Guido van Rossum79f25d91997-04-29 20:08:16 +00001661 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001662 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001663 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001664}
1665
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001666static char pow_doc[] =
1667"pow(x, y[, z]) -> number\n\
1668\n\
1669With two arguments, equivalent to x**y. With three arguments,\n\
1670equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1671
1672
Guido van Rossum124eff01999-02-23 16:11:01 +00001673/* Return number of items in range/xrange (lo, hi, step). step > 0
1674 * required. Return a value < 0 if & only if the true value is too
1675 * large to fit in a signed long.
1676 */
1677static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001678get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001679{
1680 /* -------------------------------------------------------------
1681 If lo >= hi, the range is empty.
1682 Else if n values are in the range, the last one is
1683 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1684 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1685 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1686 the RHS is non-negative and so truncation is the same as the
1687 floor. Letting M be the largest positive long, the worst case
1688 for the RHS numerator is hi=M, lo=-M-1, and then
1689 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1690 precision to compute the RHS exactly.
1691 ---------------------------------------------------------------*/
1692 long n = 0;
1693 if (lo < hi) {
1694 unsigned long uhi = (unsigned long)hi;
1695 unsigned long ulo = (unsigned long)lo;
1696 unsigned long diff = uhi - ulo - 1;
1697 n = (long)(diff / (unsigned long)step + 1);
1698 }
1699 return n;
1700}
1701
Guido van Rossum79f25d91997-04-29 20:08:16 +00001702static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001703builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001704{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001705 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001706 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001707 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001708
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001710
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711 if (PyTuple_Size(args) <= 1) {
1712 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001713 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001714 &ihigh))
1715 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001716 }
1717 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001718 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001719 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001720 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001721 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001722 }
1723 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001724 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001725 return NULL;
1726 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001727 if (istep > 0)
1728 bign = get_len_of_range(ilow, ihigh, istep);
1729 else
1730 bign = get_len_of_range(ihigh, ilow, -istep);
1731 n = (int)bign;
1732 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001733 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001734 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001735 return NULL;
1736 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001737 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001738 if (v == NULL)
1739 return NULL;
1740 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001742 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001743 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001744 return NULL;
1745 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001746 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001747 ilow += istep;
1748 }
1749 return v;
1750}
1751
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001752static char range_doc[] =
1753"range([start,] stop[, step]) -> list of integers\n\
1754\n\
1755Return a list containing an arithmetic progression of integers.\n\
1756range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1757When step is given, it specifies the increment (or decrement).\n\
1758For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1759These are exactly the valid indices for a list of 4 elements.";
1760
1761
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001763builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001764{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001765 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001766 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001767
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768 if (PyTuple_Size(args) <= 1) {
1769 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001770 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001771 &ihigh))
1772 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001773 }
1774 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001775 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001776 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001777 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001778 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001779 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001780 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001781 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001782 return NULL;
1783 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001784 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001785 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001786 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001787 n = get_len_of_range(ihigh, ilow, -istep);
1788 if (n < 0) {
1789 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001790 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001791 return NULL;
1792 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001793 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001794}
1795
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001796static char xrange_doc[] =
1797"xrange([start,] stop[, step]) -> xrange object\n\
1798\n\
1799Like range(), but instead of returning a list, returns an object that\n\
1800generates the numbers in the range on demand. This is slightly slower\n\
1801than range() but more memory efficient.";
1802
1803
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001805builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001806{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 PyObject *v = NULL;
1808 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001809
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001811 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1813 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001814 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001816 char *prompt;
1817 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001819 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001820 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001821 if (po == NULL)
1822 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001824 if (prompt == NULL)
1825 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001826 }
1827 else {
1828 po = NULL;
1829 prompt = "";
1830 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 s = PyOS_Readline(prompt);
1832 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001833 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001834 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001835 return NULL;
1836 }
1837 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001839 result = NULL;
1840 }
1841 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001842 size_t len = strlen(s);
1843 if (len > INT_MAX) {
1844 PyErr_SetString(PyExc_OverflowError, "input too long");
1845 result = NULL;
1846 }
1847 else {
1848 result = PyString_FromStringAndSize(s, (int)(len-1));
1849 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001850 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001851 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001852 return result;
1853 }
Guido van Rossum90933611991-06-07 16:10:43 +00001854 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001855 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001856 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001857 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001858 return NULL;
1859 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001860 if (Py_FlushLine() != 0 ||
1861 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001862 return NULL;
1863 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001864 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001865 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001866 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001867 return NULL;
1868 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001870}
1871
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001872static char raw_input_doc[] =
1873"raw_input([prompt]) -> string\n\
1874\n\
1875Read a string from standard input. The trailing newline is stripped.\n\
1876If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1877On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1878is printed without a trailing newline before reading.";
1879
1880
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001882builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001883{
Tim Peters15d81ef2001-05-04 04:39:21 +00001884 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001885
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001887 return NULL;
1888 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001890
Tim Peters15d81ef2001-05-04 04:39:21 +00001891 it = PyObject_GetIter(seq);
1892 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001893 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001894 "reduce() arg 2 must support iteration");
1895 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001896 return NULL;
1897 }
1898
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001900 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001901
Tim Peters15d81ef2001-05-04 04:39:21 +00001902 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001903 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001904
1905 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 Py_DECREF(args);
1907 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001908 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001909 }
1910
Tim Peters15d81ef2001-05-04 04:39:21 +00001911 op2 = PyIter_Next(it);
1912 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001913 if (PyErr_Occurred())
1914 goto Fail;
1915 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001916 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001917
Guido van Rossum2d951851994-08-29 12:52:16 +00001918 if (result == NULL)
1919 result = op2;
1920 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001921 PyTuple_SetItem(args, 0, result);
1922 PyTuple_SetItem(args, 1, op2);
1923 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001924 goto Fail;
1925 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001926 }
1927
Guido van Rossum79f25d91997-04-29 20:08:16 +00001928 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001929
Guido van Rossum2d951851994-08-29 12:52:16 +00001930 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001932 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001933
Tim Peters15d81ef2001-05-04 04:39:21 +00001934 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001935 return result;
1936
Guido van Rossum2d951851994-08-29 12:52:16 +00001937Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938 Py_XDECREF(args);
1939 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001940 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001941 return NULL;
1942}
1943
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001944static char reduce_doc[] =
1945"reduce(function, sequence[, initial]) -> value\n\
1946\n\
1947Apply a function of two arguments cumulatively to the items of a sequence,\n\
1948from left to right, so as to reduce the sequence to a single value.\n\
1949For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1950((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1951of the sequence in the calculation, and serves as a default when the\n\
1952sequence is empty.";
1953
1954
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001956builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001957{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001958 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001959
Guido van Rossum79f25d91997-04-29 20:08:16 +00001960 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001961 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001962 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001963}
1964
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001965static char reload_doc[] =
1966"reload(module) -> module\n\
1967\n\
1968Reload the module. The module must have been successfully imported before.";
1969
1970
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001972builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001973{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001975
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001977 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001978 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001979}
1980
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001981static char repr_doc[] =
1982"repr(object) -> string\n\
1983\n\
1984Return the canonical string representation of the object.\n\
1985For most object types, eval(repr(object)) == object.";
1986
1987
Guido van Rossum79f25d91997-04-29 20:08:16 +00001988static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001989builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001990{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001991 double x;
1992 double f;
1993 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001994 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001995
Guido van Rossum79f25d91997-04-29 20:08:16 +00001996 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001997 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001998 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001999 i = abs(ndigits);
2000 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002001 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002002 if (ndigits < 0)
2003 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002004 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00002005 x *= f;
2006 if (x >= 0.0)
2007 x = floor(x + 0.5);
2008 else
2009 x = ceil(x - 0.5);
2010 if (ndigits < 0)
2011 x *= f;
2012 else
2013 x /= f;
2014 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002015}
2016
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002017static char round_doc[] =
2018"round(number[, ndigits]) -> floating point number\n\
2019\n\
2020Round a number to a given precision in decimal digits (default 0 digits).\n\
2021This always returns a floating point number. Precision may be negative.";
2022
2023
Guido van Rossum79f25d91997-04-29 20:08:16 +00002024static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002025builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002026{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002027 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002028
Guido van Rossum79f25d91997-04-29 20:08:16 +00002029 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00002030 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002031 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002032}
2033
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002034static char str_doc[] =
2035"str(object) -> string\n\
2036\n\
2037Return a nice string representation of the object.\n\
2038If the argument is a string, the return value is the same object.";
2039
2040
Guido van Rossum79f25d91997-04-29 20:08:16 +00002041static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002042builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00002043{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002044 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002045
Guido van Rossum79f25d91997-04-29 20:08:16 +00002046 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002047 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00002048 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00002049}
2050
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002051static char tuple_doc[] =
2052"tuple(sequence) -> list\n\
2053\n\
2054Return a tuple whose items are the same as those of the argument sequence.\n\
2055If the argument is a tuple, the return value is the same object.";
2056
2057
Guido van Rossum79f25d91997-04-29 20:08:16 +00002058static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002059builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002060{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002061 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002062
Guido van Rossum79f25d91997-04-29 20:08:16 +00002063 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002064 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002065 v = (PyObject *)v->ob_type;
2066 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002067 return v;
2068}
2069
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002070static char type_doc[] =
2071"type(object) -> type object\n\
2072\n\
2073Return the type of the object.";
2074
2075
Guido van Rossum79f25d91997-04-29 20:08:16 +00002076static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002077builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002078{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002079 PyObject *v = NULL;
2080 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002081
Guido van Rossum79f25d91997-04-29 20:08:16 +00002082 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002083 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002084 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002085 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002086 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002087 if (!PyErr_Occurred())
2088 PyErr_SetString(PyExc_SystemError,
2089 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002090 }
2091 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002092 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002093 }
2094 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002095 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002096 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002097 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002098 "vars() argument must have __dict__ attribute");
2099 return NULL;
2100 }
2101 }
2102 return d;
2103}
2104
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002105static char vars_doc[] =
2106"vars([object]) -> dictionary\n\
2107\n\
2108Without arguments, equivalent to locals().\n\
2109With an argument, equivalent to object.__dict__.";
2110
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002111static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002112builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002113{
2114 PyObject *inst;
2115 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002116 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002117
Guido van Rossum43713e52000-02-29 13:59:29 +00002118 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002119 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002120
Guido van Rossum823649d2001-03-21 18:40:58 +00002121 retval = PyObject_IsInstance(inst, cls);
2122 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002123 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002124 return PyInt_FromLong(retval);
2125}
2126
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002127static char isinstance_doc[] =
2128"isinstance(object, class-or-type) -> Boolean\n\
2129\n\
2130Return whether an object is an instance of a class or of a subclass thereof.\n\
2131With a type as second argument, return whether that is the object's type.";
2132
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002133
2134static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002135builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002136{
2137 PyObject *derived;
2138 PyObject *cls;
2139 int retval;
2140
Guido van Rossum43713e52000-02-29 13:59:29 +00002141 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002142 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002143
Guido van Rossum823649d2001-03-21 18:40:58 +00002144 retval = PyObject_IsSubclass(derived, cls);
2145 if (retval < 0)
2146 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002147 return PyInt_FromLong(retval);
2148}
2149
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002150static char issubclass_doc[] =
2151"issubclass(C, B) -> Boolean\n\
2152\n\
2153Return whether class C is a subclass (i.e., a derived class) of class B.";
2154
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002155
Barry Warsawbd599b52000-08-03 15:45:29 +00002156static PyObject*
2157builtin_zip(PyObject *self, PyObject *args)
2158{
2159 PyObject *ret;
2160 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002161 int i;
2162 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00002163
2164 if (itemsize < 1) {
2165 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002166 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002167 return NULL;
2168 }
2169 /* args must be a tuple */
2170 assert(PyTuple_Check(args));
2171
Tim Peters8572b4f2001-05-06 01:05:02 +00002172 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00002173 if ((ret = PyList_New(0)) == NULL)
2174 return NULL;
2175
Tim Peters8572b4f2001-05-06 01:05:02 +00002176 /* obtain iterators */
2177 itlist = PyTuple_New(itemsize);
2178 if (itlist == NULL)
2179 goto Fail_ret;
2180 for (i = 0; i < itemsize; ++i) {
2181 PyObject *item = PyTuple_GET_ITEM(args, i);
2182 PyObject *it = PyObject_GetIter(item);
2183 if (it == NULL) {
2184 if (PyErr_ExceptionMatches(PyExc_TypeError))
2185 PyErr_Format(PyExc_TypeError,
2186 "zip argument #%d must support iteration",
2187 i+1);
2188 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002189 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002190 PyTuple_SET_ITEM(itlist, i, it);
2191 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002192
Tim Peters8572b4f2001-05-06 01:05:02 +00002193 /* build result into ret list */
2194 for (;;) {
2195 int status;
2196 PyObject *next = PyTuple_New(itemsize);
2197 if (!next)
2198 goto Fail_ret_itlist;
2199
2200 for (i = 0; i < itemsize; i++) {
2201 PyObject *it = PyTuple_GET_ITEM(itlist, i);
2202 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002203 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002204 if (PyErr_Occurred()) {
2205 Py_DECREF(ret);
2206 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002207 }
2208 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002209 Py_DECREF(itlist);
2210 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00002211 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002212 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002213 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002214
2215 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00002216 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002217 if (status < 0)
2218 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002219 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002220
2221Fail_ret_itlist:
2222 Py_DECREF(itlist);
2223Fail_ret:
2224 Py_DECREF(ret);
2225 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002226}
2227
2228
2229static char zip_doc[] =
2230"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2231\n\
2232Return a list of tuples, where each tuple contains the i-th element\n\
2233from each of the argument sequences. The returned list is truncated\n\
2234in length to the length of the shortest argument sequence.";
2235
2236
Guido van Rossum79f25d91997-04-29 20:08:16 +00002237static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002238 {"__import__", builtin___import__, 1, import_doc},
2239 {"abs", builtin_abs, 1, abs_doc},
2240 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002241 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002242 {"callable", builtin_callable, 1, callable_doc},
2243 {"chr", builtin_chr, 1, chr_doc},
2244 {"cmp", builtin_cmp, 1, cmp_doc},
2245 {"coerce", builtin_coerce, 1, coerce_doc},
2246 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002247#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002248 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002249#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002250 {"delattr", builtin_delattr, 1, delattr_doc},
2251 {"dir", builtin_dir, 1, dir_doc},
2252 {"divmod", builtin_divmod, 1, divmod_doc},
2253 {"eval", builtin_eval, 1, eval_doc},
2254 {"execfile", builtin_execfile, 1, execfile_doc},
2255 {"filter", builtin_filter, 1, filter_doc},
2256 {"float", builtin_float, 1, float_doc},
2257 {"getattr", builtin_getattr, 1, getattr_doc},
2258 {"globals", builtin_globals, 1, globals_doc},
2259 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2260 {"hash", builtin_hash, 1, hash_doc},
2261 {"hex", builtin_hex, 1, hex_doc},
2262 {"id", builtin_id, 1, id_doc},
2263 {"input", builtin_input, 1, input_doc},
2264 {"intern", builtin_intern, 1, intern_doc},
2265 {"int", builtin_int, 1, int_doc},
2266 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2267 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002268 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002269 {"len", builtin_len, 1, len_doc},
2270 {"list", builtin_list, 1, list_doc},
2271 {"locals", builtin_locals, 1, locals_doc},
2272 {"long", builtin_long, 1, long_doc},
2273 {"map", builtin_map, 1, map_doc},
2274 {"max", builtin_max, 1, max_doc},
2275 {"min", builtin_min, 1, min_doc},
2276 {"oct", builtin_oct, 1, oct_doc},
2277 {"open", builtin_open, 1, open_doc},
2278 {"ord", builtin_ord, 1, ord_doc},
2279 {"pow", builtin_pow, 1, pow_doc},
2280 {"range", builtin_range, 1, range_doc},
2281 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2282 {"reduce", builtin_reduce, 1, reduce_doc},
2283 {"reload", builtin_reload, 1, reload_doc},
2284 {"repr", builtin_repr, 1, repr_doc},
2285 {"round", builtin_round, 1, round_doc},
2286 {"setattr", builtin_setattr, 1, setattr_doc},
2287 {"slice", builtin_slice, 1, slice_doc},
2288 {"str", builtin_str, 1, str_doc},
2289 {"tuple", builtin_tuple, 1, tuple_doc},
2290 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002291 {"unicode", builtin_unicode, 1, unicode_doc},
2292 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002293 {"vars", builtin_vars, 1, vars_doc},
2294 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002295 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002296 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002297};
2298
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002299static char builtin_doc[] =
2300"Built-in functions, exceptions, and other objects.\n\
2301\n\
2302Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2303
Guido van Rossum25ce5661997-08-02 03:10:38 +00002304PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002305_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002306{
Fred Drake5550de32000-06-20 04:54:19 +00002307 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002308 mod = Py_InitModule4("__builtin__", builtin_methods,
2309 builtin_doc, (PyObject *)NULL,
2310 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002311 if (mod == NULL)
2312 return NULL;
2313 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002314 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2315 return NULL;
2316 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2317 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002318 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002319 Py_NotImplemented) < 0)
2320 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002321 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2322 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2323 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002324 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002325 }
2326 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002327
Guido van Rossum25ce5661997-08-02 03:10:38 +00002328 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002329}
2330
Guido van Rossume77a7571993-11-03 15:01:26 +00002331/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002332
Guido van Rossum79f25d91997-04-29 20:08:16 +00002333static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002334filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002335{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002336 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002337 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002338 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002339
Guido van Rossumb7b45621995-08-04 04:07:45 +00002340 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002341 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002342 return tuple;
2343 }
2344
Guido van Rossum79f25d91997-04-29 20:08:16 +00002345 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002346 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002349 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002350 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002351
Guido van Rossum79f25d91997-04-29 20:08:16 +00002352 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002353 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002354 if (func == Py_None) {
2355 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002356 good = item;
2357 }
2358 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002359 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002360 if (arg == NULL)
2361 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002362 good = PyEval_CallObject(func, arg);
2363 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002364 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002365 goto Fail_1;
2366 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002367 ok = PyObject_IsTrue(good);
2368 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002369 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002370 Py_INCREF(item);
2371 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002372 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002373 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374 }
2375
Tim Peters4324aa32001-05-28 22:30:08 +00002376 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002377 return NULL;
2378
Guido van Rossum12d12c51993-10-26 17:58:25 +00002379 return result;
2380
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002382 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002383 return NULL;
2384}
2385
2386
Guido van Rossume77a7571993-11-03 15:01:26 +00002387/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002388
Guido van Rossum79f25d91997-04-29 20:08:16 +00002389static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002390filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002391{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002392 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002393 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002394 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002395
Guido van Rossum79f25d91997-04-29 20:08:16 +00002396 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002397 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002398 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002399 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002400 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002401 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002402 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002403
Guido van Rossum12d12c51993-10-26 17:58:25 +00002404 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002405 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002406 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002407
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002408 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2409 if (item == NULL)
2410 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002411 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002412 if (arg == NULL) {
2413 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002414 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002415 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002416 good = PyEval_CallObject(func, arg);
2417 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002418 if (good == NULL) {
2419 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002420 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002421 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002422 ok = PyObject_IsTrue(good);
2423 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002424 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002425 PyString_AS_STRING((PyStringObject *)result)[j++] =
2426 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002427 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002428 }
2429
Guido van Rossum79f25d91997-04-29 20:08:16 +00002430 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002431 return NULL;
2432
Guido van Rossum12d12c51993-10-26 17:58:25 +00002433 return result;
2434
Guido van Rossum12d12c51993-10-26 17:58:25 +00002435Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002436 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002437 return NULL;
2438}