blob: fd587a093ccf3efb97f4e31152cfe2fe8cf552dc [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009******************************************************************/
10
Guido van Rossum3f5da241990-12-20 15:06:42 +000011/* Built-in functions */
12
Guido van Rossum79f25d91997-04-29 20:08:16 +000013#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000014
15#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +000016#include "compile.h"
17#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000018
Guido van Rossum6bf62da1997-04-11 20:37:35 +000019#include <ctype.h>
20
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000021#ifdef HAVE_UNISTD_H
22#include <unistd.h>
23#endif
Jack Jansen41aa8e52000-07-03 21:39:47 +000024#ifdef HAVE_LIMITS_H
25#include <limits.h>
26#endif
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000027
Guido van Rossum12d12c51993-10-26 17:58:25 +000028/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000029static PyObject *filterstring(PyObject *, PyObject *);
30static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000031
Guido van Rossum79f25d91997-04-29 20:08:16 +000032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000033builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000034{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000035 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000036 PyObject *globals = NULL;
37 PyObject *locals = NULL;
38 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039
Guido van Rossum79f25d91997-04-29 20:08:16 +000040 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000041 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000042 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000043 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044}
45
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000046static char import_doc[] =
47"__import__(name, globals, locals, fromlist) -> module\n\
48\n\
49Import a module. The globals are only used to determine the context;\n\
50they are not modified. The locals are currently unused. The fromlist\n\
51should be a list of names to emulate ``from name import ...'', or an\n\
52empty list to emulate ``import name''.\n\
53When importing a module from a package, note that __import__('A.B', ...)\n\
54returns package A when fromlist is empty, but its submodule B when\n\
55fromlist is not empty.";
56
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057
Guido van Rossum79f25d91997-04-29 20:08:16 +000058static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000059builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000060{
Guido van Rossum79f25d91997-04-29 20:08:16 +000061 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000062
Guido van Rossum79f25d91997-04-29 20:08:16 +000063 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000064 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000065 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000066}
67
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000068static char abs_doc[] =
69"abs(number) -> number\n\
70\n\
71Return the absolute value of the argument.";
72
73
Guido van Rossum79f25d91997-04-29 20:08:16 +000074static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000075builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000076{
Guido van Rossum79f25d91997-04-29 20:08:16 +000077 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000078 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000079
Guido van Rossum79f25d91997-04-29 20:08:16 +000080 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000081 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000082 if (alist != NULL) {
83 if (!PyTuple_Check(alist)) {
84 if (!PySequence_Check(alist)) {
85 PyErr_SetString(PyExc_TypeError,
86 "apply() 2nd argument must be a sequence");
87 return NULL;
88 }
89 t = PySequence_Tuple(alist);
90 if (t == NULL)
91 return NULL;
92 alist = t;
93 }
Guido van Rossum2d951851994-08-29 12:52:16 +000094 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000095 if (kwdict != NULL && !PyDict_Check(kwdict)) {
96 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +000097 "apply() 3rd argument must be dictionary");
Barry Warsaw968f8cb1998-10-01 15:33:12 +000098 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000099 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000100 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
101 finally:
102 Py_XDECREF(t);
103 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000104}
105
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000106static char apply_doc[] =
Fred Drake7b912121999-12-23 14:16:55 +0000107"apply(object, args[, kwargs]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000108\n\
Fred Drake7b912121999-12-23 14:16:55 +0000109Call a callable object with positional arguments taken from the tuple args,\n\
110and keyword arguments taken from the optional dictionary kwargs.\n\
111Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000112
113
Guido van Rossum79f25d91997-04-29 20:08:16 +0000114static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000115builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000116{
117 PyObject *ob;
118 int offset = 0;
119 int size = Py_END_OF_BUFFER;
120
121 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
122 return NULL;
123 return PyBuffer_FromObject(ob, offset, size);
124}
125
126static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000127"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000128\n\
129Creates a new buffer object which references the given object.\n\
130The buffer will reference a slice of the target object from the\n\
131start of the object (or at the specified offset). The slice will\n\
132extend to the end of the target object (or with the specified size).";
133
134
135static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000136builtin_unicode(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000137{
Guido van Rossum3afba762000-04-11 15:38:23 +0000138 PyObject *v;
Guido van Rossum09095f32000-03-10 23:00:52 +0000139 char *encoding = NULL;
140 char *errors = NULL;
141
Guido van Rossum3afba762000-04-11 15:38:23 +0000142 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000143 return NULL;
Marc-André Lemburg1b1bcc92000-07-07 13:48:25 +0000144 return PyUnicode_FromEncodedObject(v, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000145}
146
147static char unicode_doc[] =
148"unicode(string [, encoding[, errors]]) -> object\n\
149\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000150Creates a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000151encoding defaults to the current default string encoding and \n\
152errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000153
154
155static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000156builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000157{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000158 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000159
Guido van Rossum79f25d91997-04-29 20:08:16 +0000160 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000161 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000162 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000163}
164
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000165static char callable_doc[] =
166"callable(object) -> Boolean\n\
167\n\
168Return whether the object is callable (i.e., some kind of function).\n\
169Note that classes are callable, as are instances with a __call__() method.";
170
171
Guido van Rossum79f25d91997-04-29 20:08:16 +0000172static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000173builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000174{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000175 PyObject *func, *seq, *result;
176 PySequenceMethods *sqf;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000177 int len;
178 register int i, j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000179
Guido van Rossum79f25d91997-04-29 20:08:16 +0000180 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000181 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000182
Guido van Rossum79f25d91997-04-29 20:08:16 +0000183 if (PyString_Check(seq)) {
184 PyObject *r = filterstring(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000185 return r;
186 }
187
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188 if (PyTuple_Check(seq)) {
189 PyObject *r = filtertuple(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000190 return r;
191 }
192
Guido van Rossum09df08a1998-05-22 00:51:39 +0000193 sqf = seq->ob_type->tp_as_sequence;
194 if (sqf == NULL || sqf->sq_length == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000195 PyErr_SetString(PyExc_TypeError,
Guido van Rossume77a7571993-11-03 15:01:26 +0000196 "argument 2 to filter() must be a sequence type");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000197 goto Fail_2;
198 }
199
200 if ((len = (*sqf->sq_length)(seq)) < 0)
201 goto Fail_2;
202
Guido van Rossum79f25d91997-04-29 20:08:16 +0000203 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
204 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000205 result = seq;
206 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000207 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000208 if ((result = PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000209 goto Fail_2;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000210 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000211
Guido van Rossum2d951851994-08-29 12:52:16 +0000212 for (i = j = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000213 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000214 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000215
Guido van Rossum2d951851994-08-29 12:52:16 +0000216 if ((item = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +0000217 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000218 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +0000219 break;
220 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000221 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000222 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000223
Guido van Rossum79f25d91997-04-29 20:08:16 +0000224 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000225 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000226 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000227 }
228 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000229 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000230 if (arg == NULL)
231 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000232 good = PyEval_CallObject(func, arg);
233 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000234 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000235 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000236 goto Fail_1;
Guido van Rossum58b68731995-01-10 17:40:55 +0000237 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000238 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000239 ok = PyObject_IsTrue(good);
240 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000241 if (ok) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000242 if (j < len) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000243 if (PyList_SetItem(result, j++, item) < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000244 goto Fail_1;
245 }
246 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000247 int status = PyList_Append(result, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000248 j++;
Barry Warsawfa77e091999-01-28 18:49:12 +0000249 Py_DECREF(item);
250 if (status < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000251 goto Fail_1;
252 }
Guido van Rossum58b68731995-01-10 17:40:55 +0000253 } else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000254 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000255 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000256 }
257
Guido van Rossum12d12c51993-10-26 17:58:25 +0000258
Guido van Rossum79f25d91997-04-29 20:08:16 +0000259 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000260 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000261
Guido van Rossum12d12c51993-10-26 17:58:25 +0000262 return result;
263
Guido van Rossum12d12c51993-10-26 17:58:25 +0000264Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000265 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266Fail_2:
Guido van Rossum12d12c51993-10-26 17:58:25 +0000267 return NULL;
268}
269
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000270static char filter_doc[] =
271"filter(function, sequence) -> list\n\
272\n\
273Return a list containing those items of sequence for which function(item)\n\
274is true. If function is None, return a list of items that are true.";
275
276
Guido van Rossum79f25d91997-04-29 20:08:16 +0000277static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000278builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000279{
280 long x;
281 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000282
Guido van Rossum79f25d91997-04-29 20:08:16 +0000283 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000284 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000285 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000286 PyErr_SetString(PyExc_ValueError,
287 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000288 return NULL;
289 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000290 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000291 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000292}
293
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000294static char chr_doc[] =
295"chr(i) -> character\n\
296\n\
297Return a string of one character with ordinal i; 0 <= i < 256.";
298
299
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000301builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000302{
303 long x;
304 Py_UNICODE s[1];
305
306 if (!PyArg_ParseTuple(args, "l:unichr", &x))
307 return NULL;
308 if (x < 0 || x >= 65536) {
309 PyErr_SetString(PyExc_ValueError,
310 "unichr() arg not in range(65536)");
311 return NULL;
312 }
313 s[0] = (Py_UNICODE)x;
314 return PyUnicode_FromUnicode(s, 1);
315}
316
317static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000318"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000319\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000320Return a Unicode string of one character with ordinal i; 0 <= i < 65536.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000321
322
323static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000324builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000325{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000326 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000327 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000328
Guido van Rossum79f25d91997-04-29 20:08:16 +0000329 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000330 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000331 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000332 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000333 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000334}
335
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000336static char cmp_doc[] =
337"cmp(x, y) -> integer\n\
338\n\
339Return negative if x<y, zero if x==y, positive if x>y.";
340
341
Guido van Rossum79f25d91997-04-29 20:08:16 +0000342static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000343builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000344{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000345 PyObject *v, *w;
346 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000347
Guido van Rossum79f25d91997-04-29 20:08:16 +0000348 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000349 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000350 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000351 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000352 res = Py_BuildValue("(OO)", v, w);
353 Py_DECREF(v);
354 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000355 return res;
356}
357
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000358static char coerce_doc[] =
359"coerce(x, y) -> None or (x1, y1)\n\
360\n\
361When x and y can be coerced to values of the same type, return a tuple\n\
362containing the coerced values. When they can't be coerced, return None.";
363
364
Guido van Rossum79f25d91997-04-29 20:08:16 +0000365static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000366builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000367{
368 char *str;
369 char *filename;
370 char *startstr;
371 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000372
Guido van Rossum79f25d91997-04-29 20:08:16 +0000373 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000374 return NULL;
375 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000376 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000377 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000378 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000379 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000380 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000381 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382 PyErr_SetString(PyExc_ValueError,
Guido van Rossum872537c1995-07-07 22:43:42 +0000383 "compile() mode must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000384 return NULL;
385 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000386 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000387}
388
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000389static char compile_doc[] =
390"compile(source, filename, mode) -> code object\n\
391\n\
392Compile the source string (a Python module, statement or expression)\n\
393into a code object that can be executed by the exec statement or eval().\n\
394The filename will be used for run-time error messages.\n\
395The mode must be 'exec' to compile a module, 'single' to compile a\n\
396single (interactive) statement, or 'eval' to compile an expression.";
397
398
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000399#ifndef WITHOUT_COMPLEX
400
Guido van Rossum79f25d91997-04-29 20:08:16 +0000401static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000402complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000403{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000404 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000405 const char *s, *start;
406 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000407 double x=0.0, y=0.0, z;
408 int got_re=0, got_im=0, done=0;
409 int digit_or_dot;
410 int sw_error=0;
411 int sign;
412 char buffer[256]; /* For errors */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000413 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000414
Guido van Rossum9e896b32000-04-05 20:11:21 +0000415 if (PyString_Check(v)) {
416 s = PyString_AS_STRING(v);
417 len = PyString_GET_SIZE(v);
418 }
419 else if (PyUnicode_Check(v)) {
420 char s_buffer[256];
421
422 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
423 PyErr_SetString(PyExc_ValueError,
424 "complex() literal too large to convert");
425 return NULL;
426 }
427 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
428 PyUnicode_GET_SIZE(v),
429 s_buffer,
430 NULL))
431 return NULL;
432 s = s_buffer;
433 len = strlen(s);
434 }
435 else if (PyObject_AsCharBuffer(v, &s, &len)) {
436 PyErr_SetString(PyExc_TypeError,
437 "complex() needs a string first argument");
438 return NULL;
439 }
Guido van Rossum11950231999-03-25 21:16:07 +0000440
441 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000442 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000443 while (*s && isspace(Py_CHARMASK(*s)))
444 s++;
445 if (s[0] == '\0') {
446 PyErr_SetString(PyExc_ValueError,
447 "empty string for complex()");
448 return NULL;
449 }
450
451 z = -1.0;
452 sign = 1;
453 do {
454
455 switch (*s) {
456
457 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000458 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000459 PyErr_SetString(
460 PyExc_ValueError,
461 "null byte in argument for complex()");
462 return NULL;
463 }
464 if(!done) sw_error=1;
465 break;
466
467 case '-':
468 sign = -1;
469 /* Fallthrough */
470 case '+':
471 if (done) sw_error=1;
472 s++;
473 if ( *s=='\0'||*s=='+'||*s=='-' ||
474 isspace(Py_CHARMASK(*s)) ) sw_error=1;
475 break;
476
477 case 'J':
478 case 'j':
479 if (got_im || done) {
480 sw_error = 1;
481 break;
482 }
483 if (z<0.0) {
484 y=sign;
485 }
486 else{
487 y=sign*z;
488 }
489 got_im=1;
490 s++;
491 if (*s!='+' && *s!='-' )
492 done=1;
493 break;
494
495 default:
496 if (isspace(Py_CHARMASK(*s))) {
497 while (*s && isspace(Py_CHARMASK(*s)))
498 s++;
499 if (s[0] != '\0')
500 sw_error=1;
501 else
502 done = 1;
503 break;
504 }
505 digit_or_dot =
506 (*s=='.' || isdigit(Py_CHARMASK(*s)));
507 if (done||!digit_or_dot) {
508 sw_error=1;
509 break;
510 }
511 errno = 0;
512 PyFPE_START_PROTECT("strtod", return 0)
513 z = strtod(s, &end) ;
514 PyFPE_END_PROTECT(z)
515 if (errno != 0) {
516 sprintf(buffer,
517 "float() out of range: %.150s", s);
518 PyErr_SetString(
519 PyExc_ValueError,
520 buffer);
521 return NULL;
522 }
523 s=end;
524 if (*s=='J' || *s=='j') {
525
526 break;
527 }
528 if (got_re) {
529 sw_error=1;
530 break;
531 }
532
533 /* accept a real part */
534 x=sign*z;
535 got_re=1;
536 if (got_im) done=1;
537 z = -1.0;
538 sign = 1;
539 break;
540
541 } /* end of switch */
542
543 } while (*s!='\0' && !sw_error);
544
545 if (sw_error) {
546 PyErr_SetString(PyExc_ValueError,
547 "malformed string for complex()");
548 return NULL;
549 }
550
551 return PyComplex_FromDoubles(x,y);
552}
553
554static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000555builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000556{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000557 PyObject *r, *i, *tmp;
558 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000559 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000560 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000561
562 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000564 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000565 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000566 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000567 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000568 nbr->nb_float == NULL ||
569 (i != NULL &&
570 ((nbi = i->ob_type->tp_as_number) == NULL ||
571 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000572 PyErr_SetString(PyExc_TypeError,
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000573 "complex() argument can't be converted to complex");
574 return NULL;
575 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000576 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000577 if (PyInstance_Check(r)) {
578 static PyObject *complexstr;
579 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000580 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000581 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000582 if (complexstr == NULL)
583 return NULL;
584 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000585 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000586 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000588 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000590 if (args == NULL)
591 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000592 r = PyEval_CallObject(f, args);
593 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000594 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000595 if (r == NULL)
596 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000597 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000598 }
599 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600 if (PyComplex_Check(r)) {
601 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000602 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000604 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000605 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000606 else {
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000607 tmp = (*nbr->nb_float)(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000608 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000610 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000611 if (tmp == NULL)
612 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613 cr.real = PyFloat_AsDouble(tmp);
614 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000615 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000616 }
617 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000618 ci.real = 0.0;
619 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000620 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000621 else if (PyComplex_Check(i))
622 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000623 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000624 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000625 if (tmp == NULL)
626 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627 ci.real = PyFloat_AsDouble(tmp);
628 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000629 ci.imag = 0.;
630 }
631 cr.real -= ci.imag;
632 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000634}
635
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000636static char complex_doc[] =
637"complex(real[, imag]) -> complex number\n\
638\n\
639Create a complex number from a real part and an optional imaginary part.\n\
640This is equivalent to (real + imag*1j) where imag defaults to 0.";
641
642
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000643#endif
644
Guido van Rossum79f25d91997-04-29 20:08:16 +0000645static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000646builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000647{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000648 static char *attrlist[] = {"__members__", "__methods__", NULL};
649 PyObject *v = NULL, *l = NULL, *m = NULL;
650 PyObject *d, *x;
651 int i;
652 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000656 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000657 x = PyEval_GetLocals();
658 if (x == NULL)
659 goto error;
660 l = PyMapping_Keys(x);
661 if (l == NULL)
662 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000663 }
664 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000665 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000666 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000667 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000668 else {
669 l = PyMapping_Keys(d);
670 if (l == NULL)
671 PyErr_Clear();
672 Py_DECREF(d);
673 }
674 if (l == NULL) {
675 l = PyList_New(0);
676 if (l == NULL)
677 goto error;
678 }
679 for (s = attrlist; *s != NULL; s++) {
680 m = PyObject_GetAttrString(v, *s);
681 if (m == NULL) {
682 PyErr_Clear();
683 continue;
684 }
685 for (i = 0; ; i++) {
686 x = PySequence_GetItem(m, i);
687 if (x == NULL) {
688 PyErr_Clear();
689 break;
690 }
691 if (PyList_Append(l, x) != 0) {
692 Py_DECREF(x);
693 Py_DECREF(m);
694 goto error;
695 }
696 Py_DECREF(x);
697 }
698 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000699 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000700 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000701 if (PyList_Sort(l) != 0)
702 goto error;
703 return l;
704 error:
705 Py_XDECREF(l);
706 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000707}
708
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000709static char dir_doc[] =
710"dir([object]) -> list of strings\n\
711\n\
712Return an alphabetized list of names comprising (some of) the attributes\n\
713of the given object. Without an argument, the names in the current scope\n\
714are listed. With an instance argument, only the instance attributes are\n\
715returned. With a class argument, attributes of the base class are not\n\
716returned. For other types or arguments, this may list members or methods.";
717
718
Guido van Rossum79f25d91997-04-29 20:08:16 +0000719static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000720builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000721{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000723
Guido van Rossum79f25d91997-04-29 20:08:16 +0000724 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000725 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000726 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000727}
728
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000729static char divmod_doc[] =
730"divmod(x, y) -> (div, mod)\n\
731\n\
732Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
733
734
Guido van Rossum79f25d91997-04-29 20:08:16 +0000735static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000736builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000737{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738 PyObject *cmd;
739 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000740 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000741
Guido van Rossum79f25d91997-04-29 20:08:16 +0000742 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 &PyDict_Type, &globals,
745 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747 if (globals == Py_None) {
748 globals = PyEval_GetGlobals();
749 if (locals == Py_None)
750 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000751 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000752 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000753 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
755 if (PyDict_SetItemString(globals, "__builtins__",
756 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000757 return NULL;
758 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759 if (PyCode_Check(cmd))
760 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
761 if (!PyString_Check(cmd)) {
762 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000763 "eval() argument 1 must be string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000764 return NULL;
765 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000766 str = PyString_AsString(cmd);
Guido van Rossum106f2da2000-06-28 21:12:25 +0000767 if (strlen(str) != (size_t)PyString_Size(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 PyErr_SetString(PyExc_ValueError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000769 "embedded '\\0' in string arg");
770 return NULL;
Guido van Rossumf08ab0a1992-03-04 16:41:41 +0000771 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000772 while (*str == ' ' || *str == '\t')
773 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000774 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000775}
776
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000777static char eval_doc[] =
778"eval(source[, globals[, locals]]) -> value\n\
779\n\
780Evaluate the source in the context of globals and locals.\n\
781The source may be a string representing a Python expression\n\
782or a code object as returned by compile().\n\
783The globals and locals are dictionaries, defaulting to the current\n\
784globals and locals. If only globals is given, locals defaults to it.";
785
786
Guido van Rossum79f25d91997-04-29 20:08:16 +0000787static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000788builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000789{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000790 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 PyObject *globals = Py_None, *locals = Py_None;
792 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000793 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000794
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 &PyDict_Type, &globals,
798 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000799 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800 if (globals == Py_None) {
801 globals = PyEval_GetGlobals();
802 if (locals == Py_None)
803 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000804 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000806 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
808 if (PyDict_SetItemString(globals, "__builtins__",
809 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000810 return NULL;
811 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000813 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000815 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000817 return NULL;
818 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000819 res = PyRun_File(fp, filename, Py_file_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000820 Py_BEGIN_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000821 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 Py_END_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000824}
825
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000826static char execfile_doc[] =
827"execfile(filename[, globals[, locals]])\n\
828\n\
829Read and execute a Python script from a file.\n\
830The globals and locals are dictionaries, defaulting to the current\n\
831globals and locals. If only globals is given, locals defaults to it.";
832
833
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000835builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000836{
Guido van Rossum950ff291998-06-29 13:38:57 +0000837 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000839
Guido van Rossum950ff291998-06-29 13:38:57 +0000840 if (!PyArg_ParseTuple(args, "OS|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000841 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000842 result = PyObject_GetAttr(v, name);
843 if (result == NULL && dflt != NULL) {
844 PyErr_Clear();
845 Py_INCREF(dflt);
846 result = dflt;
847 }
848 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000849}
850
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000851static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000852"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000853\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000854Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
855When a default argument is given, it is returned when the attribute doesn't\n\
856exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000857
858
Guido van Rossum79f25d91997-04-29 20:08:16 +0000859static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000860builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000861{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000863
Guido van Rossum43713e52000-02-29 13:59:29 +0000864 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000865 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 d = PyEval_GetGlobals();
867 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000868 return d;
869}
870
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000871static char globals_doc[] =
872"globals() -> dictionary\n\
873\n\
874Return the dictionary containing the current scope's global variables.";
875
876
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000878builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000879{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880 PyObject *v;
881 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000882
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 if (!PyArg_ParseTuple(args, "OS:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000884 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000886 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000888 Py_INCREF(Py_False);
889 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000890 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000892 Py_INCREF(Py_True);
893 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000894}
895
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000896static char hasattr_doc[] =
897"hasattr(object, name) -> Boolean\n\
898\n\
899Return whether the object has an attribute with the given name.\n\
900(This is done by calling getattr(object, name) and catching exceptions.)";
901
902
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000904builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000905{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000906 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000907
Guido van Rossum79f25d91997-04-29 20:08:16 +0000908 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000909 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000910 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000911}
912
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000913static char id_doc[] =
914"id(object) -> integer\n\
915\n\
916Return the identity of an object. This is guaranteed to be unique among\n\
917simultaneously existing objects. (Hint: it's the object's memory address.)";
918
919
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000921builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000922{
923 typedef struct {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924 PyObject *seq;
925 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000926 int len;
927 } sequence;
928
Guido van Rossum79f25d91997-04-29 20:08:16 +0000929 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000930 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000931 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000932 register int i, j;
933
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000935 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 PyErr_SetString(PyExc_TypeError,
937 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000938 return NULL;
939 }
940
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000942 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000943
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000944 if (func == Py_None && n == 1) {
945 /* map(None, S) is the same as list(S). */
946 return PySequence_List(PyTuple_GetItem(args, 1));
947 }
948
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
950 PyErr_NoMemory();
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000951 goto Fail_2;
952 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000953
Guido van Rossum2d951851994-08-29 12:52:16 +0000954 for (len = 0, i = 0, sqp = seqs; i < n; ++i, ++sqp) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000955 int curlen;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000956 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000957
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958 if ((sqp->seq = PyTuple_GetItem(args, i + 1)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000959 goto Fail_2;
960
Guido van Rossum09df08a1998-05-22 00:51:39 +0000961 sqp->sqf = sqf = sqp->seq->ob_type->tp_as_sequence;
962 if (sqf == NULL ||
963 sqf->sq_length == NULL ||
964 sqf->sq_item == NULL)
965 {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000966 static char errmsg[] =
967 "argument %d to map() must be a sequence object";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000968 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000969
970 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000972 goto Fail_2;
973 }
974
975 if ((curlen = sqp->len = (*sqp->sqf->sq_length)(sqp->seq)) < 0)
976 goto Fail_2;
977
978 if (curlen > len)
979 len = curlen;
980 }
981
Guido van Rossum79f25d91997-04-29 20:08:16 +0000982 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000983 goto Fail_2;
984
Guido van Rossum2d951851994-08-29 12:52:16 +0000985 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000986 PyObject *alist, *item=NULL, *value;
Guido van Rossum2d951851994-08-29 12:52:16 +0000987 int any = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000988
Guido van Rossum79f25d91997-04-29 20:08:16 +0000989 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000990 alist = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +0000991 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992 if ((alist = PyTuple_New(n)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +0000993 goto Fail_1;
994 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000995
996 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000997 if (sqp->len < 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000998 Py_INCREF(Py_None);
999 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001000 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001001 else {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001002 item = (*sqp->sqf->sq_item)(sqp->seq, i);
Guido van Rossum2d951851994-08-29 12:52:16 +00001003 if (item == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001004 if (PyErr_ExceptionMatches(
1005 PyExc_IndexError))
1006 {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001007 PyErr_Clear();
1008 Py_INCREF(Py_None);
1009 item = Py_None;
Guido van Rossum2d951851994-08-29 12:52:16 +00001010 sqp->len = -1;
1011 }
1012 else {
1013 goto Fail_0;
1014 }
1015 }
1016 else
1017 any = 1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001018
Guido van Rossum12d12c51993-10-26 17:58:25 +00001019 }
Guido van Rossum32120311995-07-10 13:52:21 +00001020 if (!alist)
Guido van Rossum2d951851994-08-29 12:52:16 +00001021 break;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001022 if (PyTuple_SetItem(alist, j, item) < 0) {
1023 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001024 goto Fail_0;
Guido van Rossum2d951851994-08-29 12:52:16 +00001025 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001026 continue;
1027
1028 Fail_0:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001029 Py_XDECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001030 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001031 }
1032
Guido van Rossum32120311995-07-10 13:52:21 +00001033 if (!alist)
1034 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001035
1036 if (!any) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001038 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001040
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001042 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001043 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001044 value = PyEval_CallObject(func, alist);
1045 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001046 if (value == NULL)
1047 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001048 }
1049 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001050 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001051 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001052 if (status < 0)
1053 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001054 }
1055 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056 if (PyList_SetItem(result, i, value) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001057 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001058 }
1059 }
1060
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001061 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1062 goto Fail_1;
1063
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064 PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001065 return result;
1066
Guido van Rossum12d12c51993-10-26 17:58:25 +00001067Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001068 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001069Fail_2:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001070 if (seqs) PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001071 return NULL;
1072}
1073
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001074static char map_doc[] =
1075"map(function, sequence[, sequence, ...]) -> list\n\
1076\n\
1077Return a list of the results of applying the function to the items of\n\
1078the argument sequence(s). If more than one sequence is given, the\n\
1079function is called with an argument list consisting of the corresponding\n\
1080item of each sequence, substituting None for missing values when not all\n\
1081sequences have the same length. If the function is None, return a list of\n\
1082the items of the sequence (or a list of tuples if more than one sequence).";
1083
1084
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001086builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001087{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001088 PyObject *v;
1089 PyObject *name;
1090 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001091
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092 if (!PyArg_ParseTuple(args, "OSO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001093 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001095 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 Py_INCREF(Py_None);
1097 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001098}
1099
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001100static char setattr_doc[] =
1101"setattr(object, name, value)\n\
1102\n\
1103Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1104``x.y = v''.";
1105
1106
Guido van Rossum79f25d91997-04-29 20:08:16 +00001107static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001108builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001109{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001110 PyObject *v;
1111 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001112
Guido van Rossum79f25d91997-04-29 20:08:16 +00001113 if (!PyArg_ParseTuple(args, "OS:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001114 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001115 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001116 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 Py_INCREF(Py_None);
1118 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001119}
1120
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001121static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001122"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001123\n\
1124Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1125``del x.y''.";
1126
1127
Guido van Rossum79f25d91997-04-29 20:08:16 +00001128static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001129builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001130{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001131 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001132 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001133
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001135 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001137 if (x == -1)
1138 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001139 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001140}
1141
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001142static char hash_doc[] =
1143"hash(object) -> integer\n\
1144\n\
1145Return a hash value for the object. Two objects with the same value have\n\
1146the same hash value. The reverse is not necessarily true, but likely.";
1147
1148
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001150builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001151{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152 PyObject *v;
1153 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001154
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001156 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001157
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001159 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001160 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001161 "hex() argument can't be converted to hex");
1162 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001163 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001164 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001165}
1166
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001167static char hex_doc[] =
1168"hex(number) -> string\n\
1169\n\
1170Return the hexadecimal representation of an integer or long integer.";
1171
1172
Tim Petersdbd9ba62000-07-09 03:09:57 +00001173static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001176builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001177{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001179 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001180 PyObject *res;
1181 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001182
1183 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001184 if (line == NULL)
1185 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001187 return NULL;
1188 while (*str == ' ' || *str == '\t')
1189 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190 globals = PyEval_GetGlobals();
1191 locals = PyEval_GetLocals();
1192 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1193 if (PyDict_SetItemString(globals, "__builtins__",
1194 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001195 return NULL;
1196 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001197 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001200}
1201
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001202static char input_doc[] =
1203"input([prompt]) -> value\n\
1204\n\
1205Equivalent to eval(raw_input(prompt)).";
1206
1207
Guido van Rossume8811f81997-02-14 15:48:05 +00001208static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001209builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001210{
1211 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001212 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001213 return NULL;
1214 Py_INCREF(s);
1215 PyString_InternInPlace(&s);
1216 return s;
1217}
1218
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001219static char intern_doc[] =
1220"intern(string) -> string\n\
1221\n\
1222``Intern'' the given string. This enters the string in the (global)\n\
1223table of interned strings whose purpose is to speed up dictionary lookups.\n\
1224Return the string itself or the previously interned string object with the\n\
1225same value.";
1226
1227
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001229builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001230{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001231 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001232 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001234 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001235 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001236 if (base == -909)
1237 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001238 else if (PyString_Check(v))
1239 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1240 else if (PyUnicode_Check(v))
1241 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1242 PyUnicode_GET_SIZE(v),
1243 base);
1244 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001245 PyErr_SetString(PyExc_TypeError,
1246 "can't convert non-string with explicit base");
1247 return NULL;
1248 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001249}
1250
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001251static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001252"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001254Convert a string or number to an integer, if possible. A floating point\n\
1255argument will be truncated towards zero (this does not include a string\n\
1256representation of a floating point number!) When converting a string, use\n\
1257the optional base. It is an error to supply a base when converting a\n\
1258non-string.";
1259
1260
1261static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001262builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001263{
1264 PyObject *v;
1265 int base = -909; /* unlikely! */
1266
1267 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1268 return NULL;
1269 if (base == -909)
1270 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001271 else if (PyString_Check(v))
1272 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1273 else if (PyUnicode_Check(v))
1274 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1275 PyUnicode_GET_SIZE(v),
1276 base);
1277 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001278 PyErr_SetString(PyExc_TypeError,
1279 "can't convert non-string with explicit base");
1280 return NULL;
1281 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001282}
1283
1284static char long_doc[] =
1285"long(x) -> long integer\n\
1286long(x, base) -> long integer\n\
1287\n\
1288Convert a string or number to a long integer, if possible. A floating\n\
1289point argument will be truncated towards zero (this does not include a\n\
1290string representation of a floating point number!) When converting a\n\
1291string, use the given base. It is an error to supply a base when\n\
1292converting a non-string.";
1293
1294
1295static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001296builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001297{
1298 PyObject *v;
1299
1300 if (!PyArg_ParseTuple(args, "O:float", &v))
1301 return NULL;
1302 if (PyString_Check(v))
1303 return PyFloat_FromString(v, NULL);
1304 return PyNumber_Float(v);
1305}
1306
1307static char float_doc[] =
1308"float(x) -> floating point number\n\
1309\n\
1310Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001311
1312
Guido van Rossum79f25d91997-04-29 20:08:16 +00001313static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001314builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001315{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001316 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001317 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001318
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001321 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001322 if (res < 0 && PyErr_Occurred())
1323 return NULL;
1324 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001325}
1326
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001327static char len_doc[] =
1328"len(object) -> integer\n\
1329\n\
1330Return the number of items of a sequence or mapping.";
1331
1332
Guido van Rossum79f25d91997-04-29 20:08:16 +00001333static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001334builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001335{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001336 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001337
Guido van Rossum79f25d91997-04-29 20:08:16 +00001338 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001339 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001340 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001341}
1342
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001343static char list_doc[] =
1344"list(sequence) -> list\n\
1345\n\
1346Return a new list whose items are the same as those of the argument sequence.";
1347
Guido van Rossum8861b741996-07-30 16:49:37 +00001348
1349static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001350builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001351{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001352 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001353
Guido van Rossum09df08a1998-05-22 00:51:39 +00001354 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001355
Guido van Rossum09df08a1998-05-22 00:51:39 +00001356 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1357 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001358
Guido van Rossum09df08a1998-05-22 00:51:39 +00001359 /* This swapping of stop and start is to maintain similarity with
1360 range(). */
1361 if (stop == NULL) {
1362 stop = start;
1363 start = NULL;
1364 }
1365 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001366}
1367
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001368static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001369"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001370\n\
1371Create a slice object. This is used for slicing by the Numeric extensions.";
1372
1373
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001375builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001376{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001378
Guido van Rossum43713e52000-02-29 13:59:29 +00001379 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001380 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001381 d = PyEval_GetLocals();
1382 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001383 return d;
1384}
1385
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001386static char locals_doc[] =
1387"locals() -> dictionary\n\
1388\n\
1389Return the dictionary containing the current scope's local variables.";
1390
1391
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001393min_max(PyObject *args, int sign)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001394{
Guido van Rossum2d951851994-08-29 12:52:16 +00001395 int i;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001396 PyObject *v, *w, *x;
1397 PySequenceMethods *sq;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001398
Guido van Rossum79f25d91997-04-29 20:08:16 +00001399 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001400 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001402 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001403 sq = v->ob_type->tp_as_sequence;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001404 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001405 PyErr_SetString(PyExc_TypeError,
1406 "min() or max() of non-sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001407 return NULL;
1408 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001409 w = NULL;
1410 for (i = 0; ; i++) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00001411 x = (*sq->sq_item)(v, i); /* Implies INCREF */
Guido van Rossum2d951851994-08-29 12:52:16 +00001412 if (x == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001413 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001414 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001415 break;
1416 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001417 Py_XDECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001418 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001419 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001420 if (w == NULL)
1421 w = x;
1422 else {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001423 int c = PyObject_Compare(x, w);
1424 if (c && PyErr_Occurred()) {
1425 Py_DECREF(x);
1426 Py_XDECREF(w);
1427 return NULL;
1428 }
1429 if (c * sign > 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001430 Py_DECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001431 w = x;
1432 }
1433 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001434 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001435 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001436 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001437 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001438 PyErr_SetString(PyExc_ValueError,
1439 "min() or max() of empty sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001440 return w;
1441}
1442
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001444builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001445{
1446 return min_max(v, -1);
1447}
1448
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449static char min_doc[] =
1450"min(sequence) -> value\n\
1451min(a, b, c, ...) -> value\n\
1452\n\
1453With a single sequence argument, return its smallest item.\n\
1454With two or more arguments, return the smallest argument.";
1455
1456
Guido van Rossum79f25d91997-04-29 20:08:16 +00001457static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001458builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001459{
1460 return min_max(v, 1);
1461}
1462
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001463static char max_doc[] =
1464"max(sequence) -> value\n\
1465max(a, b, c, ...) -> value\n\
1466\n\
1467With a single sequence argument, return its largest item.\n\
1468With two or more arguments, return the largest argument.";
1469
1470
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001472builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001473{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474 PyObject *v;
1475 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001476
Guido van Rossum79f25d91997-04-29 20:08:16 +00001477 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001478 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001479 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1480 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001482 "oct() argument can't be converted to oct");
1483 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001484 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001485 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001486}
1487
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001488static char oct_doc[] =
1489"oct(number) -> string\n\
1490\n\
1491Return the octal representation of an integer or long integer.";
1492
1493
Guido van Rossum79f25d91997-04-29 20:08:16 +00001494static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001495builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001496{
Guido van Rossum2d951851994-08-29 12:52:16 +00001497 char *name;
1498 char *mode = "r";
1499 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001500 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001501
Guido van Rossum79f25d91997-04-29 20:08:16 +00001502 if (!PyArg_ParseTuple(args, "s|si:open", &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001503 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001504 f = PyFile_FromString(name, mode);
Guido van Rossum2d951851994-08-29 12:52:16 +00001505 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001506 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001507 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001508}
1509
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001510static char open_doc[] =
1511"open(filename[, mode[, buffering]]) -> file object\n\
1512\n\
1513Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1514writing or appending. The file will be created if it doesn't exist\n\
1515when opened for writing or appending; it will be truncated when\n\
1516opened for writing. Add a 'b' to the mode for binary files.\n\
1517Add a '+' to the mode to allow simultaneous reading and writing.\n\
1518If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1519buffered, and larger numbers specify the buffer size.";
1520
1521
Guido van Rossum79f25d91997-04-29 20:08:16 +00001522static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001523builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001524{
Guido van Rossum09095f32000-03-10 23:00:52 +00001525 PyObject *obj;
1526 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001527 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001528
Guido van Rossum09095f32000-03-10 23:00:52 +00001529 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001530 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001531
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001532 if (PyString_Check(obj)) {
1533 size = PyString_GET_SIZE(obj);
1534 if (size == 1)
1535 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
1536 } else if (PyUnicode_Check(obj)) {
1537 size = PyUnicode_GET_SIZE(obj);
1538 if (size == 1)
1539 ord = (long)*PyUnicode_AS_UNICODE(obj);
1540 } else {
1541 PyErr_Format(PyExc_TypeError,
Fred Drake078b24f2000-04-13 02:42:50 +00001542 "expected string or Unicode character, " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001543 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001544 return NULL;
1545 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001546 if (size == 1)
1547 return PyInt_FromLong(ord);
Guido van Rossum09095f32000-03-10 23:00:52 +00001548
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001549 PyErr_Format(PyExc_TypeError,
1550 "expected a character, length-%d string found",
1551 size);
1552 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001553}
1554
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001555static char ord_doc[] =
1556"ord(c) -> integer\n\
1557\n\
Fred Drake078b24f2000-04-13 02:42:50 +00001558Return the integer ordinal of a one character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001559
1560
Guido van Rossum79f25d91997-04-29 20:08:16 +00001561static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001562builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001563{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001564 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001565
Guido van Rossum79f25d91997-04-29 20:08:16 +00001566 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001567 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001568 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001569}
1570
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001571static char pow_doc[] =
1572"pow(x, y[, z]) -> number\n\
1573\n\
1574With two arguments, equivalent to x**y. With three arguments,\n\
1575equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1576
1577
Guido van Rossum124eff01999-02-23 16:11:01 +00001578/* Return number of items in range/xrange (lo, hi, step). step > 0
1579 * required. Return a value < 0 if & only if the true value is too
1580 * large to fit in a signed long.
1581 */
1582static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001583get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001584{
1585 /* -------------------------------------------------------------
1586 If lo >= hi, the range is empty.
1587 Else if n values are in the range, the last one is
1588 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1589 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1590 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1591 the RHS is non-negative and so truncation is the same as the
1592 floor. Letting M be the largest positive long, the worst case
1593 for the RHS numerator is hi=M, lo=-M-1, and then
1594 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1595 precision to compute the RHS exactly.
1596 ---------------------------------------------------------------*/
1597 long n = 0;
1598 if (lo < hi) {
1599 unsigned long uhi = (unsigned long)hi;
1600 unsigned long ulo = (unsigned long)lo;
1601 unsigned long diff = uhi - ulo - 1;
1602 n = (long)(diff / (unsigned long)step + 1);
1603 }
1604 return n;
1605}
1606
Guido van Rossum79f25d91997-04-29 20:08:16 +00001607static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001608builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001609{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001610 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001611 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001612 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001613
Guido van Rossum79f25d91997-04-29 20:08:16 +00001614 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001615
Guido van Rossum79f25d91997-04-29 20:08:16 +00001616 if (PyTuple_Size(args) <= 1) {
1617 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001618 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001619 &ihigh))
1620 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001621 }
1622 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001623 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001624 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001625 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001626 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001627 }
1628 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001629 PyErr_SetString(PyExc_ValueError, "zero step for range()");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001630 return NULL;
1631 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001632 if (istep > 0)
1633 bign = get_len_of_range(ilow, ihigh, istep);
1634 else
1635 bign = get_len_of_range(ihigh, ilow, -istep);
1636 n = (int)bign;
1637 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001638 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum124eff01999-02-23 16:11:01 +00001639 "range() has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001640 return NULL;
1641 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001642 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001643 if (v == NULL)
1644 return NULL;
1645 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001646 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001647 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001648 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001649 return NULL;
1650 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001651 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001652 ilow += istep;
1653 }
1654 return v;
1655}
1656
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001657static char range_doc[] =
1658"range([start,] stop[, step]) -> list of integers\n\
1659\n\
1660Return a list containing an arithmetic progression of integers.\n\
1661range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1662When step is given, it specifies the increment (or decrement).\n\
1663For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1664These are exactly the valid indices for a list of 4 elements.";
1665
1666
Guido van Rossum79f25d91997-04-29 20:08:16 +00001667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001668builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001669{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001670 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001671 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001672
Guido van Rossum79f25d91997-04-29 20:08:16 +00001673 if (PyTuple_Size(args) <= 1) {
1674 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001675 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001676 &ihigh))
1677 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001678 }
1679 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001680 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001681 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001682 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001683 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001684 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001685 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001686 PyErr_SetString(PyExc_ValueError, "zero step for xrange()");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001687 return NULL;
1688 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001689 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001690 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001691 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001692 n = get_len_of_range(ihigh, ilow, -istep);
1693 if (n < 0) {
1694 PyErr_SetString(PyExc_OverflowError,
1695 "xrange() has more than sys.maxint items");
1696 return NULL;
1697 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001698 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001699}
1700
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001701static char xrange_doc[] =
1702"xrange([start,] stop[, step]) -> xrange object\n\
1703\n\
1704Like range(), but instead of returning a list, returns an object that\n\
1705generates the numbers in the range on demand. This is slightly slower\n\
1706than range() but more memory efficient.";
1707
1708
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001710builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001711{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001712 PyObject *v = NULL;
1713 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001714
Guido van Rossum79f25d91997-04-29 20:08:16 +00001715 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001716 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1718 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001719 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001721 char *prompt;
1722 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001724 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001725 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001726 if (po == NULL)
1727 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001728 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001729 if (prompt == NULL)
1730 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001731 }
1732 else {
1733 po = NULL;
1734 prompt = "";
1735 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001736 s = PyOS_Readline(prompt);
1737 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001738 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001739 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001740 return NULL;
1741 }
1742 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001743 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001744 result = NULL;
1745 }
1746 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001747 size_t len = strlen(s);
1748 if (len > INT_MAX) {
1749 PyErr_SetString(PyExc_OverflowError, "input too long");
1750 result = NULL;
1751 }
1752 else {
1753 result = PyString_FromStringAndSize(s, (int)(len-1));
1754 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001755 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001756 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001757 return result;
1758 }
Guido van Rossum90933611991-06-07 16:10:43 +00001759 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001760 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001761 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001763 return NULL;
1764 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001765 if (Py_FlushLine() != 0 ||
1766 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001767 return NULL;
1768 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001769 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001770 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001771 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001772 return NULL;
1773 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001774 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001775}
1776
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001777static char raw_input_doc[] =
1778"raw_input([prompt]) -> string\n\
1779\n\
1780Read a string from standard input. The trailing newline is stripped.\n\
1781If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1782On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1783is printed without a trailing newline before reading.";
1784
1785
Guido van Rossum79f25d91997-04-29 20:08:16 +00001786static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001787builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001788{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001789 PyObject *seq, *func, *result = NULL;
1790 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001791 register int i;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001792
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001794 return NULL;
1795 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001797
Guido van Rossum09df08a1998-05-22 00:51:39 +00001798 sqf = seq->ob_type->tp_as_sequence;
1799 if (sqf == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001800 PyErr_SetString(PyExc_TypeError,
Guido van Rossum12d12c51993-10-26 17:58:25 +00001801 "2nd argument to reduce() must be a sequence object");
1802 return NULL;
1803 }
1804
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001806 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001807
Guido van Rossum2d951851994-08-29 12:52:16 +00001808 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001809 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001810
1811 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 Py_DECREF(args);
1813 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001814 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001815 }
1816
Guido van Rossum2d951851994-08-29 12:52:16 +00001817 if ((op2 = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001818 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001820 break;
1821 }
1822 goto Fail;
1823 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001824
Guido van Rossum2d951851994-08-29 12:52:16 +00001825 if (result == NULL)
1826 result = op2;
1827 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 PyTuple_SetItem(args, 0, result);
1829 PyTuple_SetItem(args, 1, op2);
1830 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001831 goto Fail;
1832 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001833 }
1834
Guido van Rossum79f25d91997-04-29 20:08:16 +00001835 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001836
Guido van Rossum2d951851994-08-29 12:52:16 +00001837 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001838 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001839 "reduce of empty sequence with no initial value");
1840
Guido van Rossum12d12c51993-10-26 17:58:25 +00001841 return result;
1842
Guido van Rossum2d951851994-08-29 12:52:16 +00001843Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844 Py_XDECREF(args);
1845 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001846 return NULL;
1847}
1848
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001849static char reduce_doc[] =
1850"reduce(function, sequence[, initial]) -> value\n\
1851\n\
1852Apply a function of two arguments cumulatively to the items of a sequence,\n\
1853from left to right, so as to reduce the sequence to a single value.\n\
1854For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1855((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1856of the sequence in the calculation, and serves as a default when the\n\
1857sequence is empty.";
1858
1859
Guido van Rossum79f25d91997-04-29 20:08:16 +00001860static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001861builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001862{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001863 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001864
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001868}
1869
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001870static char reload_doc[] =
1871"reload(module) -> module\n\
1872\n\
1873Reload the module. The module must have been successfully imported before.";
1874
1875
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001877builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001878{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001880
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001882 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001884}
1885
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001886static char repr_doc[] =
1887"repr(object) -> string\n\
1888\n\
1889Return the canonical string representation of the object.\n\
1890For most object types, eval(repr(object)) == object.";
1891
1892
Guido van Rossum79f25d91997-04-29 20:08:16 +00001893static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001894builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001895{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001896 double x;
1897 double f;
1898 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001899 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001900
Guido van Rossum79f25d91997-04-29 20:08:16 +00001901 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001902 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001903 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001904 i = abs(ndigits);
1905 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001906 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001907 if (ndigits < 0)
1908 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001909 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001910 x *= f;
1911 if (x >= 0.0)
1912 x = floor(x + 0.5);
1913 else
1914 x = ceil(x - 0.5);
1915 if (ndigits < 0)
1916 x *= f;
1917 else
1918 x /= f;
1919 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001920}
1921
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001922static char round_doc[] =
1923"round(number[, ndigits]) -> floating point number\n\
1924\n\
1925Round a number to a given precision in decimal digits (default 0 digits).\n\
1926This always returns a floating point number. Precision may be negative.";
1927
1928
Guido van Rossum79f25d91997-04-29 20:08:16 +00001929static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001930builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001931{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001932 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001933
Guido van Rossum79f25d91997-04-29 20:08:16 +00001934 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001935 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001936 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001937}
1938
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001939static char str_doc[] =
1940"str(object) -> string\n\
1941\n\
1942Return a nice string representation of the object.\n\
1943If the argument is a string, the return value is the same object.";
1944
1945
Guido van Rossum79f25d91997-04-29 20:08:16 +00001946static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001947builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00001948{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001949 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001950
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001952 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001953 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00001954}
1955
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001956static char tuple_doc[] =
1957"tuple(sequence) -> list\n\
1958\n\
1959Return a tuple whose items are the same as those of the argument sequence.\n\
1960If the argument is a tuple, the return value is the same object.";
1961
1962
Guido van Rossum79f25d91997-04-29 20:08:16 +00001963static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001964builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001965{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001966 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001967
Guido van Rossum79f25d91997-04-29 20:08:16 +00001968 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001969 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970 v = (PyObject *)v->ob_type;
1971 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001972 return v;
1973}
1974
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001975static char type_doc[] =
1976"type(object) -> type object\n\
1977\n\
1978Return the type of the object.";
1979
1980
Guido van Rossum79f25d91997-04-29 20:08:16 +00001981static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001982builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001983{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001984 PyObject *v = NULL;
1985 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001986
Guido van Rossum79f25d91997-04-29 20:08:16 +00001987 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001988 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001989 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001991 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 if (!PyErr_Occurred())
1993 PyErr_SetString(PyExc_SystemError,
1994 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001995 }
1996 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001998 }
1999 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002000 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002001 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002003 "vars() argument must have __dict__ attribute");
2004 return NULL;
2005 }
2006 }
2007 return d;
2008}
2009
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002010static char vars_doc[] =
2011"vars([object]) -> dictionary\n\
2012\n\
2013Without arguments, equivalent to locals().\n\
2014With an argument, equivalent to object.__dict__.";
2015
Guido van Rossum668213d1999-06-16 17:28:37 +00002016static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002017abstract_issubclass(PyObject *derived, PyObject *cls, char *err, int first)
Guido van Rossum668213d1999-06-16 17:28:37 +00002018{
2019 static PyObject *__bases__ = NULL;
2020 PyObject *bases;
Guido van Rossum7f851861999-06-17 19:12:39 +00002021 int i, n;
Guido van Rossum668213d1999-06-16 17:28:37 +00002022 int r = 0;
2023
2024 if (__bases__ == NULL) {
2025 __bases__ = PyString_FromString("__bases__");
2026 if (__bases__ == NULL)
2027 return -1;
2028 }
2029
2030 if (first) {
2031 bases = PyObject_GetAttr(cls, __bases__);
2032 if (bases == NULL || !PyTuple_Check(bases)) {
2033 Py_XDECREF(bases);
2034 PyErr_SetString(PyExc_TypeError, err);
2035 return -1;
2036 }
2037 Py_DECREF(bases);
2038 }
2039
2040 if (derived == cls)
2041 return 1;
2042
2043 bases = PyObject_GetAttr(derived, __bases__);
2044 if (bases == NULL || !PyTuple_Check(bases)) {
2045 Py_XDECREF(bases);
2046 PyErr_SetString(PyExc_TypeError, err);
2047 return -1;
2048 }
2049
2050 n = PyTuple_GET_SIZE(bases);
2051 for (i = 0; i < n; i++) {
2052 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i),
2053 cls, err, 0);
2054 if (r != 0)
2055 break;
2056 }
2057
2058 Py_DECREF(bases);
2059
2060 return r;
2061}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002062
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002063static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002064builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002065{
2066 PyObject *inst;
2067 PyObject *cls;
Guido van Rossum668213d1999-06-16 17:28:37 +00002068 PyObject *icls;
2069 static PyObject *__class__ = NULL;
2070 int retval = 0;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002071
Guido van Rossum43713e52000-02-29 13:59:29 +00002072 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002073 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002074
Guido van Rossum668213d1999-06-16 17:28:37 +00002075 if (PyClass_Check(cls)) {
2076 if (PyInstance_Check(inst)) {
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002077 PyObject *inclass =
2078 (PyObject*)((PyInstanceObject*)inst)->in_class;
2079 retval = PyClass_IsSubclass(inclass, cls);
2080 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002081 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002082 else if (PyType_Check(cls)) {
2083 retval = ((PyObject *)(inst->ob_type) == cls);
2084 }
2085 else if (!PyInstance_Check(inst)) {
2086 if (__class__ == NULL) {
2087 __class__ = PyString_FromString("__class__");
2088 if (__class__ == NULL)
2089 return NULL;
2090 }
2091 icls = PyObject_GetAttr(inst, __class__);
2092 if (icls != NULL) {
2093 retval = abstract_issubclass(
2094 icls, cls,
2095 "second argument must be a class",
2096 1);
2097 Py_DECREF(icls);
2098 if (retval < 0)
2099 return NULL;
2100 }
2101 else {
2102 PyErr_SetString(PyExc_TypeError,
2103 "second argument must be a class");
2104 return NULL;
2105 }
2106 }
2107 else {
2108 PyErr_SetString(PyExc_TypeError,
2109 "second argument must be a class");
2110 return NULL;
2111 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002112 return PyInt_FromLong(retval);
2113}
2114
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002115static char isinstance_doc[] =
2116"isinstance(object, class-or-type) -> Boolean\n\
2117\n\
2118Return whether an object is an instance of a class or of a subclass thereof.\n\
2119With a type as second argument, return whether that is the object's type.";
2120
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002121
2122static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002123builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002124{
2125 PyObject *derived;
2126 PyObject *cls;
2127 int retval;
2128
Guido van Rossum43713e52000-02-29 13:59:29 +00002129 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002130 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002131
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002132 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossum668213d1999-06-16 17:28:37 +00002133 retval = abstract_issubclass(
2134 derived, cls, "arguments must be classes", 1);
2135 if (retval < 0)
2136 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002137 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002138 else {
2139 /* shortcut */
2140 if (!(retval = (derived == cls)))
2141 retval = PyClass_IsSubclass(derived, cls);
2142 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002143
2144 return PyInt_FromLong(retval);
2145}
2146
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002147static char issubclass_doc[] =
2148"issubclass(C, B) -> Boolean\n\
2149\n\
2150Return whether class C is a subclass (i.e., a derived class) of class B.";
2151
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002152
Guido van Rossum79f25d91997-04-29 20:08:16 +00002153static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002154 {"__import__", builtin___import__, 1, import_doc},
2155 {"abs", builtin_abs, 1, abs_doc},
2156 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002157 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002158 {"callable", builtin_callable, 1, callable_doc},
2159 {"chr", builtin_chr, 1, chr_doc},
2160 {"cmp", builtin_cmp, 1, cmp_doc},
2161 {"coerce", builtin_coerce, 1, coerce_doc},
2162 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002163#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002164 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002165#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002166 {"delattr", builtin_delattr, 1, delattr_doc},
2167 {"dir", builtin_dir, 1, dir_doc},
2168 {"divmod", builtin_divmod, 1, divmod_doc},
2169 {"eval", builtin_eval, 1, eval_doc},
2170 {"execfile", builtin_execfile, 1, execfile_doc},
2171 {"filter", builtin_filter, 1, filter_doc},
2172 {"float", builtin_float, 1, float_doc},
2173 {"getattr", builtin_getattr, 1, getattr_doc},
2174 {"globals", builtin_globals, 1, globals_doc},
2175 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2176 {"hash", builtin_hash, 1, hash_doc},
2177 {"hex", builtin_hex, 1, hex_doc},
2178 {"id", builtin_id, 1, id_doc},
2179 {"input", builtin_input, 1, input_doc},
2180 {"intern", builtin_intern, 1, intern_doc},
2181 {"int", builtin_int, 1, int_doc},
2182 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2183 {"issubclass", builtin_issubclass, 1, issubclass_doc},
2184 {"len", builtin_len, 1, len_doc},
2185 {"list", builtin_list, 1, list_doc},
2186 {"locals", builtin_locals, 1, locals_doc},
2187 {"long", builtin_long, 1, long_doc},
2188 {"map", builtin_map, 1, map_doc},
2189 {"max", builtin_max, 1, max_doc},
2190 {"min", builtin_min, 1, min_doc},
2191 {"oct", builtin_oct, 1, oct_doc},
2192 {"open", builtin_open, 1, open_doc},
2193 {"ord", builtin_ord, 1, ord_doc},
2194 {"pow", builtin_pow, 1, pow_doc},
2195 {"range", builtin_range, 1, range_doc},
2196 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2197 {"reduce", builtin_reduce, 1, reduce_doc},
2198 {"reload", builtin_reload, 1, reload_doc},
2199 {"repr", builtin_repr, 1, repr_doc},
2200 {"round", builtin_round, 1, round_doc},
2201 {"setattr", builtin_setattr, 1, setattr_doc},
2202 {"slice", builtin_slice, 1, slice_doc},
2203 {"str", builtin_str, 1, str_doc},
2204 {"tuple", builtin_tuple, 1, tuple_doc},
2205 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002206 {"unicode", builtin_unicode, 1, unicode_doc},
2207 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002208 {"vars", builtin_vars, 1, vars_doc},
2209 {"xrange", builtin_xrange, 1, xrange_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002210 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002211};
2212
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002213static char builtin_doc[] =
2214"Built-in functions, exceptions, and other objects.\n\
2215\n\
2216Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2217
Guido van Rossum25ce5661997-08-02 03:10:38 +00002218PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002219_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002220{
Fred Drake5550de32000-06-20 04:54:19 +00002221 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002222 mod = Py_InitModule4("__builtin__", builtin_methods,
2223 builtin_doc, (PyObject *)NULL,
2224 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002225 if (mod == NULL)
2226 return NULL;
2227 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002228 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2229 return NULL;
2230 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2231 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002232 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2233 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2234 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002235 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002236 }
2237 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002238
Guido van Rossum25ce5661997-08-02 03:10:38 +00002239 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002240}
2241
Guido van Rossume77a7571993-11-03 15:01:26 +00002242/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002243
Guido van Rossum79f25d91997-04-29 20:08:16 +00002244static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002245filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002246{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002247 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002248 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002250
Guido van Rossumb7b45621995-08-04 04:07:45 +00002251 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002252 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002253 return tuple;
2254 }
2255
Guido van Rossum79f25d91997-04-29 20:08:16 +00002256 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002257 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002258
Guido van Rossum12d12c51993-10-26 17:58:25 +00002259 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002260 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002261 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002262
Guido van Rossum79f25d91997-04-29 20:08:16 +00002263 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002264 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002265 if (func == Py_None) {
2266 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002267 good = item;
2268 }
2269 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002270 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002271 if (arg == NULL)
2272 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002273 good = PyEval_CallObject(func, arg);
2274 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002275 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002276 goto Fail_1;
2277 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002278 ok = PyObject_IsTrue(good);
2279 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002280 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002281 Py_INCREF(item);
2282 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002283 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002284 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002285 }
2286
Guido van Rossum79f25d91997-04-29 20:08:16 +00002287 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002288 return NULL;
2289
Guido van Rossum12d12c51993-10-26 17:58:25 +00002290 return result;
2291
Guido van Rossum12d12c51993-10-26 17:58:25 +00002292Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002293 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002294 return NULL;
2295}
2296
2297
Guido van Rossume77a7571993-11-03 15:01:26 +00002298/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002299
Guido van Rossum79f25d91997-04-29 20:08:16 +00002300static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002301filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002302{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002303 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002304 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002305 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002306
Guido van Rossum79f25d91997-04-29 20:08:16 +00002307 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002308 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002309 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002310 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002311 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002312 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002313 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002314
Guido van Rossum12d12c51993-10-26 17:58:25 +00002315 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002316 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002317 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002318
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002319 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2320 if (item == NULL)
2321 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002322 arg = Py_BuildValue("(O)", item);
2323 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002324 if (arg == NULL)
2325 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002326 good = PyEval_CallObject(func, arg);
2327 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002328 if (good == NULL)
2329 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002330 ok = PyObject_IsTrue(good);
2331 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002332 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002333 PyString_AS_STRING((PyStringObject *)result)[j++] =
2334 PyString_AS_STRING((PyStringObject *)item)[0];
Guido van Rossum12d12c51993-10-26 17:58:25 +00002335 }
2336
Guido van Rossum79f25d91997-04-29 20:08:16 +00002337 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002338 return NULL;
2339
Guido van Rossum12d12c51993-10-26 17:58:25 +00002340 return result;
2341
Guido van Rossum12d12c51993-10-26 17:58:25 +00002342Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002343 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002344 return NULL;
2345}