blob: 6eb6acae56f1dd03735faa62f4ab413ee364c6d3 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000012#ifdef HAVE_UNISTD_H
13#include <unistd.h>
14#endif
15
Mark Hammond26cffde2001-05-14 12:17:34 +000016/* The default encoding used by the platform file system APIs
17 Can remain NULL for all platforms that don't have such a concept
18*/
Fredrik Lundh5b979352001-06-26 17:46:10 +000019#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000020const char *Py_FileSystemDefaultEncoding = "mbcs";
21#else
22const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
23#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000024
Guido van Rossum12d12c51993-10-26 17:58:25 +000025/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000026static PyObject *filterstring(PyObject *, PyObject *);
27static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000031{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000033 PyObject *globals = NULL;
34 PyObject *locals = NULL;
35 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000038 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000040 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041}
42
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000043static char import_doc[] =
44"__import__(name, globals, locals, fromlist) -> module\n\
45\n\
46Import a module. The globals are only used to determine the context;\n\
47they are not modified. The locals are currently unused. The fromlist\n\
48should be a list of names to emulate ``from name import ...'', or an\n\
49empty list to emulate ``import name''.\n\
50When importing a module from a package, note that __import__('A.B', ...)\n\
51returns package A when fromlist is empty, but its submodule B when\n\
52fromlist is not empty.";
53
Guido van Rossum1ae940a1995-01-02 19:04:15 +000054
Guido van Rossum79f25d91997-04-29 20:08:16 +000055static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000056builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057{
Guido van Rossum79f25d91997-04-29 20:08:16 +000058 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000061 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000062 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000063}
64
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000065static char abs_doc[] =
66"abs(number) -> number\n\
67\n\
68Return the absolute value of the argument.";
69
70
Guido van Rossum79f25d91997-04-29 20:08:16 +000071static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000072builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000073{
Guido van Rossum79f25d91997-04-29 20:08:16 +000074 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000075 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000076
Guido van Rossum79f25d91997-04-29 20:08:16 +000077 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000078 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000079 if (alist != NULL) {
80 if (!PyTuple_Check(alist)) {
81 if (!PySequence_Check(alist)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000082 PyErr_Format(PyExc_TypeError,
83 "apply() arg 2 expect sequence, found %s",
84 alist->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000085 return NULL;
86 }
87 t = PySequence_Tuple(alist);
88 if (t == NULL)
89 return NULL;
90 alist = t;
91 }
Guido van Rossum2d951851994-08-29 12:52:16 +000092 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000093 if (kwdict != NULL && !PyDict_Check(kwdict)) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +000094 PyErr_Format(PyExc_TypeError,
95 "apply() arg 3 expected dictionary, found %s",
96 kwdict->ob_type->tp_name);
Barry Warsaw968f8cb1998-10-01 15:33:12 +000097 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000098 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000099 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
100 finally:
101 Py_XDECREF(t);
102 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000103}
104
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000105static char apply_doc[] =
Fred Drakef1fbc622001-01-12 17:05:05 +0000106"apply(object[, args[, kwargs]]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000107\n\
Fred Drake7b912121999-12-23 14:16:55 +0000108Call a callable object with positional arguments taken from the tuple args,\n\
109and keyword arguments taken from the optional dictionary kwargs.\n\
110Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000111
112
Guido van Rossum79f25d91997-04-29 20:08:16 +0000113static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000114builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000115{
116 PyObject *ob;
117 int offset = 0;
118 int size = Py_END_OF_BUFFER;
119
120 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
121 return NULL;
122 return PyBuffer_FromObject(ob, offset, size);
123}
124
125static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000126"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000127\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000128Create a new buffer object which references the given object.\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000129The buffer will reference a slice of the target object from the\n\
130start of the object (or at the specified offset). The slice will\n\
131extend to the end of the target object (or with the specified size).";
132
133
134static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000135builtin_unicode(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000136{
Guido van Rossum3afba762000-04-11 15:38:23 +0000137 PyObject *v;
Guido van Rossum09095f32000-03-10 23:00:52 +0000138 char *encoding = NULL;
139 char *errors = NULL;
140
Guido van Rossum3afba762000-04-11 15:38:23 +0000141 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000142 return NULL;
Marc-André Lemburg1b1bcc92000-07-07 13:48:25 +0000143 return PyUnicode_FromEncodedObject(v, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000144}
145
146static char unicode_doc[] =
147"unicode(string [, encoding[, errors]]) -> object\n\
148\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000149Create a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000150encoding defaults to the current default string encoding and \n\
151errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000152
153
154static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000155builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000156{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000157 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000158
Guido van Rossum79f25d91997-04-29 20:08:16 +0000159 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000160 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000161 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000162}
163
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000164static char callable_doc[] =
165"callable(object) -> Boolean\n\
166\n\
167Return whether the object is callable (i.e., some kind of function).\n\
168Note that classes are callable, as are instances with a __call__() method.";
169
170
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000172builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000173{
Tim Peters0e57abf2001-05-02 07:39:38 +0000174 PyObject *func, *seq, *result, *it;
175 int len; /* guess for result list size */
Tim Petersf4848da2001-05-05 00:14:56 +0000176 register int j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000177
Guido van Rossum79f25d91997-04-29 20:08:16 +0000178 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000179 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000180
Tim Peters0e57abf2001-05-02 07:39:38 +0000181 /* Strings and tuples return a result of the same type. */
182 if (PyString_Check(seq))
183 return filterstring(func, seq);
184 if (PyTuple_Check(seq))
185 return filtertuple(func, seq);
186
187 /* Get iterator. */
188 it = PyObject_GetIter(seq);
189 if (it == NULL)
190 return NULL;
191
192 /* Guess a result list size. */
193 len = -1; /* unknown */
194 if (PySequence_Check(seq) &&
195 seq->ob_type->tp_as_sequence->sq_length) {
196 len = PySequence_Size(seq);
197 if (len < 0)
198 PyErr_Clear();
Guido van Rossum12d12c51993-10-26 17:58:25 +0000199 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000200 if (len < 0)
201 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000202
Tim Peters0e57abf2001-05-02 07:39:38 +0000203 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000205 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000206 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207 result = seq;
208 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000209 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000210 result = PyList_New(len);
211 if (result == NULL)
212 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000213 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000214
Tim Peters0e57abf2001-05-02 07:39:38 +0000215 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000216 j = 0;
217 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000218 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000219 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000220
Tim Peters0e57abf2001-05-02 07:39:38 +0000221 item = PyIter_Next(it);
222 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000223 if (PyErr_Occurred())
224 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000225 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000226 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000227
Guido van Rossum79f25d91997-04-29 20:08:16 +0000228 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000229 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000230 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000231 }
232 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000233 PyObject *arg = Py_BuildValue("(O)", item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000234 if (arg == NULL) {
235 Py_DECREF(item);
236 goto Fail_result_it;
237 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000238 good = PyEval_CallObject(func, arg);
239 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000240 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000241 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000242 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000243 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000244 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000245 ok = PyObject_IsTrue(good);
246 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000247 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000248 if (j < len)
249 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000250 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000251 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000252 Py_DECREF(item);
253 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000254 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000255 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000256 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000257 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000258 else
259 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000260 }
261
Guido van Rossum12d12c51993-10-26 17:58:25 +0000262
Tim Peters0e57abf2001-05-02 07:39:38 +0000263 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000264 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000265 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266
Tim Peters3c6b1482001-05-21 08:07:05 +0000267 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000268 return result;
269
Tim Peters0e57abf2001-05-02 07:39:38 +0000270Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000272Fail_it:
273 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000274 return NULL;
275}
276
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000277static char filter_doc[] =
278"filter(function, sequence) -> list\n\
279\n\
280Return a list containing those items of sequence for which function(item)\n\
281is true. If function is None, return a list of items that are true.";
282
283
Guido van Rossum79f25d91997-04-29 20:08:16 +0000284static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000285builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000286{
287 long x;
288 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000289
Guido van Rossum79f25d91997-04-29 20:08:16 +0000290 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000291 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000292 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000293 PyErr_SetString(PyExc_ValueError,
294 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000295 return NULL;
296 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000297 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000298 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000299}
300
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000301static char chr_doc[] =
302"chr(i) -> character\n\
303\n\
304Return a string of one character with ordinal i; 0 <= i < 256.";
305
306
Guido van Rossum79f25d91997-04-29 20:08:16 +0000307static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000308builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000309{
310 long x;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000311 Py_UNICODE s[2];
Guido van Rossum09095f32000-03-10 23:00:52 +0000312
313 if (!PyArg_ParseTuple(args, "l:unichr", &x))
314 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000315
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 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803 if (PyCode_Check(cmd))
804 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000805 if (!PyString_Check(cmd) &&
806 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000808 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000809 return NULL;
810 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000811 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000812 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813 while (*str == ' ' || *str == '\t')
814 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000815 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000816}
817
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000818static char eval_doc[] =
819"eval(source[, globals[, locals]]) -> value\n\
820\n\
821Evaluate the source in the context of globals and locals.\n\
822The source may be a string representing a Python expression\n\
823or a code object as returned by compile().\n\
824The globals and locals are dictionaries, defaulting to the current\n\
825globals and locals. If only globals is given, locals defaults to it.";
826
827
Guido van Rossum79f25d91997-04-29 20:08:16 +0000828static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000829builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000830{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000831 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000832 PyObject *globals = Py_None, *locals = Py_None;
833 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000834 FILE* fp;
Tim Peters5ba58662001-07-16 02:29:45 +0000835 PyCompilerFlags cf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000836
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000838 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 &PyDict_Type, &globals,
840 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000841 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 if (globals == Py_None) {
843 globals = PyEval_GetGlobals();
844 if (locals == Py_None)
845 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000846 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000848 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
850 if (PyDict_SetItemString(globals, "__builtins__",
851 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000852 return NULL;
853 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000855 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000856 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000857 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000859 return NULL;
860 }
Tim Peters5ba58662001-07-16 02:29:45 +0000861 cf.cf_flags = 0;
862 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000863 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000864 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000865 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000866 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000867 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000869}
870
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000871static char execfile_doc[] =
872"execfile(filename[, globals[, locals]])\n\
873\n\
874Read and execute a Python script from a file.\n\
875The globals and locals are dictionaries, defaulting to the current\n\
876globals and locals. If only globals is given, locals defaults to it.";
877
878
Guido van Rossum79f25d91997-04-29 20:08:16 +0000879static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000880builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000881{
Guido van Rossum950ff291998-06-29 13:38:57 +0000882 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000885 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000886 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000887 result = PyObject_GetAttr(v, name);
888 if (result == NULL && dflt != NULL) {
889 PyErr_Clear();
890 Py_INCREF(dflt);
891 result = dflt;
892 }
893 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894}
895
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000896static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000897"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000899Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
900When a default argument is given, it is returned when the attribute doesn't\n\
901exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902
903
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000905builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000906{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000908
Guido van Rossum43713e52000-02-29 13:59:29 +0000909 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000910 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 d = PyEval_GetGlobals();
912 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000913 return d;
914}
915
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000916static char globals_doc[] =
917"globals() -> dictionary\n\
918\n\
919Return the dictionary containing the current scope's global variables.";
920
921
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000923builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000924{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925 PyObject *v;
926 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000927
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000928 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000929 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000931 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000933 Py_INCREF(Py_False);
934 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000935 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000937 Py_INCREF(Py_True);
938 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000939}
940
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000941static char hasattr_doc[] =
942"hasattr(object, name) -> Boolean\n\
943\n\
944Return whether the object has an attribute with the given name.\n\
945(This is done by calling getattr(object, name) and catching exceptions.)";
946
947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000949builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000950{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000952
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000954 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000955 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000956}
957
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000958static char id_doc[] =
959"id(object) -> integer\n\
960\n\
961Return the identity of an object. This is guaranteed to be unique among\n\
962simultaneously existing objects. (Hint: it's the object's memory address.)";
963
964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000966builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000967{
968 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000969 PyObject *it; /* the iterator object */
970 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000971 } sequence;
972
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000974 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000975 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976 register int i, j;
977
Guido van Rossum79f25d91997-04-29 20:08:16 +0000978 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000979 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 PyErr_SetString(PyExc_TypeError,
981 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000982 return NULL;
983 }
984
Guido van Rossum79f25d91997-04-29 20:08:16 +0000985 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000987
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000988 if (func == Py_None && n == 1) {
989 /* map(None, S) is the same as list(S). */
990 return PySequence_List(PyTuple_GetItem(args, 1));
991 }
992
Tim Peters4e9afdc2001-05-03 23:54:49 +0000993 /* Get space for sequence descriptors. Must NULL out the iterator
994 * pointers so that jumping to Fail_2 later doesn't see trash.
995 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
997 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000998 return NULL;
999 }
1000 for (i = 0; i < n; ++i) {
1001 seqs[i].it = (PyObject*)NULL;
1002 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001003 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001004
Tim Peters4e9afdc2001-05-03 23:54:49 +00001005 /* Do a first pass to obtain iterators for the arguments, and set len
1006 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +00001007 */
Tim Peters4e9afdc2001-05-03 23:54:49 +00001008 len = 0;
1009 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
1010 PyObject *curseq;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001011 int curlen;
Guido van Rossumad991772001-01-12 16:03:05 +00001012
Tim Peters4e9afdc2001-05-03 23:54:49 +00001013 /* Get iterator. */
1014 curseq = PyTuple_GetItem(args, i+1);
1015 sqp->it = PyObject_GetIter(curseq);
1016 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001017 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001019 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +00001020 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001021 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022 goto Fail_2;
1023 }
1024
Tim Peters4e9afdc2001-05-03 23:54:49 +00001025 /* Update len. */
1026 curlen = -1; /* unknown */
1027 if (PySequence_Check(curseq) &&
1028 curseq->ob_type->tp_as_sequence->sq_length) {
1029 curlen = PySequence_Size(curseq);
1030 if (curlen < 0)
1031 PyErr_Clear();
1032 }
Tim Peters748b8bb2001-04-28 08:20:22 +00001033 if (curlen < 0)
Tim Peters4e9afdc2001-05-03 23:54:49 +00001034 curlen = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +00001035 if (curlen > len)
1036 len = curlen;
1037 }
1038
Tim Peters4e9afdc2001-05-03 23:54:49 +00001039 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001040 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001041 goto Fail_2;
1042
Tim Peters4e9afdc2001-05-03 23:54:49 +00001043 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001044 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001046 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001047
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001049 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001050 else if ((alist = PyTuple_New(n)) == NULL)
1051 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001052
1053 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001054 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001055 Py_INCREF(Py_None);
1056 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001057 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001058 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001059 item = PyIter_Next(sqp->it);
1060 if (item)
1061 ++numactive;
1062 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001063 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001064 Py_XDECREF(alist);
1065 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001066 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001067 Py_INCREF(Py_None);
1068 item = Py_None;
1069 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001070 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001071 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001072 if (alist)
1073 PyTuple_SET_ITEM(alist, j, item);
1074 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001075 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001076 }
1077
Guido van Rossum32120311995-07-10 13:52:21 +00001078 if (!alist)
1079 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001080
Tim Peters4e9afdc2001-05-03 23:54:49 +00001081 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001083 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001084 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001085
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001087 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001088 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001089 value = PyEval_CallObject(func, alist);
1090 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001091 if (value == NULL)
1092 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001093 }
1094 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001095 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001096 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001097 if (status < 0)
1098 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001099 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001100 else if (PyList_SetItem(result, i, value) < 0)
1101 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001102 }
1103
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001104 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1105 goto Fail_1;
1106
Tim Peters4e9afdc2001-05-03 23:54:49 +00001107 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001108
Guido van Rossum12d12c51993-10-26 17:58:25 +00001109Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001111Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001112 result = NULL;
1113Succeed:
1114 assert(seqs);
1115 for (i = 0; i < n; ++i)
1116 Py_XDECREF(seqs[i].it);
1117 PyMem_DEL(seqs);
1118 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001119}
1120
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001121static char map_doc[] =
1122"map(function, sequence[, sequence, ...]) -> list\n\
1123\n\
1124Return a list of the results of applying the function to the items of\n\
1125the argument sequence(s). If more than one sequence is given, the\n\
1126function is called with an argument list consisting of the corresponding\n\
1127item of each sequence, substituting None for missing values when not all\n\
1128sequences have the same length. If the function is None, return a list of\n\
1129the items of the sequence (or a list of tuples if more than one sequence).";
1130
1131
Guido van Rossum79f25d91997-04-29 20:08:16 +00001132static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001133builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001134{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001135 PyObject *v;
1136 PyObject *name;
1137 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001138
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001139 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001140 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001142 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143 Py_INCREF(Py_None);
1144 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001145}
1146
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001147static char setattr_doc[] =
1148"setattr(object, name, value)\n\
1149\n\
1150Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1151``x.y = v''.";
1152
1153
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001155builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001156{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001157 PyObject *v;
1158 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001159
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001160 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001161 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001163 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001164 Py_INCREF(Py_None);
1165 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001166}
1167
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001169"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001170\n\
1171Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1172``del x.y''.";
1173
1174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001176builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001177{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001179 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001180
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001182 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001183 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001184 if (x == -1)
1185 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001187}
1188
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001189static char hash_doc[] =
1190"hash(object) -> integer\n\
1191\n\
1192Return a hash value for the object. Two objects with the same value have\n\
1193the same hash value. The reverse is not necessarily true, but likely.";
1194
1195
Guido van Rossum79f25d91997-04-29 20:08:16 +00001196static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001197builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001198{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001199 PyObject *v;
1200 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001201
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001203 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001204
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001205 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001206 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001208 "hex() argument can't be converted to hex");
1209 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001210 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001211 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001212}
1213
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214static char hex_doc[] =
1215"hex(number) -> string\n\
1216\n\
1217Return the hexadecimal representation of an integer or long integer.";
1218
1219
Tim Petersdbd9ba62000-07-09 03:09:57 +00001220static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001221
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001223builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001224{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001226 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227 PyObject *res;
1228 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229
1230 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001231 if (line == NULL)
1232 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001234 return NULL;
1235 while (*str == ' ' || *str == '\t')
1236 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237 globals = PyEval_GetGlobals();
1238 locals = PyEval_GetLocals();
1239 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1240 if (PyDict_SetItemString(globals, "__builtins__",
1241 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001242 return NULL;
1243 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001244 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001245 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001246 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001247}
1248
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001249static char input_doc[] =
1250"input([prompt]) -> value\n\
1251\n\
1252Equivalent to eval(raw_input(prompt)).";
1253
1254
Guido van Rossume8811f81997-02-14 15:48:05 +00001255static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001256builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001257{
1258 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001259 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001260 return NULL;
1261 Py_INCREF(s);
1262 PyString_InternInPlace(&s);
1263 return s;
1264}
1265
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001266static char intern_doc[] =
1267"intern(string) -> string\n\
1268\n\
1269``Intern'' the given string. This enters the string in the (global)\n\
1270table of interned strings whose purpose is to speed up dictionary lookups.\n\
1271Return the string itself or the previously interned string object with the\n\
1272same value.";
1273
1274
Guido van Rossum79f25d91997-04-29 20:08:16 +00001275static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001276builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001277{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001278 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001279 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001280
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001281 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001282 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001283 if (base == -909)
1284 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001285 else if (PyString_Check(v))
1286 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1287 else if (PyUnicode_Check(v))
1288 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1289 PyUnicode_GET_SIZE(v),
1290 base);
1291 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001292 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001293 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001294 return NULL;
1295 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001296}
1297
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001298static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001299"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001300\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001301Convert a string or number to an integer, if possible. A floating point\n\
1302argument will be truncated towards zero (this does not include a string\n\
1303representation of a floating point number!) When converting a string, use\n\
1304the optional base. It is an error to supply a base when converting a\n\
1305non-string.";
1306
1307
1308static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001309builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001310{
1311 PyObject *v;
1312 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001313
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001314 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1315 return NULL;
1316 if (base == -909)
1317 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001318 else if (PyString_Check(v))
1319 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1320 else if (PyUnicode_Check(v))
1321 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1322 PyUnicode_GET_SIZE(v),
1323 base);
1324 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001325 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001326 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001327 return NULL;
1328 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001329}
1330
1331static char long_doc[] =
1332"long(x) -> long integer\n\
1333long(x, base) -> long integer\n\
1334\n\
1335Convert a string or number to a long integer, if possible. A floating\n\
1336point argument will be truncated towards zero (this does not include a\n\
1337string representation of a floating point number!) When converting a\n\
1338string, use the given base. It is an error to supply a base when\n\
1339converting a non-string.";
1340
1341
1342static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001343builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001344{
1345 PyObject *v;
1346
1347 if (!PyArg_ParseTuple(args, "O:float", &v))
1348 return NULL;
1349 if (PyString_Check(v))
1350 return PyFloat_FromString(v, NULL);
1351 return PyNumber_Float(v);
1352}
1353
1354static char float_doc[] =
1355"float(x) -> floating point number\n\
1356\n\
1357Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001358
1359
Guido van Rossum79f25d91997-04-29 20:08:16 +00001360static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001361builtin_iter(PyObject *self, PyObject *args)
1362{
1363 PyObject *v, *w = NULL;
1364
1365 if (!PyArg_ParseTuple(args, "O|O:iter", &v, &w))
1366 return NULL;
1367 if (w == NULL)
1368 return PyObject_GetIter(v);
1369 if (!PyCallable_Check(v)) {
1370 PyErr_SetString(PyExc_TypeError,
1371 "iter(v, w): v must be callable");
1372 return NULL;
1373 }
1374 return PyCallIter_New(v, w);
1375}
1376
1377static char iter_doc[] =
1378"iter(collection) -> iterator\n\
1379iter(callable, sentinel) -> iterator\n\
1380\n\
1381Get an iterator from an object. In the first form, the argument must\n\
1382supply its own iterator, or be a sequence.\n\
1383In the second form, the callable is called until it returns the sentinel.";
1384
1385
1386static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001387builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001388{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001389 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001390 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001391
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001393 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001394 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001395 if (res < 0 && PyErr_Occurred())
1396 return NULL;
1397 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001398}
1399
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001400static char len_doc[] =
1401"len(object) -> integer\n\
1402\n\
1403Return the number of items of a sequence or mapping.";
1404
1405
Guido van Rossum79f25d91997-04-29 20:08:16 +00001406static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001407builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001408{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001409 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001410
Guido van Rossum79f25d91997-04-29 20:08:16 +00001411 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001412 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001413 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001414}
1415
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001416static char list_doc[] =
1417"list(sequence) -> list\n\
1418\n\
1419Return a new list whose items are the same as those of the argument sequence.";
1420
Guido van Rossum8861b741996-07-30 16:49:37 +00001421
1422static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001423builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001424{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001425 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001426
Guido van Rossum09df08a1998-05-22 00:51:39 +00001427 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001428
Guido van Rossum09df08a1998-05-22 00:51:39 +00001429 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1430 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001431
Guido van Rossum09df08a1998-05-22 00:51:39 +00001432 /* This swapping of stop and start is to maintain similarity with
1433 range(). */
1434 if (stop == NULL) {
1435 stop = start;
1436 start = NULL;
1437 }
1438 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001439}
1440
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001442"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001443\n\
1444Create a slice object. This is used for slicing by the Numeric extensions.";
1445
1446
Guido van Rossum79f25d91997-04-29 20:08:16 +00001447static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001448builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001449{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001450 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001451
Guido van Rossum43713e52000-02-29 13:59:29 +00001452 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001453 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001454 d = PyEval_GetLocals();
1455 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001456 return d;
1457}
1458
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001459static char locals_doc[] =
1460"locals() -> dictionary\n\
1461\n\
1462Return the dictionary containing the current scope's local variables.";
1463
1464
Guido van Rossum79f25d91997-04-29 20:08:16 +00001465static PyObject *
Guido van Rossum53451b32001-01-17 15:47:24 +00001466min_max(PyObject *args, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001467{
Tim Petersc3074532001-05-03 07:00:32 +00001468 PyObject *v, *w, *x, *it;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001469
Guido van Rossum79f25d91997-04-29 20:08:16 +00001470 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001471 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001472 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001473 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001474
1475 it = PyObject_GetIter(v);
1476 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001477 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001478
1479 w = NULL; /* the result */
Tim Petersf4848da2001-05-05 00:14:56 +00001480 for (;;) {
Tim Petersc3074532001-05-03 07:00:32 +00001481 x = PyIter_Next(it);
Guido van Rossum2d951851994-08-29 12:52:16 +00001482 if (x == NULL) {
Tim Petersc3074532001-05-03 07:00:32 +00001483 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001484 Py_XDECREF(w);
1485 Py_DECREF(it);
1486 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001487 }
Tim Petersc3074532001-05-03 07:00:32 +00001488 break;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001489 }
Tim Petersc3074532001-05-03 07:00:32 +00001490
Guido van Rossum2d951851994-08-29 12:52:16 +00001491 if (w == NULL)
1492 w = x;
1493 else {
Guido van Rossum53451b32001-01-17 15:47:24 +00001494 int cmp = PyObject_RichCompareBool(x, w, op);
1495 if (cmp > 0) {
1496 Py_DECREF(w);
1497 w = x;
1498 }
1499 else if (cmp < 0) {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001500 Py_DECREF(x);
Tim Petersc3074532001-05-03 07:00:32 +00001501 Py_DECREF(w);
1502 Py_DECREF(it);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001503 return NULL;
1504 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001505 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001506 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001507 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001508 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001509 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001510 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001511 "min() or max() arg is an empty sequence");
Tim Petersc3074532001-05-03 07:00:32 +00001512 Py_DECREF(it);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001513 return w;
1514}
1515
Guido van Rossum79f25d91997-04-29 20:08:16 +00001516static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001517builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001518{
Guido van Rossum53451b32001-01-17 15:47:24 +00001519 return min_max(v, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001520}
1521
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001522static char min_doc[] =
1523"min(sequence) -> value\n\
1524min(a, b, c, ...) -> value\n\
1525\n\
1526With a single sequence argument, return its smallest item.\n\
1527With two or more arguments, return the smallest argument.";
1528
1529
Guido van Rossum79f25d91997-04-29 20:08:16 +00001530static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001531builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001532{
Guido van Rossum53451b32001-01-17 15:47:24 +00001533 return min_max(v, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001534}
1535
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001536static char max_doc[] =
1537"max(sequence) -> value\n\
1538max(a, b, c, ...) -> value\n\
1539\n\
1540With a single sequence argument, return its largest item.\n\
1541With two or more arguments, return the largest argument.";
1542
1543
Guido van Rossum79f25d91997-04-29 20:08:16 +00001544static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001545builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001546{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001547 PyObject *v;
1548 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001549
Guido van Rossum79f25d91997-04-29 20:08:16 +00001550 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001551 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001552 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1553 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001554 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001555 "oct() argument can't be converted to oct");
1556 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001557 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001558 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001559}
1560
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001561static char oct_doc[] =
1562"oct(number) -> string\n\
1563\n\
1564Return the octal representation of an integer or long integer.";
1565
1566
Guido van Rossum79f25d91997-04-29 20:08:16 +00001567static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001568builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001569{
Mark Hammondef8b6542001-05-13 08:04:26 +00001570 char *name = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001571 char *mode = "r";
1572 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001574
Mark Hammondef8b6542001-05-13 08:04:26 +00001575 if (!PyArg_ParseTuple(args, "et|si:open", Py_FileSystemDefaultEncoding,
1576 &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001577 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001578 f = PyFile_FromString(name, mode);
Mark Hammondef8b6542001-05-13 08:04:26 +00001579 PyMem_Free(name); /* free the encoded string */
Guido van Rossum2d951851994-08-29 12:52:16 +00001580 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001581 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001582 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001583}
1584
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001585static char open_doc[] =
1586"open(filename[, mode[, buffering]]) -> file object\n\
1587\n\
1588Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1589writing or appending. The file will be created if it doesn't exist\n\
1590when opened for writing or appending; it will be truncated when\n\
1591opened for writing. Add a 'b' to the mode for binary files.\n\
1592Add a '+' to the mode to allow simultaneous reading and writing.\n\
1593If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1594buffered, and larger numbers specify the buffer size.";
1595
1596
Guido van Rossum79f25d91997-04-29 20:08:16 +00001597static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001598builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001599{
Guido van Rossum09095f32000-03-10 23:00:52 +00001600 PyObject *obj;
1601 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001602 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001603
Guido van Rossum09095f32000-03-10 23:00:52 +00001604 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001605 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001606
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001607 if (PyString_Check(obj)) {
1608 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001609 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001610 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001611 return PyInt_FromLong(ord);
1612 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001613 } else if (PyUnicode_Check(obj)) {
1614 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001615 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001616 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001617 return PyInt_FromLong(ord);
1618 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001619 } else {
1620 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001621 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001622 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001623 return NULL;
1624 }
1625
Guido van Rossumad991772001-01-12 16:03:05 +00001626 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001627 "ord() expected a character, "
1628 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001629 size);
1630 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001631}
1632
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001633static char ord_doc[] =
1634"ord(c) -> integer\n\
1635\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001636Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001637
1638
Guido van Rossum79f25d91997-04-29 20:08:16 +00001639static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001640builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001641{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001642 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001643
Guido van Rossum79f25d91997-04-29 20:08:16 +00001644 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001645 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001646 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001647}
1648
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001649static char pow_doc[] =
1650"pow(x, y[, z]) -> number\n\
1651\n\
1652With two arguments, equivalent to x**y. With three arguments,\n\
1653equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1654
1655
Guido van Rossum124eff01999-02-23 16:11:01 +00001656/* Return number of items in range/xrange (lo, hi, step). step > 0
1657 * required. Return a value < 0 if & only if the true value is too
1658 * large to fit in a signed long.
1659 */
1660static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001661get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001662{
1663 /* -------------------------------------------------------------
1664 If lo >= hi, the range is empty.
1665 Else if n values are in the range, the last one is
1666 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1667 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1668 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1669 the RHS is non-negative and so truncation is the same as the
1670 floor. Letting M be the largest positive long, the worst case
1671 for the RHS numerator is hi=M, lo=-M-1, and then
1672 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1673 precision to compute the RHS exactly.
1674 ---------------------------------------------------------------*/
1675 long n = 0;
1676 if (lo < hi) {
1677 unsigned long uhi = (unsigned long)hi;
1678 unsigned long ulo = (unsigned long)lo;
1679 unsigned long diff = uhi - ulo - 1;
1680 n = (long)(diff / (unsigned long)step + 1);
1681 }
1682 return n;
1683}
1684
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001686builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001687{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001688 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001689 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001690 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001691
Guido van Rossum79f25d91997-04-29 20:08:16 +00001692 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001693
Guido van Rossum79f25d91997-04-29 20:08:16 +00001694 if (PyTuple_Size(args) <= 1) {
1695 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001696 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001697 &ihigh))
1698 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001699 }
1700 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001702 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001703 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001704 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001705 }
1706 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001707 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001708 return NULL;
1709 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001710 if (istep > 0)
1711 bign = get_len_of_range(ilow, ihigh, istep);
1712 else
1713 bign = get_len_of_range(ihigh, ilow, -istep);
1714 n = (int)bign;
1715 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001716 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001717 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001718 return NULL;
1719 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001721 if (v == NULL)
1722 return NULL;
1723 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001724 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001725 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001726 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001727 return NULL;
1728 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001729 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001730 ilow += istep;
1731 }
1732 return v;
1733}
1734
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001735static char range_doc[] =
1736"range([start,] stop[, step]) -> list of integers\n\
1737\n\
1738Return a list containing an arithmetic progression of integers.\n\
1739range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1740When step is given, it specifies the increment (or decrement).\n\
1741For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1742These are exactly the valid indices for a list of 4 elements.";
1743
1744
Guido van Rossum79f25d91997-04-29 20:08:16 +00001745static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001746builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001747{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001748 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001749 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001750
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751 if (PyTuple_Size(args) <= 1) {
1752 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001753 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001754 &ihigh))
1755 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001756 }
1757 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001759 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001760 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001761 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001762 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001763 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001764 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001765 return NULL;
1766 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001767 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001768 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001769 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001770 n = get_len_of_range(ihigh, ilow, -istep);
1771 if (n < 0) {
1772 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001773 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001774 return NULL;
1775 }
Thomas Woutersefafcea2001-07-09 12:30:54 +00001776 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001777}
1778
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001779static char xrange_doc[] =
1780"xrange([start,] stop[, step]) -> xrange object\n\
1781\n\
1782Like range(), but instead of returning a list, returns an object that\n\
1783generates the numbers in the range on demand. This is slightly slower\n\
1784than range() but more memory efficient.";
1785
1786
Guido van Rossum79f25d91997-04-29 20:08:16 +00001787static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001788builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001789{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001790 PyObject *v = NULL;
1791 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001792
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001794 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001795 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1796 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001797 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001799 char *prompt;
1800 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001802 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001803 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001804 if (po == NULL)
1805 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001806 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001807 if (prompt == NULL)
1808 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001809 }
1810 else {
1811 po = NULL;
1812 prompt = "";
1813 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 s = PyOS_Readline(prompt);
1815 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001816 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001818 return NULL;
1819 }
1820 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001822 result = NULL;
1823 }
1824 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001825 size_t len = strlen(s);
1826 if (len > INT_MAX) {
1827 PyErr_SetString(PyExc_OverflowError, "input too long");
1828 result = NULL;
1829 }
1830 else {
1831 result = PyString_FromStringAndSize(s, (int)(len-1));
1832 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001833 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001834 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001835 return result;
1836 }
Guido van Rossum90933611991-06-07 16:10:43 +00001837 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001839 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001841 return NULL;
1842 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001843 if (Py_FlushLine() != 0 ||
1844 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001845 return NULL;
1846 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001848 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001850 return NULL;
1851 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001852 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001853}
1854
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001855static char raw_input_doc[] =
1856"raw_input([prompt]) -> string\n\
1857\n\
1858Read a string from standard input. The trailing newline is stripped.\n\
1859If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1860On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1861is printed without a trailing newline before reading.";
1862
1863
Guido van Rossum79f25d91997-04-29 20:08:16 +00001864static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001865builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001866{
Tim Peters15d81ef2001-05-04 04:39:21 +00001867 PyObject *seq, *func, *result = NULL, *it;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001868
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001870 return NULL;
1871 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001873
Tim Peters15d81ef2001-05-04 04:39:21 +00001874 it = PyObject_GetIter(seq);
1875 if (it == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 PyErr_SetString(PyExc_TypeError,
Tim Peters15d81ef2001-05-04 04:39:21 +00001877 "reduce() arg 2 must support iteration");
1878 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001879 return NULL;
1880 }
1881
Guido van Rossum79f25d91997-04-29 20:08:16 +00001882 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001883 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001884
Tim Peters15d81ef2001-05-04 04:39:21 +00001885 for (;;) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001887
1888 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889 Py_DECREF(args);
1890 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001891 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001892 }
1893
Tim Peters15d81ef2001-05-04 04:39:21 +00001894 op2 = PyIter_Next(it);
1895 if (op2 == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +00001896 if (PyErr_Occurred())
1897 goto Fail;
1898 break;
Guido van Rossum2d951851994-08-29 12:52:16 +00001899 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001900
Guido van Rossum2d951851994-08-29 12:52:16 +00001901 if (result == NULL)
1902 result = op2;
1903 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904 PyTuple_SetItem(args, 0, result);
1905 PyTuple_SetItem(args, 1, op2);
1906 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001907 goto Fail;
1908 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001909 }
1910
Guido van Rossum79f25d91997-04-29 20:08:16 +00001911 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001912
Guido van Rossum2d951851994-08-29 12:52:16 +00001913 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001914 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001915 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001916
Tim Peters15d81ef2001-05-04 04:39:21 +00001917 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001918 return result;
1919
Guido van Rossum2d951851994-08-29 12:52:16 +00001920Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001921 Py_XDECREF(args);
1922 Py_XDECREF(result);
Tim Peters15d81ef2001-05-04 04:39:21 +00001923 Py_DECREF(it);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001924 return NULL;
1925}
1926
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001927static char reduce_doc[] =
1928"reduce(function, sequence[, initial]) -> value\n\
1929\n\
1930Apply a function of two arguments cumulatively to the items of a sequence,\n\
1931from left to right, so as to reduce the sequence to a single value.\n\
1932For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1933((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1934of the sequence in the calculation, and serves as a default when the\n\
1935sequence is empty.";
1936
1937
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001939builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001940{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001941 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001942
Guido van Rossum79f25d91997-04-29 20:08:16 +00001943 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001944 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001946}
1947
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001948static char reload_doc[] =
1949"reload(module) -> module\n\
1950\n\
1951Reload the module. The module must have been successfully imported before.";
1952
1953
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001955builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001956{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001957 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001958
Guido van Rossum79f25d91997-04-29 20:08:16 +00001959 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001960 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001962}
1963
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001964static char repr_doc[] =
1965"repr(object) -> string\n\
1966\n\
1967Return the canonical string representation of the object.\n\
1968For most object types, eval(repr(object)) == object.";
1969
1970
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001972builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001973{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001974 double x;
1975 double f;
1976 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001977 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001978
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001980 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001981 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001982 i = abs(ndigits);
1983 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001984 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001985 if (ndigits < 0)
1986 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001987 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001988 x *= f;
1989 if (x >= 0.0)
1990 x = floor(x + 0.5);
1991 else
1992 x = ceil(x - 0.5);
1993 if (ndigits < 0)
1994 x *= f;
1995 else
1996 x /= f;
1997 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001998}
1999
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002000static char round_doc[] =
2001"round(number[, ndigits]) -> floating point number\n\
2002\n\
2003Round a number to a given precision in decimal digits (default 0 digits).\n\
2004This always returns a floating point number. Precision may be negative.";
2005
2006
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002008builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00002009{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002010 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002011
Guido van Rossum79f25d91997-04-29 20:08:16 +00002012 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00002013 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002014 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002015}
2016
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002017static char str_doc[] =
2018"str(object) -> string\n\
2019\n\
2020Return a nice string representation of the object.\n\
2021If the argument is a string, the return value is the same object.";
2022
2023
Guido van Rossum79f25d91997-04-29 20:08:16 +00002024static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002025builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +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:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002030 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00002031 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00002032}
2033
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002034static char tuple_doc[] =
2035"tuple(sequence) -> list\n\
2036\n\
2037Return a tuple whose items are the same as those of the argument sequence.\n\
2038If the argument is a tuple, 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_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +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:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002047 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002048 v = (PyObject *)v->ob_type;
2049 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002050 return v;
2051}
2052
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002053static char type_doc[] =
2054"type(object) -> type object\n\
2055\n\
2056Return the type of the object.";
2057
2058
Guido van Rossum79f25d91997-04-29 20:08:16 +00002059static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002060builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002061{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002062 PyObject *v = NULL;
2063 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002064
Guido van Rossum79f25d91997-04-29 20:08:16 +00002065 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002066 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002067 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002068 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002069 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002070 if (!PyErr_Occurred())
2071 PyErr_SetString(PyExc_SystemError,
2072 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002073 }
2074 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002075 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002076 }
2077 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002078 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002079 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002080 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002081 "vars() argument must have __dict__ attribute");
2082 return NULL;
2083 }
2084 }
2085 return d;
2086}
2087
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002088static char vars_doc[] =
2089"vars([object]) -> dictionary\n\
2090\n\
2091Without arguments, equivalent to locals().\n\
2092With an argument, equivalent to object.__dict__.";
2093
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002094static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002095builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002096{
2097 PyObject *inst;
2098 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00002099 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002100
Guido van Rossum43713e52000-02-29 13:59:29 +00002101 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002102 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002103
Guido van Rossum823649d2001-03-21 18:40:58 +00002104 retval = PyObject_IsInstance(inst, cls);
2105 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00002106 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002107 return PyInt_FromLong(retval);
2108}
2109
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002110static char isinstance_doc[] =
2111"isinstance(object, class-or-type) -> Boolean\n\
2112\n\
2113Return whether an object is an instance of a class or of a subclass thereof.\n\
2114With a type as second argument, return whether that is the object's type.";
2115
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002116
2117static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002118builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002119{
2120 PyObject *derived;
2121 PyObject *cls;
2122 int retval;
2123
Guido van Rossum43713e52000-02-29 13:59:29 +00002124 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002125 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002126
Guido van Rossum823649d2001-03-21 18:40:58 +00002127 retval = PyObject_IsSubclass(derived, cls);
2128 if (retval < 0)
2129 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002130 return PyInt_FromLong(retval);
2131}
2132
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002133static char issubclass_doc[] =
2134"issubclass(C, B) -> Boolean\n\
2135\n\
2136Return whether class C is a subclass (i.e., a derived class) of class B.";
2137
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002138
Barry Warsawbd599b52000-08-03 15:45:29 +00002139static PyObject*
2140builtin_zip(PyObject *self, PyObject *args)
2141{
2142 PyObject *ret;
2143 int itemsize = PySequence_Length(args);
Tim Peters8572b4f2001-05-06 01:05:02 +00002144 int i;
2145 PyObject *itlist; /* tuple of iterators */
Barry Warsawbd599b52000-08-03 15:45:29 +00002146
2147 if (itemsize < 1) {
2148 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002149 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002150 return NULL;
2151 }
2152 /* args must be a tuple */
2153 assert(PyTuple_Check(args));
2154
Tim Peters8572b4f2001-05-06 01:05:02 +00002155 /* allocate result list */
Barry Warsawbd599b52000-08-03 15:45:29 +00002156 if ((ret = PyList_New(0)) == NULL)
2157 return NULL;
2158
Tim Peters8572b4f2001-05-06 01:05:02 +00002159 /* obtain iterators */
2160 itlist = PyTuple_New(itemsize);
2161 if (itlist == NULL)
2162 goto Fail_ret;
2163 for (i = 0; i < itemsize; ++i) {
2164 PyObject *item = PyTuple_GET_ITEM(args, i);
2165 PyObject *it = PyObject_GetIter(item);
2166 if (it == NULL) {
2167 if (PyErr_ExceptionMatches(PyExc_TypeError))
2168 PyErr_Format(PyExc_TypeError,
2169 "zip argument #%d must support iteration",
2170 i+1);
2171 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002172 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002173 PyTuple_SET_ITEM(itlist, i, it);
2174 }
Barry Warsawbd599b52000-08-03 15:45:29 +00002175
Tim Peters8572b4f2001-05-06 01:05:02 +00002176 /* build result into ret list */
2177 for (;;) {
2178 int status;
2179 PyObject *next = PyTuple_New(itemsize);
2180 if (!next)
2181 goto Fail_ret_itlist;
2182
2183 for (i = 0; i < itemsize; i++) {
2184 PyObject *it = PyTuple_GET_ITEM(itlist, i);
2185 PyObject *item = PyIter_Next(it);
Barry Warsawbd599b52000-08-03 15:45:29 +00002186 if (!item) {
Tim Peters8572b4f2001-05-06 01:05:02 +00002187 if (PyErr_Occurred()) {
2188 Py_DECREF(ret);
2189 ret = NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002190 }
2191 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002192 Py_DECREF(itlist);
2193 return ret;
Barry Warsawbd599b52000-08-03 15:45:29 +00002194 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002195 PyTuple_SET_ITEM(next, i, item);
Barry Warsawbd599b52000-08-03 15:45:29 +00002196 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002197
2198 status = PyList_Append(ret, next);
Barry Warsawbd599b52000-08-03 15:45:29 +00002199 Py_DECREF(next);
Tim Peters8572b4f2001-05-06 01:05:02 +00002200 if (status < 0)
2201 goto Fail_ret_itlist;
Barry Warsawbd599b52000-08-03 15:45:29 +00002202 }
Tim Peters8572b4f2001-05-06 01:05:02 +00002203
2204Fail_ret_itlist:
2205 Py_DECREF(itlist);
2206Fail_ret:
2207 Py_DECREF(ret);
2208 return NULL;
Barry Warsawbd599b52000-08-03 15:45:29 +00002209}
2210
2211
2212static char zip_doc[] =
2213"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2214\n\
2215Return a list of tuples, where each tuple contains the i-th element\n\
2216from each of the argument sequences. The returned list is truncated\n\
2217in length to the length of the shortest argument sequence.";
2218
2219
Guido van Rossum79f25d91997-04-29 20:08:16 +00002220static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002221 {"__import__", builtin___import__, 1, import_doc},
2222 {"abs", builtin_abs, 1, abs_doc},
2223 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002224 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002225 {"callable", builtin_callable, 1, callable_doc},
2226 {"chr", builtin_chr, 1, chr_doc},
2227 {"cmp", builtin_cmp, 1, cmp_doc},
2228 {"coerce", builtin_coerce, 1, coerce_doc},
2229 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002230#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002231 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002232#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002233 {"delattr", builtin_delattr, 1, delattr_doc},
2234 {"dir", builtin_dir, 1, dir_doc},
2235 {"divmod", builtin_divmod, 1, divmod_doc},
2236 {"eval", builtin_eval, 1, eval_doc},
2237 {"execfile", builtin_execfile, 1, execfile_doc},
2238 {"filter", builtin_filter, 1, filter_doc},
2239 {"float", builtin_float, 1, float_doc},
2240 {"getattr", builtin_getattr, 1, getattr_doc},
2241 {"globals", builtin_globals, 1, globals_doc},
2242 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2243 {"hash", builtin_hash, 1, hash_doc},
2244 {"hex", builtin_hex, 1, hex_doc},
2245 {"id", builtin_id, 1, id_doc},
2246 {"input", builtin_input, 1, input_doc},
2247 {"intern", builtin_intern, 1, intern_doc},
2248 {"int", builtin_int, 1, int_doc},
2249 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2250 {"issubclass", builtin_issubclass, 1, issubclass_doc},
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002251 {"iter", builtin_iter, 1, iter_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002252 {"len", builtin_len, 1, len_doc},
2253 {"list", builtin_list, 1, list_doc},
2254 {"locals", builtin_locals, 1, locals_doc},
2255 {"long", builtin_long, 1, long_doc},
2256 {"map", builtin_map, 1, map_doc},
2257 {"max", builtin_max, 1, max_doc},
2258 {"min", builtin_min, 1, min_doc},
2259 {"oct", builtin_oct, 1, oct_doc},
2260 {"open", builtin_open, 1, open_doc},
2261 {"ord", builtin_ord, 1, ord_doc},
2262 {"pow", builtin_pow, 1, pow_doc},
2263 {"range", builtin_range, 1, range_doc},
2264 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2265 {"reduce", builtin_reduce, 1, reduce_doc},
2266 {"reload", builtin_reload, 1, reload_doc},
2267 {"repr", builtin_repr, 1, repr_doc},
2268 {"round", builtin_round, 1, round_doc},
2269 {"setattr", builtin_setattr, 1, setattr_doc},
2270 {"slice", builtin_slice, 1, slice_doc},
2271 {"str", builtin_str, 1, str_doc},
2272 {"tuple", builtin_tuple, 1, tuple_doc},
2273 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002274 {"unicode", builtin_unicode, 1, unicode_doc},
2275 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002276 {"vars", builtin_vars, 1, vars_doc},
2277 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002278 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002279 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002280};
2281
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002282static char builtin_doc[] =
2283"Built-in functions, exceptions, and other objects.\n\
2284\n\
2285Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2286
Guido van Rossum25ce5661997-08-02 03:10:38 +00002287PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002288_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002289{
Fred Drake5550de32000-06-20 04:54:19 +00002290 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002291 mod = Py_InitModule4("__builtin__", builtin_methods,
2292 builtin_doc, (PyObject *)NULL,
2293 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002294 if (mod == NULL)
2295 return NULL;
2296 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002297 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2298 return NULL;
2299 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2300 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002301 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002302 Py_NotImplemented) < 0)
2303 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002304 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2305 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2306 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002307 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002308 }
2309 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002310
Guido van Rossum25ce5661997-08-02 03:10:38 +00002311 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002312}
2313
Guido van Rossume77a7571993-11-03 15:01:26 +00002314/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002315
Guido van Rossum79f25d91997-04-29 20:08:16 +00002316static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002317filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002318{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002319 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002320 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002321 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002322
Guido van Rossumb7b45621995-08-04 04:07:45 +00002323 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002324 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002325 return tuple;
2326 }
2327
Guido van Rossum79f25d91997-04-29 20:08:16 +00002328 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002329 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002330
Guido van Rossum12d12c51993-10-26 17:58:25 +00002331 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002332 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002333 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002334
Guido van Rossum79f25d91997-04-29 20:08:16 +00002335 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002336 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002337 if (func == Py_None) {
2338 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002339 good = item;
2340 }
2341 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002342 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002343 if (arg == NULL)
2344 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002345 good = PyEval_CallObject(func, arg);
2346 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002347 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002348 goto Fail_1;
2349 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002350 ok = PyObject_IsTrue(good);
2351 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002352 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002353 Py_INCREF(item);
2354 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002355 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002356 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002357 }
2358
Tim Peters4324aa32001-05-28 22:30:08 +00002359 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002360 return NULL;
2361
Guido van Rossum12d12c51993-10-26 17:58:25 +00002362 return result;
2363
Guido van Rossum12d12c51993-10-26 17:58:25 +00002364Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002365 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002366 return NULL;
2367}
2368
2369
Guido van Rossume77a7571993-11-03 15:01:26 +00002370/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002371
Guido van Rossum79f25d91997-04-29 20:08:16 +00002372static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002373filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002374{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002375 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002376 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002377 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002378
Guido van Rossum79f25d91997-04-29 20:08:16 +00002379 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002380 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002381 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002382 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002383 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002384 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002385 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002386
Guido van Rossum12d12c51993-10-26 17:58:25 +00002387 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002388 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002389 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002390
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002391 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2392 if (item == NULL)
2393 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002394 arg = Py_BuildValue("(O)", item);
Tim Peters388ed082001-04-07 20:34:48 +00002395 if (arg == NULL) {
2396 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002397 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002398 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002399 good = PyEval_CallObject(func, arg);
2400 Py_DECREF(arg);
Tim Peters388ed082001-04-07 20:34:48 +00002401 if (good == NULL) {
2402 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002403 goto Fail_1;
Tim Peters388ed082001-04-07 20:34:48 +00002404 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002405 ok = PyObject_IsTrue(good);
2406 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002407 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002408 PyString_AS_STRING((PyStringObject *)result)[j++] =
2409 PyString_AS_STRING((PyStringObject *)item)[0];
Tim Peters388ed082001-04-07 20:34:48 +00002410 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002411 }
2412
Guido van Rossum79f25d91997-04-29 20:08:16 +00002413 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002414 return NULL;
2415
Guido van Rossum12d12c51993-10-26 17:58:25 +00002416 return result;
2417
Guido van Rossum12d12c51993-10-26 17:58:25 +00002418Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002419 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002420 return NULL;
2421}