blob: 1ad534f387f41c1e33f9fe809d8d522ef4b10c30 [file] [log] [blame]
Andrew M. Kuchling9bcc68c2000-12-20 15:07:34 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Built-in functions */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "compile.h"
8#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000012#ifdef HAVE_UNISTD_H
13#include <unistd.h>
14#endif
15
Guido van Rossum12d12c51993-10-26 17:58:25 +000016/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000017static PyObject *filterstring(PyObject *, PyObject *);
18static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000019
Guido van Rossum79f25d91997-04-29 20:08:16 +000020static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000021builtin___import__(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +000022{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000023 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000024 PyObject *globals = NULL;
25 PyObject *locals = NULL;
26 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000027
Guido van Rossum79f25d91997-04-29 20:08:16 +000028 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000029 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000030 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000031 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032}
33
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000034static char import_doc[] =
35"__import__(name, globals, locals, fromlist) -> module\n\
36\n\
37Import a module. The globals are only used to determine the context;\n\
38they are not modified. The locals are currently unused. The fromlist\n\
39should be a list of names to emulate ``from name import ...'', or an\n\
40empty list to emulate ``import name''.\n\
41When importing a module from a package, note that __import__('A.B', ...)\n\
42returns package A when fromlist is empty, but its submodule B when\n\
43fromlist is not empty.";
44
Guido van Rossum1ae940a1995-01-02 19:04:15 +000045
Guido van Rossum79f25d91997-04-29 20:08:16 +000046static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000047builtin_abs(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000048{
Guido van Rossum79f25d91997-04-29 20:08:16 +000049 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000050
Guido van Rossum79f25d91997-04-29 20:08:16 +000051 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000052 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000053 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000054}
55
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000056static char abs_doc[] =
57"abs(number) -> number\n\
58\n\
59Return the absolute value of the argument.";
60
61
Guido van Rossum79f25d91997-04-29 20:08:16 +000062static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000063builtin_apply(PyObject *self, PyObject *args)
Guido van Rossumc02e15c1991-12-16 13:03:00 +000064{
Guido van Rossum79f25d91997-04-29 20:08:16 +000065 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000066 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000067
Guido van Rossum79f25d91997-04-29 20:08:16 +000068 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000069 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000070 if (alist != NULL) {
71 if (!PyTuple_Check(alist)) {
72 if (!PySequence_Check(alist)) {
73 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +000074 "apply() arg 2 must be a sequence");
Barry Warsaw968f8cb1998-10-01 15:33:12 +000075 return NULL;
76 }
77 t = PySequence_Tuple(alist);
78 if (t == NULL)
79 return NULL;
80 alist = t;
81 }
Guido van Rossum2d951851994-08-29 12:52:16 +000082 }
Guido van Rossum79f25d91997-04-29 20:08:16 +000083 if (kwdict != NULL && !PyDict_Check(kwdict)) {
84 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +000085 "apply() arg 3 must be a dictionary");
Barry Warsaw968f8cb1998-10-01 15:33:12 +000086 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +000087 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +000088 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
89 finally:
90 Py_XDECREF(t);
91 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +000092}
93
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000094static char apply_doc[] =
Fred Drake7b912121999-12-23 14:16:55 +000095"apply(object, args[, kwargs]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000096\n\
Fred Drake7b912121999-12-23 14:16:55 +000097Call a callable object with positional arguments taken from the tuple args,\n\
98and keyword arguments taken from the optional dictionary kwargs.\n\
99Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000100
101
Guido van Rossum79f25d91997-04-29 20:08:16 +0000102static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000103builtin_buffer(PyObject *self, PyObject *args)
Guido van Rossum0daf0221999-03-19 19:07:19 +0000104{
105 PyObject *ob;
106 int offset = 0;
107 int size = Py_END_OF_BUFFER;
108
109 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
110 return NULL;
111 return PyBuffer_FromObject(ob, offset, size);
112}
113
114static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000115"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000116\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000117Create a new buffer object which references the given object.\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000118The buffer will reference a slice of the target object from the\n\
119start of the object (or at the specified offset). The slice will\n\
120extend to the end of the target object (or with the specified size).";
121
122
123static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000124builtin_unicode(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000125{
Guido van Rossum3afba762000-04-11 15:38:23 +0000126 PyObject *v;
Guido van Rossum09095f32000-03-10 23:00:52 +0000127 char *encoding = NULL;
128 char *errors = NULL;
129
Guido van Rossum3afba762000-04-11 15:38:23 +0000130 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000131 return NULL;
Marc-André Lemburg1b1bcc92000-07-07 13:48:25 +0000132 return PyUnicode_FromEncodedObject(v, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000133}
134
135static char unicode_doc[] =
136"unicode(string [, encoding[, errors]]) -> object\n\
137\n\
Guido van Rossumad991772001-01-12 16:03:05 +0000138Create a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000139encoding defaults to the current default string encoding and \n\
140errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000141
142
143static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000144builtin_callable(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +0000145{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000146 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000147
Guido van Rossum79f25d91997-04-29 20:08:16 +0000148 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000149 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000150 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000151}
152
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000153static char callable_doc[] =
154"callable(object) -> Boolean\n\
155\n\
156Return whether the object is callable (i.e., some kind of function).\n\
157Note that classes are callable, as are instances with a __call__() method.";
158
159
Guido van Rossum79f25d91997-04-29 20:08:16 +0000160static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000161builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000162{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000163 PyObject *func, *seq, *result;
164 PySequenceMethods *sqf;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000165 int len;
166 register int i, j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000167
Guido van Rossum79f25d91997-04-29 20:08:16 +0000168 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000169 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000170
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171 if (PyString_Check(seq)) {
172 PyObject *r = filterstring(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000173 return r;
174 }
175
Guido van Rossum79f25d91997-04-29 20:08:16 +0000176 if (PyTuple_Check(seq)) {
177 PyObject *r = filtertuple(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000178 return r;
179 }
180
Guido van Rossum09df08a1998-05-22 00:51:39 +0000181 sqf = seq->ob_type->tp_as_sequence;
182 if (sqf == NULL || sqf->sq_length == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000183 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000184 "filter() arg 2 must be a sequence");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000185 goto Fail_2;
186 }
187
188 if ((len = (*sqf->sq_length)(seq)) < 0)
189 goto Fail_2;
190
Guido van Rossum79f25d91997-04-29 20:08:16 +0000191 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
192 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000193 result = seq;
194 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000195 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000196 if ((result = PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000197 goto Fail_2;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000198 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000199
Guido van Rossum2d951851994-08-29 12:52:16 +0000200 for (i = j = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000201 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000202 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000203
Guido van Rossum2d951851994-08-29 12:52:16 +0000204 if ((item = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +0000205 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000206 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +0000207 break;
208 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000209 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000210 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000211
Guido van Rossum79f25d91997-04-29 20:08:16 +0000212 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000213 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000214 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000215 }
216 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000217 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000218 if (arg == NULL)
219 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000220 good = PyEval_CallObject(func, arg);
221 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000222 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000223 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000224 goto Fail_1;
Guido van Rossum58b68731995-01-10 17:40:55 +0000225 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000226 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000227 ok = PyObject_IsTrue(good);
228 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000229 if (ok) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000230 if (j < len) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000231 if (PyList_SetItem(result, j++, item) < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000232 goto Fail_1;
233 }
234 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000235 int status = PyList_Append(result, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000236 j++;
Barry Warsawfa77e091999-01-28 18:49:12 +0000237 Py_DECREF(item);
238 if (status < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000239 goto Fail_1;
240 }
Guido van Rossum58b68731995-01-10 17:40:55 +0000241 } else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000242 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000243 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000244 }
245
Guido van Rossum12d12c51993-10-26 17:58:25 +0000246
Guido van Rossum79f25d91997-04-29 20:08:16 +0000247 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000248 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000249
Guido van Rossum12d12c51993-10-26 17:58:25 +0000250 return result;
251
Guido van Rossum12d12c51993-10-26 17:58:25 +0000252Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000253 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000254Fail_2:
Guido van Rossum12d12c51993-10-26 17:58:25 +0000255 return NULL;
256}
257
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000258static char filter_doc[] =
259"filter(function, sequence) -> list\n\
260\n\
261Return a list containing those items of sequence for which function(item)\n\
262is true. If function is None, return a list of items that are true.";
263
264
Guido van Rossum79f25d91997-04-29 20:08:16 +0000265static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000266builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000267{
268 long x;
269 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000270
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000272 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000273 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000274 PyErr_SetString(PyExc_ValueError,
275 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000276 return NULL;
277 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000278 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000279 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000280}
281
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000282static char chr_doc[] =
283"chr(i) -> character\n\
284\n\
285Return a string of one character with ordinal i; 0 <= i < 256.";
286
287
Guido van Rossum79f25d91997-04-29 20:08:16 +0000288static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000289builtin_unichr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000290{
291 long x;
292 Py_UNICODE s[1];
293
294 if (!PyArg_ParseTuple(args, "l:unichr", &x))
295 return NULL;
296 if (x < 0 || x >= 65536) {
297 PyErr_SetString(PyExc_ValueError,
298 "unichr() arg not in range(65536)");
299 return NULL;
300 }
301 s[0] = (Py_UNICODE)x;
302 return PyUnicode_FromUnicode(s, 1);
303}
304
305static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000306"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000307\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000308Return a Unicode string of one character with ordinal i; 0 <= i < 65536.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000309
310
311static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000312builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000313{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000314 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000315 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000316
Guido van Rossum79f25d91997-04-29 20:08:16 +0000317 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000318 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000319 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000320 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000321 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000322}
323
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000324static char cmp_doc[] =
325"cmp(x, y) -> integer\n\
326\n\
327Return negative if x<y, zero if x==y, positive if x>y.";
328
329
Guido van Rossum79f25d91997-04-29 20:08:16 +0000330static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000331builtin_coerce(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000332{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000333 PyObject *v, *w;
334 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000335
Guido van Rossum79f25d91997-04-29 20:08:16 +0000336 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000337 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000338 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000339 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000340 res = Py_BuildValue("(OO)", v, w);
341 Py_DECREF(v);
342 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000343 return res;
344}
345
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000346static char coerce_doc[] =
347"coerce(x, y) -> None or (x1, y1)\n\
348\n\
349When x and y can be coerced to values of the same type, return a tuple\n\
350containing the coerced values. When they can't be coerced, return None.";
351
352
Guido van Rossum79f25d91997-04-29 20:08:16 +0000353static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000354builtin_compile(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000355{
356 char *str;
357 char *filename;
358 char *startstr;
359 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000360
Guido van Rossum79f25d91997-04-29 20:08:16 +0000361 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000362 return NULL;
363 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000364 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000365 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000366 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000367 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000368 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000369 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000370 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000371 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000372 return NULL;
373 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000375}
376
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000377static char compile_doc[] =
378"compile(source, filename, mode) -> code object\n\
379\n\
380Compile the source string (a Python module, statement or expression)\n\
381into a code object that can be executed by the exec statement or eval().\n\
382The filename will be used for run-time error messages.\n\
383The mode must be 'exec' to compile a module, 'single' to compile a\n\
384single (interactive) statement, or 'eval' to compile an expression.";
385
386
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000387#ifndef WITHOUT_COMPLEX
388
Guido van Rossum79f25d91997-04-29 20:08:16 +0000389static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000390complex_from_string(PyObject *v)
Guido van Rossum11950231999-03-25 21:16:07 +0000391{
Tim Petersdbd9ba62000-07-09 03:09:57 +0000392 extern double strtod(const char *, char **);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000393 const char *s, *start;
394 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000395 double x=0.0, y=0.0, z;
396 int got_re=0, got_im=0, done=0;
397 int digit_or_dot;
398 int sw_error=0;
399 int sign;
400 char buffer[256]; /* For errors */
Barry Warsaw5ca1ef92000-08-18 05:02:16 +0000401 char s_buffer[256];
Guido van Rossum9e896b32000-04-05 20:11:21 +0000402 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000403
Guido van Rossum9e896b32000-04-05 20:11:21 +0000404 if (PyString_Check(v)) {
405 s = PyString_AS_STRING(v);
406 len = PyString_GET_SIZE(v);
407 }
408 else if (PyUnicode_Check(v)) {
Guido van Rossum9e896b32000-04-05 20:11:21 +0000409 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
410 PyErr_SetString(PyExc_ValueError,
411 "complex() literal too large to convert");
412 return NULL;
413 }
Guido van Rossumad991772001-01-12 16:03:05 +0000414 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000415 PyUnicode_GET_SIZE(v),
Guido van Rossumad991772001-01-12 16:03:05 +0000416 s_buffer,
Guido van Rossum9e896b32000-04-05 20:11:21 +0000417 NULL))
418 return NULL;
419 s = s_buffer;
Trent Mick29b83812000-08-12 21:35:36 +0000420 len = (int)strlen(s);
Guido van Rossum9e896b32000-04-05 20:11:21 +0000421 }
422 else if (PyObject_AsCharBuffer(v, &s, &len)) {
423 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000424 "complex() arg is not a string");
Guido van Rossum9e896b32000-04-05 20:11:21 +0000425 return NULL;
426 }
Guido van Rossum11950231999-03-25 21:16:07 +0000427
428 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000429 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000430 while (*s && isspace(Py_CHARMASK(*s)))
431 s++;
432 if (s[0] == '\0') {
433 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000434 "complex() arg is an empty string");
Guido van Rossum11950231999-03-25 21:16:07 +0000435 return NULL;
436 }
437
438 z = -1.0;
439 sign = 1;
440 do {
Guido van Rossumad991772001-01-12 16:03:05 +0000441
Guido van Rossum11950231999-03-25 21:16:07 +0000442 switch (*s) {
443
444 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000445 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000446 PyErr_SetString(
447 PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000448 "complex() arg contains a null byte");
Guido van Rossum11950231999-03-25 21:16:07 +0000449 return NULL;
450 }
451 if(!done) sw_error=1;
452 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000453
Guido van Rossum11950231999-03-25 21:16:07 +0000454 case '-':
455 sign = -1;
456 /* Fallthrough */
457 case '+':
458 if (done) sw_error=1;
459 s++;
460 if ( *s=='\0'||*s=='+'||*s=='-' ||
461 isspace(Py_CHARMASK(*s)) ) sw_error=1;
462 break;
463
464 case 'J':
465 case 'j':
466 if (got_im || done) {
467 sw_error = 1;
468 break;
469 }
470 if (z<0.0) {
471 y=sign;
472 }
473 else{
474 y=sign*z;
475 }
476 got_im=1;
477 s++;
478 if (*s!='+' && *s!='-' )
479 done=1;
480 break;
481
482 default:
483 if (isspace(Py_CHARMASK(*s))) {
484 while (*s && isspace(Py_CHARMASK(*s)))
485 s++;
486 if (s[0] != '\0')
487 sw_error=1;
488 else
489 done = 1;
490 break;
491 }
492 digit_or_dot =
493 (*s=='.' || isdigit(Py_CHARMASK(*s)));
494 if (done||!digit_or_dot) {
495 sw_error=1;
496 break;
497 }
498 errno = 0;
499 PyFPE_START_PROTECT("strtod", return 0)
500 z = strtod(s, &end) ;
501 PyFPE_END_PROTECT(z)
502 if (errno != 0) {
503 sprintf(buffer,
504 "float() out of range: %.150s", s);
505 PyErr_SetString(
506 PyExc_ValueError,
507 buffer);
508 return NULL;
509 }
510 s=end;
511 if (*s=='J' || *s=='j') {
Guido van Rossumad991772001-01-12 16:03:05 +0000512
Guido van Rossum11950231999-03-25 21:16:07 +0000513 break;
514 }
515 if (got_re) {
516 sw_error=1;
517 break;
518 }
519
520 /* accept a real part */
521 x=sign*z;
522 got_re=1;
523 if (got_im) done=1;
524 z = -1.0;
525 sign = 1;
526 break;
Guido van Rossumad991772001-01-12 16:03:05 +0000527
Guido van Rossum11950231999-03-25 21:16:07 +0000528 } /* end of switch */
529
530 } while (*s!='\0' && !sw_error);
531
532 if (sw_error) {
533 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000534 "complex() arg is a malformed string");
Guido van Rossum11950231999-03-25 21:16:07 +0000535 return NULL;
536 }
537
538 return PyComplex_FromDoubles(x,y);
539}
540
541static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000542builtin_complex(PyObject *self, PyObject *args)
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000543{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000544 PyObject *r, *i, *tmp;
545 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000546 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000547 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000548
549 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000550 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000551 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000552 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000553 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000554 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000555 nbr->nb_float == NULL ||
556 (i != NULL &&
557 ((nbi = i->ob_type->tp_as_number) == NULL ||
558 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000560 "complex() arg can't be converted to complex");
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000561 return NULL;
562 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000563 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000564 if (PyInstance_Check(r)) {
565 static PyObject *complexstr;
566 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000567 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000568 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000569 if (complexstr == NULL)
570 return NULL;
571 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000572 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000573 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000575 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000576 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000577 if (args == NULL)
578 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000579 r = PyEval_CallObject(f, args);
580 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000581 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000582 if (r == NULL)
583 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000584 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000585 }
586 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587 if (PyComplex_Check(r)) {
588 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000589 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000591 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000592 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000593 else {
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000594 tmp = (*nbr->nb_float)(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000595 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000596 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000597 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000598 if (tmp == NULL)
599 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600 cr.real = PyFloat_AsDouble(tmp);
601 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000602 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000603 }
604 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000605 ci.real = 0.0;
606 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000607 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000608 else if (PyComplex_Check(i))
609 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000610 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000611 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000612 if (tmp == NULL)
613 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000614 ci.real = PyFloat_AsDouble(tmp);
615 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000616 ci.imag = 0.;
617 }
618 cr.real -= ci.imag;
619 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000620 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000621}
622
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000623static char complex_doc[] =
624"complex(real[, imag]) -> complex number\n\
625\n\
626Create a complex number from a real part and an optional imaginary part.\n\
627This is equivalent to (real + imag*1j) where imag defaults to 0.";
628
629
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000630#endif
631
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000633builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000634{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000635 static char *attrlist[] = {"__members__", "__methods__", NULL};
636 PyObject *v = NULL, *l = NULL, *m = NULL;
637 PyObject *d, *x;
638 int i;
639 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000642 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000643 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000644 x = PyEval_GetLocals();
645 if (x == NULL)
646 goto error;
647 l = PyMapping_Keys(x);
648 if (l == NULL)
649 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000650 }
651 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000652 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000653 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000654 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000655 else {
656 l = PyMapping_Keys(d);
657 if (l == NULL)
658 PyErr_Clear();
659 Py_DECREF(d);
660 }
661 if (l == NULL) {
662 l = PyList_New(0);
663 if (l == NULL)
664 goto error;
665 }
666 for (s = attrlist; *s != NULL; s++) {
667 m = PyObject_GetAttrString(v, *s);
668 if (m == NULL) {
669 PyErr_Clear();
670 continue;
671 }
672 for (i = 0; ; i++) {
673 x = PySequence_GetItem(m, i);
674 if (x == NULL) {
675 PyErr_Clear();
676 break;
677 }
678 if (PyList_Append(l, x) != 0) {
679 Py_DECREF(x);
680 Py_DECREF(m);
681 goto error;
682 }
683 Py_DECREF(x);
684 }
685 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000686 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000687 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000688 if (PyList_Sort(l) != 0)
689 goto error;
690 return l;
691 error:
692 Py_XDECREF(l);
693 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000694}
695
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000696static char dir_doc[] =
697"dir([object]) -> list of strings\n\
698\n\
699Return an alphabetized list of names comprising (some of) the attributes\n\
700of the given object. Without an argument, the names in the current scope\n\
701are listed. With an instance argument, only the instance attributes are\n\
702returned. With a class argument, attributes of the base class are not\n\
703returned. For other types or arguments, this may list members or methods.";
704
705
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000707builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000708{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000709 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000710
Guido van Rossum79f25d91997-04-29 20:08:16 +0000711 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000712 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000713 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000714}
715
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000716static char divmod_doc[] =
717"divmod(x, y) -> (div, mod)\n\
718\n\
719Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
720
721
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000723builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000724{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725 PyObject *cmd;
726 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000728
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000730 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000731 &PyDict_Type, &globals,
732 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000734 if (globals == Py_None) {
735 globals = PyEval_GetGlobals();
736 if (locals == Py_None)
737 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000738 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000739 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000740 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
742 if (PyDict_SetItemString(globals, "__builtins__",
743 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000744 return NULL;
745 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 if (PyCode_Check(cmd))
747 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000748 if (!PyString_Check(cmd) &&
749 !PyUnicode_Check(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000750 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000751 "eval() arg 1 must be a string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000752 return NULL;
753 }
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000754 if (PyString_AsStringAndSize(cmd, &str, NULL))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000756 while (*str == ' ' || *str == '\t')
757 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000758 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000759}
760
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000761static char eval_doc[] =
762"eval(source[, globals[, locals]]) -> value\n\
763\n\
764Evaluate the source in the context of globals and locals.\n\
765The source may be a string representing a Python expression\n\
766or a code object as returned by compile().\n\
767The globals and locals are dictionaries, defaulting to the current\n\
768globals and locals. If only globals is given, locals defaults to it.";
769
770
Guido van Rossum79f25d91997-04-29 20:08:16 +0000771static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000772builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000773{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 PyObject *globals = Py_None, *locals = Py_None;
776 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000777 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000778
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000780 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000781 &PyDict_Type, &globals,
782 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000783 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000784 if (globals == Py_None) {
785 globals = PyEval_GetGlobals();
786 if (locals == Py_None)
787 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000788 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000790 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
792 if (PyDict_SetItemString(globals, "__builtins__",
793 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000794 return NULL;
795 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000796 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000797 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000799 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000801 return NULL;
802 }
Guido van Rossum0df002c2000-08-27 19:21:52 +0000803 res = PyRun_FileEx(fp, filename, Py_file_input, globals, locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000804 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000805}
806
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000807static char execfile_doc[] =
808"execfile(filename[, globals[, locals]])\n\
809\n\
810Read and execute a Python script from a file.\n\
811The globals and locals are dictionaries, defaulting to the current\n\
812globals and locals. If only globals is given, locals defaults to it.";
813
814
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000816builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000817{
Guido van Rossum950ff291998-06-29 13:38:57 +0000818 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000820
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000821 if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000822 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000823 result = PyObject_GetAttr(v, name);
824 if (result == NULL && dflt != NULL) {
825 PyErr_Clear();
826 Py_INCREF(dflt);
827 result = dflt;
828 }
829 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000830}
831
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000832static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000833"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000834\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000835Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
836When a default argument is given, it is returned when the attribute doesn't\n\
837exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000838
839
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000841builtin_globals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +0000842{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000844
Guido van Rossum43713e52000-02-29 13:59:29 +0000845 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000846 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000847 d = PyEval_GetGlobals();
848 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000849 return d;
850}
851
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000852static char globals_doc[] =
853"globals() -> dictionary\n\
854\n\
855Return the dictionary containing the current scope's global variables.";
856
857
Guido van Rossum79f25d91997-04-29 20:08:16 +0000858static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000859builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000860{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861 PyObject *v;
862 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000863
Marc-André Lemburg691270f2000-09-18 16:22:27 +0000864 if (!PyArg_ParseTuple(args, "OO:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000865 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000867 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000869 Py_INCREF(Py_False);
870 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000871 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000872 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000873 Py_INCREF(Py_True);
874 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000875}
876
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000877static char hasattr_doc[] =
878"hasattr(object, name) -> Boolean\n\
879\n\
880Return whether the object has an attribute with the given name.\n\
881(This is done by calling getattr(object, name) and catching exceptions.)";
882
883
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000885builtin_id(PyObject *self, PyObject *args)
Guido van Rossum5b722181993-03-30 17:46:03 +0000886{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000887 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000888
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000890 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000891 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000892}
893
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000894static char id_doc[] =
895"id(object) -> integer\n\
896\n\
897Return the identity of an object. This is guaranteed to be unique among\n\
898simultaneously existing objects. (Hint: it's the object's memory address.)";
899
900
Guido van Rossum79f25d91997-04-29 20:08:16 +0000901static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000902builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000903{
904 typedef struct {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000905 PyObject *seq;
906 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000907 int len;
908 } sequence;
909
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000911 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000913 register int i, j;
914
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000916 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000917 PyErr_SetString(PyExc_TypeError,
918 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000919 return NULL;
920 }
921
Guido van Rossum79f25d91997-04-29 20:08:16 +0000922 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000923 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000924
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000925 if (func == Py_None && n == 1) {
926 /* map(None, S) is the same as list(S). */
927 return PySequence_List(PyTuple_GetItem(args, 1));
928 }
929
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
931 PyErr_NoMemory();
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000932 goto Fail_2;
933 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000934
Guido van Rossum2d951851994-08-29 12:52:16 +0000935 for (len = 0, i = 0, sqp = seqs; i < n; ++i, ++sqp) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000936 int curlen;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000937 PySequenceMethods *sqf;
Guido van Rossumad991772001-01-12 16:03:05 +0000938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939 if ((sqp->seq = PyTuple_GetItem(args, i + 1)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000940 goto Fail_2;
941
Guido van Rossum09df08a1998-05-22 00:51:39 +0000942 sqp->sqf = sqf = sqp->seq->ob_type->tp_as_sequence;
943 if (sqf == NULL ||
944 sqf->sq_length == NULL ||
945 sqf->sq_item == NULL)
946 {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000947 static char errmsg[] =
948 "argument %d to map() must be a sequence object";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000949 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +0000950
951 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000953 goto Fail_2;
954 }
955
956 if ((curlen = sqp->len = (*sqp->sqf->sq_length)(sqp->seq)) < 0)
957 goto Fail_2;
958
959 if (curlen > len)
960 len = curlen;
961 }
962
Guido van Rossum79f25d91997-04-29 20:08:16 +0000963 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000964 goto Fail_2;
965
Guido van Rossum2d951851994-08-29 12:52:16 +0000966 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000967 PyObject *alist, *item=NULL, *value;
Guido van Rossum2d951851994-08-29 12:52:16 +0000968 int any = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000969
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +0000971 alist = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +0000972 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973 if ((alist = PyTuple_New(n)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +0000974 goto Fail_1;
975 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976
977 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000978 if (sqp->len < 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979 Py_INCREF(Py_None);
980 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000982 else {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000983 item = (*sqp->sqf->sq_item)(sqp->seq, i);
Guido van Rossum2d951851994-08-29 12:52:16 +0000984 if (item == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +0000985 if (PyErr_ExceptionMatches(
986 PyExc_IndexError))
987 {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 PyErr_Clear();
989 Py_INCREF(Py_None);
990 item = Py_None;
Guido van Rossum2d951851994-08-29 12:52:16 +0000991 sqp->len = -1;
992 }
993 else {
994 goto Fail_0;
995 }
996 }
997 else
998 any = 1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000999
Guido van Rossum12d12c51993-10-26 17:58:25 +00001000 }
Guido van Rossum32120311995-07-10 13:52:21 +00001001 if (!alist)
Guido van Rossum2d951851994-08-29 12:52:16 +00001002 break;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003 if (PyTuple_SetItem(alist, j, item) < 0) {
1004 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001005 goto Fail_0;
Guido van Rossum2d951851994-08-29 12:52:16 +00001006 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001007 continue;
1008
1009 Fail_0:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001010 Py_XDECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001011 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001012 }
1013
Guido van Rossum32120311995-07-10 13:52:21 +00001014 if (!alist)
1015 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001016
1017 if (!any) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001018 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001019 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001020 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001021
Guido van Rossum79f25d91997-04-29 20:08:16 +00001022 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001023 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001024 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001025 value = PyEval_CallObject(func, alist);
1026 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001027 if (value == NULL)
1028 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001029 }
1030 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001031 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001032 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001033 if (status < 0)
1034 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001035 }
1036 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001037 if (PyList_SetItem(result, i, value) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001038 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001039 }
1040 }
1041
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001042 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1043 goto Fail_1;
1044
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001046 return result;
1047
Guido van Rossum12d12c51993-10-26 17:58:25 +00001048Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001049 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001050Fail_2:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051 if (seqs) PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001052 return NULL;
1053}
1054
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001055static char map_doc[] =
1056"map(function, sequence[, sequence, ...]) -> list\n\
1057\n\
1058Return a list of the results of applying the function to the items of\n\
1059the argument sequence(s). If more than one sequence is given, the\n\
1060function is called with an argument list consisting of the corresponding\n\
1061item of each sequence, substituting None for missing values when not all\n\
1062sequences have the same length. If the function is None, return a list of\n\
1063the items of the sequence (or a list of tuples if more than one sequence).";
1064
1065
Guido van Rossum79f25d91997-04-29 20:08:16 +00001066static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001067builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001068{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001069 PyObject *v;
1070 PyObject *name;
1071 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001072
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001073 if (!PyArg_ParseTuple(args, "OOO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001074 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001076 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077 Py_INCREF(Py_None);
1078 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001079}
1080
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001081static char setattr_doc[] =
1082"setattr(object, name, value)\n\
1083\n\
1084Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1085``x.y = v''.";
1086
1087
Guido van Rossum79f25d91997-04-29 20:08:16 +00001088static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001089builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001090{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091 PyObject *v;
1092 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001093
Marc-André Lemburg691270f2000-09-18 16:22:27 +00001094 if (!PyArg_ParseTuple(args, "OO:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001095 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001097 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098 Py_INCREF(Py_None);
1099 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001100}
1101
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001102static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001103"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001104\n\
1105Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1106``del x.y''.";
1107
1108
Guido van Rossum79f25d91997-04-29 20:08:16 +00001109static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001110builtin_hash(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001111{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001112 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001113 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001114
Guido van Rossum79f25d91997-04-29 20:08:16 +00001115 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001116 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001117 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001118 if (x == -1)
1119 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001120 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001121}
1122
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001123static char hash_doc[] =
1124"hash(object) -> integer\n\
1125\n\
1126Return a hash value for the object. Two objects with the same value have\n\
1127the same hash value. The reverse is not necessarily true, but likely.";
1128
1129
Guido van Rossum79f25d91997-04-29 20:08:16 +00001130static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001131builtin_hex(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001132{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001133 PyObject *v;
1134 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001135
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001137 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00001138
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001139 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001140 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001141 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001142 "hex() argument can't be converted to hex");
1143 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001144 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001145 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001146}
1147
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001148static char hex_doc[] =
1149"hex(number) -> string\n\
1150\n\
1151Return the hexadecimal representation of an integer or long integer.";
1152
1153
Tim Petersdbd9ba62000-07-09 03:09:57 +00001154static PyObject *builtin_raw_input(PyObject *, PyObject *);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001155
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001157builtin_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001158{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001160 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161 PyObject *res;
1162 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001163
1164 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001165 if (line == NULL)
1166 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001167 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001168 return NULL;
1169 while (*str == ' ' || *str == '\t')
1170 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171 globals = PyEval_GetGlobals();
1172 locals = PyEval_GetLocals();
1173 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1174 if (PyDict_SetItemString(globals, "__builtins__",
1175 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001176 return NULL;
1177 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001178 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001180 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001181}
1182
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001183static char input_doc[] =
1184"input([prompt]) -> value\n\
1185\n\
1186Equivalent to eval(raw_input(prompt)).";
1187
1188
Guido van Rossume8811f81997-02-14 15:48:05 +00001189static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001190builtin_intern(PyObject *self, PyObject *args)
Guido van Rossume8811f81997-02-14 15:48:05 +00001191{
1192 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001193 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001194 return NULL;
1195 Py_INCREF(s);
1196 PyString_InternInPlace(&s);
1197 return s;
1198}
1199
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001200static char intern_doc[] =
1201"intern(string) -> string\n\
1202\n\
1203``Intern'' the given string. This enters the string in the (global)\n\
1204table of interned strings whose purpose is to speed up dictionary lookups.\n\
1205Return the string itself or the previously interned string object with the\n\
1206same value.";
1207
1208
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001210builtin_int(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001211{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001212 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001213 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001214
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001215 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001216 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001217 if (base == -909)
1218 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001219 else if (PyString_Check(v))
1220 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1221 else if (PyUnicode_Check(v))
1222 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1223 PyUnicode_GET_SIZE(v),
1224 base);
1225 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001226 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001227 "int() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001228 return NULL;
1229 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001230}
1231
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001232static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001233"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001234\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001235Convert a string or number to an integer, if possible. A floating point\n\
1236argument will be truncated towards zero (this does not include a string\n\
1237representation of a floating point number!) When converting a string, use\n\
1238the optional base. It is an error to supply a base when converting a\n\
1239non-string.";
1240
1241
1242static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001243builtin_long(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001244{
1245 PyObject *v;
1246 int base = -909; /* unlikely! */
Guido van Rossumad991772001-01-12 16:03:05 +00001247
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001248 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1249 return NULL;
1250 if (base == -909)
1251 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001252 else if (PyString_Check(v))
1253 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1254 else if (PyUnicode_Check(v))
1255 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1256 PyUnicode_GET_SIZE(v),
1257 base);
1258 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001259 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001260 "long() can't convert non-string with explicit base");
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001261 return NULL;
1262 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001263}
1264
1265static char long_doc[] =
1266"long(x) -> long integer\n\
1267long(x, base) -> long integer\n\
1268\n\
1269Convert a string or number to a long integer, if possible. A floating\n\
1270point argument will be truncated towards zero (this does not include a\n\
1271string representation of a floating point number!) When converting a\n\
1272string, use the given base. It is an error to supply a base when\n\
1273converting a non-string.";
1274
1275
1276static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001277builtin_float(PyObject *self, PyObject *args)
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001278{
1279 PyObject *v;
1280
1281 if (!PyArg_ParseTuple(args, "O:float", &v))
1282 return NULL;
1283 if (PyString_Check(v))
1284 return PyFloat_FromString(v, NULL);
1285 return PyNumber_Float(v);
1286}
1287
1288static char float_doc[] =
1289"float(x) -> floating point number\n\
1290\n\
1291Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001292
1293
Guido van Rossum79f25d91997-04-29 20:08:16 +00001294static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001295builtin_len(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001296{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001297 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001298 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001299
Guido van Rossum79f25d91997-04-29 20:08:16 +00001300 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001301 return NULL;
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001302 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001303 if (res < 0 && PyErr_Occurred())
1304 return NULL;
1305 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001306}
1307
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001308static char len_doc[] =
1309"len(object) -> integer\n\
1310\n\
1311Return the number of items of a sequence or mapping.";
1312
1313
Guido van Rossum79f25d91997-04-29 20:08:16 +00001314static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001315builtin_list(PyObject *self, PyObject *args)
Guido van Rossumd1705771996-04-09 02:41:06 +00001316{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001318
Guido van Rossum79f25d91997-04-29 20:08:16 +00001319 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001320 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001321 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001322}
1323
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001324static char list_doc[] =
1325"list(sequence) -> list\n\
1326\n\
1327Return a new list whose items are the same as those of the argument sequence.";
1328
Guido van Rossum8861b741996-07-30 16:49:37 +00001329
1330static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001331builtin_slice(PyObject *self, PyObject *args)
Guido van Rossum8861b741996-07-30 16:49:37 +00001332{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001333 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001334
Guido van Rossum09df08a1998-05-22 00:51:39 +00001335 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001336
Guido van Rossum09df08a1998-05-22 00:51:39 +00001337 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1338 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001339
Guido van Rossum09df08a1998-05-22 00:51:39 +00001340 /* This swapping of stop and start is to maintain similarity with
1341 range(). */
1342 if (stop == NULL) {
1343 stop = start;
1344 start = NULL;
1345 }
1346 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001347}
1348
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001349static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001350"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001351\n\
1352Create a slice object. This is used for slicing by the Numeric extensions.";
1353
1354
Guido van Rossum79f25d91997-04-29 20:08:16 +00001355static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001356builtin_locals(PyObject *self, PyObject *args)
Guido van Rossum872537c1995-07-07 22:43:42 +00001357{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001358 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001359
Guido van Rossum43713e52000-02-29 13:59:29 +00001360 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001361 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001362 d = PyEval_GetLocals();
1363 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001364 return d;
1365}
1366
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001367static char locals_doc[] =
1368"locals() -> dictionary\n\
1369\n\
1370Return the dictionary containing the current scope's local variables.";
1371
1372
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001374min_max(PyObject *args, int sign)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001375{
Guido van Rossum2d951851994-08-29 12:52:16 +00001376 int i;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377 PyObject *v, *w, *x;
1378 PySequenceMethods *sq;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001379
Guido van Rossum79f25d91997-04-29 20:08:16 +00001380 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001381 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001382 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001383 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001384 sq = v->ob_type->tp_as_sequence;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001385 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001386 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001387 "min() or max() arg must be a sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001388 return NULL;
1389 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001390 w = NULL;
1391 for (i = 0; ; i++) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00001392 x = (*sq->sq_item)(v, i); /* Implies INCREF */
Guido van Rossum2d951851994-08-29 12:52:16 +00001393 if (x == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001394 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001395 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001396 break;
1397 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001398 Py_XDECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001399 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001400 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001401 if (w == NULL)
1402 w = x;
1403 else {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001404 int c = PyObject_Compare(x, w);
1405 if (c && PyErr_Occurred()) {
1406 Py_DECREF(x);
1407 Py_XDECREF(w);
1408 return NULL;
1409 }
1410 if (c * sign > 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001411 Py_DECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001412 w = x;
1413 }
1414 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001416 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001417 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001418 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001419 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +00001420 "min() or max() arg is an empty sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001421 return w;
1422}
1423
Guido van Rossum79f25d91997-04-29 20:08:16 +00001424static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001425builtin_min(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001426{
1427 return min_max(v, -1);
1428}
1429
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001430static char min_doc[] =
1431"min(sequence) -> value\n\
1432min(a, b, c, ...) -> value\n\
1433\n\
1434With a single sequence argument, return its smallest item.\n\
1435With two or more arguments, return the smallest argument.";
1436
1437
Guido van Rossum79f25d91997-04-29 20:08:16 +00001438static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001439builtin_max(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001440{
1441 return min_max(v, 1);
1442}
1443
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001444static char max_doc[] =
1445"max(sequence) -> value\n\
1446max(a, b, c, ...) -> value\n\
1447\n\
1448With a single sequence argument, return its largest item.\n\
1449With two or more arguments, return the largest argument.";
1450
1451
Guido van Rossum79f25d91997-04-29 20:08:16 +00001452static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001453builtin_oct(PyObject *self, PyObject *args)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001454{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001455 PyObject *v;
1456 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001457
Guido van Rossum79f25d91997-04-29 20:08:16 +00001458 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001459 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001460 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1461 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001463 "oct() argument can't be converted to oct");
1464 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001465 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001466 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001467}
1468
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001469static char oct_doc[] =
1470"oct(number) -> string\n\
1471\n\
1472Return the octal representation of an integer or long integer.";
1473
1474
Guido van Rossum79f25d91997-04-29 20:08:16 +00001475static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001476builtin_open(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001477{
Guido van Rossum2d951851994-08-29 12:52:16 +00001478 char *name;
1479 char *mode = "r";
1480 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001482
Guido van Rossum79f25d91997-04-29 20:08:16 +00001483 if (!PyArg_ParseTuple(args, "s|si:open", &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001484 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001485 f = PyFile_FromString(name, mode);
Guido van Rossum2d951851994-08-29 12:52:16 +00001486 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001487 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001488 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001489}
1490
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001491static char open_doc[] =
1492"open(filename[, mode[, buffering]]) -> file object\n\
1493\n\
1494Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1495writing or appending. The file will be created if it doesn't exist\n\
1496when opened for writing or appending; it will be truncated when\n\
1497opened for writing. Add a 'b' to the mode for binary files.\n\
1498Add a '+' to the mode to allow simultaneous reading and writing.\n\
1499If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1500buffered, and larger numbers specify the buffer size.";
1501
1502
Guido van Rossum79f25d91997-04-29 20:08:16 +00001503static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001504builtin_ord(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001505{
Guido van Rossum09095f32000-03-10 23:00:52 +00001506 PyObject *obj;
1507 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001508 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001509
Guido van Rossum09095f32000-03-10 23:00:52 +00001510 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001511 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001512
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001513 if (PyString_Check(obj)) {
1514 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001515 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001516 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001517 return PyInt_FromLong(ord);
1518 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001519 } else if (PyUnicode_Check(obj)) {
1520 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001521 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001522 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001523 return PyInt_FromLong(ord);
1524 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001525 } else {
1526 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001527 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001528 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001529 return NULL;
1530 }
1531
Guido van Rossumad991772001-01-12 16:03:05 +00001532 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001533 "ord() expected a character, "
1534 "but string of length %d found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001535 size);
1536 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001537}
1538
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001539static char ord_doc[] =
1540"ord(c) -> integer\n\
1541\n\
Guido van Rossumad991772001-01-12 16:03:05 +00001542Return the integer ordinal of a one-character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001543
1544
Guido van Rossum79f25d91997-04-29 20:08:16 +00001545static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001546builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001547{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001548 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001549
Guido van Rossum79f25d91997-04-29 20:08:16 +00001550 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001551 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001552 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001553}
1554
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001555static char pow_doc[] =
1556"pow(x, y[, z]) -> number\n\
1557\n\
1558With two arguments, equivalent to x**y. With three arguments,\n\
1559equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1560
1561
Guido van Rossum124eff01999-02-23 16:11:01 +00001562/* Return number of items in range/xrange (lo, hi, step). step > 0
1563 * required. Return a value < 0 if & only if the true value is too
1564 * large to fit in a signed long.
1565 */
1566static long
Thomas Wouterse28c2962000-07-23 22:21:32 +00001567get_len_of_range(long lo, long hi, long step)
Guido van Rossum124eff01999-02-23 16:11:01 +00001568{
1569 /* -------------------------------------------------------------
1570 If lo >= hi, the range is empty.
1571 Else if n values are in the range, the last one is
1572 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1573 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1574 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1575 the RHS is non-negative and so truncation is the same as the
1576 floor. Letting M be the largest positive long, the worst case
1577 for the RHS numerator is hi=M, lo=-M-1, and then
1578 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1579 precision to compute the RHS exactly.
1580 ---------------------------------------------------------------*/
1581 long n = 0;
1582 if (lo < hi) {
1583 unsigned long uhi = (unsigned long)hi;
1584 unsigned long ulo = (unsigned long)lo;
1585 unsigned long diff = uhi - ulo - 1;
1586 n = (long)(diff / (unsigned long)step + 1);
1587 }
1588 return n;
1589}
1590
Guido van Rossum79f25d91997-04-29 20:08:16 +00001591static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001592builtin_range(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001593{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001594 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001595 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001596 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001597
Guido van Rossum79f25d91997-04-29 20:08:16 +00001598 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001599
Guido van Rossum79f25d91997-04-29 20:08:16 +00001600 if (PyTuple_Size(args) <= 1) {
1601 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001602 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001603 &ihigh))
1604 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001605 }
1606 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001607 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001608 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001609 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001610 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001611 }
1612 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001613 PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001614 return NULL;
1615 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001616 if (istep > 0)
1617 bign = get_len_of_range(ilow, ihigh, istep);
1618 else
1619 bign = get_len_of_range(ihigh, ilow, -istep);
1620 n = (int)bign;
1621 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001622 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001623 "range() result has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001624 return NULL;
1625 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001626 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001627 if (v == NULL)
1628 return NULL;
1629 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001630 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001631 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001632 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001633 return NULL;
1634 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001635 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001636 ilow += istep;
1637 }
1638 return v;
1639}
1640
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001641static char range_doc[] =
1642"range([start,] stop[, step]) -> list of integers\n\
1643\n\
1644Return a list containing an arithmetic progression of integers.\n\
1645range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1646When step is given, it specifies the increment (or decrement).\n\
1647For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1648These are exactly the valid indices for a list of 4 elements.";
1649
1650
Guido van Rossum79f25d91997-04-29 20:08:16 +00001651static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001652builtin_xrange(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001653{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001654 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001655 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001656
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 if (PyTuple_Size(args) <= 1) {
1658 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001659 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001660 &ihigh))
1661 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001662 }
1663 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001664 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001665 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001666 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001667 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001668 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001669 if (istep == 0) {
Fred Drake661ea262000-10-24 19:57:45 +00001670 PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001671 return NULL;
1672 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001673 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001674 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001675 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001676 n = get_len_of_range(ihigh, ilow, -istep);
1677 if (n < 0) {
1678 PyErr_SetString(PyExc_OverflowError,
Fred Drake661ea262000-10-24 19:57:45 +00001679 "xrange() result has too many items");
Guido van Rossum124eff01999-02-23 16:11:01 +00001680 return NULL;
1681 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001682 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001683}
1684
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001685static char xrange_doc[] =
1686"xrange([start,] stop[, step]) -> xrange object\n\
1687\n\
1688Like range(), but instead of returning a list, returns an object that\n\
1689generates the numbers in the range on demand. This is slightly slower\n\
1690than range() but more memory efficient.";
1691
1692
Guido van Rossum79f25d91997-04-29 20:08:16 +00001693static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001694builtin_raw_input(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001695{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696 PyObject *v = NULL;
1697 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001698
Guido van Rossum79f25d91997-04-29 20:08:16 +00001699 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001700 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1702 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001703 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001704 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001705 char *prompt;
1706 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001707 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001708 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001710 if (po == NULL)
1711 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001712 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001713 if (prompt == NULL)
1714 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001715 }
1716 else {
1717 po = NULL;
1718 prompt = "";
1719 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 s = PyOS_Readline(prompt);
1721 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001722 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001724 return NULL;
1725 }
1726 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001727 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001728 result = NULL;
1729 }
1730 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001731 size_t len = strlen(s);
1732 if (len > INT_MAX) {
1733 PyErr_SetString(PyExc_OverflowError, "input too long");
1734 result = NULL;
1735 }
1736 else {
1737 result = PyString_FromStringAndSize(s, (int)(len-1));
1738 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001739 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001740 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001741 return result;
1742 }
Guido van Rossum90933611991-06-07 16:10:43 +00001743 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001744 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001745 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001746 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001747 return NULL;
1748 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001749 if (Py_FlushLine() != 0 ||
1750 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001751 return NULL;
1752 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001753 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001754 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001755 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001756 return NULL;
1757 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001759}
1760
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001761static char raw_input_doc[] =
1762"raw_input([prompt]) -> string\n\
1763\n\
1764Read a string from standard input. The trailing newline is stripped.\n\
1765If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1766On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1767is printed without a trailing newline before reading.";
1768
1769
Guido van Rossum79f25d91997-04-29 20:08:16 +00001770static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001771builtin_reduce(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001772{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001773 PyObject *seq, *func, *result = NULL;
1774 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001775 register int i;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001776
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001778 return NULL;
1779 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001781
Guido van Rossum09df08a1998-05-22 00:51:39 +00001782 sqf = seq->ob_type->tp_as_sequence;
1783 if (sqf == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001784 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001785 "reduce() arg 2 must be a sequence");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001786 return NULL;
1787 }
1788
Guido van Rossum79f25d91997-04-29 20:08:16 +00001789 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001790 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001791
Guido van Rossum2d951851994-08-29 12:52:16 +00001792 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001794
1795 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796 Py_DECREF(args);
1797 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001798 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001799 }
1800
Guido van Rossum2d951851994-08-29 12:52:16 +00001801 if ((op2 = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001802 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001803 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001804 break;
1805 }
1806 goto Fail;
1807 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001808
Guido van Rossum2d951851994-08-29 12:52:16 +00001809 if (result == NULL)
1810 result = op2;
1811 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001812 PyTuple_SetItem(args, 0, result);
1813 PyTuple_SetItem(args, 1, op2);
1814 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001815 goto Fail;
1816 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001817 }
1818
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001820
Guido van Rossum2d951851994-08-29 12:52:16 +00001821 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00001823 "reduce() of empty sequence with no initial value");
Guido van Rossum2d951851994-08-29 12:52:16 +00001824
Guido van Rossum12d12c51993-10-26 17:58:25 +00001825 return result;
1826
Guido van Rossum2d951851994-08-29 12:52:16 +00001827Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 Py_XDECREF(args);
1829 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001830 return NULL;
1831}
1832
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001833static char reduce_doc[] =
1834"reduce(function, sequence[, initial]) -> value\n\
1835\n\
1836Apply a function of two arguments cumulatively to the items of a sequence,\n\
1837from left to right, so as to reduce the sequence to a single value.\n\
1838For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1839((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1840of the sequence in the calculation, and serves as a default when the\n\
1841sequence is empty.";
1842
1843
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001845builtin_reload(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001846{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001848
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001850 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001851 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001852}
1853
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001854static char reload_doc[] =
1855"reload(module) -> module\n\
1856\n\
1857Reload the module. The module must have been successfully imported before.";
1858
1859
Guido van Rossum79f25d91997-04-29 20:08:16 +00001860static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001861builtin_repr(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001862{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001863 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001864
Guido van Rossum79f25d91997-04-29 20:08:16 +00001865 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001866 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001868}
1869
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001870static char repr_doc[] =
1871"repr(object) -> string\n\
1872\n\
1873Return the canonical string representation of the object.\n\
1874For most object types, eval(repr(object)) == object.";
1875
1876
Guido van Rossum79f25d91997-04-29 20:08:16 +00001877static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001878builtin_round(PyObject *self, PyObject *args)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001879{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001880 double x;
1881 double f;
1882 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001883 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001884
Guido van Rossum79f25d91997-04-29 20:08:16 +00001885 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001886 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001887 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001888 i = abs(ndigits);
1889 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001890 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001891 if (ndigits < 0)
1892 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001893 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00001894 x *= f;
1895 if (x >= 0.0)
1896 x = floor(x + 0.5);
1897 else
1898 x = ceil(x - 0.5);
1899 if (ndigits < 0)
1900 x *= f;
1901 else
1902 x /= f;
1903 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001904}
1905
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001906static char round_doc[] =
1907"round(number[, ndigits]) -> floating point number\n\
1908\n\
1909Round a number to a given precision in decimal digits (default 0 digits).\n\
1910This always returns a floating point number. Precision may be negative.";
1911
1912
Guido van Rossum79f25d91997-04-29 20:08:16 +00001913static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001914builtin_str(PyObject *self, PyObject *args)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001915{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001917
Guido van Rossum79f25d91997-04-29 20:08:16 +00001918 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001919 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001920 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001921}
1922
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001923static char str_doc[] =
1924"str(object) -> string\n\
1925\n\
1926Return a nice string representation of the object.\n\
1927If the argument is a string, the return value is the same object.";
1928
1929
Guido van Rossum79f25d91997-04-29 20:08:16 +00001930static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001931builtin_tuple(PyObject *self, PyObject *args)
Guido van Rossumcae027b1994-08-29 12:53:11 +00001932{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001934
Guido van Rossum79f25d91997-04-29 20:08:16 +00001935 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001936 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001937 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00001938}
1939
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001940static char tuple_doc[] =
1941"tuple(sequence) -> list\n\
1942\n\
1943Return a tuple whose items are the same as those of the argument sequence.\n\
1944If the argument is a tuple, the return value is the same object.";
1945
1946
Guido van Rossum79f25d91997-04-29 20:08:16 +00001947static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001948builtin_type(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001949{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001950 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001951
Guido van Rossum79f25d91997-04-29 20:08:16 +00001952 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001953 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954 v = (PyObject *)v->ob_type;
1955 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001956 return v;
1957}
1958
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001959static char type_doc[] =
1960"type(object) -> type object\n\
1961\n\
1962Return the type of the object.";
1963
1964
Guido van Rossum79f25d91997-04-29 20:08:16 +00001965static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001966builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001967{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001968 PyObject *v = NULL;
1969 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001970
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001973 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001975 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976 if (!PyErr_Occurred())
1977 PyErr_SetString(PyExc_SystemError,
1978 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001979 }
1980 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001981 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001982 }
1983 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001984 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001985 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001987 "vars() argument must have __dict__ attribute");
1988 return NULL;
1989 }
1990 }
1991 return d;
1992}
1993
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001994static char vars_doc[] =
1995"vars([object]) -> dictionary\n\
1996\n\
1997Without arguments, equivalent to locals().\n\
1998With an argument, equivalent to object.__dict__.";
1999
Guido van Rossum668213d1999-06-16 17:28:37 +00002000static int
Neil Schemenauercc343ca2000-12-04 15:42:11 +00002001abstract_issubclass(PyObject *derived, PyObject *cls, int first)
Guido van Rossum668213d1999-06-16 17:28:37 +00002002{
2003 static PyObject *__bases__ = NULL;
2004 PyObject *bases;
Guido van Rossum7f851861999-06-17 19:12:39 +00002005 int i, n;
Guido van Rossum668213d1999-06-16 17:28:37 +00002006 int r = 0;
2007
2008 if (__bases__ == NULL) {
2009 __bases__ = PyString_FromString("__bases__");
2010 if (__bases__ == NULL)
2011 return -1;
2012 }
2013
2014 if (first) {
2015 bases = PyObject_GetAttr(cls, __bases__);
2016 if (bases == NULL || !PyTuple_Check(bases)) {
Guido van Rossumad991772001-01-12 16:03:05 +00002017 Py_XDECREF(bases);
2018 PyErr_SetString(PyExc_TypeError,
2019 "issubclass() arg 2 must be a class");
Guido van Rossum668213d1999-06-16 17:28:37 +00002020 return -1;
2021 }
2022 Py_DECREF(bases);
2023 }
2024
2025 if (derived == cls)
2026 return 1;
2027
2028 bases = PyObject_GetAttr(derived, __bases__);
2029 if (bases == NULL || !PyTuple_Check(bases)) {
2030 Py_XDECREF(bases);
Neil Schemenauercc343ca2000-12-04 15:42:11 +00002031 PyErr_SetString(PyExc_TypeError,
Guido van Rossumad991772001-01-12 16:03:05 +00002032 "issubclass() arg 1 must be a class");
Guido van Rossum668213d1999-06-16 17:28:37 +00002033 return -1;
2034 }
2035
2036 n = PyTuple_GET_SIZE(bases);
2037 for (i = 0; i < n; i++) {
Neil Schemenauercc343ca2000-12-04 15:42:11 +00002038 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i), cls, 0);
Guido van Rossum668213d1999-06-16 17:28:37 +00002039 if (r != 0)
2040 break;
2041 }
2042
2043 Py_DECREF(bases);
2044
2045 return r;
2046}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002047
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002048static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002049builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002050{
2051 PyObject *inst;
2052 PyObject *cls;
Guido van Rossum668213d1999-06-16 17:28:37 +00002053 PyObject *icls;
2054 static PyObject *__class__ = NULL;
2055 int retval = 0;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002056
Guido van Rossum43713e52000-02-29 13:59:29 +00002057 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002058 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002059
Guido van Rossum668213d1999-06-16 17:28:37 +00002060 if (PyClass_Check(cls)) {
2061 if (PyInstance_Check(inst)) {
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002062 PyObject *inclass =
2063 (PyObject*)((PyInstanceObject*)inst)->in_class;
2064 retval = PyClass_IsSubclass(inclass, cls);
2065 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002066 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002067 else if (PyType_Check(cls)) {
2068 retval = ((PyObject *)(inst->ob_type) == cls);
2069 }
2070 else if (!PyInstance_Check(inst)) {
Guido van Rossumad991772001-01-12 16:03:05 +00002071 if (__class__ == NULL) {
Guido van Rossum668213d1999-06-16 17:28:37 +00002072 __class__ = PyString_FromString("__class__");
2073 if (__class__ == NULL)
2074 return NULL;
2075 }
2076 icls = PyObject_GetAttr(inst, __class__);
2077 if (icls != NULL) {
Guido van Rossumad991772001-01-12 16:03:05 +00002078 retval = abstract_issubclass(icls, cls, 1);
Guido van Rossum668213d1999-06-16 17:28:37 +00002079 Py_DECREF(icls);
Guido van Rossumad991772001-01-12 16:03:05 +00002080 if (retval < 0 &&
2081 !PyErr_ExceptionMatches(PyExc_TypeError))
Guido van Rossum668213d1999-06-16 17:28:37 +00002082 return NULL;
2083 }
Guido van Rossumad991772001-01-12 16:03:05 +00002084 else
2085 retval = -1;
2086 }
2087 else
2088 retval = -1;
2089
2090 if (retval < 0) {
2091 PyErr_SetString(PyExc_TypeError,
2092 "isinstance() arg 2 must be a class or type");
2093 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002094 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002095 return PyInt_FromLong(retval);
2096}
2097
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002098static char isinstance_doc[] =
2099"isinstance(object, class-or-type) -> Boolean\n\
2100\n\
2101Return whether an object is an instance of a class or of a subclass thereof.\n\
2102With a type as second argument, return whether that is the object's type.";
2103
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002104
2105static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002106builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002107{
2108 PyObject *derived;
2109 PyObject *cls;
2110 int retval;
2111
Guido van Rossum43713e52000-02-29 13:59:29 +00002112 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002113 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002114
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002115 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Neil Schemenauercc343ca2000-12-04 15:42:11 +00002116 retval = abstract_issubclass(derived, cls, 1);
Guido van Rossumad991772001-01-12 16:03:05 +00002117 if (retval < 0)
Guido van Rossum668213d1999-06-16 17:28:37 +00002118 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002119 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002120 else {
2121 /* shortcut */
2122 if (!(retval = (derived == cls)))
2123 retval = PyClass_IsSubclass(derived, cls);
2124 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002125
2126 return PyInt_FromLong(retval);
2127}
2128
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002129static char issubclass_doc[] =
2130"issubclass(C, B) -> Boolean\n\
2131\n\
2132Return whether class C is a subclass (i.e., a derived class) of class B.";
2133
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002134
Barry Warsawbd599b52000-08-03 15:45:29 +00002135static PyObject*
2136builtin_zip(PyObject *self, PyObject *args)
2137{
2138 PyObject *ret;
2139 int itemsize = PySequence_Length(args);
2140 int i, j;
2141
2142 if (itemsize < 1) {
2143 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002144 "zip() requires at least one sequence");
Barry Warsawbd599b52000-08-03 15:45:29 +00002145 return NULL;
2146 }
2147 /* args must be a tuple */
2148 assert(PyTuple_Check(args));
2149
2150 if ((ret = PyList_New(0)) == NULL)
2151 return NULL;
2152
2153 for (i = 0;; i++) {
2154 PyObject *next = PyTuple_New(itemsize);
2155 if (!next) {
2156 Py_DECREF(ret);
2157 return NULL;
2158 }
2159 for (j = 0; j < itemsize; j++) {
2160 PyObject *seq = PyTuple_GET_ITEM(args, j);
2161 PyObject *item = PySequence_GetItem(seq, i);
2162
2163 if (!item) {
2164 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2165 PyErr_Clear();
2166 Py_DECREF(next);
2167 return ret;
2168 }
2169 Py_DECREF(next);
2170 Py_DECREF(ret);
2171 return NULL;
2172 }
2173 PyTuple_SET_ITEM(next, j, item);
2174 }
2175 PyList_Append(ret, next);
2176 Py_DECREF(next);
2177 }
2178 /* no return */
2179}
2180
2181
2182static char zip_doc[] =
2183"zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\
2184\n\
2185Return a list of tuples, where each tuple contains the i-th element\n\
2186from each of the argument sequences. The returned list is truncated\n\
2187in length to the length of the shortest argument sequence.";
2188
2189
Guido van Rossum79f25d91997-04-29 20:08:16 +00002190static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002191 {"__import__", builtin___import__, 1, import_doc},
2192 {"abs", builtin_abs, 1, abs_doc},
2193 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002194 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002195 {"callable", builtin_callable, 1, callable_doc},
2196 {"chr", builtin_chr, 1, chr_doc},
2197 {"cmp", builtin_cmp, 1, cmp_doc},
2198 {"coerce", builtin_coerce, 1, coerce_doc},
2199 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002200#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002201 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002202#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002203 {"delattr", builtin_delattr, 1, delattr_doc},
2204 {"dir", builtin_dir, 1, dir_doc},
2205 {"divmod", builtin_divmod, 1, divmod_doc},
2206 {"eval", builtin_eval, 1, eval_doc},
2207 {"execfile", builtin_execfile, 1, execfile_doc},
2208 {"filter", builtin_filter, 1, filter_doc},
2209 {"float", builtin_float, 1, float_doc},
2210 {"getattr", builtin_getattr, 1, getattr_doc},
2211 {"globals", builtin_globals, 1, globals_doc},
2212 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2213 {"hash", builtin_hash, 1, hash_doc},
2214 {"hex", builtin_hex, 1, hex_doc},
2215 {"id", builtin_id, 1, id_doc},
2216 {"input", builtin_input, 1, input_doc},
2217 {"intern", builtin_intern, 1, intern_doc},
2218 {"int", builtin_int, 1, int_doc},
2219 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2220 {"issubclass", builtin_issubclass, 1, issubclass_doc},
2221 {"len", builtin_len, 1, len_doc},
2222 {"list", builtin_list, 1, list_doc},
2223 {"locals", builtin_locals, 1, locals_doc},
2224 {"long", builtin_long, 1, long_doc},
2225 {"map", builtin_map, 1, map_doc},
2226 {"max", builtin_max, 1, max_doc},
2227 {"min", builtin_min, 1, min_doc},
2228 {"oct", builtin_oct, 1, oct_doc},
2229 {"open", builtin_open, 1, open_doc},
2230 {"ord", builtin_ord, 1, ord_doc},
2231 {"pow", builtin_pow, 1, pow_doc},
2232 {"range", builtin_range, 1, range_doc},
2233 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2234 {"reduce", builtin_reduce, 1, reduce_doc},
2235 {"reload", builtin_reload, 1, reload_doc},
2236 {"repr", builtin_repr, 1, repr_doc},
2237 {"round", builtin_round, 1, round_doc},
2238 {"setattr", builtin_setattr, 1, setattr_doc},
2239 {"slice", builtin_slice, 1, slice_doc},
2240 {"str", builtin_str, 1, str_doc},
2241 {"tuple", builtin_tuple, 1, tuple_doc},
2242 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002243 {"unicode", builtin_unicode, 1, unicode_doc},
2244 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002245 {"vars", builtin_vars, 1, vars_doc},
2246 {"xrange", builtin_xrange, 1, xrange_doc},
Barry Warsawbd599b52000-08-03 15:45:29 +00002247 {"zip", builtin_zip, 1, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002248 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002249};
2250
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002251static char builtin_doc[] =
2252"Built-in functions, exceptions, and other objects.\n\
2253\n\
2254Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2255
Guido van Rossum25ce5661997-08-02 03:10:38 +00002256PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002257_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002258{
Fred Drake5550de32000-06-20 04:54:19 +00002259 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002260 mod = Py_InitModule4("__builtin__", builtin_methods,
2261 builtin_doc, (PyObject *)NULL,
2262 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002263 if (mod == NULL)
2264 return NULL;
2265 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002266 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2267 return NULL;
2268 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2269 return NULL;
Guido van Rossumad991772001-01-12 16:03:05 +00002270 if (PyDict_SetItemString(dict, "NotImplemented",
Neil Schemenauer23ab1992001-01-04 01:48:42 +00002271 Py_NotImplemented) < 0)
2272 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002273 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2274 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2275 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002276 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002277 }
2278 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002279
Guido van Rossum25ce5661997-08-02 03:10:38 +00002280 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002281}
2282
Guido van Rossume77a7571993-11-03 15:01:26 +00002283/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002284
Guido van Rossum79f25d91997-04-29 20:08:16 +00002285static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002286filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002287{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002288 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002289 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002290 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002291
Guido van Rossumb7b45621995-08-04 04:07:45 +00002292 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002293 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002294 return tuple;
2295 }
2296
Guido van Rossum79f25d91997-04-29 20:08:16 +00002297 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002298 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002299
Guido van Rossum12d12c51993-10-26 17:58:25 +00002300 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002301 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002302 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002303
Guido van Rossum79f25d91997-04-29 20:08:16 +00002304 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002305 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002306 if (func == Py_None) {
2307 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002308 good = item;
2309 }
2310 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002311 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002312 if (arg == NULL)
2313 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002314 good = PyEval_CallObject(func, arg);
2315 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002316 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002317 goto Fail_1;
2318 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002319 ok = PyObject_IsTrue(good);
2320 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002321 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002322 Py_INCREF(item);
2323 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002324 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002325 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002326 }
2327
Guido van Rossum79f25d91997-04-29 20:08:16 +00002328 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002329 return NULL;
2330
Guido van Rossum12d12c51993-10-26 17:58:25 +00002331 return result;
2332
Guido van Rossum12d12c51993-10-26 17:58:25 +00002333Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002334 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002335 return NULL;
2336}
2337
2338
Guido van Rossume77a7571993-11-03 15:01:26 +00002339/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002340
Guido van Rossum79f25d91997-04-29 20:08:16 +00002341static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002342filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002343{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002344 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002345 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002346 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002347
Guido van Rossum79f25d91997-04-29 20:08:16 +00002348 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002349 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002350 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002351 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002352 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002353 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002354 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002355
Guido van Rossum12d12c51993-10-26 17:58:25 +00002356 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002357 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002358 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002359
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002360 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2361 if (item == NULL)
2362 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002363 arg = Py_BuildValue("(O)", item);
2364 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002365 if (arg == NULL)
2366 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002367 good = PyEval_CallObject(func, arg);
2368 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002369 if (good == NULL)
2370 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002371 ok = PyObject_IsTrue(good);
2372 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002373 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002374 PyString_AS_STRING((PyStringObject *)result)[j++] =
2375 PyString_AS_STRING((PyStringObject *)item)[0];
Guido van Rossum12d12c51993-10-26 17:58:25 +00002376 }
2377
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002379 return NULL;
2380
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381 return result;
2382
Guido van Rossum12d12c51993-10-26 17:58:25 +00002383Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002384 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002385 return NULL;
2386}