blob: a44c976ffb06e0d810a3398492df7a6a38994727 [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 Rossumfe4b6ee1996-08-08 18:49:41 +000019#include "mymath.h"
20
Guido van Rossum6bf62da1997-04-11 20:37:35 +000021#include <ctype.h>
22
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000023#ifdef HAVE_UNISTD_H
24#include <unistd.h>
25#endif
Jack Jansen41aa8e52000-07-03 21:39:47 +000026#ifdef HAVE_LIMITS_H
27#include <limits.h>
28#endif
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000029
Guido van Rossum12d12c51993-10-26 17:58:25 +000030/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000031static PyObject *filterstring(PyObject *, PyObject *);
32static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000033
Guido van Rossum79f25d91997-04-29 20:08:16 +000034static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000035builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000036{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000037 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000038 PyObject *globals = NULL;
39 PyObject *locals = NULL;
40 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000041
Guido van Rossum79f25d91997-04-29 20:08:16 +000042 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000043 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000044 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000045 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046}
47
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000048static char import_doc[] =
49"__import__(name, globals, locals, fromlist) -> module\n\
50\n\
51Import a module. The globals are only used to determine the context;\n\
52they are not modified. The locals are currently unused. The fromlist\n\
53should be a list of names to emulate ``from name import ...'', or an\n\
54empty list to emulate ``import name''.\n\
55When importing a module from a package, note that __import__('A.B', ...)\n\
56returns package A when fromlist is empty, but its submodule B when\n\
57fromlist is not empty.";
58
Guido van Rossum1ae940a1995-01-02 19:04:15 +000059
Guido van Rossum79f25d91997-04-29 20:08:16 +000060static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000061builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000062{
Guido van Rossum79f25d91997-04-29 20:08:16 +000063 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000064
Guido van Rossum79f25d91997-04-29 20:08:16 +000065 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000066 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000067 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000068}
69
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000070static char abs_doc[] =
71"abs(number) -> number\n\
72\n\
73Return the absolute value of the argument.";
74
75
Guido van Rossum79f25d91997-04-29 20:08:16 +000076static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000077builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000078{
Guido van Rossum79f25d91997-04-29 20:08:16 +000079 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000080 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000081
Guido van Rossum79f25d91997-04-29 20:08:16 +000082 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000083 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000084 if (alist != NULL) {
85 if (!PyTuple_Check(alist)) {
86 if (!PySequence_Check(alist)) {
87 PyErr_SetString(PyExc_TypeError,
88 "apply() 2nd argument must be a sequence");
89 return NULL;
90 }
91 t = PySequence_Tuple(alist);
92 if (t == NULL)
93 return NULL;
94 alist = t;
95 }
Guido van Rossum2d951851994-08-29 12:52:16 +000096 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000097 if (kwdict != NULL && !PyDict_Check(kwdict)) {
98 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +000099 "apply() 3rd argument must be dictionary");
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000100 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000101 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000102 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
103 finally:
104 Py_XDECREF(t);
105 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000106}
107
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000108static char apply_doc[] =
Fred Drake7b912121999-12-23 14:16:55 +0000109"apply(object, args[, kwargs]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000110\n\
Fred Drake7b912121999-12-23 14:16:55 +0000111Call a callable object with positional arguments taken from the tuple args,\n\
112and keyword arguments taken from the optional dictionary kwargs.\n\
113Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000114
115
Guido van Rossum79f25d91997-04-29 20:08:16 +0000116static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000117builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000118{
119 PyObject *ob;
120 int offset = 0;
121 int size = Py_END_OF_BUFFER;
122
123 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
124 return NULL;
125 return PyBuffer_FromObject(ob, offset, size);
126}
127
128static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000129"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000130\n\
131Creates a new buffer object which references the given object.\n\
132The buffer will reference a slice of the target object from the\n\
133start of the object (or at the specified offset). The slice will\n\
134extend to the end of the target object (or with the specified size).";
135
136
137static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000138builtin_unicode(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000139{
Guido van Rossum3afba762000-04-11 15:38:23 +0000140 PyObject *v;
Guido van Rossum09095f32000-03-10 23:00:52 +0000141 char *encoding = NULL;
142 char *errors = NULL;
143
Guido van Rossum3afba762000-04-11 15:38:23 +0000144 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000145 return NULL;
Marc-André Lemburg1b1bcc92000-07-07 13:48:25 +0000146 return PyUnicode_FromEncodedObject(v, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000147}
148
149static char unicode_doc[] =
150"unicode(string [, encoding[, errors]]) -> object\n\
151\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000152Creates a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000153encoding defaults to the current default string encoding and \n\
154errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000155
156
157static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000158builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000159{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000160 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000161
Guido van Rossum79f25d91997-04-29 20:08:16 +0000162 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000163 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000164 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000165}
166
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000167static char callable_doc[] =
168"callable(object) -> Boolean\n\
169\n\
170Return whether the object is callable (i.e., some kind of function).\n\
171Note that classes are callable, as are instances with a __call__() method.";
172
173
Guido van Rossum79f25d91997-04-29 20:08:16 +0000174static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000175builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000176{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000177 PyObject *func, *seq, *result;
178 PySequenceMethods *sqf;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000179 int len;
180 register int i, j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000181
Guido van Rossum79f25d91997-04-29 20:08:16 +0000182 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000183 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000184
Guido van Rossum79f25d91997-04-29 20:08:16 +0000185 if (PyString_Check(seq)) {
186 PyObject *r = filterstring(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000187 return r;
188 }
189
Guido van Rossum79f25d91997-04-29 20:08:16 +0000190 if (PyTuple_Check(seq)) {
191 PyObject *r = filtertuple(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000192 return r;
193 }
194
Guido van Rossum09df08a1998-05-22 00:51:39 +0000195 sqf = seq->ob_type->tp_as_sequence;
196 if (sqf == NULL || sqf->sq_length == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000197 PyErr_SetString(PyExc_TypeError,
Guido van Rossume77a7571993-11-03 15:01:26 +0000198 "argument 2 to filter() must be a sequence type");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000199 goto Fail_2;
200 }
201
202 if ((len = (*sqf->sq_length)(seq)) < 0)
203 goto Fail_2;
204
Guido van Rossum79f25d91997-04-29 20:08:16 +0000205 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
206 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207 result = seq;
208 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000209 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000210 if ((result = PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000211 goto Fail_2;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000212 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000213
Guido van Rossum2d951851994-08-29 12:52:16 +0000214 for (i = j = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000215 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000216 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000217
Guido van Rossum2d951851994-08-29 12:52:16 +0000218 if ((item = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +0000219 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000220 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +0000221 break;
222 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000223 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000224 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000225
Guido van Rossum79f25d91997-04-29 20:08:16 +0000226 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000227 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000228 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000229 }
230 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000231 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000232 if (arg == NULL)
233 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000234 good = PyEval_CallObject(func, arg);
235 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000236 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000237 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000238 goto Fail_1;
Guido van Rossum58b68731995-01-10 17:40:55 +0000239 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000240 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000241 ok = PyObject_IsTrue(good);
242 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000243 if (ok) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000244 if (j < len) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000245 if (PyList_SetItem(result, j++, item) < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000246 goto Fail_1;
247 }
248 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000249 int status = PyList_Append(result, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000250 j++;
Barry Warsawfa77e091999-01-28 18:49:12 +0000251 Py_DECREF(item);
252 if (status < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000253 goto Fail_1;
254 }
Guido van Rossum58b68731995-01-10 17:40:55 +0000255 } else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000257 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000258 }
259
Guido van Rossum12d12c51993-10-26 17:58:25 +0000260
Guido van Rossum79f25d91997-04-29 20:08:16 +0000261 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000262 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000263
Guido van Rossum12d12c51993-10-26 17:58:25 +0000264 return result;
265
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000267 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000268Fail_2:
Guido van Rossum12d12c51993-10-26 17:58:25 +0000269 return NULL;
270}
271
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000272static char filter_doc[] =
273"filter(function, sequence) -> list\n\
274\n\
275Return a list containing those items of sequence for which function(item)\n\
276is true. If function is None, return a list of items that are true.";
277
278
Guido van Rossum79f25d91997-04-29 20:08:16 +0000279static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000280builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000281{
282 long x;
283 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000284
Guido van Rossum79f25d91997-04-29 20:08:16 +0000285 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000286 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000287 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000288 PyErr_SetString(PyExc_ValueError,
289 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000290 return NULL;
291 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000292 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000293 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000294}
295
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000296static char chr_doc[] =
297"chr(i) -> character\n\
298\n\
299Return a string of one character with ordinal i; 0 <= i < 256.";
300
301
Guido van Rossum79f25d91997-04-29 20:08:16 +0000302static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000303builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000304{
305 long x;
306 Py_UNICODE s[1];
307
308 if (!PyArg_ParseTuple(args, "l:unichr", &x))
309 return NULL;
310 if (x < 0 || x >= 65536) {
311 PyErr_SetString(PyExc_ValueError,
312 "unichr() arg not in range(65536)");
313 return NULL;
314 }
315 s[0] = (Py_UNICODE)x;
316 return PyUnicode_FromUnicode(s, 1);
317}
318
319static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000320"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000321\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000322Return a Unicode string of one character with ordinal i; 0 <= i < 65536.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000323
324
325static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000326builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000327{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000328 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000329 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000330
Guido van Rossum79f25d91997-04-29 20:08:16 +0000331 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000332 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000333 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000334 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000335 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000336}
337
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000338static char cmp_doc[] =
339"cmp(x, y) -> integer\n\
340\n\
341Return negative if x<y, zero if x==y, positive if x>y.";
342
343
Guido van Rossum79f25d91997-04-29 20:08:16 +0000344static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000345builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000346{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000347 PyObject *v, *w;
348 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000349
Guido van Rossum79f25d91997-04-29 20:08:16 +0000350 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000351 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000352 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000353 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000354 res = Py_BuildValue("(OO)", v, w);
355 Py_DECREF(v);
356 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000357 return res;
358}
359
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000360static char coerce_doc[] =
361"coerce(x, y) -> None or (x1, y1)\n\
362\n\
363When x and y can be coerced to values of the same type, return a tuple\n\
364containing the coerced values. When they can't be coerced, return None.";
365
366
Guido van Rossum79f25d91997-04-29 20:08:16 +0000367static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000368builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000369{
370 char *str;
371 char *filename;
372 char *startstr;
373 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000374
Guido van Rossum79f25d91997-04-29 20:08:16 +0000375 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000376 return NULL;
377 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000378 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000379 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000380 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000381 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000382 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000383 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 PyErr_SetString(PyExc_ValueError,
Guido van Rossum872537c1995-07-07 22:43:42 +0000385 "compile() mode must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000386 return NULL;
387 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000388 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000389}
390
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000391static char compile_doc[] =
392"compile(source, filename, mode) -> code object\n\
393\n\
394Compile the source string (a Python module, statement or expression)\n\
395into a code object that can be executed by the exec statement or eval().\n\
396The filename will be used for run-time error messages.\n\
397The mode must be 'exec' to compile a module, 'single' to compile a\n\
398single (interactive) statement, or 'eval' to compile an expression.";
399
400
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000401#ifndef WITHOUT_COMPLEX
402
Guido van Rossum79f25d91997-04-29 20:08:16 +0000403static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000404complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000405{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000406 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000407 const char *s, *start;
408 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000409 double x=0.0, y=0.0, z;
410 int got_re=0, got_im=0, done=0;
411 int digit_or_dot;
412 int sw_error=0;
413 int sign;
414 char buffer[256]; /* For errors */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000415 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000416
Guido van Rossum9e896b32000-04-05 20:11:21 +0000417 if (PyString_Check(v)) {
418 s = PyString_AS_STRING(v);
419 len = PyString_GET_SIZE(v);
420 }
421 else if (PyUnicode_Check(v)) {
422 char s_buffer[256];
423
424 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
425 PyErr_SetString(PyExc_ValueError,
426 "complex() literal too large to convert");
427 return NULL;
428 }
429 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
430 PyUnicode_GET_SIZE(v),
431 s_buffer,
432 NULL))
433 return NULL;
434 s = s_buffer;
435 len = strlen(s);
436 }
437 else if (PyObject_AsCharBuffer(v, &s, &len)) {
438 PyErr_SetString(PyExc_TypeError,
439 "complex() needs a string first argument");
440 return NULL;
441 }
Guido van Rossum11950231999-03-25 21:16:07 +0000442
443 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000444 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000445 while (*s && isspace(Py_CHARMASK(*s)))
446 s++;
447 if (s[0] == '\0') {
448 PyErr_SetString(PyExc_ValueError,
449 "empty string for complex()");
450 return NULL;
451 }
452
453 z = -1.0;
454 sign = 1;
455 do {
456
457 switch (*s) {
458
459 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000460 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000461 PyErr_SetString(
462 PyExc_ValueError,
463 "null byte in argument for complex()");
464 return NULL;
465 }
466 if(!done) sw_error=1;
467 break;
468
469 case '-':
470 sign = -1;
471 /* Fallthrough */
472 case '+':
473 if (done) sw_error=1;
474 s++;
475 if ( *s=='\0'||*s=='+'||*s=='-' ||
476 isspace(Py_CHARMASK(*s)) ) sw_error=1;
477 break;
478
479 case 'J':
480 case 'j':
481 if (got_im || done) {
482 sw_error = 1;
483 break;
484 }
485 if (z<0.0) {
486 y=sign;
487 }
488 else{
489 y=sign*z;
490 }
491 got_im=1;
492 s++;
493 if (*s!='+' && *s!='-' )
494 done=1;
495 break;
496
497 default:
498 if (isspace(Py_CHARMASK(*s))) {
499 while (*s && isspace(Py_CHARMASK(*s)))
500 s++;
501 if (s[0] != '\0')
502 sw_error=1;
503 else
504 done = 1;
505 break;
506 }
507 digit_or_dot =
508 (*s=='.' || isdigit(Py_CHARMASK(*s)));
509 if (done||!digit_or_dot) {
510 sw_error=1;
511 break;
512 }
513 errno = 0;
514 PyFPE_START_PROTECT("strtod", return 0)
515 z = strtod(s, &end) ;
516 PyFPE_END_PROTECT(z)
517 if (errno != 0) {
518 sprintf(buffer,
519 "float() out of range: %.150s", s);
520 PyErr_SetString(
521 PyExc_ValueError,
522 buffer);
523 return NULL;
524 }
525 s=end;
526 if (*s=='J' || *s=='j') {
527
528 break;
529 }
530 if (got_re) {
531 sw_error=1;
532 break;
533 }
534
535 /* accept a real part */
536 x=sign*z;
537 got_re=1;
538 if (got_im) done=1;
539 z = -1.0;
540 sign = 1;
541 break;
542
543 } /* end of switch */
544
545 } while (*s!='\0' && !sw_error);
546
547 if (sw_error) {
548 PyErr_SetString(PyExc_ValueError,
549 "malformed string for complex()");
550 return NULL;
551 }
552
553 return PyComplex_FromDoubles(x,y);
554}
555
556static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000557builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000558{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559 PyObject *r, *i, *tmp;
560 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000561 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000562 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000563
564 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000565 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000566 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000567 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000568 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000569 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000570 nbr->nb_float == NULL ||
571 (i != NULL &&
572 ((nbi = i->ob_type->tp_as_number) == NULL ||
573 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 PyErr_SetString(PyExc_TypeError,
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000575 "complex() argument can't be converted to complex");
576 return NULL;
577 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000578 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 if (PyInstance_Check(r)) {
580 static PyObject *complexstr;
581 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000582 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000583 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000584 if (complexstr == NULL)
585 return NULL;
586 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000588 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000590 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000591 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000592 if (args == NULL)
593 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 r = PyEval_CallObject(f, args);
595 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000596 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000597 if (r == NULL)
598 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000599 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000600 }
601 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000602 if (PyComplex_Check(r)) {
603 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000604 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000605 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000606 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000607 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000608 else {
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000609 tmp = (*nbr->nb_float)(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000610 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000611 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000612 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000613 if (tmp == NULL)
614 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 cr.real = PyFloat_AsDouble(tmp);
616 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000617 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000618 }
619 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000620 ci.real = 0.0;
621 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000622 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000623 else if (PyComplex_Check(i))
624 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000625 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000626 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000627 if (tmp == NULL)
628 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 ci.real = PyFloat_AsDouble(tmp);
630 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000631 ci.imag = 0.;
632 }
633 cr.real -= ci.imag;
634 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000635 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000636}
637
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000638static char complex_doc[] =
639"complex(real[, imag]) -> complex number\n\
640\n\
641Create a complex number from a real part and an optional imaginary part.\n\
642This is equivalent to (real + imag*1j) where imag defaults to 0.";
643
644
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000645#endif
646
Guido van Rossum79f25d91997-04-29 20:08:16 +0000647static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000648builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000649{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000650 static char *attrlist[] = {"__members__", "__methods__", NULL};
651 PyObject *v = NULL, *l = NULL, *m = NULL;
652 PyObject *d, *x;
653 int i;
654 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000655
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000657 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000658 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000659 x = PyEval_GetLocals();
660 if (x == NULL)
661 goto error;
662 l = PyMapping_Keys(x);
663 if (l == NULL)
664 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000665 }
666 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000668 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000669 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000670 else {
671 l = PyMapping_Keys(d);
672 if (l == NULL)
673 PyErr_Clear();
674 Py_DECREF(d);
675 }
676 if (l == NULL) {
677 l = PyList_New(0);
678 if (l == NULL)
679 goto error;
680 }
681 for (s = attrlist; *s != NULL; s++) {
682 m = PyObject_GetAttrString(v, *s);
683 if (m == NULL) {
684 PyErr_Clear();
685 continue;
686 }
687 for (i = 0; ; i++) {
688 x = PySequence_GetItem(m, i);
689 if (x == NULL) {
690 PyErr_Clear();
691 break;
692 }
693 if (PyList_Append(l, x) != 0) {
694 Py_DECREF(x);
695 Py_DECREF(m);
696 goto error;
697 }
698 Py_DECREF(x);
699 }
700 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000701 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000702 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000703 if (PyList_Sort(l) != 0)
704 goto error;
705 return l;
706 error:
707 Py_XDECREF(l);
708 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000709}
710
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000711static char dir_doc[] =
712"dir([object]) -> list of strings\n\
713\n\
714Return an alphabetized list of names comprising (some of) the attributes\n\
715of the given object. Without an argument, the names in the current scope\n\
716are listed. With an instance argument, only the instance attributes are\n\
717returned. With a class argument, attributes of the base class are not\n\
718returned. For other types or arguments, this may list members or methods.";
719
720
Guido van Rossum79f25d91997-04-29 20:08:16 +0000721static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000722builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000723{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000724 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000725
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000727 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000728 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000729}
730
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731static char divmod_doc[] =
732"divmod(x, y) -> (div, mod)\n\
733\n\
734Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
735
736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000738builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000739{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000740 PyObject *cmd;
741 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000742 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000743
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 &PyDict_Type, &globals,
747 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000748 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 if (globals == Py_None) {
750 globals = PyEval_GetGlobals();
751 if (locals == Py_None)
752 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000753 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000754 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000755 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
757 if (PyDict_SetItemString(globals, "__builtins__",
758 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000759 return NULL;
760 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 if (PyCode_Check(cmd))
762 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
763 if (!PyString_Check(cmd)) {
764 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000765 "eval() argument 1 must be string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000766 return NULL;
767 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768 str = PyString_AsString(cmd);
Guido van Rossum106f2da2000-06-28 21:12:25 +0000769 if (strlen(str) != (size_t)PyString_Size(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyErr_SetString(PyExc_ValueError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000771 "embedded '\\0' in string arg");
772 return NULL;
Guido van Rossumf08ab0a1992-03-04 16:41:41 +0000773 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 while (*str == ' ' || *str == '\t')
775 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000776 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000777}
778
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000779static char eval_doc[] =
780"eval(source[, globals[, locals]]) -> value\n\
781\n\
782Evaluate the source in the context of globals and locals.\n\
783The source may be a string representing a Python expression\n\
784or a code object as returned by compile().\n\
785The globals and locals are dictionaries, defaulting to the current\n\
786globals and locals. If only globals is given, locals defaults to it.";
787
788
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000790builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000791{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000792 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793 PyObject *globals = Py_None, *locals = Py_None;
794 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000795 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000798 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799 &PyDict_Type, &globals,
800 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000801 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000802 if (globals == Py_None) {
803 globals = PyEval_GetGlobals();
804 if (locals == Py_None)
805 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000806 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000808 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000809 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
810 if (PyDict_SetItemString(globals, "__builtins__",
811 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000812 return NULL;
813 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000814 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000815 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000816 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000817 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000819 return NULL;
820 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000821 res = PyRun_File(fp, filename, Py_file_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822 Py_BEGIN_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000823 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000824 Py_END_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000825 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000826}
827
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000828static char execfile_doc[] =
829"execfile(filename[, globals[, locals]])\n\
830\n\
831Read and execute a Python script from a file.\n\
832The globals and locals are dictionaries, defaulting to the current\n\
833globals and locals. If only globals is given, locals defaults to it.";
834
835
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000837builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000838{
Guido van Rossum950ff291998-06-29 13:38:57 +0000839 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000841
Guido van Rossum950ff291998-06-29 13:38:57 +0000842 if (!PyArg_ParseTuple(args, "OS|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000843 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000844 result = PyObject_GetAttr(v, name);
845 if (result == NULL && dflt != NULL) {
846 PyErr_Clear();
847 Py_INCREF(dflt);
848 result = dflt;
849 }
850 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000851}
852
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000853static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000854"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000855\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000856Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
857When a default argument is given, it is returned when the attribute doesn't\n\
858exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000859
860
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000862builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000863{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000865
Guido van Rossum43713e52000-02-29 13:59:29 +0000866 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000867 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 d = PyEval_GetGlobals();
869 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000870 return d;
871}
872
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000873static char globals_doc[] =
874"globals() -> dictionary\n\
875\n\
876Return the dictionary containing the current scope's global variables.";
877
878
Guido van Rossum79f25d91997-04-29 20:08:16 +0000879static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000880builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000881{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 PyObject *v;
883 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000884
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 if (!PyArg_ParseTuple(args, "OS:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000886 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000888 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000890 Py_INCREF(Py_False);
891 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000892 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000894 Py_INCREF(Py_True);
895 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000896}
897
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898static char hasattr_doc[] =
899"hasattr(object, name) -> Boolean\n\
900\n\
901Return whether the object has an attribute with the given name.\n\
902(This is done by calling getattr(object, name) and catching exceptions.)";
903
904
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000906builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000907{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000908 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000909
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000911 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000912 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000913}
914
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000915static char id_doc[] =
916"id(object) -> integer\n\
917\n\
918Return the identity of an object. This is guaranteed to be unique among\n\
919simultaneously existing objects. (Hint: it's the object's memory address.)";
920
921
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000923builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000924{
925 typedef struct {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926 PyObject *seq;
927 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000928 int len;
929 } sequence;
930
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000932 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000933 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000934 register int i, j;
935
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 PyErr_SetString(PyExc_TypeError,
939 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000940 return NULL;
941 }
942
Guido van Rossum79f25d91997-04-29 20:08:16 +0000943 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000945
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000946 if (func == Py_None && n == 1) {
947 /* map(None, S) is the same as list(S). */
948 return PySequence_List(PyTuple_GetItem(args, 1));
949 }
950
Guido van Rossum79f25d91997-04-29 20:08:16 +0000951 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
952 PyErr_NoMemory();
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000953 goto Fail_2;
954 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000955
Guido van Rossum2d951851994-08-29 12:52:16 +0000956 for (len = 0, i = 0, sqp = seqs; i < n; ++i, ++sqp) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000957 int curlen;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000958 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000959
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 if ((sqp->seq = PyTuple_GetItem(args, i + 1)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000961 goto Fail_2;
962
Guido van Rossum09df08a1998-05-22 00:51:39 +0000963 sqp->sqf = sqf = sqp->seq->ob_type->tp_as_sequence;
964 if (sqf == NULL ||
965 sqf->sq_length == NULL ||
966 sqf->sq_item == NULL)
967 {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000968 static char errmsg[] =
969 "argument %d to map() must be a sequence object";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000970 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000971
972 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000974 goto Fail_2;
975 }
976
977 if ((curlen = sqp->len = (*sqp->sqf->sq_length)(sqp->seq)) < 0)
978 goto Fail_2;
979
980 if (curlen > len)
981 len = curlen;
982 }
983
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000985 goto Fail_2;
986
Guido van Rossum2d951851994-08-29 12:52:16 +0000987 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 PyObject *alist, *item=NULL, *value;
Guido van Rossum2d951851994-08-29 12:52:16 +0000989 int any = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000990
Guido van Rossum79f25d91997-04-29 20:08:16 +0000991 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000992 alist = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +0000993 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 if ((alist = PyTuple_New(n)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +0000995 goto Fail_1;
996 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000997
998 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000999 if (sqp->len < 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001000 Py_INCREF(Py_None);
1001 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001002 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001003 else {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001004 item = (*sqp->sqf->sq_item)(sqp->seq, i);
Guido van Rossum2d951851994-08-29 12:52:16 +00001005 if (item == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001006 if (PyErr_ExceptionMatches(
1007 PyExc_IndexError))
1008 {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001009 PyErr_Clear();
1010 Py_INCREF(Py_None);
1011 item = Py_None;
Guido van Rossum2d951851994-08-29 12:52:16 +00001012 sqp->len = -1;
1013 }
1014 else {
1015 goto Fail_0;
1016 }
1017 }
1018 else
1019 any = 1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001020
Guido van Rossum12d12c51993-10-26 17:58:25 +00001021 }
Guido van Rossum32120311995-07-10 13:52:21 +00001022 if (!alist)
Guido van Rossum2d951851994-08-29 12:52:16 +00001023 break;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001024 if (PyTuple_SetItem(alist, j, item) < 0) {
1025 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001026 goto Fail_0;
Guido van Rossum2d951851994-08-29 12:52:16 +00001027 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001028 continue;
1029
1030 Fail_0:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001031 Py_XDECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001032 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001033 }
1034
Guido van Rossum32120311995-07-10 13:52:21 +00001035 if (!alist)
1036 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001037
1038 if (!any) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001039 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001040 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001041 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001042
Guido van Rossum79f25d91997-04-29 20:08:16 +00001043 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001044 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001045 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001046 value = PyEval_CallObject(func, alist);
1047 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001048 if (value == NULL)
1049 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001050 }
1051 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001052 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001053 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001054 if (status < 0)
1055 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001056 }
1057 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001058 if (PyList_SetItem(result, i, value) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001059 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060 }
1061 }
1062
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001063 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1064 goto Fail_1;
1065
Guido van Rossum79f25d91997-04-29 20:08:16 +00001066 PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001067 return result;
1068
Guido van Rossum12d12c51993-10-26 17:58:25 +00001069Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001070 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001071Fail_2:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001072 if (seqs) PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001073 return NULL;
1074}
1075
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001076static char map_doc[] =
1077"map(function, sequence[, sequence, ...]) -> list\n\
1078\n\
1079Return a list of the results of applying the function to the items of\n\
1080the argument sequence(s). If more than one sequence is given, the\n\
1081function is called with an argument list consisting of the corresponding\n\
1082item of each sequence, substituting None for missing values when not all\n\
1083sequences have the same length. If the function is None, return a list of\n\
1084the items of the sequence (or a list of tuples if more than one sequence).";
1085
1086
Guido van Rossum79f25d91997-04-29 20:08:16 +00001087static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001088builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001089{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001090 PyObject *v;
1091 PyObject *name;
1092 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001093
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094 if (!PyArg_ParseTuple(args, "OSO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001095 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001097 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 Py_INCREF(Py_None);
1099 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001100}
1101
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001102static char setattr_doc[] =
1103"setattr(object, name, value)\n\
1104\n\
1105Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1106``x.y = v''.";
1107
1108
Guido van Rossum79f25d91997-04-29 20:08:16 +00001109static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001110builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001111{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001112 PyObject *v;
1113 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001114
Guido van Rossum79f25d91997-04-29 20:08:16 +00001115 if (!PyArg_ParseTuple(args, "OS:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001116 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001118 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001119 Py_INCREF(Py_None);
1120 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001121}
1122
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001123static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001124"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001125\n\
1126Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1127``del x.y''.";
1128
1129
Guido van Rossum79f25d91997-04-29 20:08:16 +00001130static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001131builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001132{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001133 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001134 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001135
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001137 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001139 if (x == -1)
1140 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001142}
1143
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001144static char hash_doc[] =
1145"hash(object) -> integer\n\
1146\n\
1147Return a hash value for the object. Two objects with the same value have\n\
1148the same hash value. The reverse is not necessarily true, but likely.";
1149
1150
Guido van Rossum79f25d91997-04-29 20:08:16 +00001151static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001152builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001153{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154 PyObject *v;
1155 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001156
Guido van Rossum79f25d91997-04-29 20:08:16 +00001157 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001159
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001160 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001161 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001163 "hex() argument can't be converted to hex");
1164 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001165 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001166 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001167}
1168
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001169static char hex_doc[] =
1170"hex(number) -> string\n\
1171\n\
1172Return the hexadecimal representation of an integer or long integer.";
1173
1174
Tim Petersdbd9ba62000-07-09 03:09:57 +00001175static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001176
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001178builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001179{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001180 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001181 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182 PyObject *res;
1183 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001184
1185 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001186 if (line == NULL)
1187 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001189 return NULL;
1190 while (*str == ' ' || *str == '\t')
1191 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192 globals = PyEval_GetGlobals();
1193 locals = PyEval_GetLocals();
1194 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1195 if (PyDict_SetItemString(globals, "__builtins__",
1196 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001197 return NULL;
1198 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001199 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001201 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001202}
1203
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001204static char input_doc[] =
1205"input([prompt]) -> value\n\
1206\n\
1207Equivalent to eval(raw_input(prompt)).";
1208
1209
Guido van Rossume8811f81997-02-14 15:48:05 +00001210static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001211builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001212{
1213 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001214 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001215 return NULL;
1216 Py_INCREF(s);
1217 PyString_InternInPlace(&s);
1218 return s;
1219}
1220
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001221static char intern_doc[] =
1222"intern(string) -> string\n\
1223\n\
1224``Intern'' the given string. This enters the string in the (global)\n\
1225table of interned strings whose purpose is to speed up dictionary lookups.\n\
1226Return the string itself or the previously interned string object with the\n\
1227same value.";
1228
1229
Guido van Rossum79f25d91997-04-29 20:08:16 +00001230static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001231builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001232{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001234 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001235
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001236 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001237 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001238 if (base == -909)
1239 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001240 else if (PyString_Check(v))
1241 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1242 else if (PyUnicode_Check(v))
1243 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1244 PyUnicode_GET_SIZE(v),
1245 base);
1246 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001247 PyErr_SetString(PyExc_TypeError,
1248 "can't convert non-string with explicit base");
1249 return NULL;
1250 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001251}
1252
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001254"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001255\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001256Convert a string or number to an integer, if possible. A floating point\n\
1257argument will be truncated towards zero (this does not include a string\n\
1258representation of a floating point number!) When converting a string, use\n\
1259the optional base. It is an error to supply a base when converting a\n\
1260non-string.";
1261
1262
1263static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001264builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001265{
1266 PyObject *v;
1267 int base = -909; /* unlikely! */
1268
1269 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1270 return NULL;
1271 if (base == -909)
1272 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001273 else if (PyString_Check(v))
1274 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1275 else if (PyUnicode_Check(v))
1276 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1277 PyUnicode_GET_SIZE(v),
1278 base);
1279 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001280 PyErr_SetString(PyExc_TypeError,
1281 "can't convert non-string with explicit base");
1282 return NULL;
1283 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001284}
1285
1286static char long_doc[] =
1287"long(x) -> long integer\n\
1288long(x, base) -> long integer\n\
1289\n\
1290Convert a string or number to a long integer, if possible. A floating\n\
1291point argument will be truncated towards zero (this does not include a\n\
1292string representation of a floating point number!) When converting a\n\
1293string, use the given base. It is an error to supply a base when\n\
1294converting a non-string.";
1295
1296
1297static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001298builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001299{
1300 PyObject *v;
1301
1302 if (!PyArg_ParseTuple(args, "O:float", &v))
1303 return NULL;
1304 if (PyString_Check(v))
1305 return PyFloat_FromString(v, NULL);
1306 return PyNumber_Float(v);
1307}
1308
1309static char float_doc[] =
1310"float(x) -> floating point number\n\
1311\n\
1312Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001313
1314
Guido van Rossum79f25d91997-04-29 20:08:16 +00001315static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001316builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001317{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001319 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001320
Guido van Rossum79f25d91997-04-29 20:08:16 +00001321 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001323 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001324 if (res < 0 && PyErr_Occurred())
1325 return NULL;
1326 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001327}
1328
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001329static char len_doc[] =
1330"len(object) -> integer\n\
1331\n\
1332Return the number of items of a sequence or mapping.";
1333
1334
Guido van Rossum79f25d91997-04-29 20:08:16 +00001335static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001336builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001337{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001338 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001339
Guido van Rossum79f25d91997-04-29 20:08:16 +00001340 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001341 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001342 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001343}
1344
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001345static char list_doc[] =
1346"list(sequence) -> list\n\
1347\n\
1348Return a new list whose items are the same as those of the argument sequence.";
1349
Guido van Rossum8861b741996-07-30 16:49:37 +00001350
1351static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001352builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001353{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001354 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001355
Guido van Rossum09df08a1998-05-22 00:51:39 +00001356 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001357
Guido van Rossum09df08a1998-05-22 00:51:39 +00001358 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1359 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001360
Guido van Rossum09df08a1998-05-22 00:51:39 +00001361 /* This swapping of stop and start is to maintain similarity with
1362 range(). */
1363 if (stop == NULL) {
1364 stop = start;
1365 start = NULL;
1366 }
1367 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001368}
1369
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001370static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001371"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001372\n\
1373Create a slice object. This is used for slicing by the Numeric extensions.";
1374
1375
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001377builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001378{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001379 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001380
Guido van Rossum43713e52000-02-29 13:59:29 +00001381 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001382 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383 d = PyEval_GetLocals();
1384 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001385 return d;
1386}
1387
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001388static char locals_doc[] =
1389"locals() -> dictionary\n\
1390\n\
1391Return the dictionary containing the current scope's local variables.";
1392
1393
Guido van Rossum79f25d91997-04-29 20:08:16 +00001394static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001395min_max(PyObject *args, int sign)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001396{
Guido van Rossum2d951851994-08-29 12:52:16 +00001397 int i;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001398 PyObject *v, *w, *x;
1399 PySequenceMethods *sq;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001400
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001402 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001404 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001405 sq = v->ob_type->tp_as_sequence;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001406 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001407 PyErr_SetString(PyExc_TypeError,
1408 "min() or max() of non-sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001409 return NULL;
1410 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001411 w = NULL;
1412 for (i = 0; ; i++) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00001413 x = (*sq->sq_item)(v, i); /* Implies INCREF */
Guido van Rossum2d951851994-08-29 12:52:16 +00001414 if (x == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001415 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001416 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001417 break;
1418 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001419 Py_XDECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001420 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001421 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001422 if (w == NULL)
1423 w = x;
1424 else {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001425 int c = PyObject_Compare(x, w);
1426 if (c && PyErr_Occurred()) {
1427 Py_DECREF(x);
1428 Py_XDECREF(w);
1429 return NULL;
1430 }
1431 if (c * sign > 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001432 Py_DECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001433 w = x;
1434 }
1435 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001436 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001437 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001438 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001439 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001440 PyErr_SetString(PyExc_ValueError,
1441 "min() or max() of empty sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001442 return w;
1443}
1444
Guido van Rossum79f25d91997-04-29 20:08:16 +00001445static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001446builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001447{
1448 return min_max(v, -1);
1449}
1450
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001451static char min_doc[] =
1452"min(sequence) -> value\n\
1453min(a, b, c, ...) -> value\n\
1454\n\
1455With a single sequence argument, return its smallest item.\n\
1456With two or more arguments, return the smallest argument.";
1457
1458
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001460builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001461{
1462 return min_max(v, 1);
1463}
1464
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001465static char max_doc[] =
1466"max(sequence) -> value\n\
1467max(a, b, c, ...) -> value\n\
1468\n\
1469With a single sequence argument, return its largest item.\n\
1470With two or more arguments, return the largest argument.";
1471
1472
Guido van Rossum79f25d91997-04-29 20:08:16 +00001473static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001474builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001475{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001476 PyObject *v;
1477 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001478
Guido van Rossum79f25d91997-04-29 20:08:16 +00001479 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001480 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001481 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1482 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001483 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001484 "oct() argument can't be converted to oct");
1485 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001486 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001487 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001488}
1489
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001490static char oct_doc[] =
1491"oct(number) -> string\n\
1492\n\
1493Return the octal representation of an integer or long integer.";
1494
1495
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001497builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001498{
Guido van Rossum2d951851994-08-29 12:52:16 +00001499 char *name;
1500 char *mode = "r";
1501 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001502 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001503
Guido van Rossum79f25d91997-04-29 20:08:16 +00001504 if (!PyArg_ParseTuple(args, "s|si:open", &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001505 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001506 f = PyFile_FromString(name, mode);
Guido van Rossum2d951851994-08-29 12:52:16 +00001507 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001508 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001509 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001510}
1511
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001512static char open_doc[] =
1513"open(filename[, mode[, buffering]]) -> file object\n\
1514\n\
1515Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1516writing or appending. The file will be created if it doesn't exist\n\
1517when opened for writing or appending; it will be truncated when\n\
1518opened for writing. Add a 'b' to the mode for binary files.\n\
1519Add a '+' to the mode to allow simultaneous reading and writing.\n\
1520If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1521buffered, and larger numbers specify the buffer size.";
1522
1523
Guido van Rossum79f25d91997-04-29 20:08:16 +00001524static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001525builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001526{
Guido van Rossum09095f32000-03-10 23:00:52 +00001527 PyObject *obj;
1528 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001529 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001530
Guido van Rossum09095f32000-03-10 23:00:52 +00001531 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001532 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001533
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001534 if (PyString_Check(obj)) {
1535 size = PyString_GET_SIZE(obj);
1536 if (size == 1)
1537 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
1538 } else if (PyUnicode_Check(obj)) {
1539 size = PyUnicode_GET_SIZE(obj);
1540 if (size == 1)
1541 ord = (long)*PyUnicode_AS_UNICODE(obj);
1542 } else {
1543 PyErr_Format(PyExc_TypeError,
Fred Drake078b24f2000-04-13 02:42:50 +00001544 "expected string or Unicode character, " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001545 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001546 return NULL;
1547 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001548 if (size == 1)
1549 return PyInt_FromLong(ord);
Guido van Rossum09095f32000-03-10 23:00:52 +00001550
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001551 PyErr_Format(PyExc_TypeError,
1552 "expected a character, length-%d string found",
1553 size);
1554 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001555}
1556
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001557static char ord_doc[] =
1558"ord(c) -> integer\n\
1559\n\
Fred Drake078b24f2000-04-13 02:42:50 +00001560Return the integer ordinal of a one character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001561
1562
Guido van Rossum79f25d91997-04-29 20:08:16 +00001563static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001564builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001565{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001566 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001567
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001569 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001570 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001571}
1572
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001573static char pow_doc[] =
1574"pow(x, y[, z]) -> number\n\
1575\n\
1576With two arguments, equivalent to x**y. With three arguments,\n\
1577equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1578
1579
Guido van Rossum124eff01999-02-23 16:11:01 +00001580/* Return number of items in range/xrange (lo, hi, step). step > 0
1581 * required. Return a value < 0 if & only if the true value is too
1582 * large to fit in a signed long.
1583 */
1584static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001585get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001586{
1587 /* -------------------------------------------------------------
1588 If lo >= hi, the range is empty.
1589 Else if n values are in the range, the last one is
1590 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1591 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1592 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1593 the RHS is non-negative and so truncation is the same as the
1594 floor. Letting M be the largest positive long, the worst case
1595 for the RHS numerator is hi=M, lo=-M-1, and then
1596 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1597 precision to compute the RHS exactly.
1598 ---------------------------------------------------------------*/
1599 long n = 0;
1600 if (lo < hi) {
1601 unsigned long uhi = (unsigned long)hi;
1602 unsigned long ulo = (unsigned long)lo;
1603 unsigned long diff = uhi - ulo - 1;
1604 n = (long)(diff / (unsigned long)step + 1);
1605 }
1606 return n;
1607}
1608
Guido van Rossum79f25d91997-04-29 20:08:16 +00001609static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001610builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001611{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001612 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001613 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001614 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001615
Guido van Rossum79f25d91997-04-29 20:08:16 +00001616 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001617
Guido van Rossum79f25d91997-04-29 20:08:16 +00001618 if (PyTuple_Size(args) <= 1) {
1619 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001620 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001621 &ihigh))
1622 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001623 }
1624 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001626 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001627 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001628 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001629 }
1630 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631 PyErr_SetString(PyExc_ValueError, "zero step for range()");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001632 return NULL;
1633 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001634 if (istep > 0)
1635 bign = get_len_of_range(ilow, ihigh, istep);
1636 else
1637 bign = get_len_of_range(ihigh, ilow, -istep);
1638 n = (int)bign;
1639 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001640 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum124eff01999-02-23 16:11:01 +00001641 "range() has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001642 return NULL;
1643 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001644 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001645 if (v == NULL)
1646 return NULL;
1647 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001648 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001649 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001650 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001651 return NULL;
1652 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001653 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001654 ilow += istep;
1655 }
1656 return v;
1657}
1658
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001659static char range_doc[] =
1660"range([start,] stop[, step]) -> list of integers\n\
1661\n\
1662Return a list containing an arithmetic progression of integers.\n\
1663range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1664When step is given, it specifies the increment (or decrement).\n\
1665For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1666These are exactly the valid indices for a list of 4 elements.";
1667
1668
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001670builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001671{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001672 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001673 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001674
Guido van Rossum79f25d91997-04-29 20:08:16 +00001675 if (PyTuple_Size(args) <= 1) {
1676 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001677 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001678 &ihigh))
1679 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001680 }
1681 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001682 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001683 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001684 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001685 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001686 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001688 PyErr_SetString(PyExc_ValueError, "zero step for xrange()");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001689 return NULL;
1690 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001691 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001692 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001693 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001694 n = get_len_of_range(ihigh, ilow, -istep);
1695 if (n < 0) {
1696 PyErr_SetString(PyExc_OverflowError,
1697 "xrange() has more than sys.maxint items");
1698 return NULL;
1699 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001700 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001701}
1702
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703static char xrange_doc[] =
1704"xrange([start,] stop[, step]) -> xrange object\n\
1705\n\
1706Like range(), but instead of returning a list, returns an object that\n\
1707generates the numbers in the range on demand. This is slightly slower\n\
1708than range() but more memory efficient.";
1709
1710
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001712builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001713{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714 PyObject *v = NULL;
1715 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001716
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001718 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001719 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1720 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001721 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001722 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001723 char *prompt;
1724 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001725 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001726 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001727 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001728 if (po == NULL)
1729 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001731 if (prompt == NULL)
1732 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001733 }
1734 else {
1735 po = NULL;
1736 prompt = "";
1737 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001738 s = PyOS_Readline(prompt);
1739 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001740 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001742 return NULL;
1743 }
1744 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001745 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001746 result = NULL;
1747 }
1748 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001749 size_t len = strlen(s);
1750 if (len > INT_MAX) {
1751 PyErr_SetString(PyExc_OverflowError, "input too long");
1752 result = NULL;
1753 }
1754 else {
1755 result = PyString_FromStringAndSize(s, (int)(len-1));
1756 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001757 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001758 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001759 return result;
1760 }
Guido van Rossum90933611991-06-07 16:10:43 +00001761 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001763 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001764 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001765 return NULL;
1766 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001767 if (Py_FlushLine() != 0 ||
1768 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001769 return NULL;
1770 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001771 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001772 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001773 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001774 return NULL;
1775 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001776 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001777}
1778
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001779static char raw_input_doc[] =
1780"raw_input([prompt]) -> string\n\
1781\n\
1782Read a string from standard input. The trailing newline is stripped.\n\
1783If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1784On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1785is printed without a trailing newline before reading.";
1786
1787
Guido van Rossum79f25d91997-04-29 20:08:16 +00001788static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001789builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001790{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001791 PyObject *seq, *func, *result = NULL;
1792 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001793 register int i;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001794
Guido van Rossum79f25d91997-04-29 20:08:16 +00001795 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001796 return NULL;
1797 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001799
Guido van Rossum09df08a1998-05-22 00:51:39 +00001800 sqf = seq->ob_type->tp_as_sequence;
1801 if (sqf == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001802 PyErr_SetString(PyExc_TypeError,
Guido van Rossum12d12c51993-10-26 17:58:25 +00001803 "2nd argument to reduce() must be a sequence object");
1804 return NULL;
1805 }
1806
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001808 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001809
Guido van Rossum2d951851994-08-29 12:52:16 +00001810 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001812
1813 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 Py_DECREF(args);
1815 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001816 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001817 }
1818
Guido van Rossum2d951851994-08-29 12:52:16 +00001819 if ((op2 = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001820 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001822 break;
1823 }
1824 goto Fail;
1825 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001826
Guido van Rossum2d951851994-08-29 12:52:16 +00001827 if (result == NULL)
1828 result = op2;
1829 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830 PyTuple_SetItem(args, 0, result);
1831 PyTuple_SetItem(args, 1, op2);
1832 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001833 goto Fail;
1834 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001835 }
1836
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001838
Guido van Rossum2d951851994-08-29 12:52:16 +00001839 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001841 "reduce of empty sequence with no initial value");
1842
Guido van Rossum12d12c51993-10-26 17:58:25 +00001843 return result;
1844
Guido van Rossum2d951851994-08-29 12:52:16 +00001845Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001846 Py_XDECREF(args);
1847 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001848 return NULL;
1849}
1850
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001851static char reduce_doc[] =
1852"reduce(function, sequence[, initial]) -> value\n\
1853\n\
1854Apply a function of two arguments cumulatively to the items of a sequence,\n\
1855from left to right, so as to reduce the sequence to a single value.\n\
1856For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1857((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1858of the sequence in the calculation, and serves as a default when the\n\
1859sequence is empty.";
1860
1861
Guido van Rossum79f25d91997-04-29 20:08:16 +00001862static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001863builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001864{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001868 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001870}
1871
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001872static char reload_doc[] =
1873"reload(module) -> module\n\
1874\n\
1875Reload the module. The module must have been successfully imported before.";
1876
1877
Guido van Rossum79f25d91997-04-29 20:08:16 +00001878static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001879builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001880{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001882
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001884 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001885 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001886}
1887
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001888static char repr_doc[] =
1889"repr(object) -> string\n\
1890\n\
1891Return the canonical string representation of the object.\n\
1892For most object types, eval(repr(object)) == object.";
1893
1894
Guido van Rossum79f25d91997-04-29 20:08:16 +00001895static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001896builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001897{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001898 double x;
1899 double f;
1900 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001901 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001902
Guido van Rossum79f25d91997-04-29 20:08:16 +00001903 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001904 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001905 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001906 i = abs(ndigits);
1907 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001908 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001909 if (ndigits < 0)
1910 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001911 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001912 x *= f;
1913 if (x >= 0.0)
1914 x = floor(x + 0.5);
1915 else
1916 x = ceil(x - 0.5);
1917 if (ndigits < 0)
1918 x *= f;
1919 else
1920 x /= f;
1921 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001922}
1923
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001924static char round_doc[] =
1925"round(number[, ndigits]) -> floating point number\n\
1926\n\
1927Round a number to a given precision in decimal digits (default 0 digits).\n\
1928This always returns a floating point number. Precision may be negative.";
1929
1930
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001932builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001933{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001934 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001935
Guido van Rossum79f25d91997-04-29 20:08:16 +00001936 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001937 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001939}
1940
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001941static char str_doc[] =
1942"str(object) -> string\n\
1943\n\
1944Return a nice string representation of the object.\n\
1945If the argument is a string, the return value is the same object.";
1946
1947
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001949builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00001950{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001952
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001954 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001955 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00001956}
1957
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001958static char tuple_doc[] =
1959"tuple(sequence) -> list\n\
1960\n\
1961Return a tuple whose items are the same as those of the argument sequence.\n\
1962If the argument is a tuple, the return value is the same object.";
1963
1964
Guido van Rossum79f25d91997-04-29 20:08:16 +00001965static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001966builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001967{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001968 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001969
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001971 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972 v = (PyObject *)v->ob_type;
1973 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001974 return v;
1975}
1976
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001977static char type_doc[] =
1978"type(object) -> type object\n\
1979\n\
1980Return the type of the object.";
1981
1982
Guido van Rossum79f25d91997-04-29 20:08:16 +00001983static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001984builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001985{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986 PyObject *v = NULL;
1987 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001988
Guido van Rossum79f25d91997-04-29 20:08:16 +00001989 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001990 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001991 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001993 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994 if (!PyErr_Occurred())
1995 PyErr_SetString(PyExc_SystemError,
1996 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001997 }
1998 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001999 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002000 }
2001 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002003 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002004 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002005 "vars() argument must have __dict__ attribute");
2006 return NULL;
2007 }
2008 }
2009 return d;
2010}
2011
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002012static char vars_doc[] =
2013"vars([object]) -> dictionary\n\
2014\n\
2015Without arguments, equivalent to locals().\n\
2016With an argument, equivalent to object.__dict__.";
2017
Guido van Rossum668213d1999-06-16 17:28:37 +00002018static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002019abstract_issubclass(PyObject *derived, PyObject *cls, char *err, int first)
Guido van Rossum668213d1999-06-16 17:28:37 +00002020{
2021 static PyObject *__bases__ = NULL;
2022 PyObject *bases;
Guido van Rossum7f851861999-06-17 19:12:39 +00002023 int i, n;
Guido van Rossum668213d1999-06-16 17:28:37 +00002024 int r = 0;
2025
2026 if (__bases__ == NULL) {
2027 __bases__ = PyString_FromString("__bases__");
2028 if (__bases__ == NULL)
2029 return -1;
2030 }
2031
2032 if (first) {
2033 bases = PyObject_GetAttr(cls, __bases__);
2034 if (bases == NULL || !PyTuple_Check(bases)) {
2035 Py_XDECREF(bases);
2036 PyErr_SetString(PyExc_TypeError, err);
2037 return -1;
2038 }
2039 Py_DECREF(bases);
2040 }
2041
2042 if (derived == cls)
2043 return 1;
2044
2045 bases = PyObject_GetAttr(derived, __bases__);
2046 if (bases == NULL || !PyTuple_Check(bases)) {
2047 Py_XDECREF(bases);
2048 PyErr_SetString(PyExc_TypeError, err);
2049 return -1;
2050 }
2051
2052 n = PyTuple_GET_SIZE(bases);
2053 for (i = 0; i < n; i++) {
2054 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i),
2055 cls, err, 0);
2056 if (r != 0)
2057 break;
2058 }
2059
2060 Py_DECREF(bases);
2061
2062 return r;
2063}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002064
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002065static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002066builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002067{
2068 PyObject *inst;
2069 PyObject *cls;
Guido van Rossum668213d1999-06-16 17:28:37 +00002070 PyObject *icls;
2071 static PyObject *__class__ = NULL;
2072 int retval = 0;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002073
Guido van Rossum43713e52000-02-29 13:59:29 +00002074 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002075 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002076
Guido van Rossum668213d1999-06-16 17:28:37 +00002077 if (PyClass_Check(cls)) {
2078 if (PyInstance_Check(inst)) {
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002079 PyObject *inclass =
2080 (PyObject*)((PyInstanceObject*)inst)->in_class;
2081 retval = PyClass_IsSubclass(inclass, cls);
2082 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002083 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002084 else if (PyType_Check(cls)) {
2085 retval = ((PyObject *)(inst->ob_type) == cls);
2086 }
2087 else if (!PyInstance_Check(inst)) {
2088 if (__class__ == NULL) {
2089 __class__ = PyString_FromString("__class__");
2090 if (__class__ == NULL)
2091 return NULL;
2092 }
2093 icls = PyObject_GetAttr(inst, __class__);
2094 if (icls != NULL) {
2095 retval = abstract_issubclass(
2096 icls, cls,
2097 "second argument must be a class",
2098 1);
2099 Py_DECREF(icls);
2100 if (retval < 0)
2101 return NULL;
2102 }
2103 else {
2104 PyErr_SetString(PyExc_TypeError,
2105 "second argument must be a class");
2106 return NULL;
2107 }
2108 }
2109 else {
2110 PyErr_SetString(PyExc_TypeError,
2111 "second argument must be a class");
2112 return NULL;
2113 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002114 return PyInt_FromLong(retval);
2115}
2116
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002117static char isinstance_doc[] =
2118"isinstance(object, class-or-type) -> Boolean\n\
2119\n\
2120Return whether an object is an instance of a class or of a subclass thereof.\n\
2121With a type as second argument, return whether that is the object's type.";
2122
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002123
2124static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002125builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002126{
2127 PyObject *derived;
2128 PyObject *cls;
2129 int retval;
2130
Guido van Rossum43713e52000-02-29 13:59:29 +00002131 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002132 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002133
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002134 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossum668213d1999-06-16 17:28:37 +00002135 retval = abstract_issubclass(
2136 derived, cls, "arguments must be classes", 1);
2137 if (retval < 0)
2138 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002139 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002140 else {
2141 /* shortcut */
2142 if (!(retval = (derived == cls)))
2143 retval = PyClass_IsSubclass(derived, cls);
2144 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002145
2146 return PyInt_FromLong(retval);
2147}
2148
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002149static char issubclass_doc[] =
2150"issubclass(C, B) -> Boolean\n\
2151\n\
2152Return whether class C is a subclass (i.e., a derived class) of class B.";
2153
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002154
Guido van Rossum79f25d91997-04-29 20:08:16 +00002155static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002156 {"__import__", builtin___import__, 1, import_doc},
2157 {"abs", builtin_abs, 1, abs_doc},
2158 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002159 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002160 {"callable", builtin_callable, 1, callable_doc},
2161 {"chr", builtin_chr, 1, chr_doc},
2162 {"cmp", builtin_cmp, 1, cmp_doc},
2163 {"coerce", builtin_coerce, 1, coerce_doc},
2164 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002165#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002166 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002167#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002168 {"delattr", builtin_delattr, 1, delattr_doc},
2169 {"dir", builtin_dir, 1, dir_doc},
2170 {"divmod", builtin_divmod, 1, divmod_doc},
2171 {"eval", builtin_eval, 1, eval_doc},
2172 {"execfile", builtin_execfile, 1, execfile_doc},
2173 {"filter", builtin_filter, 1, filter_doc},
2174 {"float", builtin_float, 1, float_doc},
2175 {"getattr", builtin_getattr, 1, getattr_doc},
2176 {"globals", builtin_globals, 1, globals_doc},
2177 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2178 {"hash", builtin_hash, 1, hash_doc},
2179 {"hex", builtin_hex, 1, hex_doc},
2180 {"id", builtin_id, 1, id_doc},
2181 {"input", builtin_input, 1, input_doc},
2182 {"intern", builtin_intern, 1, intern_doc},
2183 {"int", builtin_int, 1, int_doc},
2184 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2185 {"issubclass", builtin_issubclass, 1, issubclass_doc},
2186 {"len", builtin_len, 1, len_doc},
2187 {"list", builtin_list, 1, list_doc},
2188 {"locals", builtin_locals, 1, locals_doc},
2189 {"long", builtin_long, 1, long_doc},
2190 {"map", builtin_map, 1, map_doc},
2191 {"max", builtin_max, 1, max_doc},
2192 {"min", builtin_min, 1, min_doc},
2193 {"oct", builtin_oct, 1, oct_doc},
2194 {"open", builtin_open, 1, open_doc},
2195 {"ord", builtin_ord, 1, ord_doc},
2196 {"pow", builtin_pow, 1, pow_doc},
2197 {"range", builtin_range, 1, range_doc},
2198 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2199 {"reduce", builtin_reduce, 1, reduce_doc},
2200 {"reload", builtin_reload, 1, reload_doc},
2201 {"repr", builtin_repr, 1, repr_doc},
2202 {"round", builtin_round, 1, round_doc},
2203 {"setattr", builtin_setattr, 1, setattr_doc},
2204 {"slice", builtin_slice, 1, slice_doc},
2205 {"str", builtin_str, 1, str_doc},
2206 {"tuple", builtin_tuple, 1, tuple_doc},
2207 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002208 {"unicode", builtin_unicode, 1, unicode_doc},
2209 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002210 {"vars", builtin_vars, 1, vars_doc},
2211 {"xrange", builtin_xrange, 1, xrange_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002212 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002213};
2214
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002215static char builtin_doc[] =
2216"Built-in functions, exceptions, and other objects.\n\
2217\n\
2218Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2219
Guido van Rossum25ce5661997-08-02 03:10:38 +00002220PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002221_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002222{
Fred Drake5550de32000-06-20 04:54:19 +00002223 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002224 mod = Py_InitModule4("__builtin__", builtin_methods,
2225 builtin_doc, (PyObject *)NULL,
2226 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002227 if (mod == NULL)
2228 return NULL;
2229 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002230 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2231 return NULL;
2232 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2233 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002234 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2235 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2236 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002237 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002238 }
2239 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002240
Guido van Rossum25ce5661997-08-02 03:10:38 +00002241 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002242}
2243
Guido van Rossume77a7571993-11-03 15:01:26 +00002244/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002245
Guido van Rossum79f25d91997-04-29 20:08:16 +00002246static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002247filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002248{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002250 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002251 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002252
Guido van Rossumb7b45621995-08-04 04:07:45 +00002253 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002254 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002255 return tuple;
2256 }
2257
Guido van Rossum79f25d91997-04-29 20:08:16 +00002258 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002259 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002260
Guido van Rossum12d12c51993-10-26 17:58:25 +00002261 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002262 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002263 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002264
Guido van Rossum79f25d91997-04-29 20:08:16 +00002265 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002266 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002267 if (func == Py_None) {
2268 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002269 good = item;
2270 }
2271 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002272 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002273 if (arg == NULL)
2274 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002275 good = PyEval_CallObject(func, arg);
2276 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002277 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002278 goto Fail_1;
2279 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002280 ok = PyObject_IsTrue(good);
2281 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002282 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002283 Py_INCREF(item);
2284 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002285 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002286 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002287 }
2288
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002290 return NULL;
2291
Guido van Rossum12d12c51993-10-26 17:58:25 +00002292 return result;
2293
Guido van Rossum12d12c51993-10-26 17:58:25 +00002294Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002295 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002296 return NULL;
2297}
2298
2299
Guido van Rossume77a7571993-11-03 15:01:26 +00002300/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002301
Guido van Rossum79f25d91997-04-29 20:08:16 +00002302static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002303filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002304{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002305 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002306 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002307 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002308
Guido van Rossum79f25d91997-04-29 20:08:16 +00002309 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002310 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002311 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002312 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002313 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002314 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002315 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002316
Guido van Rossum12d12c51993-10-26 17:58:25 +00002317 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002318 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002319 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002320
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002321 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2322 if (item == NULL)
2323 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002324 arg = Py_BuildValue("(O)", item);
2325 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002326 if (arg == NULL)
2327 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002328 good = PyEval_CallObject(func, arg);
2329 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002330 if (good == NULL)
2331 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002332 ok = PyObject_IsTrue(good);
2333 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002334 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002335 PyString_AS_STRING((PyStringObject *)result)[j++] =
2336 PyString_AS_STRING((PyStringObject *)item)[0];
Guido van Rossum12d12c51993-10-26 17:58:25 +00002337 }
2338
Guido van Rossum79f25d91997-04-29 20:08:16 +00002339 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002340 return NULL;
2341
Guido van Rossum12d12c51993-10-26 17:58:25 +00002342 return result;
2343
Guido van Rossum12d12c51993-10-26 17:58:25 +00002344Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002345 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002346 return NULL;
2347}