blob: bbd9969a9332a4524690a5b604983e903636f930 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009******************************************************************/
10
Guido van Rossum3f5da241990-12-20 15:06:42 +000011/* Built-in functions */
12
Guido van Rossum79f25d91997-04-29 20:08:16 +000013#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000014
15#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +000016#include "compile.h"
17#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000018
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +000019#include "mymath.h"
20
Guido van Rossum6bf62da1997-04-11 20:37:35 +000021#include <ctype.h>
22
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000023#ifdef HAVE_UNISTD_H
24#include <unistd.h>
25#endif
26
Guido van Rossum12d12c51993-10-26 17:58:25 +000027/* Forward */
Guido van Rossum79f25d91997-04-29 20:08:16 +000028static PyObject *filterstring Py_PROTO((PyObject *, PyObject *));
29static PyObject *filtertuple Py_PROTO((PyObject *, PyObject *));
Guido van Rossum12d12c51993-10-26 17:58:25 +000030
Guido van Rossum79f25d91997-04-29 20:08:16 +000031static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +000032builtin___import__(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +000033 PyObject *self;
34 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +000035{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000036 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000037 PyObject *globals = NULL;
38 PyObject *locals = NULL;
39 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000040
Guido van Rossum79f25d91997-04-29 20:08:16 +000041 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000042 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000044 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000045}
46
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000047static char import_doc[] =
48"__import__(name, globals, locals, fromlist) -> module\n\
49\n\
50Import a module. The globals are only used to determine the context;\n\
51they are not modified. The locals are currently unused. The fromlist\n\
52should be a list of names to emulate ``from name import ...'', or an\n\
53empty list to emulate ``import name''.\n\
54When importing a module from a package, note that __import__('A.B', ...)\n\
55returns package A when fromlist is empty, but its submodule B when\n\
56fromlist is not empty.";
57
Guido van Rossum1ae940a1995-01-02 19:04:15 +000058
Guido van Rossum79f25d91997-04-29 20:08:16 +000059static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +000060builtin_abs(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +000061 PyObject *self;
62 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000063{
Guido van Rossum79f25d91997-04-29 20:08:16 +000064 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000065
Guido van Rossum79f25d91997-04-29 20:08:16 +000066 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000067 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000068 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000069}
70
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000071static char abs_doc[] =
72"abs(number) -> number\n\
73\n\
74Return the absolute value of the argument.";
75
76
Guido van Rossum79f25d91997-04-29 20:08:16 +000077static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +000078builtin_apply(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +000079 PyObject *self;
80 PyObject *args;
Guido van Rossumc02e15c1991-12-16 13:03:00 +000081{
Guido van Rossum79f25d91997-04-29 20:08:16 +000082 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000083 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000084
Guido van Rossum79f25d91997-04-29 20:08:16 +000085 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000086 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000087 if (alist != NULL) {
88 if (!PyTuple_Check(alist)) {
89 if (!PySequence_Check(alist)) {
90 PyErr_SetString(PyExc_TypeError,
91 "apply() 2nd argument must be a sequence");
92 return NULL;
93 }
94 t = PySequence_Tuple(alist);
95 if (t == NULL)
96 return NULL;
97 alist = t;
98 }
Guido van Rossum2d951851994-08-29 12:52:16 +000099 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000100 if (kwdict != NULL && !PyDict_Check(kwdict)) {
101 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +0000102 "apply() 3rd argument must be dictionary");
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000103 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000104 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000105 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
106 finally:
107 Py_XDECREF(t);
108 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000109}
110
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000111static char apply_doc[] =
Fred Drake7b912121999-12-23 14:16:55 +0000112"apply(object, args[, kwargs]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000113\n\
Fred Drake7b912121999-12-23 14:16:55 +0000114Call a callable object with positional arguments taken from the tuple args,\n\
115and keyword arguments taken from the optional dictionary kwargs.\n\
116Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000117
118
Guido van Rossum79f25d91997-04-29 20:08:16 +0000119static PyObject *
Guido van Rossum0daf0221999-03-19 19:07:19 +0000120builtin_buffer(self, args)
121 PyObject *self;
122 PyObject *args;
123{
124 PyObject *ob;
125 int offset = 0;
126 int size = Py_END_OF_BUFFER;
127
128 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
129 return NULL;
130 return PyBuffer_FromObject(ob, offset, size);
131}
132
133static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000134"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000135\n\
136Creates a new buffer object which references the given object.\n\
137The buffer will reference a slice of the target object from the\n\
138start of the object (or at the specified offset). The slice will\n\
139extend to the end of the target object (or with the specified size).";
140
141
142static PyObject *
Guido van Rossum09095f32000-03-10 23:00:52 +0000143builtin_unicode(self, args)
144 PyObject *self;
145 PyObject *args;
146{
Guido van Rossum3afba762000-04-11 15:38:23 +0000147 PyObject *v;
148 const void *buffer;
Guido van Rossum09095f32000-03-10 23:00:52 +0000149 int len;
150 char *encoding = NULL;
151 char *errors = NULL;
152
Guido van Rossum3afba762000-04-11 15:38:23 +0000153 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000154 return NULL;
Guido van Rossum3afba762000-04-11 15:38:23 +0000155 /* Special case: Unicode will stay Unicode */
156 if (PyUnicode_Check(v)) {
157 if (encoding) {
158 PyErr_SetString(PyExc_TypeError,
159 "unicode() does not support decoding of Unicode objects");
160 return NULL;
161 }
162 Py_INCREF(v);
163 return v;
164 }
165 /* Read raw data and decode it */
166 if (PyObject_AsReadBuffer(v, &buffer, &len))
167 return NULL;
168 return PyUnicode_Decode((const char *)buffer, len, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000169}
170
171static char unicode_doc[] =
172"unicode(string [, encoding[, errors]]) -> object\n\
173\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000174Creates a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000175encoding defaults to the current default string encoding and \n\
176errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000177
178
179static PyObject *
Guido van Rossum2d951851994-08-29 12:52:16 +0000180builtin_callable(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000181 PyObject *self;
182 PyObject *args;
Guido van Rossum2d951851994-08-29 12:52:16 +0000183{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000184 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000185
Guido van Rossum79f25d91997-04-29 20:08:16 +0000186 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000187 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000189}
190
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000191static char callable_doc[] =
192"callable(object) -> Boolean\n\
193\n\
194Return whether the object is callable (i.e., some kind of function).\n\
195Note that classes are callable, as are instances with a __call__() method.";
196
197
Guido van Rossum79f25d91997-04-29 20:08:16 +0000198static PyObject *
Guido van Rossume77a7571993-11-03 15:01:26 +0000199builtin_filter(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000200 PyObject *self;
201 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000202{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000203 PyObject *func, *seq, *result;
204 PySequenceMethods *sqf;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000205 int len;
206 register int i, j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000207
Guido van Rossum79f25d91997-04-29 20:08:16 +0000208 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000209 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000210
Guido van Rossum79f25d91997-04-29 20:08:16 +0000211 if (PyString_Check(seq)) {
212 PyObject *r = filterstring(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000213 return r;
214 }
215
Guido van Rossum79f25d91997-04-29 20:08:16 +0000216 if (PyTuple_Check(seq)) {
217 PyObject *r = filtertuple(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000218 return r;
219 }
220
Guido van Rossum09df08a1998-05-22 00:51:39 +0000221 sqf = seq->ob_type->tp_as_sequence;
222 if (sqf == NULL || sqf->sq_length == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000223 PyErr_SetString(PyExc_TypeError,
Guido van Rossume77a7571993-11-03 15:01:26 +0000224 "argument 2 to filter() must be a sequence type");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000225 goto Fail_2;
226 }
227
228 if ((len = (*sqf->sq_length)(seq)) < 0)
229 goto Fail_2;
230
Guido van Rossum79f25d91997-04-29 20:08:16 +0000231 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
232 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000233 result = seq;
234 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000235 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000236 if ((result = PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000237 goto Fail_2;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000238 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000239
Guido van Rossum2d951851994-08-29 12:52:16 +0000240 for (i = j = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000241 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000242 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000243
Guido van Rossum2d951851994-08-29 12:52:16 +0000244 if ((item = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +0000245 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000246 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +0000247 break;
248 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000249 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000250 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000251
Guido van Rossum79f25d91997-04-29 20:08:16 +0000252 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000253 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000254 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000255 }
256 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000257 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000258 if (arg == NULL)
259 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260 good = PyEval_CallObject(func, arg);
261 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000262 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000263 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000264 goto Fail_1;
Guido van Rossum58b68731995-01-10 17:40:55 +0000265 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000266 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000267 ok = PyObject_IsTrue(good);
268 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000269 if (ok) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000270 if (j < len) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000271 if (PyList_SetItem(result, j++, item) < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000272 goto Fail_1;
273 }
274 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000275 int status = PyList_Append(result, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000276 j++;
Barry Warsawfa77e091999-01-28 18:49:12 +0000277 Py_DECREF(item);
278 if (status < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000279 goto Fail_1;
280 }
Guido van Rossum58b68731995-01-10 17:40:55 +0000281 } else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000282 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000283 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000284 }
285
Guido van Rossum12d12c51993-10-26 17:58:25 +0000286
Guido van Rossum79f25d91997-04-29 20:08:16 +0000287 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000288 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000289
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290 return result;
291
Guido van Rossum12d12c51993-10-26 17:58:25 +0000292Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000293 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000294Fail_2:
Guido van Rossum12d12c51993-10-26 17:58:25 +0000295 return NULL;
296}
297
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000298static char filter_doc[] =
299"filter(function, sequence) -> list\n\
300\n\
301Return a list containing those items of sequence for which function(item)\n\
302is true. If function is None, return a list of items that are true.";
303
304
Guido van Rossum79f25d91997-04-29 20:08:16 +0000305static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +0000306builtin_chr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000307 PyObject *self;
308 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000309{
310 long x;
311 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000312
Guido van Rossum79f25d91997-04-29 20:08:16 +0000313 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000314 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000315 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000316 PyErr_SetString(PyExc_ValueError,
317 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000318 return NULL;
319 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000320 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000321 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000322}
323
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000324static char chr_doc[] =
325"chr(i) -> character\n\
326\n\
327Return a string of one character with ordinal i; 0 <= i < 256.";
328
329
Guido van Rossum79f25d91997-04-29 20:08:16 +0000330static PyObject *
Guido van Rossum09095f32000-03-10 23:00:52 +0000331builtin_unichr(self, args)
332 PyObject *self;
333 PyObject *args;
334{
335 long x;
336 Py_UNICODE s[1];
337
338 if (!PyArg_ParseTuple(args, "l:unichr", &x))
339 return NULL;
340 if (x < 0 || x >= 65536) {
341 PyErr_SetString(PyExc_ValueError,
342 "unichr() arg not in range(65536)");
343 return NULL;
344 }
345 s[0] = (Py_UNICODE)x;
346 return PyUnicode_FromUnicode(s, 1);
347}
348
349static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000350"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000351\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000352Return a Unicode string of one character with ordinal i; 0 <= i < 65536.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000353
354
355static PyObject *
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000356builtin_cmp(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000357 PyObject *self;
358 PyObject *args;
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000359{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000361 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000362
Guido van Rossum79f25d91997-04-29 20:08:16 +0000363 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000364 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000365 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000366 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000367 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000368}
369
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000370static char cmp_doc[] =
371"cmp(x, y) -> integer\n\
372\n\
373Return negative if x<y, zero if x==y, positive if x>y.";
374
375
Guido van Rossum79f25d91997-04-29 20:08:16 +0000376static PyObject *
Guido van Rossum5524a591995-01-10 15:26:20 +0000377builtin_coerce(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000378 PyObject *self;
379 PyObject *args;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000380{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000381 PyObject *v, *w;
382 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000383
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000385 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000386 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000387 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000388 res = Py_BuildValue("(OO)", v, w);
389 Py_DECREF(v);
390 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000391 return res;
392}
393
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000394static char coerce_doc[] =
395"coerce(x, y) -> None or (x1, y1)\n\
396\n\
397When x and y can be coerced to values of the same type, return a tuple\n\
398containing the coerced values. When they can't be coerced, return None.";
399
400
Guido van Rossum79f25d91997-04-29 20:08:16 +0000401static PyObject *
Guido van Rossum5b722181993-03-30 17:46:03 +0000402builtin_compile(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000403 PyObject *self;
404 PyObject *args;
Guido van Rossum5b722181993-03-30 17:46:03 +0000405{
406 char *str;
407 char *filename;
408 char *startstr;
409 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000410
Guido van Rossum79f25d91997-04-29 20:08:16 +0000411 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000412 return NULL;
413 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000414 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000415 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000416 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000417 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000418 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000419 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000420 PyErr_SetString(PyExc_ValueError,
Guido van Rossum872537c1995-07-07 22:43:42 +0000421 "compile() mode must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000422 return NULL;
423 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000424 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000425}
426
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000427static char compile_doc[] =
428"compile(source, filename, mode) -> code object\n\
429\n\
430Compile the source string (a Python module, statement or expression)\n\
431into a code object that can be executed by the exec statement or eval().\n\
432The filename will be used for run-time error messages.\n\
433The mode must be 'exec' to compile a module, 'single' to compile a\n\
434single (interactive) statement, or 'eval' to compile an expression.";
435
436
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000437#ifndef WITHOUT_COMPLEX
438
Guido van Rossum79f25d91997-04-29 20:08:16 +0000439static PyObject *
Guido van Rossum11950231999-03-25 21:16:07 +0000440complex_from_string(v)
441 PyObject *v;
442{
443 extern double strtod Py_PROTO((const char *, char **));
Guido van Rossum9e896b32000-04-05 20:11:21 +0000444 const char *s, *start;
445 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000446 double x=0.0, y=0.0, z;
447 int got_re=0, got_im=0, done=0;
448 int digit_or_dot;
449 int sw_error=0;
450 int sign;
451 char buffer[256]; /* For errors */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000452 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000453
Guido van Rossum9e896b32000-04-05 20:11:21 +0000454 if (PyString_Check(v)) {
455 s = PyString_AS_STRING(v);
456 len = PyString_GET_SIZE(v);
457 }
458 else if (PyUnicode_Check(v)) {
459 char s_buffer[256];
460
461 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
462 PyErr_SetString(PyExc_ValueError,
463 "complex() literal too large to convert");
464 return NULL;
465 }
466 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
467 PyUnicode_GET_SIZE(v),
468 s_buffer,
469 NULL))
470 return NULL;
471 s = s_buffer;
472 len = strlen(s);
473 }
474 else if (PyObject_AsCharBuffer(v, &s, &len)) {
475 PyErr_SetString(PyExc_TypeError,
476 "complex() needs a string first argument");
477 return NULL;
478 }
Guido van Rossum11950231999-03-25 21:16:07 +0000479
480 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000481 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000482 while (*s && isspace(Py_CHARMASK(*s)))
483 s++;
484 if (s[0] == '\0') {
485 PyErr_SetString(PyExc_ValueError,
486 "empty string for complex()");
487 return NULL;
488 }
489
490 z = -1.0;
491 sign = 1;
492 do {
493
494 switch (*s) {
495
496 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000497 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000498 PyErr_SetString(
499 PyExc_ValueError,
500 "null byte in argument for complex()");
501 return NULL;
502 }
503 if(!done) sw_error=1;
504 break;
505
506 case '-':
507 sign = -1;
508 /* Fallthrough */
509 case '+':
510 if (done) sw_error=1;
511 s++;
512 if ( *s=='\0'||*s=='+'||*s=='-' ||
513 isspace(Py_CHARMASK(*s)) ) sw_error=1;
514 break;
515
516 case 'J':
517 case 'j':
518 if (got_im || done) {
519 sw_error = 1;
520 break;
521 }
522 if (z<0.0) {
523 y=sign;
524 }
525 else{
526 y=sign*z;
527 }
528 got_im=1;
529 s++;
530 if (*s!='+' && *s!='-' )
531 done=1;
532 break;
533
534 default:
535 if (isspace(Py_CHARMASK(*s))) {
536 while (*s && isspace(Py_CHARMASK(*s)))
537 s++;
538 if (s[0] != '\0')
539 sw_error=1;
540 else
541 done = 1;
542 break;
543 }
544 digit_or_dot =
545 (*s=='.' || isdigit(Py_CHARMASK(*s)));
546 if (done||!digit_or_dot) {
547 sw_error=1;
548 break;
549 }
550 errno = 0;
551 PyFPE_START_PROTECT("strtod", return 0)
552 z = strtod(s, &end) ;
553 PyFPE_END_PROTECT(z)
554 if (errno != 0) {
555 sprintf(buffer,
556 "float() out of range: %.150s", s);
557 PyErr_SetString(
558 PyExc_ValueError,
559 buffer);
560 return NULL;
561 }
562 s=end;
563 if (*s=='J' || *s=='j') {
564
565 break;
566 }
567 if (got_re) {
568 sw_error=1;
569 break;
570 }
571
572 /* accept a real part */
573 x=sign*z;
574 got_re=1;
575 if (got_im) done=1;
576 z = -1.0;
577 sign = 1;
578 break;
579
580 } /* end of switch */
581
582 } while (*s!='\0' && !sw_error);
583
584 if (sw_error) {
585 PyErr_SetString(PyExc_ValueError,
586 "malformed string for complex()");
587 return NULL;
588 }
589
590 return PyComplex_FromDoubles(x,y);
591}
592
593static PyObject *
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000594builtin_complex(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595 PyObject *self;
596 PyObject *args;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000597{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598 PyObject *r, *i, *tmp;
599 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000600 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000601 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000602
603 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000604 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000605 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000606 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000607 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000608 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000609 nbr->nb_float == NULL ||
610 (i != NULL &&
611 ((nbi = i->ob_type->tp_as_number) == NULL ||
612 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613 PyErr_SetString(PyExc_TypeError,
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000614 "complex() argument can't be converted to complex");
615 return NULL;
616 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000617 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000618 if (PyInstance_Check(r)) {
619 static PyObject *complexstr;
620 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000621 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000622 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000623 if (complexstr == NULL)
624 return NULL;
625 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000627 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000629 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000630 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000631 if (args == NULL)
632 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 r = PyEval_CallObject(f, args);
634 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000635 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000636 if (r == NULL)
637 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000638 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000639 }
640 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 if (PyComplex_Check(r)) {
642 cr = ((PyComplexObject*)r)->cval;
Guido van Rossum730806d1998-04-10 22:27:42 +0000643 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000644 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000645 }
Guido van Rossumc6472e91997-03-31 17:15:43 +0000646 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000647 else {
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000648 tmp = (*nbr->nb_float)(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000649 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000650 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000651 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000652 if (tmp == NULL)
653 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654 cr.real = PyFloat_AsDouble(tmp);
655 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000656 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000657 }
658 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000659 ci.real = 0.0;
660 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000661 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000662 else if (PyComplex_Check(i))
663 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000664 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000665 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000666 if (tmp == NULL)
667 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 ci.real = PyFloat_AsDouble(tmp);
669 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000670 ci.imag = 0.;
671 }
672 cr.real -= ci.imag;
673 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000675}
676
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000677static char complex_doc[] =
678"complex(real[, imag]) -> complex number\n\
679\n\
680Create a complex number from a real part and an optional imaginary part.\n\
681This is equivalent to (real + imag*1j) where imag defaults to 0.";
682
683
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000684#endif
685
Guido van Rossum79f25d91997-04-29 20:08:16 +0000686static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000687builtin_dir(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688 PyObject *self;
689 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000690{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000691 static char *attrlist[] = {"__members__", "__methods__", NULL};
692 PyObject *v = NULL, *l = NULL, *m = NULL;
693 PyObject *d, *x;
694 int i;
695 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696
Guido van Rossum79f25d91997-04-29 20:08:16 +0000697 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000699 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000700 x = PyEval_GetLocals();
701 if (x == NULL)
702 goto error;
703 l = PyMapping_Keys(x);
704 if (l == NULL)
705 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000706 }
707 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000708 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000709 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000710 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000711 else {
712 l = PyMapping_Keys(d);
713 if (l == NULL)
714 PyErr_Clear();
715 Py_DECREF(d);
716 }
717 if (l == NULL) {
718 l = PyList_New(0);
719 if (l == NULL)
720 goto error;
721 }
722 for (s = attrlist; *s != NULL; s++) {
723 m = PyObject_GetAttrString(v, *s);
724 if (m == NULL) {
725 PyErr_Clear();
726 continue;
727 }
728 for (i = 0; ; i++) {
729 x = PySequence_GetItem(m, i);
730 if (x == NULL) {
731 PyErr_Clear();
732 break;
733 }
734 if (PyList_Append(l, x) != 0) {
735 Py_DECREF(x);
736 Py_DECREF(m);
737 goto error;
738 }
739 Py_DECREF(x);
740 }
741 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000742 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000743 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000744 if (PyList_Sort(l) != 0)
745 goto error;
746 return l;
747 error:
748 Py_XDECREF(l);
749 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000750}
751
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000752static char dir_doc[] =
753"dir([object]) -> list of strings\n\
754\n\
755Return an alphabetized list of names comprising (some of) the attributes\n\
756of the given object. Without an argument, the names in the current scope\n\
757are listed. With an instance argument, only the instance attributes are\n\
758returned. With a class argument, attributes of the base class are not\n\
759returned. For other types or arguments, this may list members or methods.";
760
761
Guido van Rossum79f25d91997-04-29 20:08:16 +0000762static PyObject *
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000763builtin_divmod(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000764 PyObject *self;
765 PyObject *args;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000766{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000768
Guido van Rossum79f25d91997-04-29 20:08:16 +0000769 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000770 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000771 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000772}
773
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000774static char divmod_doc[] =
775"divmod(x, y) -> (div, mod)\n\
776\n\
777Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
778
779
Guido van Rossum79f25d91997-04-29 20:08:16 +0000780static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781builtin_eval(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782 PyObject *self;
783 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000784{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000785 PyObject *cmd;
786 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000787 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000788
Guido van Rossum79f25d91997-04-29 20:08:16 +0000789 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000790 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 &PyDict_Type, &globals,
792 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000793 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000794 if (globals == Py_None) {
795 globals = PyEval_GetGlobals();
796 if (locals == Py_None)
797 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000798 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000799 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000800 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000801 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
802 if (PyDict_SetItemString(globals, "__builtins__",
803 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000804 return NULL;
805 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000806 if (PyCode_Check(cmd))
807 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
808 if (!PyString_Check(cmd)) {
809 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000810 "eval() argument 1 must be string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000811 return NULL;
812 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 str = PyString_AsString(cmd);
Guido van Rossum106f2da2000-06-28 21:12:25 +0000814 if (strlen(str) != (size_t)PyString_Size(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000815 PyErr_SetString(PyExc_ValueError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000816 "embedded '\\0' in string arg");
817 return NULL;
Guido van Rossumf08ab0a1992-03-04 16:41:41 +0000818 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000819 while (*str == ' ' || *str == '\t')
820 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000821 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000822}
823
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000824static char eval_doc[] =
825"eval(source[, globals[, locals]]) -> value\n\
826\n\
827Evaluate the source in the context of globals and locals.\n\
828The source may be a string representing a Python expression\n\
829or a code object as returned by compile().\n\
830The globals and locals are dictionaries, defaulting to the current\n\
831globals and locals. If only globals is given, locals defaults to it.";
832
833
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000835builtin_execfile(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 PyObject *self;
837 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000838{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000839 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840 PyObject *globals = Py_None, *locals = Py_None;
841 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000842 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000845 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 &PyDict_Type, &globals,
847 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000848 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 if (globals == Py_None) {
850 globals = PyEval_GetGlobals();
851 if (locals == Py_None)
852 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000853 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000855 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000856 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
857 if (PyDict_SetItemString(globals, "__builtins__",
858 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000859 return NULL;
860 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000861 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000862 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000864 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000866 return NULL;
867 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000868 res = PyRun_File(fp, filename, Py_file_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000869 Py_BEGIN_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000870 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871 Py_END_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000872 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000873}
874
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000875static char execfile_doc[] =
876"execfile(filename[, globals[, locals]])\n\
877\n\
878Read and execute a Python script from a file.\n\
879The globals and locals are dictionaries, defaulting to the current\n\
880globals and locals. If only globals is given, locals defaults to it.";
881
882
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +0000884builtin_getattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 PyObject *self;
886 PyObject *args;
Guido van Rossum33894be1992-01-27 16:53:09 +0000887{
Guido van Rossum950ff291998-06-29 13:38:57 +0000888 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000890
Guido van Rossum950ff291998-06-29 13:38:57 +0000891 if (!PyArg_ParseTuple(args, "OS|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000892 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000893 result = PyObject_GetAttr(v, name);
894 if (result == NULL && dflt != NULL) {
895 PyErr_Clear();
896 Py_INCREF(dflt);
897 result = dflt;
898 }
899 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000900}
901
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000903"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000904\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000905Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
906When a default argument is given, it is returned when the attribute doesn't\n\
907exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000908
909
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910static PyObject *
Guido van Rossum872537c1995-07-07 22:43:42 +0000911builtin_globals(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000912 PyObject *self;
913 PyObject *args;
Guido van Rossum872537c1995-07-07 22:43:42 +0000914{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000916
Guido van Rossum43713e52000-02-29 13:59:29 +0000917 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000918 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000919 d = PyEval_GetGlobals();
920 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000921 return d;
922}
923
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000924static char globals_doc[] =
925"globals() -> dictionary\n\
926\n\
927Return the dictionary containing the current scope's global variables.";
928
929
Guido van Rossum79f25d91997-04-29 20:08:16 +0000930static PyObject *
Guido van Rossum9bfef441993-03-29 10:43:31 +0000931builtin_hasattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 PyObject *self;
933 PyObject *args;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000934{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000935 PyObject *v;
936 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 if (!PyArg_ParseTuple(args, "OS:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000939 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000941 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000942 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000943 Py_INCREF(Py_False);
944 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000946 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000947 Py_INCREF(Py_True);
948 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000949}
950
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000951static char hasattr_doc[] =
952"hasattr(object, name) -> Boolean\n\
953\n\
954Return whether the object has an attribute with the given name.\n\
955(This is done by calling getattr(object, name) and catching exceptions.)";
956
957
Guido van Rossum79f25d91997-04-29 20:08:16 +0000958static PyObject *
Guido van Rossum5b722181993-03-30 17:46:03 +0000959builtin_id(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 PyObject *self;
961 PyObject *args;
Guido van Rossum5b722181993-03-30 17:46:03 +0000962{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000963 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000964
Guido van Rossum79f25d91997-04-29 20:08:16 +0000965 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000966 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000967 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000968}
969
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000970static char id_doc[] =
971"id(object) -> integer\n\
972\n\
973Return the identity of an object. This is guaranteed to be unique among\n\
974simultaneously existing objects. (Hint: it's the object's memory address.)";
975
976
Guido van Rossum79f25d91997-04-29 20:08:16 +0000977static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +0000978builtin_map(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000979 PyObject *self;
980 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981{
982 typedef struct {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983 PyObject *seq;
984 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000985 int len;
986 } sequence;
987
Guido van Rossum79f25d91997-04-29 20:08:16 +0000988 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000989 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000990 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000991 register int i, j;
992
Guido van Rossum79f25d91997-04-29 20:08:16 +0000993 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000994 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 PyErr_SetString(PyExc_TypeError,
996 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000997 return NULL;
998 }
999
Guido van Rossum79f25d91997-04-29 20:08:16 +00001000 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001001 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001002
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001003 if (func == Py_None && n == 1) {
1004 /* map(None, S) is the same as list(S). */
1005 return PySequence_List(PyTuple_GetItem(args, 1));
1006 }
1007
Guido van Rossum79f25d91997-04-29 20:08:16 +00001008 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
1009 PyErr_NoMemory();
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001010 goto Fail_2;
1011 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001012
Guido van Rossum2d951851994-08-29 12:52:16 +00001013 for (len = 0, i = 0, sqp = seqs; i < n; ++i, ++sqp) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001014 int curlen;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001015 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001016
Guido van Rossum79f25d91997-04-29 20:08:16 +00001017 if ((sqp->seq = PyTuple_GetItem(args, i + 1)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001018 goto Fail_2;
1019
Guido van Rossum09df08a1998-05-22 00:51:39 +00001020 sqp->sqf = sqf = sqp->seq->ob_type->tp_as_sequence;
1021 if (sqf == NULL ||
1022 sqf->sq_length == NULL ||
1023 sqf->sq_item == NULL)
1024 {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001025 static char errmsg[] =
1026 "argument %d to map() must be a sequence object";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001027 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +00001028
1029 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001030 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001031 goto Fail_2;
1032 }
1033
1034 if ((curlen = sqp->len = (*sqp->sqf->sq_length)(sqp->seq)) < 0)
1035 goto Fail_2;
1036
1037 if (curlen > len)
1038 len = curlen;
1039 }
1040
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001042 goto Fail_2;
1043
Guido van Rossum2d951851994-08-29 12:52:16 +00001044 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 PyObject *alist, *item=NULL, *value;
Guido van Rossum2d951851994-08-29 12:52:16 +00001046 int any = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001047
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001049 alist = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001050 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051 if ((alist = PyTuple_New(n)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001052 goto Fail_1;
1053 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001054
1055 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Guido van Rossum2d951851994-08-29 12:52:16 +00001056 if (sqp->len < 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057 Py_INCREF(Py_None);
1058 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060 else {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001061 item = (*sqp->sqf->sq_item)(sqp->seq, i);
Guido van Rossum2d951851994-08-29 12:52:16 +00001062 if (item == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001063 if (PyErr_ExceptionMatches(
1064 PyExc_IndexError))
1065 {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001066 PyErr_Clear();
1067 Py_INCREF(Py_None);
1068 item = Py_None;
Guido van Rossum2d951851994-08-29 12:52:16 +00001069 sqp->len = -1;
1070 }
1071 else {
1072 goto Fail_0;
1073 }
1074 }
1075 else
1076 any = 1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001077
Guido van Rossum12d12c51993-10-26 17:58:25 +00001078 }
Guido van Rossum32120311995-07-10 13:52:21 +00001079 if (!alist)
Guido van Rossum2d951851994-08-29 12:52:16 +00001080 break;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001081 if (PyTuple_SetItem(alist, j, item) < 0) {
1082 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001083 goto Fail_0;
Guido van Rossum2d951851994-08-29 12:52:16 +00001084 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001085 continue;
1086
1087 Fail_0:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001088 Py_XDECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001089 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001090 }
1091
Guido van Rossum32120311995-07-10 13:52:21 +00001092 if (!alist)
1093 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001094
1095 if (!any) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001097 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001098 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001099
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001101 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001102 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 value = PyEval_CallObject(func, alist);
1104 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001105 if (value == NULL)
1106 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001107 }
1108 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001109 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001110 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001111 if (status < 0)
1112 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001113 }
1114 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001115 if (PyList_SetItem(result, i, value) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001116 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001117 }
1118 }
1119
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001120 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1121 goto Fail_1;
1122
Guido van Rossum79f25d91997-04-29 20:08:16 +00001123 PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001124 return result;
1125
Guido van Rossum12d12c51993-10-26 17:58:25 +00001126Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001127 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001128Fail_2:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 if (seqs) PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001130 return NULL;
1131}
1132
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001133static char map_doc[] =
1134"map(function, sequence[, sequence, ...]) -> list\n\
1135\n\
1136Return a list of the results of applying the function to the items of\n\
1137the argument sequence(s). If more than one sequence is given, the\n\
1138function is called with an argument list consisting of the corresponding\n\
1139item of each sequence, substituting None for missing values when not all\n\
1140sequences have the same length. If the function is None, return a list of\n\
1141the items of the sequence (or a list of tuples if more than one sequence).";
1142
1143
Guido van Rossum79f25d91997-04-29 20:08:16 +00001144static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +00001145builtin_setattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001146 PyObject *self;
1147 PyObject *args;
Guido van Rossum33894be1992-01-27 16:53:09 +00001148{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149 PyObject *v;
1150 PyObject *name;
1151 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001152
Guido van Rossum79f25d91997-04-29 20:08:16 +00001153 if (!PyArg_ParseTuple(args, "OSO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001154 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001156 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001157 Py_INCREF(Py_None);
1158 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001159}
1160
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001161static char setattr_doc[] =
1162"setattr(object, name, value)\n\
1163\n\
1164Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1165``x.y = v''.";
1166
1167
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168static PyObject *
Guido van Rossum14144fc1994-08-29 12:53:40 +00001169builtin_delattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170 PyObject *self;
1171 PyObject *args;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001172{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001173 PyObject *v;
1174 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001175
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 if (!PyArg_ParseTuple(args, "OS:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001177 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001179 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001180 Py_INCREF(Py_None);
1181 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001182}
1183
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001185"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186\n\
1187Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1188``del x.y''.";
1189
1190
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191static PyObject *
Guido van Rossum9bfef441993-03-29 10:43:31 +00001192builtin_hash(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001193 PyObject *self;
1194 PyObject *args;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001195{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001196 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001197 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001198
Guido van Rossum79f25d91997-04-29 20:08:16 +00001199 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001200 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001201 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001202 if (x == -1)
1203 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001204 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001205}
1206
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001207static char hash_doc[] =
1208"hash(object) -> integer\n\
1209\n\
1210Return a hash value for the object. Two objects with the same value have\n\
1211the same hash value. The reverse is not necessarily true, but likely.";
1212
1213
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001215builtin_hex(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216 PyObject *self;
1217 PyObject *args;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001218{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219 PyObject *v;
1220 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001223 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001224
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001225 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001226 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001228 "hex() argument can't be converted to hex");
1229 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001230 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001231 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001232}
1233
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001234static char hex_doc[] =
1235"hex(number) -> string\n\
1236\n\
1237Return the hexadecimal representation of an integer or long integer.";
1238
1239
Guido van Rossum79f25d91997-04-29 20:08:16 +00001240static PyObject *builtin_raw_input Py_PROTO((PyObject *, PyObject *));
Guido van Rossum3165fe61992-09-25 21:59:05 +00001241
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001243builtin_input(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001244 PyObject *self;
1245 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001246{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001247 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001248 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001249 PyObject *res;
1250 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001251
1252 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001253 if (line == NULL)
1254 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001255 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001256 return NULL;
1257 while (*str == ' ' || *str == '\t')
1258 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001259 globals = PyEval_GetGlobals();
1260 locals = PyEval_GetLocals();
1261 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1262 if (PyDict_SetItemString(globals, "__builtins__",
1263 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001264 return NULL;
1265 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001266 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001267 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001268 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001269}
1270
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001271static char input_doc[] =
1272"input([prompt]) -> value\n\
1273\n\
1274Equivalent to eval(raw_input(prompt)).";
1275
1276
Guido van Rossume8811f81997-02-14 15:48:05 +00001277static PyObject *
1278builtin_intern(self, args)
1279 PyObject *self;
1280 PyObject *args;
1281{
1282 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001283 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001284 return NULL;
1285 Py_INCREF(s);
1286 PyString_InternInPlace(&s);
1287 return s;
1288}
1289
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001290static char intern_doc[] =
1291"intern(string) -> string\n\
1292\n\
1293``Intern'' the given string. This enters the string in the (global)\n\
1294table of interned strings whose purpose is to speed up dictionary lookups.\n\
1295Return the string itself or the previously interned string object with the\n\
1296same value.";
1297
1298
Guido van Rossum79f25d91997-04-29 20:08:16 +00001299static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001300builtin_int(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001301 PyObject *self;
1302 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001303{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001304 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001305 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001306
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001307 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001308 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001309 if (base == -909)
1310 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001311 else if (PyString_Check(v))
1312 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1313 else if (PyUnicode_Check(v))
1314 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1315 PyUnicode_GET_SIZE(v),
1316 base);
1317 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001318 PyErr_SetString(PyExc_TypeError,
1319 "can't convert non-string with explicit base");
1320 return NULL;
1321 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001322}
1323
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001324static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001325"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001327Convert a string or number to an integer, if possible. A floating point\n\
1328argument will be truncated towards zero (this does not include a string\n\
1329representation of a floating point number!) When converting a string, use\n\
1330the optional base. It is an error to supply a base when converting a\n\
1331non-string.";
1332
1333
1334static PyObject *
1335builtin_long(self, args)
1336 PyObject *self;
1337 PyObject *args;
1338{
1339 PyObject *v;
1340 int base = -909; /* unlikely! */
1341
1342 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1343 return NULL;
1344 if (base == -909)
1345 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001346 else if (PyString_Check(v))
1347 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1348 else if (PyUnicode_Check(v))
1349 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1350 PyUnicode_GET_SIZE(v),
1351 base);
1352 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001353 PyErr_SetString(PyExc_TypeError,
1354 "can't convert non-string with explicit base");
1355 return NULL;
1356 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001357}
1358
1359static char long_doc[] =
1360"long(x) -> long integer\n\
1361long(x, base) -> long integer\n\
1362\n\
1363Convert a string or number to a long integer, if possible. A floating\n\
1364point argument will be truncated towards zero (this does not include a\n\
1365string representation of a floating point number!) When converting a\n\
1366string, use the given base. It is an error to supply a base when\n\
1367converting a non-string.";
1368
1369
1370static PyObject *
1371builtin_float(self, args)
1372 PyObject *self;
1373 PyObject *args;
1374{
1375 PyObject *v;
1376
1377 if (!PyArg_ParseTuple(args, "O:float", &v))
1378 return NULL;
1379 if (PyString_Check(v))
1380 return PyFloat_FromString(v, NULL);
1381 return PyNumber_Float(v);
1382}
1383
1384static char float_doc[] =
1385"float(x) -> floating point number\n\
1386\n\
1387Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001388
1389
Guido van Rossum79f25d91997-04-29 20:08:16 +00001390static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001391builtin_len(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392 PyObject *self;
1393 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001394{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001395 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001396 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001397
Guido van Rossum79f25d91997-04-29 20:08:16 +00001398 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001399 return NULL;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001400 res = PyObject_Length(v);
1401 if (res < 0 && PyErr_Occurred())
1402 return NULL;
1403 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001404}
1405
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001406static char len_doc[] =
1407"len(object) -> integer\n\
1408\n\
1409Return the number of items of a sequence or mapping.";
1410
1411
Guido van Rossum79f25d91997-04-29 20:08:16 +00001412static PyObject *
Guido van Rossumd1705771996-04-09 02:41:06 +00001413builtin_list(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001414 PyObject *self;
1415 PyObject *args;
Guido van Rossumd1705771996-04-09 02:41:06 +00001416{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001417 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001418
Guido van Rossum79f25d91997-04-29 20:08:16 +00001419 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001420 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001421 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001422}
1423
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001424static char list_doc[] =
1425"list(sequence) -> list\n\
1426\n\
1427Return a new list whose items are the same as those of the argument sequence.";
1428
Guido van Rossum8861b741996-07-30 16:49:37 +00001429
1430static PyObject *
1431builtin_slice(self, args)
1432 PyObject *self;
1433 PyObject *args;
1434{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001435 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001436
Guido van Rossum09df08a1998-05-22 00:51:39 +00001437 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001438
Guido van Rossum09df08a1998-05-22 00:51:39 +00001439 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1440 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001441
Guido van Rossum09df08a1998-05-22 00:51:39 +00001442 /* This swapping of stop and start is to maintain similarity with
1443 range(). */
1444 if (stop == NULL) {
1445 stop = start;
1446 start = NULL;
1447 }
1448 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001449}
1450
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001451static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001452"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001453\n\
1454Create a slice object. This is used for slicing by the Numeric extensions.";
1455
1456
Guido van Rossum79f25d91997-04-29 20:08:16 +00001457static PyObject *
Guido van Rossum872537c1995-07-07 22:43:42 +00001458builtin_locals(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001459 PyObject *self;
1460 PyObject *args;
Guido van Rossum872537c1995-07-07 22:43:42 +00001461{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001462 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001463
Guido van Rossum43713e52000-02-29 13:59:29 +00001464 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001465 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001466 d = PyEval_GetLocals();
1467 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001468 return d;
1469}
1470
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001471static char locals_doc[] =
1472"locals() -> dictionary\n\
1473\n\
1474Return the dictionary containing the current scope's local variables.";
1475
1476
Guido van Rossum79f25d91997-04-29 20:08:16 +00001477static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001478min_max(args, sign)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001479 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001480 int sign;
1481{
Guido van Rossum2d951851994-08-29 12:52:16 +00001482 int i;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001483 PyObject *v, *w, *x;
1484 PySequenceMethods *sq;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001485
Guido van Rossum79f25d91997-04-29 20:08:16 +00001486 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001487 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001488 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001489 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001490 sq = v->ob_type->tp_as_sequence;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001491 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001492 PyErr_SetString(PyExc_TypeError,
1493 "min() or max() of non-sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001494 return NULL;
1495 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001496 w = NULL;
1497 for (i = 0; ; i++) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00001498 x = (*sq->sq_item)(v, i); /* Implies INCREF */
Guido van Rossum2d951851994-08-29 12:52:16 +00001499 if (x == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001500 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001501 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001502 break;
1503 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001504 Py_XDECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001505 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001506 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001507 if (w == NULL)
1508 w = x;
1509 else {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001510 int c = PyObject_Compare(x, w);
1511 if (c && PyErr_Occurred()) {
1512 Py_DECREF(x);
1513 Py_XDECREF(w);
1514 return NULL;
1515 }
1516 if (c * sign > 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001517 Py_DECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001518 w = x;
1519 }
1520 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001521 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001522 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001523 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001524 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001525 PyErr_SetString(PyExc_ValueError,
1526 "min() or max() of empty sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001527 return w;
1528}
1529
Guido van Rossum79f25d91997-04-29 20:08:16 +00001530static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00001531builtin_min(self, v)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532 PyObject *self;
1533 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001534{
1535 return min_max(v, -1);
1536}
1537
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001538static char min_doc[] =
1539"min(sequence) -> value\n\
1540min(a, b, c, ...) -> value\n\
1541\n\
1542With a single sequence argument, return its smallest item.\n\
1543With two or more arguments, return the smallest argument.";
1544
1545
Guido van Rossum79f25d91997-04-29 20:08:16 +00001546static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00001547builtin_max(self, v)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001548 PyObject *self;
1549 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001550{
1551 return min_max(v, 1);
1552}
1553
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001554static char max_doc[] =
1555"max(sequence) -> value\n\
1556max(a, b, c, ...) -> value\n\
1557\n\
1558With a single sequence argument, return its largest item.\n\
1559With two or more arguments, return the largest argument.";
1560
1561
Guido van Rossum79f25d91997-04-29 20:08:16 +00001562static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001563builtin_oct(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001564 PyObject *self;
1565 PyObject *args;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001566{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001567 PyObject *v;
1568 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001569
Guido van Rossum79f25d91997-04-29 20:08:16 +00001570 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001571 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001572 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1573 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001574 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001575 "oct() argument can't be converted to oct");
1576 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001577 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001578 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001579}
1580
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001581static char oct_doc[] =
1582"oct(number) -> string\n\
1583\n\
1584Return the octal representation of an integer or long integer.";
1585
1586
Guido van Rossum79f25d91997-04-29 20:08:16 +00001587static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +00001588builtin_open(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001589 PyObject *self;
1590 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001591{
Guido van Rossum2d951851994-08-29 12:52:16 +00001592 char *name;
1593 char *mode = "r";
1594 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001595 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001596
Guido van Rossum79f25d91997-04-29 20:08:16 +00001597 if (!PyArg_ParseTuple(args, "s|si:open", &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001598 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001599 f = PyFile_FromString(name, mode);
Guido van Rossum2d951851994-08-29 12:52:16 +00001600 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001601 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001602 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001603}
1604
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001605static char open_doc[] =
1606"open(filename[, mode[, buffering]]) -> file object\n\
1607\n\
1608Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1609writing or appending. The file will be created if it doesn't exist\n\
1610when opened for writing or appending; it will be truncated when\n\
1611opened for writing. Add a 'b' to the mode for binary files.\n\
1612Add a '+' to the mode to allow simultaneous reading and writing.\n\
1613If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1614buffered, and larger numbers specify the buffer size.";
1615
1616
Guido van Rossum79f25d91997-04-29 20:08:16 +00001617static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +00001618builtin_ord(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001619 PyObject *self;
1620 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001621{
Guido van Rossum09095f32000-03-10 23:00:52 +00001622 PyObject *obj;
1623 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001624 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001625
Guido van Rossum09095f32000-03-10 23:00:52 +00001626 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001627 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001628
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001629 if (PyString_Check(obj)) {
1630 size = PyString_GET_SIZE(obj);
1631 if (size == 1)
1632 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
1633 } else if (PyUnicode_Check(obj)) {
1634 size = PyUnicode_GET_SIZE(obj);
1635 if (size == 1)
1636 ord = (long)*PyUnicode_AS_UNICODE(obj);
1637 } else {
1638 PyErr_Format(PyExc_TypeError,
Fred Drake078b24f2000-04-13 02:42:50 +00001639 "expected string or Unicode character, " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001640 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001641 return NULL;
1642 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001643 if (size == 1)
1644 return PyInt_FromLong(ord);
Guido van Rossum09095f32000-03-10 23:00:52 +00001645
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001646 PyErr_Format(PyExc_TypeError,
1647 "expected a character, length-%d string found",
1648 size);
1649 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001650}
1651
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001652static char ord_doc[] =
1653"ord(c) -> integer\n\
1654\n\
Fred Drake078b24f2000-04-13 02:42:50 +00001655Return the integer ordinal of a one character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001656
1657
Guido van Rossum79f25d91997-04-29 20:08:16 +00001658static PyObject *
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001659builtin_pow(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001660 PyObject *self;
1661 PyObject *args;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001662{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001663 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001664
Guido van Rossum79f25d91997-04-29 20:08:16 +00001665 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001666 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001667 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001668}
1669
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001670static char pow_doc[] =
1671"pow(x, y[, z]) -> number\n\
1672\n\
1673With two arguments, equivalent to x**y. With three arguments,\n\
1674equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1675
1676
Guido van Rossum124eff01999-02-23 16:11:01 +00001677/* Return number of items in range/xrange (lo, hi, step). step > 0
1678 * required. Return a value < 0 if & only if the true value is too
1679 * large to fit in a signed long.
1680 */
1681static long
1682get_len_of_range(lo, hi, step)
1683 long lo;
1684 long hi;
1685 long step; /* must be > 0 */
1686{
1687 /* -------------------------------------------------------------
1688 If lo >= hi, the range is empty.
1689 Else if n values are in the range, the last one is
1690 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1691 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1692 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1693 the RHS is non-negative and so truncation is the same as the
1694 floor. Letting M be the largest positive long, the worst case
1695 for the RHS numerator is hi=M, lo=-M-1, and then
1696 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1697 precision to compute the RHS exactly.
1698 ---------------------------------------------------------------*/
1699 long n = 0;
1700 if (lo < hi) {
1701 unsigned long uhi = (unsigned long)hi;
1702 unsigned long ulo = (unsigned long)lo;
1703 unsigned long diff = uhi - ulo - 1;
1704 n = (long)(diff / (unsigned long)step + 1);
1705 }
1706 return n;
1707}
1708
Guido van Rossum79f25d91997-04-29 20:08:16 +00001709static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001710builtin_range(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711 PyObject *self;
1712 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001713{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001714 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001715 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001716 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001717
Guido van Rossum79f25d91997-04-29 20:08:16 +00001718 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001719
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720 if (PyTuple_Size(args) <= 1) {
1721 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001722 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001723 &ihigh))
1724 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001725 }
1726 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001727 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001728 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001729 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001730 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001731 }
1732 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001733 PyErr_SetString(PyExc_ValueError, "zero step for range()");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001734 return NULL;
1735 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001736 if (istep > 0)
1737 bign = get_len_of_range(ilow, ihigh, istep);
1738 else
1739 bign = get_len_of_range(ihigh, ilow, -istep);
1740 n = (int)bign;
1741 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001742 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum124eff01999-02-23 16:11:01 +00001743 "range() has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001744 return NULL;
1745 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001746 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001747 if (v == NULL)
1748 return NULL;
1749 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001750 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001751 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001752 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001753 return NULL;
1754 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001755 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001756 ilow += istep;
1757 }
1758 return v;
1759}
1760
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001761static char range_doc[] =
1762"range([start,] stop[, step]) -> list of integers\n\
1763\n\
1764Return a list containing an arithmetic progression of integers.\n\
1765range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1766When step is given, it specifies the increment (or decrement).\n\
1767For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1768These are exactly the valid indices for a list of 4 elements.";
1769
1770
Guido van Rossum79f25d91997-04-29 20:08:16 +00001771static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001772builtin_xrange(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001773 PyObject *self;
1774 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001775{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001776 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001777 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001778
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 if (PyTuple_Size(args) <= 1) {
1780 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001781 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782 &ihigh))
1783 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001784 }
1785 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001786 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001787 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001788 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001789 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001790 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001791 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001792 PyErr_SetString(PyExc_ValueError, "zero step for xrange()");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001793 return NULL;
1794 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001795 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001796 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001797 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001798 n = get_len_of_range(ihigh, ilow, -istep);
1799 if (n < 0) {
1800 PyErr_SetString(PyExc_OverflowError,
1801 "xrange() has more than sys.maxint items");
1802 return NULL;
1803 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001804 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001805}
1806
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807static char xrange_doc[] =
1808"xrange([start,] stop[, step]) -> xrange object\n\
1809\n\
1810Like range(), but instead of returning a list, returns an object that\n\
1811generates the numbers in the range on demand. This is slightly slower\n\
1812than range() but more memory efficient.";
1813
1814
Guido van Rossum79f25d91997-04-29 20:08:16 +00001815static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001816builtin_raw_input(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001817 PyObject *self;
1818 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001819{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001820 PyObject *v = NULL;
1821 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001822
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001824 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001825 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1826 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001827 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001829 char *prompt;
1830 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001832 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001834 if (po == NULL)
1835 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001836 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001837 if (prompt == NULL)
1838 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001839 }
1840 else {
1841 po = NULL;
1842 prompt = "";
1843 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844 s = PyOS_Readline(prompt);
1845 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001846 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001848 return NULL;
1849 }
1850 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001851 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001852 result = NULL;
1853 }
1854 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001855 size_t len = strlen(s);
1856 if (len > INT_MAX) {
1857 PyErr_SetString(PyExc_OverflowError, "input too long");
1858 result = NULL;
1859 }
1860 else {
1861 result = PyString_FromStringAndSize(s, (int)(len-1));
1862 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001863 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001864 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001865 return result;
1866 }
Guido van Rossum90933611991-06-07 16:10:43 +00001867 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001869 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001870 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001871 return NULL;
1872 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001873 if (Py_FlushLine() != 0 ||
1874 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001875 return NULL;
1876 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001877 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001878 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001879 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001880 return NULL;
1881 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001882 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001883}
1884
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001885static char raw_input_doc[] =
1886"raw_input([prompt]) -> string\n\
1887\n\
1888Read a string from standard input. The trailing newline is stripped.\n\
1889If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1890On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1891is printed without a trailing newline before reading.";
1892
1893
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +00001895builtin_reduce(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001896 PyObject *self;
1897 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001898{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899 PyObject *seq, *func, *result = NULL;
1900 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001901 register int i;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001902
Guido van Rossum79f25d91997-04-29 20:08:16 +00001903 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001904 return NULL;
1905 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001907
Guido van Rossum09df08a1998-05-22 00:51:39 +00001908 sqf = seq->ob_type->tp_as_sequence;
1909 if (sqf == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001910 PyErr_SetString(PyExc_TypeError,
Guido van Rossum12d12c51993-10-26 17:58:25 +00001911 "2nd argument to reduce() must be a sequence object");
1912 return NULL;
1913 }
1914
Guido van Rossum79f25d91997-04-29 20:08:16 +00001915 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001916 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001917
Guido van Rossum2d951851994-08-29 12:52:16 +00001918 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001919 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001920
1921 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001922 Py_DECREF(args);
1923 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001924 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001925 }
1926
Guido van Rossum2d951851994-08-29 12:52:16 +00001927 if ((op2 = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001928 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001929 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001930 break;
1931 }
1932 goto Fail;
1933 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001934
Guido van Rossum2d951851994-08-29 12:52:16 +00001935 if (result == NULL)
1936 result = op2;
1937 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001938 PyTuple_SetItem(args, 0, result);
1939 PyTuple_SetItem(args, 1, op2);
1940 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001941 goto Fail;
1942 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001943 }
1944
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001946
Guido van Rossum2d951851994-08-29 12:52:16 +00001947 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001949 "reduce of empty sequence with no initial value");
1950
Guido van Rossum12d12c51993-10-26 17:58:25 +00001951 return result;
1952
Guido van Rossum2d951851994-08-29 12:52:16 +00001953Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954 Py_XDECREF(args);
1955 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001956 return NULL;
1957}
1958
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001959static char reduce_doc[] =
1960"reduce(function, sequence[, initial]) -> value\n\
1961\n\
1962Apply a function of two arguments cumulatively to the items of a sequence,\n\
1963from left to right, so as to reduce the sequence to a single value.\n\
1964For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1965((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1966of the sequence in the calculation, and serves as a default when the\n\
1967sequence is empty.";
1968
1969
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001971builtin_reload(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972 PyObject *self;
1973 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001974{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001976
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001978 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001980}
1981
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001982static char reload_doc[] =
1983"reload(module) -> module\n\
1984\n\
1985Reload the module. The module must have been successfully imported before.";
1986
1987
Guido van Rossum79f25d91997-04-29 20:08:16 +00001988static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001989builtin_repr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001990 PyObject *self;
1991 PyObject *args;
Guido van Rossumc89705d1992-11-26 08:54:07 +00001992{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001993 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001994
Guido van Rossum79f25d91997-04-29 20:08:16 +00001995 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00001996 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001998}
1999
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002000static char repr_doc[] =
2001"repr(object) -> string\n\
2002\n\
2003Return the canonical string representation of the object.\n\
2004For most object types, eval(repr(object)) == object.";
2005
2006
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007static PyObject *
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002008builtin_round(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002009 PyObject *self;
2010 PyObject *args;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002011{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002012 double x;
2013 double f;
2014 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002015 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002016
Guido van Rossum79f25d91997-04-29 20:08:16 +00002017 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002018 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002019 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002020 i = abs(ndigits);
2021 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002022 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002023 if (ndigits < 0)
2024 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002025 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00002026 x *= f;
2027 if (x >= 0.0)
2028 x = floor(x + 0.5);
2029 else
2030 x = ceil(x - 0.5);
2031 if (ndigits < 0)
2032 x *= f;
2033 else
2034 x /= f;
2035 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002036}
2037
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002038static char round_doc[] =
2039"round(number[, ndigits]) -> floating point number\n\
2040\n\
2041Round a number to a given precision in decimal digits (default 0 digits).\n\
2042This always returns a floating point number. Precision may be negative.";
2043
2044
Guido van Rossum79f25d91997-04-29 20:08:16 +00002045static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002046builtin_str(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002047 PyObject *self;
2048 PyObject *args;
Guido van Rossumc89705d1992-11-26 08:54:07 +00002049{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002050 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002051
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00002053 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002054 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002055}
2056
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002057static char str_doc[] =
2058"str(object) -> string\n\
2059\n\
2060Return a nice string representation of the object.\n\
2061If the argument is a string, the return value is the same object.";
2062
2063
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002065builtin_tuple(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002066 PyObject *self;
2067 PyObject *args;
Guido van Rossumcae027b1994-08-29 12:53:11 +00002068{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002070
Guido van Rossum79f25d91997-04-29 20:08:16 +00002071 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002072 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00002073 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00002074}
2075
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002076static char tuple_doc[] =
2077"tuple(sequence) -> list\n\
2078\n\
2079Return a tuple whose items are the same as those of the argument sequence.\n\
2080If the argument is a tuple, the return value is the same object.";
2081
2082
Guido van Rossum79f25d91997-04-29 20:08:16 +00002083static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002084builtin_type(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002085 PyObject *self;
2086 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002087{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002088 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002089
Guido van Rossum79f25d91997-04-29 20:08:16 +00002090 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002091 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002092 v = (PyObject *)v->ob_type;
2093 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002094 return v;
2095}
2096
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002097static char type_doc[] =
2098"type(object) -> type object\n\
2099\n\
2100Return the type of the object.";
2101
2102
Guido van Rossum79f25d91997-04-29 20:08:16 +00002103static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002104builtin_vars(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002105 PyObject *self;
2106 PyObject *args;
Guido van Rossum2d951851994-08-29 12:52:16 +00002107{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002108 PyObject *v = NULL;
2109 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002110
Guido van Rossum79f25d91997-04-29 20:08:16 +00002111 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002112 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002113 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002114 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002115 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002116 if (!PyErr_Occurred())
2117 PyErr_SetString(PyExc_SystemError,
2118 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002119 }
2120 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002121 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002122 }
2123 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002124 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002125 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002126 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002127 "vars() argument must have __dict__ attribute");
2128 return NULL;
2129 }
2130 }
2131 return d;
2132}
2133
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002134static char vars_doc[] =
2135"vars([object]) -> dictionary\n\
2136\n\
2137Without arguments, equivalent to locals().\n\
2138With an argument, equivalent to object.__dict__.";
2139
Guido van Rossum668213d1999-06-16 17:28:37 +00002140static int
2141abstract_issubclass(derived, cls, err, first)
2142 PyObject *derived;
2143 PyObject *cls;
2144 char *err;
2145 int first;
2146{
2147 static PyObject *__bases__ = NULL;
2148 PyObject *bases;
Guido van Rossum7f851861999-06-17 19:12:39 +00002149 int i, n;
Guido van Rossum668213d1999-06-16 17:28:37 +00002150 int r = 0;
2151
2152 if (__bases__ == NULL) {
2153 __bases__ = PyString_FromString("__bases__");
2154 if (__bases__ == NULL)
2155 return -1;
2156 }
2157
2158 if (first) {
2159 bases = PyObject_GetAttr(cls, __bases__);
2160 if (bases == NULL || !PyTuple_Check(bases)) {
2161 Py_XDECREF(bases);
2162 PyErr_SetString(PyExc_TypeError, err);
2163 return -1;
2164 }
2165 Py_DECREF(bases);
2166 }
2167
2168 if (derived == cls)
2169 return 1;
2170
2171 bases = PyObject_GetAttr(derived, __bases__);
2172 if (bases == NULL || !PyTuple_Check(bases)) {
2173 Py_XDECREF(bases);
2174 PyErr_SetString(PyExc_TypeError, err);
2175 return -1;
2176 }
2177
2178 n = PyTuple_GET_SIZE(bases);
2179 for (i = 0; i < n; i++) {
2180 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i),
2181 cls, err, 0);
2182 if (r != 0)
2183 break;
2184 }
2185
2186 Py_DECREF(bases);
2187
2188 return r;
2189}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002190
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002191static PyObject *
2192builtin_isinstance(self, args)
2193 PyObject *self;
2194 PyObject *args;
2195{
2196 PyObject *inst;
2197 PyObject *cls;
Guido van Rossum668213d1999-06-16 17:28:37 +00002198 PyObject *icls;
2199 static PyObject *__class__ = NULL;
2200 int retval = 0;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002201
Guido van Rossum43713e52000-02-29 13:59:29 +00002202 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002203 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002204
Guido van Rossum668213d1999-06-16 17:28:37 +00002205 if (PyClass_Check(cls)) {
2206 if (PyInstance_Check(inst)) {
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002207 PyObject *inclass =
2208 (PyObject*)((PyInstanceObject*)inst)->in_class;
2209 retval = PyClass_IsSubclass(inclass, cls);
2210 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002211 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002212 else if (PyType_Check(cls)) {
2213 retval = ((PyObject *)(inst->ob_type) == cls);
2214 }
2215 else if (!PyInstance_Check(inst)) {
2216 if (__class__ == NULL) {
2217 __class__ = PyString_FromString("__class__");
2218 if (__class__ == NULL)
2219 return NULL;
2220 }
2221 icls = PyObject_GetAttr(inst, __class__);
2222 if (icls != NULL) {
2223 retval = abstract_issubclass(
2224 icls, cls,
2225 "second argument must be a class",
2226 1);
2227 Py_DECREF(icls);
2228 if (retval < 0)
2229 return NULL;
2230 }
2231 else {
2232 PyErr_SetString(PyExc_TypeError,
2233 "second argument must be a class");
2234 return NULL;
2235 }
2236 }
2237 else {
2238 PyErr_SetString(PyExc_TypeError,
2239 "second argument must be a class");
2240 return NULL;
2241 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002242 return PyInt_FromLong(retval);
2243}
2244
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002245static char isinstance_doc[] =
2246"isinstance(object, class-or-type) -> Boolean\n\
2247\n\
2248Return whether an object is an instance of a class or of a subclass thereof.\n\
2249With a type as second argument, return whether that is the object's type.";
2250
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002251
2252static PyObject *
2253builtin_issubclass(self, args)
2254 PyObject *self;
2255 PyObject *args;
2256{
2257 PyObject *derived;
2258 PyObject *cls;
2259 int retval;
2260
Guido van Rossum43713e52000-02-29 13:59:29 +00002261 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002262 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002263
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002264 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossum668213d1999-06-16 17:28:37 +00002265 retval = abstract_issubclass(
2266 derived, cls, "arguments must be classes", 1);
2267 if (retval < 0)
2268 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002269 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002270 else {
2271 /* shortcut */
2272 if (!(retval = (derived == cls)))
2273 retval = PyClass_IsSubclass(derived, cls);
2274 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002275
2276 return PyInt_FromLong(retval);
2277}
2278
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002279static char issubclass_doc[] =
2280"issubclass(C, B) -> Boolean\n\
2281\n\
2282Return whether class C is a subclass (i.e., a derived class) of class B.";
2283
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002284
Guido van Rossum79f25d91997-04-29 20:08:16 +00002285static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002286 {"__import__", builtin___import__, 1, import_doc},
2287 {"abs", builtin_abs, 1, abs_doc},
2288 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002289 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002290 {"callable", builtin_callable, 1, callable_doc},
2291 {"chr", builtin_chr, 1, chr_doc},
2292 {"cmp", builtin_cmp, 1, cmp_doc},
2293 {"coerce", builtin_coerce, 1, coerce_doc},
2294 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002295#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002296 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002297#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002298 {"delattr", builtin_delattr, 1, delattr_doc},
2299 {"dir", builtin_dir, 1, dir_doc},
2300 {"divmod", builtin_divmod, 1, divmod_doc},
2301 {"eval", builtin_eval, 1, eval_doc},
2302 {"execfile", builtin_execfile, 1, execfile_doc},
2303 {"filter", builtin_filter, 1, filter_doc},
2304 {"float", builtin_float, 1, float_doc},
2305 {"getattr", builtin_getattr, 1, getattr_doc},
2306 {"globals", builtin_globals, 1, globals_doc},
2307 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2308 {"hash", builtin_hash, 1, hash_doc},
2309 {"hex", builtin_hex, 1, hex_doc},
2310 {"id", builtin_id, 1, id_doc},
2311 {"input", builtin_input, 1, input_doc},
2312 {"intern", builtin_intern, 1, intern_doc},
2313 {"int", builtin_int, 1, int_doc},
2314 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2315 {"issubclass", builtin_issubclass, 1, issubclass_doc},
2316 {"len", builtin_len, 1, len_doc},
2317 {"list", builtin_list, 1, list_doc},
2318 {"locals", builtin_locals, 1, locals_doc},
2319 {"long", builtin_long, 1, long_doc},
2320 {"map", builtin_map, 1, map_doc},
2321 {"max", builtin_max, 1, max_doc},
2322 {"min", builtin_min, 1, min_doc},
2323 {"oct", builtin_oct, 1, oct_doc},
2324 {"open", builtin_open, 1, open_doc},
2325 {"ord", builtin_ord, 1, ord_doc},
2326 {"pow", builtin_pow, 1, pow_doc},
2327 {"range", builtin_range, 1, range_doc},
2328 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2329 {"reduce", builtin_reduce, 1, reduce_doc},
2330 {"reload", builtin_reload, 1, reload_doc},
2331 {"repr", builtin_repr, 1, repr_doc},
2332 {"round", builtin_round, 1, round_doc},
2333 {"setattr", builtin_setattr, 1, setattr_doc},
2334 {"slice", builtin_slice, 1, slice_doc},
2335 {"str", builtin_str, 1, str_doc},
2336 {"tuple", builtin_tuple, 1, tuple_doc},
2337 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002338 {"unicode", builtin_unicode, 1, unicode_doc},
2339 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002340 {"vars", builtin_vars, 1, vars_doc},
2341 {"xrange", builtin_xrange, 1, xrange_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002342 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002343};
2344
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002345static char builtin_doc[] =
2346"Built-in functions, exceptions, and other objects.\n\
2347\n\
2348Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2349
Guido van Rossum25ce5661997-08-02 03:10:38 +00002350PyObject *
Barry Warsaw78e6c672000-05-25 23:15:05 +00002351_PyBuiltin_Init()
Guido van Rossum25ce5661997-08-02 03:10:38 +00002352{
Fred Drake5550de32000-06-20 04:54:19 +00002353 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002354 mod = Py_InitModule4("__builtin__", builtin_methods,
2355 builtin_doc, (PyObject *)NULL,
2356 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002357 if (mod == NULL)
2358 return NULL;
2359 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002360 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2361 return NULL;
2362 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2363 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002364 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2365 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2366 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002367 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002368 }
2369 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002370
Guido van Rossum25ce5661997-08-02 03:10:38 +00002371 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002372}
2373
Guido van Rossume77a7571993-11-03 15:01:26 +00002374/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002375
Guido van Rossum79f25d91997-04-29 20:08:16 +00002376static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +00002377filtertuple(func, tuple)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378 PyObject *func;
2379 PyObject *tuple;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002380{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002381 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002382 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002383 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002384
Guido van Rossumb7b45621995-08-04 04:07:45 +00002385 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002386 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002387 return tuple;
2388 }
2389
Guido van Rossum79f25d91997-04-29 20:08:16 +00002390 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002391 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002392
Guido van Rossum12d12c51993-10-26 17:58:25 +00002393 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002394 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002395 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002396
Guido van Rossum79f25d91997-04-29 20:08:16 +00002397 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002398 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002399 if (func == Py_None) {
2400 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002401 good = item;
2402 }
2403 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002404 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002405 if (arg == NULL)
2406 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002407 good = PyEval_CallObject(func, arg);
2408 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002409 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002410 goto Fail_1;
2411 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002412 ok = PyObject_IsTrue(good);
2413 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002414 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002415 Py_INCREF(item);
2416 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002417 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002418 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002419 }
2420
Guido van Rossum79f25d91997-04-29 20:08:16 +00002421 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002422 return NULL;
2423
Guido van Rossum12d12c51993-10-26 17:58:25 +00002424 return result;
2425
Guido van Rossum12d12c51993-10-26 17:58:25 +00002426Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002427 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002428 return NULL;
2429}
2430
2431
Guido van Rossume77a7571993-11-03 15:01:26 +00002432/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002433
Guido van Rossum79f25d91997-04-29 20:08:16 +00002434static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +00002435filterstring(func, strobj)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002436 PyObject *func;
2437 PyObject *strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002438{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002439 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002440 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002441 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002442
Guido van Rossum79f25d91997-04-29 20:08:16 +00002443 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002444 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002445 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002446 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002447 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002448 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002449 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002450
Guido van Rossum12d12c51993-10-26 17:58:25 +00002451 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002452 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002453 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002454
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002455 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2456 if (item == NULL)
2457 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002458 arg = Py_BuildValue("(O)", item);
2459 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002460 if (arg == NULL)
2461 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002462 good = PyEval_CallObject(func, arg);
2463 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002464 if (good == NULL)
2465 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002466 ok = PyObject_IsTrue(good);
2467 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002468 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002469 PyString_AS_STRING((PyStringObject *)result)[j++] =
2470 PyString_AS_STRING((PyStringObject *)item)[0];
Guido van Rossum12d12c51993-10-26 17:58:25 +00002471 }
2472
Guido van Rossum79f25d91997-04-29 20:08:16 +00002473 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002474 return NULL;
2475
Guido van Rossum12d12c51993-10-26 17:58:25 +00002476 return result;
2477
Guido van Rossum12d12c51993-10-26 17:58:25 +00002478Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002479 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002480 return NULL;
2481}