blob: 2fabf67d45c14c1df955ce3c1f4d7491672a866e [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
1585get_len_of_range(lo, hi, step)
1586 long lo;
1587 long hi;
1588 long step; /* must be > 0 */
1589{
1590 /* -------------------------------------------------------------
1591 If lo >= hi, the range is empty.
1592 Else if n values are in the range, the last one is
1593 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1594 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1595 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1596 the RHS is non-negative and so truncation is the same as the
1597 floor. Letting M be the largest positive long, the worst case
1598 for the RHS numerator is hi=M, lo=-M-1, and then
1599 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1600 precision to compute the RHS exactly.
1601 ---------------------------------------------------------------*/
1602 long n = 0;
1603 if (lo < hi) {
1604 unsigned long uhi = (unsigned long)hi;
1605 unsigned long ulo = (unsigned long)lo;
1606 unsigned long diff = uhi - ulo - 1;
1607 n = (long)(diff / (unsigned long)step + 1);
1608 }
1609 return n;
1610}
1611
Guido van Rossum79f25d91997-04-29 20:08:16 +00001612static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001613builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001614{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001615 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001616 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001617 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001618
Guido van Rossum79f25d91997-04-29 20:08:16 +00001619 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001620
Guido van Rossum79f25d91997-04-29 20:08:16 +00001621 if (PyTuple_Size(args) <= 1) {
1622 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001623 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001624 &ihigh))
1625 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001626 }
1627 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001628 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001629 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001630 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001631 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001632 }
1633 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001634 PyErr_SetString(PyExc_ValueError, "zero step for range()");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001635 return NULL;
1636 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001637 if (istep > 0)
1638 bign = get_len_of_range(ilow, ihigh, istep);
1639 else
1640 bign = get_len_of_range(ihigh, ilow, -istep);
1641 n = (int)bign;
1642 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001643 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum124eff01999-02-23 16:11:01 +00001644 "range() has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001645 return NULL;
1646 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001647 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001648 if (v == NULL)
1649 return NULL;
1650 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001651 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001652 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001653 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001654 return NULL;
1655 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001656 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001657 ilow += istep;
1658 }
1659 return v;
1660}
1661
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001662static char range_doc[] =
1663"range([start,] stop[, step]) -> list of integers\n\
1664\n\
1665Return a list containing an arithmetic progression of integers.\n\
1666range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1667When step is given, it specifies the increment (or decrement).\n\
1668For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1669These are exactly the valid indices for a list of 4 elements.";
1670
1671
Guido van Rossum79f25d91997-04-29 20:08:16 +00001672static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001673builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001674{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001675 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001676 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001677
Guido van Rossum79f25d91997-04-29 20:08:16 +00001678 if (PyTuple_Size(args) <= 1) {
1679 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001680 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001681 &ihigh))
1682 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001683 }
1684 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001685 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001686 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001688 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001689 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001690 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001691 PyErr_SetString(PyExc_ValueError, "zero step for xrange()");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001692 return NULL;
1693 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001694 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001695 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001696 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001697 n = get_len_of_range(ihigh, ilow, -istep);
1698 if (n < 0) {
1699 PyErr_SetString(PyExc_OverflowError,
1700 "xrange() has more than sys.maxint items");
1701 return NULL;
1702 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001703 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001704}
1705
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001706static char xrange_doc[] =
1707"xrange([start,] stop[, step]) -> xrange object\n\
1708\n\
1709Like range(), but instead of returning a list, returns an object that\n\
1710generates the numbers in the range on demand. This is slightly slower\n\
1711than range() but more memory efficient.";
1712
1713
Guido van Rossum79f25d91997-04-29 20:08:16 +00001714static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001715builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001716{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717 PyObject *v = NULL;
1718 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001719
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001721 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001722 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1723 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001724 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001725 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001726 char *prompt;
1727 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001728 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001729 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001731 if (po == NULL)
1732 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001733 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001734 if (prompt == NULL)
1735 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001736 }
1737 else {
1738 po = NULL;
1739 prompt = "";
1740 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 s = PyOS_Readline(prompt);
1742 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001743 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001744 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001745 return NULL;
1746 }
1747 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001749 result = NULL;
1750 }
1751 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001752 size_t len = strlen(s);
1753 if (len > INT_MAX) {
1754 PyErr_SetString(PyExc_OverflowError, "input too long");
1755 result = NULL;
1756 }
1757 else {
1758 result = PyString_FromStringAndSize(s, (int)(len-1));
1759 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001760 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001761 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001762 return result;
1763 }
Guido van Rossum90933611991-06-07 16:10:43 +00001764 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001765 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001766 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001767 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001768 return NULL;
1769 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001770 if (Py_FlushLine() != 0 ||
1771 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001772 return NULL;
1773 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001774 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001776 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001777 return NULL;
1778 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001780}
1781
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001782static char raw_input_doc[] =
1783"raw_input([prompt]) -> string\n\
1784\n\
1785Read a string from standard input. The trailing newline is stripped.\n\
1786If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1787On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1788is printed without a trailing newline before reading.";
1789
1790
Guido van Rossum79f25d91997-04-29 20:08:16 +00001791static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001792builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001793{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001794 PyObject *seq, *func, *result = NULL;
1795 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001796 register int i;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001797
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001799 return NULL;
1800 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001801 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001802
Guido van Rossum09df08a1998-05-22 00:51:39 +00001803 sqf = seq->ob_type->tp_as_sequence;
1804 if (sqf == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001805 PyErr_SetString(PyExc_TypeError,
Guido van Rossum12d12c51993-10-26 17:58:25 +00001806 "2nd argument to reduce() must be a sequence object");
1807 return NULL;
1808 }
1809
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001811 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001812
Guido van Rossum2d951851994-08-29 12:52:16 +00001813 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001815
1816 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 Py_DECREF(args);
1818 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001819 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001820 }
1821
Guido van Rossum2d951851994-08-29 12:52:16 +00001822 if ((op2 = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001823 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001825 break;
1826 }
1827 goto Fail;
1828 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001829
Guido van Rossum2d951851994-08-29 12:52:16 +00001830 if (result == NULL)
1831 result = op2;
1832 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 PyTuple_SetItem(args, 0, result);
1834 PyTuple_SetItem(args, 1, op2);
1835 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001836 goto Fail;
1837 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001838 }
1839
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001841
Guido van Rossum2d951851994-08-29 12:52:16 +00001842 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001843 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001844 "reduce of empty sequence with no initial value");
1845
Guido van Rossum12d12c51993-10-26 17:58:25 +00001846 return result;
1847
Guido van Rossum2d951851994-08-29 12:52:16 +00001848Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 Py_XDECREF(args);
1850 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001851 return NULL;
1852}
1853
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001854static char reduce_doc[] =
1855"reduce(function, sequence[, initial]) -> value\n\
1856\n\
1857Apply a function of two arguments cumulatively to the items of a sequence,\n\
1858from left to right, so as to reduce the sequence to a single value.\n\
1859For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1860((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1861of the sequence in the calculation, and serves as a default when the\n\
1862sequence is empty.";
1863
1864
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001866builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001867{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001869
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001871 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001873}
1874
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001875static char reload_doc[] =
1876"reload(module) -> module\n\
1877\n\
1878Reload the module. The module must have been successfully imported before.";
1879
1880
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001882builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001883{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001884 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001885
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001887 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001888 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001889}
1890
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001891static char repr_doc[] =
1892"repr(object) -> string\n\
1893\n\
1894Return the canonical string representation of the object.\n\
1895For most object types, eval(repr(object)) == object.";
1896
1897
Guido van Rossum79f25d91997-04-29 20:08:16 +00001898static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001899builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001900{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001901 double x;
1902 double f;
1903 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001904 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001905
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001907 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001908 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001909 i = abs(ndigits);
1910 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001911 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001912 if (ndigits < 0)
1913 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001914 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001915 x *= f;
1916 if (x >= 0.0)
1917 x = floor(x + 0.5);
1918 else
1919 x = ceil(x - 0.5);
1920 if (ndigits < 0)
1921 x *= f;
1922 else
1923 x /= f;
1924 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001925}
1926
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001927static char round_doc[] =
1928"round(number[, ndigits]) -> floating point number\n\
1929\n\
1930Round a number to a given precision in decimal digits (default 0 digits).\n\
1931This always returns a floating point number. Precision may be negative.";
1932
1933
Guido van Rossum79f25d91997-04-29 20:08:16 +00001934static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001935builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001936{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001937 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001938
Guido van Rossum79f25d91997-04-29 20:08:16 +00001939 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001940 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001941 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001942}
1943
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001944static char str_doc[] =
1945"str(object) -> string\n\
1946\n\
1947Return a nice string representation of the object.\n\
1948If the argument is a string, the return value is the same object.";
1949
1950
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001952builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00001953{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001955
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001957 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001958 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00001959}
1960
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001961static char tuple_doc[] =
1962"tuple(sequence) -> list\n\
1963\n\
1964Return a tuple whose items are the same as those of the argument sequence.\n\
1965If the argument is a tuple, the return value is the same object.";
1966
1967
Guido van Rossum79f25d91997-04-29 20:08:16 +00001968static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001969builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001970{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972
Guido van Rossum79f25d91997-04-29 20:08:16 +00001973 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001974 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 v = (PyObject *)v->ob_type;
1976 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001977 return v;
1978}
1979
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001980static char type_doc[] =
1981"type(object) -> type object\n\
1982\n\
1983Return the type of the object.";
1984
1985
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001987builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001988{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001989 PyObject *v = NULL;
1990 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001991
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001993 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001994 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001995 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001996 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997 if (!PyErr_Occurred())
1998 PyErr_SetString(PyExc_SystemError,
1999 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002000 }
2001 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002003 }
2004 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002005 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002006 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002008 "vars() argument must have __dict__ attribute");
2009 return NULL;
2010 }
2011 }
2012 return d;
2013}
2014
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002015static char vars_doc[] =
2016"vars([object]) -> dictionary\n\
2017\n\
2018Without arguments, equivalent to locals().\n\
2019With an argument, equivalent to object.__dict__.";
2020
Guido van Rossum668213d1999-06-16 17:28:37 +00002021static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002022abstract_issubclass(PyObject *derived, PyObject *cls, char *err, int first)
Guido van Rossum668213d1999-06-16 17:28:37 +00002023{
2024 static PyObject *__bases__ = NULL;
2025 PyObject *bases;
Guido van Rossum7f851861999-06-17 19:12:39 +00002026 int i, n;
Guido van Rossum668213d1999-06-16 17:28:37 +00002027 int r = 0;
2028
2029 if (__bases__ == NULL) {
2030 __bases__ = PyString_FromString("__bases__");
2031 if (__bases__ == NULL)
2032 return -1;
2033 }
2034
2035 if (first) {
2036 bases = PyObject_GetAttr(cls, __bases__);
2037 if (bases == NULL || !PyTuple_Check(bases)) {
2038 Py_XDECREF(bases);
2039 PyErr_SetString(PyExc_TypeError, err);
2040 return -1;
2041 }
2042 Py_DECREF(bases);
2043 }
2044
2045 if (derived == cls)
2046 return 1;
2047
2048 bases = PyObject_GetAttr(derived, __bases__);
2049 if (bases == NULL || !PyTuple_Check(bases)) {
2050 Py_XDECREF(bases);
2051 PyErr_SetString(PyExc_TypeError, err);
2052 return -1;
2053 }
2054
2055 n = PyTuple_GET_SIZE(bases);
2056 for (i = 0; i < n; i++) {
2057 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i),
2058 cls, err, 0);
2059 if (r != 0)
2060 break;
2061 }
2062
2063 Py_DECREF(bases);
2064
2065 return r;
2066}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002067
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002068static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002069builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002070{
2071 PyObject *inst;
2072 PyObject *cls;
Guido van Rossum668213d1999-06-16 17:28:37 +00002073 PyObject *icls;
2074 static PyObject *__class__ = NULL;
2075 int retval = 0;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002076
Guido van Rossum43713e52000-02-29 13:59:29 +00002077 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002078 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002079
Guido van Rossum668213d1999-06-16 17:28:37 +00002080 if (PyClass_Check(cls)) {
2081 if (PyInstance_Check(inst)) {
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002082 PyObject *inclass =
2083 (PyObject*)((PyInstanceObject*)inst)->in_class;
2084 retval = PyClass_IsSubclass(inclass, cls);
2085 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002086 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002087 else if (PyType_Check(cls)) {
2088 retval = ((PyObject *)(inst->ob_type) == cls);
2089 }
2090 else if (!PyInstance_Check(inst)) {
2091 if (__class__ == NULL) {
2092 __class__ = PyString_FromString("__class__");
2093 if (__class__ == NULL)
2094 return NULL;
2095 }
2096 icls = PyObject_GetAttr(inst, __class__);
2097 if (icls != NULL) {
2098 retval = abstract_issubclass(
2099 icls, cls,
2100 "second argument must be a class",
2101 1);
2102 Py_DECREF(icls);
2103 if (retval < 0)
2104 return NULL;
2105 }
2106 else {
2107 PyErr_SetString(PyExc_TypeError,
2108 "second argument must be a class");
2109 return NULL;
2110 }
2111 }
2112 else {
2113 PyErr_SetString(PyExc_TypeError,
2114 "second argument must be a class");
2115 return NULL;
2116 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002117 return PyInt_FromLong(retval);
2118}
2119
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002120static char isinstance_doc[] =
2121"isinstance(object, class-or-type) -> Boolean\n\
2122\n\
2123Return whether an object is an instance of a class or of a subclass thereof.\n\
2124With a type as second argument, return whether that is the object's type.";
2125
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002126
2127static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002128builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002129{
2130 PyObject *derived;
2131 PyObject *cls;
2132 int retval;
2133
Guido van Rossum43713e52000-02-29 13:59:29 +00002134 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002135 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002136
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002137 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossum668213d1999-06-16 17:28:37 +00002138 retval = abstract_issubclass(
2139 derived, cls, "arguments must be classes", 1);
2140 if (retval < 0)
2141 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002142 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002143 else {
2144 /* shortcut */
2145 if (!(retval = (derived == cls)))
2146 retval = PyClass_IsSubclass(derived, cls);
2147 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002148
2149 return PyInt_FromLong(retval);
2150}
2151
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002152static char issubclass_doc[] =
2153"issubclass(C, B) -> Boolean\n\
2154\n\
2155Return whether class C is a subclass (i.e., a derived class) of class B.";
2156
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002157
Guido van Rossum79f25d91997-04-29 20:08:16 +00002158static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002159 {"__import__", builtin___import__, 1, import_doc},
2160 {"abs", builtin_abs, 1, abs_doc},
2161 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002162 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002163 {"callable", builtin_callable, 1, callable_doc},
2164 {"chr", builtin_chr, 1, chr_doc},
2165 {"cmp", builtin_cmp, 1, cmp_doc},
2166 {"coerce", builtin_coerce, 1, coerce_doc},
2167 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002168#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002169 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002170#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002171 {"delattr", builtin_delattr, 1, delattr_doc},
2172 {"dir", builtin_dir, 1, dir_doc},
2173 {"divmod", builtin_divmod, 1, divmod_doc},
2174 {"eval", builtin_eval, 1, eval_doc},
2175 {"execfile", builtin_execfile, 1, execfile_doc},
2176 {"filter", builtin_filter, 1, filter_doc},
2177 {"float", builtin_float, 1, float_doc},
2178 {"getattr", builtin_getattr, 1, getattr_doc},
2179 {"globals", builtin_globals, 1, globals_doc},
2180 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2181 {"hash", builtin_hash, 1, hash_doc},
2182 {"hex", builtin_hex, 1, hex_doc},
2183 {"id", builtin_id, 1, id_doc},
2184 {"input", builtin_input, 1, input_doc},
2185 {"intern", builtin_intern, 1, intern_doc},
2186 {"int", builtin_int, 1, int_doc},
2187 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2188 {"issubclass", builtin_issubclass, 1, issubclass_doc},
2189 {"len", builtin_len, 1, len_doc},
2190 {"list", builtin_list, 1, list_doc},
2191 {"locals", builtin_locals, 1, locals_doc},
2192 {"long", builtin_long, 1, long_doc},
2193 {"map", builtin_map, 1, map_doc},
2194 {"max", builtin_max, 1, max_doc},
2195 {"min", builtin_min, 1, min_doc},
2196 {"oct", builtin_oct, 1, oct_doc},
2197 {"open", builtin_open, 1, open_doc},
2198 {"ord", builtin_ord, 1, ord_doc},
2199 {"pow", builtin_pow, 1, pow_doc},
2200 {"range", builtin_range, 1, range_doc},
2201 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2202 {"reduce", builtin_reduce, 1, reduce_doc},
2203 {"reload", builtin_reload, 1, reload_doc},
2204 {"repr", builtin_repr, 1, repr_doc},
2205 {"round", builtin_round, 1, round_doc},
2206 {"setattr", builtin_setattr, 1, setattr_doc},
2207 {"slice", builtin_slice, 1, slice_doc},
2208 {"str", builtin_str, 1, str_doc},
2209 {"tuple", builtin_tuple, 1, tuple_doc},
2210 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002211 {"unicode", builtin_unicode, 1, unicode_doc},
2212 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002213 {"vars", builtin_vars, 1, vars_doc},
2214 {"xrange", builtin_xrange, 1, xrange_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002215 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002216};
2217
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002218static char builtin_doc[] =
2219"Built-in functions, exceptions, and other objects.\n\
2220\n\
2221Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2222
Guido van Rossum25ce5661997-08-02 03:10:38 +00002223PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002224_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002225{
Fred Drake5550de32000-06-20 04:54:19 +00002226 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002227 mod = Py_InitModule4("__builtin__", builtin_methods,
2228 builtin_doc, (PyObject *)NULL,
2229 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002230 if (mod == NULL)
2231 return NULL;
2232 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002233 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2234 return NULL;
2235 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2236 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002237 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2238 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2239 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002240 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002241 }
2242 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002243
Guido van Rossum25ce5661997-08-02 03:10:38 +00002244 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002245}
2246
Guido van Rossume77a7571993-11-03 15:01:26 +00002247/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002248
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002250filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002251{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002252 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002253 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002254 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002255
Guido van Rossumb7b45621995-08-04 04:07:45 +00002256 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002257 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002258 return tuple;
2259 }
2260
Guido van Rossum79f25d91997-04-29 20:08:16 +00002261 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002262 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002263
Guido van Rossum12d12c51993-10-26 17:58:25 +00002264 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002265 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002266 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002267
Guido van Rossum79f25d91997-04-29 20:08:16 +00002268 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002269 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002270 if (func == Py_None) {
2271 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002272 good = item;
2273 }
2274 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002275 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002276 if (arg == NULL)
2277 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002278 good = PyEval_CallObject(func, arg);
2279 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002280 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002281 goto Fail_1;
2282 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002283 ok = PyObject_IsTrue(good);
2284 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002285 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002286 Py_INCREF(item);
2287 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002288 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002289 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002290 }
2291
Guido van Rossum79f25d91997-04-29 20:08:16 +00002292 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002293 return NULL;
2294
Guido van Rossum12d12c51993-10-26 17:58:25 +00002295 return result;
2296
Guido van Rossum12d12c51993-10-26 17:58:25 +00002297Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002298 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002299 return NULL;
2300}
2301
2302
Guido van Rossume77a7571993-11-03 15:01:26 +00002303/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002304
Guido van Rossum79f25d91997-04-29 20:08:16 +00002305static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002306filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002307{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002308 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002309 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002310 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002311
Guido van Rossum79f25d91997-04-29 20:08:16 +00002312 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002313 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002314 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002315 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002316 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002317 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002318 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002319
Guido van Rossum12d12c51993-10-26 17:58:25 +00002320 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002321 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002322 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002323
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002324 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2325 if (item == NULL)
2326 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002327 arg = Py_BuildValue("(O)", item);
2328 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002329 if (arg == NULL)
2330 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002331 good = PyEval_CallObject(func, arg);
2332 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002333 if (good == NULL)
2334 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002335 ok = PyObject_IsTrue(good);
2336 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002337 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002338 PyString_AS_STRING((PyStringObject *)result)[j++] =
2339 PyString_AS_STRING((PyStringObject *)item)[0];
Guido van Rossum12d12c51993-10-26 17:58:25 +00002340 }
2341
Guido van Rossum79f25d91997-04-29 20:08:16 +00002342 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343 return NULL;
2344
Guido van Rossum12d12c51993-10-26 17:58:25 +00002345 return result;
2346
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002348 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002349 return NULL;
2350}