blob: 51414e9c36bd109b07a3291d13c1b3793647290e [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007Copyright (c) 2000, BeOpen.com.
8Copyright (c) 1995-2000, Corporation for National Research Initiatives.
9Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
10All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000012See the file "Misc/COPYRIGHT" for information on usage and
13redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000014
15******************************************************************/
16
Guido van Rossum3f5da241990-12-20 15:06:42 +000017/* Built-in functions */
18
Guido van Rossum79f25d91997-04-29 20:08:16 +000019#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000020
21#include "node.h"
Guido van Rossum5b722181993-03-30 17:46:03 +000022#include "compile.h"
23#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000024
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +000025#include "mymath.h"
26
Guido van Rossum6bf62da1997-04-11 20:37:35 +000027#include <ctype.h>
28
Guido van Rossum1a2c5cb1996-12-10 15:37:36 +000029#ifdef HAVE_UNISTD_H
30#include <unistd.h>
31#endif
32
Guido van Rossum12d12c51993-10-26 17:58:25 +000033/* Forward */
Guido van Rossum79f25d91997-04-29 20:08:16 +000034static PyObject *filterstring Py_PROTO((PyObject *, PyObject *));
35static PyObject *filtertuple Py_PROTO((PyObject *, PyObject *));
Guido van Rossum12d12c51993-10-26 17:58:25 +000036
Guido van Rossum79f25d91997-04-29 20:08:16 +000037static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +000038builtin___import__(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +000039 PyObject *self;
40 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +000041{
Guido van Rossum1ae940a1995-01-02 19:04:15 +000042 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +000043 PyObject *globals = NULL;
44 PyObject *locals = NULL;
45 PyObject *fromlist = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000046
Guido van Rossum79f25d91997-04-29 20:08:16 +000047 if (!PyArg_ParseTuple(args, "s|OOO:__import__",
Guido van Rossum24c13741995-02-14 09:42:43 +000048 &name, &globals, &locals, &fromlist))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000049 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +000050 return PyImport_ImportModuleEx(name, globals, locals, fromlist);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000051}
52
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000053static char import_doc[] =
54"__import__(name, globals, locals, fromlist) -> module\n\
55\n\
56Import a module. The globals are only used to determine the context;\n\
57they are not modified. The locals are currently unused. The fromlist\n\
58should be a list of names to emulate ``from name import ...'', or an\n\
59empty list to emulate ``import name''.\n\
60When importing a module from a package, note that __import__('A.B', ...)\n\
61returns package A when fromlist is empty, but its submodule B when\n\
62fromlist is not empty.";
63
Guido van Rossum1ae940a1995-01-02 19:04:15 +000064
Guido van Rossum79f25d91997-04-29 20:08:16 +000065static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +000066builtin_abs(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +000067 PyObject *self;
68 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000069{
Guido van Rossum79f25d91997-04-29 20:08:16 +000070 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000071
Guido van Rossum79f25d91997-04-29 20:08:16 +000072 if (!PyArg_ParseTuple(args, "O:abs", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +000073 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +000074 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +000075}
76
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +000077static char abs_doc[] =
78"abs(number) -> number\n\
79\n\
80Return the absolute value of the argument.";
81
82
Guido van Rossum79f25d91997-04-29 20:08:16 +000083static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +000084builtin_apply(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +000085 PyObject *self;
86 PyObject *args;
Guido van Rossumc02e15c1991-12-16 13:03:00 +000087{
Guido van Rossum79f25d91997-04-29 20:08:16 +000088 PyObject *func, *alist = NULL, *kwdict = NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000089 PyObject *t = NULL, *retval = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000090
Guido van Rossum79f25d91997-04-29 20:08:16 +000091 if (!PyArg_ParseTuple(args, "O|OO:apply", &func, &alist, &kwdict))
Guido van Rossumc02e15c1991-12-16 13:03:00 +000092 return NULL;
Barry Warsaw968f8cb1998-10-01 15:33:12 +000093 if (alist != NULL) {
94 if (!PyTuple_Check(alist)) {
95 if (!PySequence_Check(alist)) {
96 PyErr_SetString(PyExc_TypeError,
97 "apply() 2nd argument must be a sequence");
98 return NULL;
99 }
100 t = PySequence_Tuple(alist);
101 if (t == NULL)
102 return NULL;
103 alist = t;
104 }
Guido van Rossum2d951851994-08-29 12:52:16 +0000105 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000106 if (kwdict != NULL && !PyDict_Check(kwdict)) {
107 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +0000108 "apply() 3rd argument must be dictionary");
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000109 goto finally;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000110 }
Barry Warsaw968f8cb1998-10-01 15:33:12 +0000111 retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
112 finally:
113 Py_XDECREF(t);
114 return retval;
Guido van Rossumc02e15c1991-12-16 13:03:00 +0000115}
116
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000117static char apply_doc[] =
Fred Drake7b912121999-12-23 14:16:55 +0000118"apply(object, args[, kwargs]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000119\n\
Fred Drake7b912121999-12-23 14:16:55 +0000120Call a callable object with positional arguments taken from the tuple args,\n\
121and keyword arguments taken from the optional dictionary kwargs.\n\
122Note that classes are callable, as are instances with a __call__() method.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000123
124
Guido van Rossum79f25d91997-04-29 20:08:16 +0000125static PyObject *
Guido van Rossum0daf0221999-03-19 19:07:19 +0000126builtin_buffer(self, args)
127 PyObject *self;
128 PyObject *args;
129{
130 PyObject *ob;
131 int offset = 0;
132 int size = Py_END_OF_BUFFER;
133
134 if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
135 return NULL;
136 return PyBuffer_FromObject(ob, offset, size);
137}
138
139static char buffer_doc[] =
Guido van Rossum09095f32000-03-10 23:00:52 +0000140"buffer(object [, offset[, size]]) -> object\n\
Guido van Rossum0daf0221999-03-19 19:07:19 +0000141\n\
142Creates a new buffer object which references the given object.\n\
143The buffer will reference a slice of the target object from the\n\
144start of the object (or at the specified offset). The slice will\n\
145extend to the end of the target object (or with the specified size).";
146
147
148static PyObject *
Guido van Rossum09095f32000-03-10 23:00:52 +0000149builtin_unicode(self, args)
150 PyObject *self;
151 PyObject *args;
152{
Guido van Rossum3afba762000-04-11 15:38:23 +0000153 PyObject *v;
154 const void *buffer;
Guido van Rossum09095f32000-03-10 23:00:52 +0000155 int len;
156 char *encoding = NULL;
157 char *errors = NULL;
158
Guido van Rossum3afba762000-04-11 15:38:23 +0000159 if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) )
Guido van Rossum09095f32000-03-10 23:00:52 +0000160 return NULL;
Guido van Rossum3afba762000-04-11 15:38:23 +0000161 /* Special case: Unicode will stay Unicode */
162 if (PyUnicode_Check(v)) {
163 if (encoding) {
164 PyErr_SetString(PyExc_TypeError,
165 "unicode() does not support decoding of Unicode objects");
166 return NULL;
167 }
168 Py_INCREF(v);
169 return v;
170 }
171 /* Read raw data and decode it */
172 if (PyObject_AsReadBuffer(v, &buffer, &len))
173 return NULL;
174 return PyUnicode_Decode((const char *)buffer, len, encoding, errors);
Guido van Rossum09095f32000-03-10 23:00:52 +0000175}
176
177static char unicode_doc[] =
178"unicode(string [, encoding[, errors]]) -> object\n\
179\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000180Creates a new Unicode object from the given encoded string.\n\
Fred Drakec640b182000-05-09 19:55:16 +0000181encoding defaults to the current default string encoding and \n\
182errors, defining the error handling, to 'strict'.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000183
184
185static PyObject *
Guido van Rossum2d951851994-08-29 12:52:16 +0000186builtin_callable(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000187 PyObject *self;
188 PyObject *args;
Guido van Rossum2d951851994-08-29 12:52:16 +0000189{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000190 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000191
Guido van Rossum79f25d91997-04-29 20:08:16 +0000192 if (!PyArg_ParseTuple(args, "O:callable", &v))
Guido van Rossum2d951851994-08-29 12:52:16 +0000193 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000194 return PyInt_FromLong((long)PyCallable_Check(v));
Guido van Rossum2d951851994-08-29 12:52:16 +0000195}
196
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000197static char callable_doc[] =
198"callable(object) -> Boolean\n\
199\n\
200Return whether the object is callable (i.e., some kind of function).\n\
201Note that classes are callable, as are instances with a __call__() method.";
202
203
Guido van Rossum79f25d91997-04-29 20:08:16 +0000204static PyObject *
Guido van Rossume77a7571993-11-03 15:01:26 +0000205builtin_filter(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000206 PyObject *self;
207 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000208{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000209 PyObject *func, *seq, *result;
210 PySequenceMethods *sqf;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000211 int len;
212 register int i, j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000213
Guido van Rossum79f25d91997-04-29 20:08:16 +0000214 if (!PyArg_ParseTuple(args, "OO:filter", &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000215 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000216
Guido van Rossum79f25d91997-04-29 20:08:16 +0000217 if (PyString_Check(seq)) {
218 PyObject *r = filterstring(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000219 return r;
220 }
221
Guido van Rossum79f25d91997-04-29 20:08:16 +0000222 if (PyTuple_Check(seq)) {
223 PyObject *r = filtertuple(func, seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000224 return r;
225 }
226
Guido van Rossum09df08a1998-05-22 00:51:39 +0000227 sqf = seq->ob_type->tp_as_sequence;
228 if (sqf == NULL || sqf->sq_length == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000229 PyErr_SetString(PyExc_TypeError,
Guido van Rossume77a7571993-11-03 15:01:26 +0000230 "argument 2 to filter() must be a sequence type");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000231 goto Fail_2;
232 }
233
234 if ((len = (*sqf->sq_length)(seq)) < 0)
235 goto Fail_2;
236
Guido van Rossum79f25d91997-04-29 20:08:16 +0000237 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
238 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000239 result = seq;
240 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000241 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000242 if ((result = PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000243 goto Fail_2;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000244 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000245
Guido van Rossum2d951851994-08-29 12:52:16 +0000246 for (i = j = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000247 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000248 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000249
Guido van Rossum2d951851994-08-29 12:52:16 +0000250 if ((item = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +0000251 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000252 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +0000253 break;
254 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000255 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +0000256 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000257
Guido van Rossum79f25d91997-04-29 20:08:16 +0000258 if (func == Py_None) {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000259 good = item;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000260 Py_INCREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000261 }
262 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000263 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000264 if (arg == NULL)
265 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000266 good = PyEval_CallObject(func, arg);
267 Py_DECREF(arg);
Guido van Rossum58b68731995-01-10 17:40:55 +0000268 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000269 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000270 goto Fail_1;
Guido van Rossum58b68731995-01-10 17:40:55 +0000271 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000272 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000273 ok = PyObject_IsTrue(good);
274 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000275 if (ok) {
Guido van Rossum2d951851994-08-29 12:52:16 +0000276 if (j < len) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000277 if (PyList_SetItem(result, j++, item) < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000278 goto Fail_1;
279 }
280 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000281 int status = PyList_Append(result, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000282 j++;
Barry Warsawfa77e091999-01-28 18:49:12 +0000283 Py_DECREF(item);
284 if (status < 0)
Guido van Rossum2d951851994-08-29 12:52:16 +0000285 goto Fail_1;
286 }
Guido van Rossum58b68731995-01-10 17:40:55 +0000287 } else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000288 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000289 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290 }
291
Guido van Rossum12d12c51993-10-26 17:58:25 +0000292
Guido van Rossum79f25d91997-04-29 20:08:16 +0000293 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000294 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000295
Guido van Rossum12d12c51993-10-26 17:58:25 +0000296 return result;
297
Guido van Rossum12d12c51993-10-26 17:58:25 +0000298Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000299 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000300Fail_2:
Guido van Rossum12d12c51993-10-26 17:58:25 +0000301 return NULL;
302}
303
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000304static char filter_doc[] =
305"filter(function, sequence) -> list\n\
306\n\
307Return a list containing those items of sequence for which function(item)\n\
308is true. If function is None, return a list of items that are true.";
309
310
Guido van Rossum79f25d91997-04-29 20:08:16 +0000311static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +0000312builtin_chr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000313 PyObject *self;
314 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000315{
316 long x;
317 char s[1];
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000318
Guido van Rossum79f25d91997-04-29 20:08:16 +0000319 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum3f5da241990-12-20 15:06:42 +0000320 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000321 if (x < 0 || x >= 256) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000322 PyErr_SetString(PyExc_ValueError,
323 "chr() arg not in range(256)");
Guido van Rossum3f5da241990-12-20 15:06:42 +0000324 return NULL;
325 }
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000326 s[0] = (char)x;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000327 return PyString_FromStringAndSize(s, 1);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000328}
329
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000330static char chr_doc[] =
331"chr(i) -> character\n\
332\n\
333Return a string of one character with ordinal i; 0 <= i < 256.";
334
335
Guido van Rossum79f25d91997-04-29 20:08:16 +0000336static PyObject *
Guido van Rossum09095f32000-03-10 23:00:52 +0000337builtin_unichr(self, args)
338 PyObject *self;
339 PyObject *args;
340{
341 long x;
342 Py_UNICODE s[1];
343
344 if (!PyArg_ParseTuple(args, "l:unichr", &x))
345 return NULL;
346 if (x < 0 || x >= 65536) {
347 PyErr_SetString(PyExc_ValueError,
348 "unichr() arg not in range(65536)");
349 return NULL;
350 }
351 s[0] = (Py_UNICODE)x;
352 return PyUnicode_FromUnicode(s, 1);
353}
354
355static char unichr_doc[] =
Fred Drake078b24f2000-04-13 02:42:50 +0000356"unichr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000357\n\
Fred Drake078b24f2000-04-13 02:42:50 +0000358Return a Unicode string of one character with ordinal i; 0 <= i < 65536.";
Guido van Rossum09095f32000-03-10 23:00:52 +0000359
360
361static PyObject *
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000362builtin_cmp(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000363 PyObject *self;
364 PyObject *args;
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000365{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000366 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000367 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000368
Guido van Rossum79f25d91997-04-29 20:08:16 +0000369 if (!PyArg_ParseTuple(args, "OO:cmp", &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000370 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000371 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000372 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000373 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000374}
375
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000376static char cmp_doc[] =
377"cmp(x, y) -> integer\n\
378\n\
379Return negative if x<y, zero if x==y, positive if x>y.";
380
381
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382static PyObject *
Guido van Rossum5524a591995-01-10 15:26:20 +0000383builtin_coerce(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000384 PyObject *self;
385 PyObject *args;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000386{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000387 PyObject *v, *w;
388 PyObject *res;
Guido van Rossum5524a591995-01-10 15:26:20 +0000389
Guido van Rossum79f25d91997-04-29 20:08:16 +0000390 if (!PyArg_ParseTuple(args, "OO:coerce", &v, &w))
Guido van Rossum5524a591995-01-10 15:26:20 +0000391 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000392 if (PyNumber_Coerce(&v, &w) < 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +0000393 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000394 res = Py_BuildValue("(OO)", v, w);
395 Py_DECREF(v);
396 Py_DECREF(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +0000397 return res;
398}
399
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000400static char coerce_doc[] =
401"coerce(x, y) -> None or (x1, y1)\n\
402\n\
403When x and y can be coerced to values of the same type, return a tuple\n\
404containing the coerced values. When they can't be coerced, return None.";
405
406
Guido van Rossum79f25d91997-04-29 20:08:16 +0000407static PyObject *
Guido van Rossum5b722181993-03-30 17:46:03 +0000408builtin_compile(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000409 PyObject *self;
410 PyObject *args;
Guido van Rossum5b722181993-03-30 17:46:03 +0000411{
412 char *str;
413 char *filename;
414 char *startstr;
415 int start;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000416
Guido van Rossum79f25d91997-04-29 20:08:16 +0000417 if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
Guido van Rossum5b722181993-03-30 17:46:03 +0000418 return NULL;
419 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000420 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000421 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000422 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000423 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000424 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000425 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000426 PyErr_SetString(PyExc_ValueError,
Guido van Rossum872537c1995-07-07 22:43:42 +0000427 "compile() mode must be 'exec' or 'eval' or 'single'");
Guido van Rossum5b722181993-03-30 17:46:03 +0000428 return NULL;
429 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000430 return Py_CompileString(str, filename, start);
Guido van Rossum5b722181993-03-30 17:46:03 +0000431}
432
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000433static char compile_doc[] =
434"compile(source, filename, mode) -> code object\n\
435\n\
436Compile the source string (a Python module, statement or expression)\n\
437into a code object that can be executed by the exec statement or eval().\n\
438The filename will be used for run-time error messages.\n\
439The mode must be 'exec' to compile a module, 'single' to compile a\n\
440single (interactive) statement, or 'eval' to compile an expression.";
441
442
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000443#ifndef WITHOUT_COMPLEX
444
Guido van Rossum79f25d91997-04-29 20:08:16 +0000445static PyObject *
Guido van Rossum11950231999-03-25 21:16:07 +0000446complex_from_string(v)
447 PyObject *v;
448{
449 extern double strtod Py_PROTO((const char *, char **));
Guido van Rossum9e896b32000-04-05 20:11:21 +0000450 const char *s, *start;
451 char *end;
Guido van Rossum11950231999-03-25 21:16:07 +0000452 double x=0.0, y=0.0, z;
453 int got_re=0, got_im=0, done=0;
454 int digit_or_dot;
455 int sw_error=0;
456 int sign;
457 char buffer[256]; /* For errors */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000458 int len;
Guido van Rossum11950231999-03-25 21:16:07 +0000459
Guido van Rossum9e896b32000-04-05 20:11:21 +0000460 if (PyString_Check(v)) {
461 s = PyString_AS_STRING(v);
462 len = PyString_GET_SIZE(v);
463 }
464 else if (PyUnicode_Check(v)) {
465 char s_buffer[256];
466
467 if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) {
468 PyErr_SetString(PyExc_ValueError,
469 "complex() literal too large to convert");
470 return NULL;
471 }
472 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
473 PyUnicode_GET_SIZE(v),
474 s_buffer,
475 NULL))
476 return NULL;
477 s = s_buffer;
478 len = strlen(s);
479 }
480 else if (PyObject_AsCharBuffer(v, &s, &len)) {
481 PyErr_SetString(PyExc_TypeError,
482 "complex() needs a string first argument");
483 return NULL;
484 }
Guido van Rossum11950231999-03-25 21:16:07 +0000485
486 /* position on first nonblank */
Guido van Rossum9e896b32000-04-05 20:11:21 +0000487 start = s;
Guido van Rossum11950231999-03-25 21:16:07 +0000488 while (*s && isspace(Py_CHARMASK(*s)))
489 s++;
490 if (s[0] == '\0') {
491 PyErr_SetString(PyExc_ValueError,
492 "empty string for complex()");
493 return NULL;
494 }
495
496 z = -1.0;
497 sign = 1;
498 do {
499
500 switch (*s) {
501
502 case '\0':
Guido van Rossum9e896b32000-04-05 20:11:21 +0000503 if (s-start != len) {
Guido van Rossum11950231999-03-25 21:16:07 +0000504 PyErr_SetString(
505 PyExc_ValueError,
506 "null byte in argument for complex()");
507 return NULL;
508 }
509 if(!done) sw_error=1;
510 break;
511
512 case '-':
513 sign = -1;
514 /* Fallthrough */
515 case '+':
516 if (done) sw_error=1;
517 s++;
518 if ( *s=='\0'||*s=='+'||*s=='-' ||
519 isspace(Py_CHARMASK(*s)) ) sw_error=1;
520 break;
521
522 case 'J':
523 case 'j':
524 if (got_im || done) {
525 sw_error = 1;
526 break;
527 }
528 if (z<0.0) {
529 y=sign;
530 }
531 else{
532 y=sign*z;
533 }
534 got_im=1;
535 s++;
536 if (*s!='+' && *s!='-' )
537 done=1;
538 break;
539
540 default:
541 if (isspace(Py_CHARMASK(*s))) {
542 while (*s && isspace(Py_CHARMASK(*s)))
543 s++;
544 if (s[0] != '\0')
545 sw_error=1;
546 else
547 done = 1;
548 break;
549 }
550 digit_or_dot =
551 (*s=='.' || isdigit(Py_CHARMASK(*s)));
552 if (done||!digit_or_dot) {
553 sw_error=1;
554 break;
555 }
556 errno = 0;
557 PyFPE_START_PROTECT("strtod", return 0)
558 z = strtod(s, &end) ;
559 PyFPE_END_PROTECT(z)
560 if (errno != 0) {
561 sprintf(buffer,
562 "float() out of range: %.150s", s);
563 PyErr_SetString(
564 PyExc_ValueError,
565 buffer);
566 return NULL;
567 }
568 s=end;
569 if (*s=='J' || *s=='j') {
570
571 break;
572 }
573 if (got_re) {
574 sw_error=1;
575 break;
576 }
577
578 /* accept a real part */
579 x=sign*z;
580 got_re=1;
581 if (got_im) done=1;
582 z = -1.0;
583 sign = 1;
584 break;
585
586 } /* end of switch */
587
588 } while (*s!='\0' && !sw_error);
589
590 if (sw_error) {
591 PyErr_SetString(PyExc_ValueError,
592 "malformed string for complex()");
593 return NULL;
594 }
595
596 return PyComplex_FromDoubles(x,y);
597}
598
599static PyObject *
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000600builtin_complex(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601 PyObject *self;
602 PyObject *args;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000603{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000604 PyObject *r, *i, *tmp;
605 PyNumberMethods *nbr, *nbi = NULL;
Guido van Rossum530956d1996-07-21 02:27:43 +0000606 Py_complex cr, ci;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000607 int own_r = 0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000608
609 i = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000610 if (!PyArg_ParseTuple(args, "O|O:complex", &r, &i))
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000611 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +0000612 if (PyString_Check(r) || PyUnicode_Check(r))
Guido van Rossum11950231999-03-25 21:16:07 +0000613 return complex_from_string(r);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000614 if ((nbr = r->ob_type->tp_as_number) == NULL ||
Guido van Rossumc6472e91997-03-31 17:15:43 +0000615 nbr->nb_float == NULL ||
616 (i != NULL &&
617 ((nbi = i->ob_type->tp_as_number) == NULL ||
618 nbi->nb_float == NULL))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619 PyErr_SetString(PyExc_TypeError,
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000620 "complex() argument can't be converted to complex");
621 return NULL;
622 }
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000623 /* XXX Hack to support classes with __complex__ method */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000624 if (PyInstance_Check(r)) {
625 static PyObject *complexstr;
626 PyObject *f;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000627 if (complexstr == NULL) {
Guido van Rossum8d751611997-01-18 08:04:16 +0000628 complexstr = PyString_InternFromString("__complex__");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000629 if (complexstr == NULL)
630 return NULL;
631 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632 f = PyObject_GetAttr(r, complexstr);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000633 if (f == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 PyErr_Clear();
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000635 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 PyObject *args = Py_BuildValue("()");
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000637 if (args == NULL)
638 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000639 r = PyEval_CallObject(f, args);
640 Py_DECREF(args);
Barry Warsawf988e681999-01-27 23:13:59 +0000641 Py_DECREF(f);
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000642 if (r == NULL)
643 return NULL;
Guido van Rossumc6472e91997-03-31 17:15:43 +0000644 own_r = 1;
Guido van Rossumed0af8f1996-12-05 23:18:18 +0000645 }
646 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000647 if (PyComplex_Check(r)) {
648 cr = ((PyComplexObject*)r)->cval;
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 Rossumc6472e91997-03-31 17:15:43 +0000652 }
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000653 else {
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000654 tmp = (*nbr->nb_float)(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000655 if (own_r) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 Py_DECREF(r);
Guido van Rossum730806d1998-04-10 22:27:42 +0000657 }
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000658 if (tmp == NULL)
659 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660 cr.real = PyFloat_AsDouble(tmp);
661 Py_DECREF(tmp);
Guido van Rossum11950231999-03-25 21:16:07 +0000662 cr.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000663 }
664 if (i == NULL) {
Guido van Rossum11950231999-03-25 21:16:07 +0000665 ci.real = 0.0;
666 ci.imag = 0.0;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000667 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 else if (PyComplex_Check(i))
669 ci = ((PyComplexObject*)i)->cval;
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000670 else {
Guido van Rossumc6472e91997-03-31 17:15:43 +0000671 tmp = (*nbi->nb_float)(i);
Guido van Rossumfe4b6ee1996-08-08 18:49:41 +0000672 if (tmp == NULL)
673 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000674 ci.real = PyFloat_AsDouble(tmp);
675 Py_DECREF(tmp);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000676 ci.imag = 0.;
677 }
678 cr.real -= ci.imag;
679 cr.imag += ci.real;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000680 return PyComplex_FromCComplex(cr);
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000681}
682
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000683static char complex_doc[] =
684"complex(real[, imag]) -> complex number\n\
685\n\
686Create a complex number from a real part and an optional imaginary part.\n\
687This is equivalent to (real + imag*1j) where imag defaults to 0.";
688
689
Guido van Rossum8a5c5d21996-01-12 01:09:56 +0000690#endif
691
Guido van Rossum79f25d91997-04-29 20:08:16 +0000692static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000693builtin_dir(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694 PyObject *self;
695 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000696{
Guido van Rossum666b17a1997-05-06 16:36:57 +0000697 static char *attrlist[] = {"__members__", "__methods__", NULL};
698 PyObject *v = NULL, *l = NULL, *m = NULL;
699 PyObject *d, *x;
700 int i;
701 char **s;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000702
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 if (!PyArg_ParseTuple(args, "|O:dir", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000705 if (v == NULL) {
Guido van Rossum666b17a1997-05-06 16:36:57 +0000706 x = PyEval_GetLocals();
707 if (x == NULL)
708 goto error;
709 l = PyMapping_Keys(x);
710 if (l == NULL)
711 goto error;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000712 }
713 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000714 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum666b17a1997-05-06 16:36:57 +0000715 if (d == NULL)
Guido van Rossum795ba581996-05-23 22:49:07 +0000716 PyErr_Clear();
Guido van Rossum666b17a1997-05-06 16:36:57 +0000717 else {
718 l = PyMapping_Keys(d);
719 if (l == NULL)
720 PyErr_Clear();
721 Py_DECREF(d);
722 }
723 if (l == NULL) {
724 l = PyList_New(0);
725 if (l == NULL)
726 goto error;
727 }
728 for (s = attrlist; *s != NULL; s++) {
729 m = PyObject_GetAttrString(v, *s);
730 if (m == NULL) {
731 PyErr_Clear();
732 continue;
733 }
734 for (i = 0; ; i++) {
735 x = PySequence_GetItem(m, i);
736 if (x == NULL) {
737 PyErr_Clear();
738 break;
739 }
740 if (PyList_Append(l, x) != 0) {
741 Py_DECREF(x);
742 Py_DECREF(m);
743 goto error;
744 }
745 Py_DECREF(x);
746 }
747 Py_DECREF(m);
Guido van Rossum795ba581996-05-23 22:49:07 +0000748 }
Guido van Rossum006bcd41991-10-24 14:54:44 +0000749 }
Guido van Rossum666b17a1997-05-06 16:36:57 +0000750 if (PyList_Sort(l) != 0)
751 goto error;
752 return l;
753 error:
754 Py_XDECREF(l);
755 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000756}
757
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000758static char dir_doc[] =
759"dir([object]) -> list of strings\n\
760\n\
761Return an alphabetized list of names comprising (some of) the attributes\n\
762of the given object. Without an argument, the names in the current scope\n\
763are listed. With an instance argument, only the instance attributes are\n\
764returned. With a class argument, attributes of the base class are not\n\
765returned. For other types or arguments, this may list members or methods.";
766
767
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768static PyObject *
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000769builtin_divmod(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000770 PyObject *self;
771 PyObject *args;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000772{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000773 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000774
Guido van Rossum79f25d91997-04-29 20:08:16 +0000775 if (!PyArg_ParseTuple(args, "OO:divmod", &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000776 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000777 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000778}
779
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000780static char divmod_doc[] =
781"divmod(x, y) -> (div, mod)\n\
782\n\
783Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.";
784
785
Guido van Rossum79f25d91997-04-29 20:08:16 +0000786static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000787builtin_eval(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000788 PyObject *self;
789 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000790{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000791 PyObject *cmd;
792 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000793 char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000794
Guido van Rossum79f25d91997-04-29 20:08:16 +0000795 if (!PyArg_ParseTuple(args, "O|O!O!:eval",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000796 &cmd,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 &PyDict_Type, &globals,
798 &PyDict_Type, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000799 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800 if (globals == Py_None) {
801 globals = PyEval_GetGlobals();
802 if (locals == Py_None)
803 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000804 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000806 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
808 if (PyDict_SetItemString(globals, "__builtins__",
809 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000810 return NULL;
811 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 if (PyCode_Check(cmd))
813 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
814 if (!PyString_Check(cmd)) {
815 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000816 "eval() argument 1 must be string or code object");
Guido van Rossum94390a41992-08-14 15:14:30 +0000817 return NULL;
818 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000819 str = PyString_AsString(cmd);
Guido van Rossum106f2da2000-06-28 21:12:25 +0000820 if (strlen(str) != (size_t)PyString_Size(cmd)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000821 PyErr_SetString(PyExc_ValueError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000822 "embedded '\\0' in string arg");
823 return NULL;
Guido van Rossumf08ab0a1992-03-04 16:41:41 +0000824 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000825 while (*str == ' ' || *str == '\t')
826 str++;
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000827 return PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000828}
829
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000830static char eval_doc[] =
831"eval(source[, globals[, locals]]) -> value\n\
832\n\
833Evaluate the source in the context of globals and locals.\n\
834The source may be a string representing a Python expression\n\
835or a code object as returned by compile().\n\
836The globals and locals are dictionaries, defaulting to the current\n\
837globals and locals. If only globals is given, locals defaults to it.";
838
839
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000841builtin_execfile(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 PyObject *self;
843 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000844{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000845 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 PyObject *globals = Py_None, *locals = Py_None;
847 PyObject *res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000848 FILE* fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000849
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850 if (!PyArg_ParseTuple(args, "s|O!O!:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000851 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 &PyDict_Type, &globals,
853 &PyDict_Type, &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000854 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 if (globals == Py_None) {
856 globals = PyEval_GetGlobals();
857 if (locals == Py_None)
858 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000859 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000861 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
863 if (PyDict_SetItemString(globals, "__builtins__",
864 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000865 return NULL;
866 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867 Py_BEGIN_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000868 fp = fopen(filename, "r");
Guido van Rossum79f25d91997-04-29 20:08:16 +0000869 Py_END_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000870 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000872 return NULL;
873 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000874 res = PyRun_File(fp, filename, Py_file_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000875 Py_BEGIN_ALLOW_THREADS
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000876 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877 Py_END_ALLOW_THREADS
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000878 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000879}
880
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000881static char execfile_doc[] =
882"execfile(filename[, globals[, locals]])\n\
883\n\
884Read and execute a Python script from a file.\n\
885The globals and locals are dictionaries, defaulting to the current\n\
886globals and locals. If only globals is given, locals defaults to it.";
887
888
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +0000890builtin_getattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000891 PyObject *self;
892 PyObject *args;
Guido van Rossum33894be1992-01-27 16:53:09 +0000893{
Guido van Rossum950ff291998-06-29 13:38:57 +0000894 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000896
Guido van Rossum950ff291998-06-29 13:38:57 +0000897 if (!PyArg_ParseTuple(args, "OS|O:getattr", &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000898 return NULL;
Guido van Rossum950ff291998-06-29 13:38:57 +0000899 result = PyObject_GetAttr(v, name);
900 if (result == NULL && dflt != NULL) {
901 PyErr_Clear();
902 Py_INCREF(dflt);
903 result = dflt;
904 }
905 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000906}
907
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000908static char getattr_doc[] =
Guido van Rossum950ff291998-06-29 13:38:57 +0000909"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000910\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000911Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
912When a default argument is given, it is returned when the attribute doesn't\n\
913exist; without it, an exception is raised in that case.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914
915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Guido van Rossum872537c1995-07-07 22:43:42 +0000917builtin_globals(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000918 PyObject *self;
919 PyObject *args;
Guido van Rossum872537c1995-07-07 22:43:42 +0000920{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000922
Guido van Rossum43713e52000-02-29 13:59:29 +0000923 if (!PyArg_ParseTuple(args, ":globals"))
Guido van Rossum872537c1995-07-07 22:43:42 +0000924 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925 d = PyEval_GetGlobals();
926 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000927 return d;
928}
929
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000930static char globals_doc[] =
931"globals() -> dictionary\n\
932\n\
933Return the dictionary containing the current scope's global variables.";
934
935
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936static PyObject *
Guido van Rossum9bfef441993-03-29 10:43:31 +0000937builtin_hasattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 PyObject *self;
939 PyObject *args;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000940{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000941 PyObject *v;
942 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 if (!PyArg_ParseTuple(args, "OS:hasattr", &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000945 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000946 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000947 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000949 Py_INCREF(Py_False);
950 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000951 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000953 Py_INCREF(Py_True);
954 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000955}
956
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000957static char hasattr_doc[] =
958"hasattr(object, name) -> Boolean\n\
959\n\
960Return whether the object has an attribute with the given name.\n\
961(This is done by calling getattr(object, name) and catching exceptions.)";
962
963
Guido van Rossum79f25d91997-04-29 20:08:16 +0000964static PyObject *
Guido van Rossum5b722181993-03-30 17:46:03 +0000965builtin_id(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000966 PyObject *self;
967 PyObject *args;
Guido van Rossum5b722181993-03-30 17:46:03 +0000968{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000970
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 if (!PyArg_ParseTuple(args, "O:id", &v))
Guido van Rossum5b722181993-03-30 17:46:03 +0000972 return NULL;
Guido van Rossum106f2da2000-06-28 21:12:25 +0000973 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000974}
975
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976static char id_doc[] =
977"id(object) -> integer\n\
978\n\
979Return the identity of an object. This is guaranteed to be unique among\n\
980simultaneously existing objects. (Hint: it's the object's memory address.)";
981
982
Guido van Rossum79f25d91997-04-29 20:08:16 +0000983static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +0000984builtin_map(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000985 PyObject *self;
986 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000987{
988 typedef struct {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000989 PyObject *seq;
990 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000991 int len;
992 } sequence;
993
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000995 sequence *seqs = NULL, *sqp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000996 int n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000997 register int i, j;
998
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001000 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001001 PyErr_SetString(PyExc_TypeError,
1002 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001003 return NULL;
1004 }
1005
Guido van Rossum79f25d91997-04-29 20:08:16 +00001006 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001007 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001008
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001009 if (func == Py_None && n == 1) {
1010 /* map(None, S) is the same as list(S). */
1011 return PySequence_List(PyTuple_GetItem(args, 1));
1012 }
1013
Guido van Rossum79f25d91997-04-29 20:08:16 +00001014 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
1015 PyErr_NoMemory();
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001016 goto Fail_2;
1017 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001018
Guido van Rossum2d951851994-08-29 12:52:16 +00001019 for (len = 0, i = 0, sqp = seqs; i < n; ++i, ++sqp) {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001020 int curlen;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001021 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022
Guido van Rossum79f25d91997-04-29 20:08:16 +00001023 if ((sqp->seq = PyTuple_GetItem(args, i + 1)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001024 goto Fail_2;
1025
Guido van Rossum09df08a1998-05-22 00:51:39 +00001026 sqp->sqf = sqf = sqp->seq->ob_type->tp_as_sequence;
1027 if (sqf == NULL ||
1028 sqf->sq_length == NULL ||
1029 sqf->sq_item == NULL)
1030 {
Guido van Rossum12d12c51993-10-26 17:58:25 +00001031 static char errmsg[] =
1032 "argument %d to map() must be a sequence object";
Guido van Rossum15e33a41997-04-30 19:00:27 +00001033 char errbuf[sizeof(errmsg) + 25];
Guido van Rossum12d12c51993-10-26 17:58:25 +00001034
1035 sprintf(errbuf, errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001036 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001037 goto Fail_2;
1038 }
1039
1040 if ((curlen = sqp->len = (*sqp->sqf->sq_length)(sqp->seq)) < 0)
1041 goto Fail_2;
1042
1043 if (curlen > len)
1044 len = curlen;
1045 }
1046
Guido van Rossum79f25d91997-04-29 20:08:16 +00001047 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001048 goto Fail_2;
1049
Guido van Rossum2d951851994-08-29 12:52:16 +00001050 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001051 PyObject *alist, *item=NULL, *value;
Guido van Rossum2d951851994-08-29 12:52:16 +00001052 int any = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001053
Guido van Rossum79f25d91997-04-29 20:08:16 +00001054 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001055 alist = NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001056 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057 if ((alist = PyTuple_New(n)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001058 goto Fail_1;
1059 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001060
1061 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Guido van Rossum2d951851994-08-29 12:52:16 +00001062 if (sqp->len < 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001063 Py_INCREF(Py_None);
1064 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001065 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001066 else {
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001067 item = (*sqp->sqf->sq_item)(sqp->seq, i);
Guido van Rossum2d951851994-08-29 12:52:16 +00001068 if (item == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001069 if (PyErr_ExceptionMatches(
1070 PyExc_IndexError))
1071 {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001072 PyErr_Clear();
1073 Py_INCREF(Py_None);
1074 item = Py_None;
Guido van Rossum2d951851994-08-29 12:52:16 +00001075 sqp->len = -1;
1076 }
1077 else {
1078 goto Fail_0;
1079 }
1080 }
1081 else
1082 any = 1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001083
Guido van Rossum12d12c51993-10-26 17:58:25 +00001084 }
Guido van Rossum32120311995-07-10 13:52:21 +00001085 if (!alist)
Guido van Rossum2d951851994-08-29 12:52:16 +00001086 break;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001087 if (PyTuple_SetItem(alist, j, item) < 0) {
1088 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001089 goto Fail_0;
Guido van Rossum2d951851994-08-29 12:52:16 +00001090 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001091 continue;
1092
1093 Fail_0:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001094 Py_XDECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001095 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001096 }
1097
Guido van Rossum32120311995-07-10 13:52:21 +00001098 if (!alist)
1099 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001100
1101 if (!any) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001102 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001103 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001104 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001105
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001107 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001108 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001109 value = PyEval_CallObject(func, alist);
1110 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001111 if (value == NULL)
1112 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001113 }
1114 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001115 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001116 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001117 if (status < 0)
1118 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001119 }
1120 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001121 if (PyList_SetItem(result, i, value) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001122 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001123 }
1124 }
1125
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001126 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1127 goto Fail_1;
1128
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001130 return result;
1131
Guido van Rossum12d12c51993-10-26 17:58:25 +00001132Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001133 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001134Fail_2:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001135 if (seqs) PyMem_DEL(seqs);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001136 return NULL;
1137}
1138
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001139static char map_doc[] =
1140"map(function, sequence[, sequence, ...]) -> list\n\
1141\n\
1142Return a list of the results of applying the function to the items of\n\
1143the argument sequence(s). If more than one sequence is given, the\n\
1144function is called with an argument list consisting of the corresponding\n\
1145item of each sequence, substituting None for missing values when not all\n\
1146sequences have the same length. If the function is None, return a list of\n\
1147the items of the sequence (or a list of tuples if more than one sequence).";
1148
1149
Guido van Rossum79f25d91997-04-29 20:08:16 +00001150static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +00001151builtin_setattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152 PyObject *self;
1153 PyObject *args;
Guido van Rossum33894be1992-01-27 16:53:09 +00001154{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155 PyObject *v;
1156 PyObject *name;
1157 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159 if (!PyArg_ParseTuple(args, "OSO:setattr", &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001160 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001162 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163 Py_INCREF(Py_None);
1164 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001165}
1166
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001167static char setattr_doc[] =
1168"setattr(object, name, value)\n\
1169\n\
1170Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
1171``x.y = v''.";
1172
1173
Guido van Rossum79f25d91997-04-29 20:08:16 +00001174static PyObject *
Guido van Rossum14144fc1994-08-29 12:53:40 +00001175builtin_delattr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 PyObject *self;
1177 PyObject *args;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001178{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 PyObject *v;
1180 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001181
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182 if (!PyArg_ParseTuple(args, "OS:delattr", &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001183 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001184 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001185 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001186 Py_INCREF(Py_None);
1187 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001188}
1189
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001190static char delattr_doc[] =
Guido van Rossumdf12a591998-11-23 22:13:04 +00001191"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001192\n\
1193Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
1194``del x.y''.";
1195
1196
Guido van Rossum79f25d91997-04-29 20:08:16 +00001197static PyObject *
Guido van Rossum9bfef441993-03-29 10:43:31 +00001198builtin_hash(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001199 PyObject *self;
1200 PyObject *args;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001201{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202 PyObject *v;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001203 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001204
Guido van Rossum79f25d91997-04-29 20:08:16 +00001205 if (!PyArg_ParseTuple(args, "O:hash", &v))
Guido van Rossum9bfef441993-03-29 10:43:31 +00001206 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001208 if (x == -1)
1209 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001210 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001211}
1212
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001213static char hash_doc[] =
1214"hash(object) -> integer\n\
1215\n\
1216Return a hash value for the object. Two objects with the same value have\n\
1217the same hash value. The reverse is not necessarily true, but likely.";
1218
1219
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221builtin_hex(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 PyObject *self;
1223 PyObject *args;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001224{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225 PyObject *v;
1226 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001227
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228 if (!PyArg_ParseTuple(args, "O:hex", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001229 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001230
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001231 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001232 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001234 "hex() argument can't be converted to hex");
1235 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001236 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001237 return (*nb->nb_hex)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001238}
1239
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001240static char hex_doc[] =
1241"hex(number) -> string\n\
1242\n\
1243Return the hexadecimal representation of an integer or long integer.";
1244
1245
Guido van Rossum79f25d91997-04-29 20:08:16 +00001246static PyObject *builtin_raw_input Py_PROTO((PyObject *, PyObject *));
Guido van Rossum3165fe61992-09-25 21:59:05 +00001247
Guido van Rossum79f25d91997-04-29 20:08:16 +00001248static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001249builtin_input(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001250 PyObject *self;
1251 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001252{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001253 PyObject *line;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001254 char *str;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001255 PyObject *res;
1256 PyObject *globals, *locals;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001257
1258 line = builtin_raw_input(self, args);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001259 if (line == NULL)
1260 return line;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001261 if (!PyArg_Parse(line, "s;embedded '\\0' in input line", &str))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001262 return NULL;
1263 while (*str == ' ' || *str == '\t')
1264 str++;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001265 globals = PyEval_GetGlobals();
1266 locals = PyEval_GetLocals();
1267 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
1268 if (PyDict_SetItemString(globals, "__builtins__",
1269 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +00001270 return NULL;
1271 }
Guido van Rossumb05a5c71997-05-07 17:46:13 +00001272 res = PyRun_String(str, Py_eval_input, globals, locals);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001273 Py_DECREF(line);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001274 return res;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001275}
1276
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001277static char input_doc[] =
1278"input([prompt]) -> value\n\
1279\n\
1280Equivalent to eval(raw_input(prompt)).";
1281
1282
Guido van Rossume8811f81997-02-14 15:48:05 +00001283static PyObject *
1284builtin_intern(self, args)
1285 PyObject *self;
1286 PyObject *args;
1287{
1288 PyObject *s;
Guido van Rossum43713e52000-02-29 13:59:29 +00001289 if (!PyArg_ParseTuple(args, "S:intern", &s))
Guido van Rossume8811f81997-02-14 15:48:05 +00001290 return NULL;
1291 Py_INCREF(s);
1292 PyString_InternInPlace(&s);
1293 return s;
1294}
1295
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001296static char intern_doc[] =
1297"intern(string) -> string\n\
1298\n\
1299``Intern'' the given string. This enters the string in the (global)\n\
1300table of interned strings whose purpose is to speed up dictionary lookups.\n\
1301Return the string itself or the previously interned string object with the\n\
1302same value.";
1303
1304
Guido van Rossum79f25d91997-04-29 20:08:16 +00001305static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001306builtin_int(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001307 PyObject *self;
1308 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001309{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001310 PyObject *v;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001311 int base = -909; /* unlikely! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001312
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001313 if (!PyArg_ParseTuple(args, "O|i:int", &v, &base))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001314 return NULL;
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001315 if (base == -909)
1316 return PyNumber_Int(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001317 else if (PyString_Check(v))
1318 return PyInt_FromString(PyString_AS_STRING(v), NULL, base);
1319 else if (PyUnicode_Check(v))
1320 return PyInt_FromUnicode(PyUnicode_AS_UNICODE(v),
1321 PyUnicode_GET_SIZE(v),
1322 base);
1323 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001324 PyErr_SetString(PyExc_TypeError,
1325 "can't convert non-string with explicit base");
1326 return NULL;
1327 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001328}
1329
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001330static char int_doc[] =
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001331"int(x[, base]) -> integer\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001332\n\
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001333Convert a string or number to an integer, if possible. A floating point\n\
1334argument will be truncated towards zero (this does not include a string\n\
1335representation of a floating point number!) When converting a string, use\n\
1336the optional base. It is an error to supply a base when converting a\n\
1337non-string.";
1338
1339
1340static PyObject *
1341builtin_long(self, args)
1342 PyObject *self;
1343 PyObject *args;
1344{
1345 PyObject *v;
1346 int base = -909; /* unlikely! */
1347
1348 if (!PyArg_ParseTuple(args, "O|i:long", &v, &base))
1349 return NULL;
1350 if (base == -909)
1351 return PyNumber_Long(v);
Guido van Rossum9e896b32000-04-05 20:11:21 +00001352 else if (PyString_Check(v))
1353 return PyLong_FromString(PyString_AS_STRING(v), NULL, base);
1354 else if (PyUnicode_Check(v))
1355 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(v),
1356 PyUnicode_GET_SIZE(v),
1357 base);
1358 else {
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001359 PyErr_SetString(PyExc_TypeError,
1360 "can't convert non-string with explicit base");
1361 return NULL;
1362 }
Barry Warsaw226ae6c1999-10-12 19:54:53 +00001363}
1364
1365static char long_doc[] =
1366"long(x) -> long integer\n\
1367long(x, base) -> long integer\n\
1368\n\
1369Convert a string or number to a long integer, if possible. A floating\n\
1370point argument will be truncated towards zero (this does not include a\n\
1371string representation of a floating point number!) When converting a\n\
1372string, use the given base. It is an error to supply a base when\n\
1373converting a non-string.";
1374
1375
1376static PyObject *
1377builtin_float(self, args)
1378 PyObject *self;
1379 PyObject *args;
1380{
1381 PyObject *v;
1382
1383 if (!PyArg_ParseTuple(args, "O:float", &v))
1384 return NULL;
1385 if (PyString_Check(v))
1386 return PyFloat_FromString(v, NULL);
1387 return PyNumber_Float(v);
1388}
1389
1390static char float_doc[] =
1391"float(x) -> floating point number\n\
1392\n\
1393Convert a string or number to a floating point number, if possible.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001394
1395
Guido van Rossum79f25d91997-04-29 20:08:16 +00001396static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001397builtin_len(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001398 PyObject *self;
1399 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001400{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401 PyObject *v;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001402 long res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001403
Guido van Rossum79f25d91997-04-29 20:08:16 +00001404 if (!PyArg_ParseTuple(args, "O:len", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001405 return NULL;
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001406 res = PyObject_Length(v);
1407 if (res < 0 && PyErr_Occurred())
1408 return NULL;
1409 return PyInt_FromLong(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001410}
1411
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001412static char len_doc[] =
1413"len(object) -> integer\n\
1414\n\
1415Return the number of items of a sequence or mapping.";
1416
1417
Guido van Rossum79f25d91997-04-29 20:08:16 +00001418static PyObject *
Guido van Rossumd1705771996-04-09 02:41:06 +00001419builtin_list(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001420 PyObject *self;
1421 PyObject *args;
Guido van Rossumd1705771996-04-09 02:41:06 +00001422{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423 PyObject *v;
Guido van Rossumd1705771996-04-09 02:41:06 +00001424
Guido van Rossum79f25d91997-04-29 20:08:16 +00001425 if (!PyArg_ParseTuple(args, "O:list", &v))
Guido van Rossumd1705771996-04-09 02:41:06 +00001426 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001427 return PySequence_List(v);
Guido van Rossumd1705771996-04-09 02:41:06 +00001428}
1429
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001430static char list_doc[] =
1431"list(sequence) -> list\n\
1432\n\
1433Return a new list whose items are the same as those of the argument sequence.";
1434
Guido van Rossum8861b741996-07-30 16:49:37 +00001435
1436static PyObject *
1437builtin_slice(self, args)
1438 PyObject *self;
1439 PyObject *args;
1440{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001441 PyObject *start, *stop, *step;
Guido van Rossum8861b741996-07-30 16:49:37 +00001442
Guido van Rossum09df08a1998-05-22 00:51:39 +00001443 start = stop = step = NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001444
Guido van Rossum09df08a1998-05-22 00:51:39 +00001445 if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
1446 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001447
Guido van Rossum09df08a1998-05-22 00:51:39 +00001448 /* This swapping of stop and start is to maintain similarity with
1449 range(). */
1450 if (stop == NULL) {
1451 stop = start;
1452 start = NULL;
1453 }
1454 return PySlice_New(start, stop, step);
Guido van Rossum8861b741996-07-30 16:49:37 +00001455}
1456
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001457static char slice_doc[] =
Fred Drake3d587441999-07-19 15:21:16 +00001458"slice([start,] stop[, step]) -> slice object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001459\n\
1460Create a slice object. This is used for slicing by the Numeric extensions.";
1461
1462
Guido van Rossum79f25d91997-04-29 20:08:16 +00001463static PyObject *
Guido van Rossum872537c1995-07-07 22:43:42 +00001464builtin_locals(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001465 PyObject *self;
1466 PyObject *args;
Guido van Rossum872537c1995-07-07 22:43:42 +00001467{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001468 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001469
Guido van Rossum43713e52000-02-29 13:59:29 +00001470 if (!PyArg_ParseTuple(args, ":locals"))
Guido van Rossum872537c1995-07-07 22:43:42 +00001471 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001472 d = PyEval_GetLocals();
1473 Py_INCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001474 return d;
1475}
1476
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001477static char locals_doc[] =
1478"locals() -> dictionary\n\
1479\n\
1480Return the dictionary containing the current scope's local variables.";
1481
1482
Guido van Rossum79f25d91997-04-29 20:08:16 +00001483static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001484min_max(args, sign)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001485 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001486 int sign;
1487{
Guido van Rossum2d951851994-08-29 12:52:16 +00001488 int i;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001489 PyObject *v, *w, *x;
1490 PySequenceMethods *sq;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001491
Guido van Rossum79f25d91997-04-29 20:08:16 +00001492 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001493 v = args;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001494 else if (!PyArg_ParseTuple(args, "O:min/max", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001495 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001496 sq = v->ob_type->tp_as_sequence;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001497 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001498 PyErr_SetString(PyExc_TypeError,
1499 "min() or max() of non-sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001500 return NULL;
1501 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001502 w = NULL;
1503 for (i = 0; ; i++) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00001504 x = (*sq->sq_item)(v, i); /* Implies INCREF */
Guido van Rossum2d951851994-08-29 12:52:16 +00001505 if (x == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001506 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001507 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001508 break;
1509 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001510 Py_XDECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001511 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001512 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001513 if (w == NULL)
1514 w = x;
1515 else {
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001516 int c = PyObject_Compare(x, w);
1517 if (c && PyErr_Occurred()) {
1518 Py_DECREF(x);
1519 Py_XDECREF(w);
1520 return NULL;
1521 }
1522 if (c * sign > 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001523 Py_DECREF(w);
Guido van Rossum2d951851994-08-29 12:52:16 +00001524 w = x;
1525 }
1526 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001527 Py_DECREF(x);
Guido van Rossum2d951851994-08-29 12:52:16 +00001528 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001529 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001530 if (w == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001531 PyErr_SetString(PyExc_ValueError,
1532 "min() or max() of empty sequence");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001533 return w;
1534}
1535
Guido van Rossum79f25d91997-04-29 20:08:16 +00001536static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00001537builtin_min(self, v)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001538 PyObject *self;
1539 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001540{
1541 return min_max(v, -1);
1542}
1543
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001544static char min_doc[] =
1545"min(sequence) -> value\n\
1546min(a, b, c, ...) -> value\n\
1547\n\
1548With a single sequence argument, return its smallest item.\n\
1549With two or more arguments, return the smallest argument.";
1550
1551
Guido van Rossum79f25d91997-04-29 20:08:16 +00001552static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00001553builtin_max(self, v)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001554 PyObject *self;
1555 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001556{
1557 return min_max(v, 1);
1558}
1559
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001560static char max_doc[] =
1561"max(sequence) -> value\n\
1562max(a, b, c, ...) -> value\n\
1563\n\
1564With a single sequence argument, return its largest item.\n\
1565With two or more arguments, return the largest argument.";
1566
1567
Guido van Rossum79f25d91997-04-29 20:08:16 +00001568static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001569builtin_oct(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001570 PyObject *self;
1571 PyObject *args;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001572{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573 PyObject *v;
1574 PyNumberMethods *nb;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001575
Guido van Rossum79f25d91997-04-29 20:08:16 +00001576 if (!PyArg_ParseTuple(args, "O:oct", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001577 return NULL;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001578 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1579 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001580 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001581 "oct() argument can't be converted to oct");
1582 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001583 }
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001584 return (*nb->nb_oct)(v);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001585}
1586
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001587static char oct_doc[] =
1588"oct(number) -> string\n\
1589\n\
1590Return the octal representation of an integer or long integer.";
1591
1592
Guido van Rossum79f25d91997-04-29 20:08:16 +00001593static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +00001594builtin_open(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001595 PyObject *self;
1596 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001597{
Guido van Rossum2d951851994-08-29 12:52:16 +00001598 char *name;
1599 char *mode = "r";
1600 int bufsize = -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001601 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001602
Guido van Rossum79f25d91997-04-29 20:08:16 +00001603 if (!PyArg_ParseTuple(args, "s|si:open", &name, &mode, &bufsize))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001604 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001605 f = PyFile_FromString(name, mode);
Guido van Rossum2d951851994-08-29 12:52:16 +00001606 if (f != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001607 PyFile_SetBufSize(f, bufsize);
Guido van Rossum2d951851994-08-29 12:52:16 +00001608 return f;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001609}
1610
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001611static char open_doc[] =
1612"open(filename[, mode[, buffering]]) -> file object\n\
1613\n\
1614Open a file. The mode can be 'r', 'w' or 'a' for reading (default),\n\
1615writing or appending. The file will be created if it doesn't exist\n\
1616when opened for writing or appending; it will be truncated when\n\
1617opened for writing. Add a 'b' to the mode for binary files.\n\
1618Add a '+' to the mode to allow simultaneous reading and writing.\n\
1619If the buffering argument is given, 0 means unbuffered, 1 means line\n\
1620buffered, and larger numbers specify the buffer size.";
1621
1622
Guido van Rossum79f25d91997-04-29 20:08:16 +00001623static PyObject *
Guido van Rossum94390a41992-08-14 15:14:30 +00001624builtin_ord(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625 PyObject *self;
1626 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001627{
Guido van Rossum09095f32000-03-10 23:00:52 +00001628 PyObject *obj;
1629 long ord;
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001630 int size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001631
Guido van Rossum09095f32000-03-10 23:00:52 +00001632 if (!PyArg_ParseTuple(args, "O:ord", &obj))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001633 return NULL;
Guido van Rossum09095f32000-03-10 23:00:52 +00001634
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001635 if (PyString_Check(obj)) {
1636 size = PyString_GET_SIZE(obj);
1637 if (size == 1)
1638 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
1639 } else if (PyUnicode_Check(obj)) {
1640 size = PyUnicode_GET_SIZE(obj);
1641 if (size == 1)
1642 ord = (long)*PyUnicode_AS_UNICODE(obj);
1643 } else {
1644 PyErr_Format(PyExc_TypeError,
Fred Drake078b24f2000-04-13 02:42:50 +00001645 "expected string or Unicode character, " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001646 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001647 return NULL;
1648 }
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001649 if (size == 1)
1650 return PyInt_FromLong(ord);
Guido van Rossum09095f32000-03-10 23:00:52 +00001651
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001652 PyErr_Format(PyExc_TypeError,
1653 "expected a character, length-%d string found",
1654 size);
1655 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001656}
1657
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001658static char ord_doc[] =
1659"ord(c) -> integer\n\
1660\n\
Fred Drake078b24f2000-04-13 02:42:50 +00001661Return the integer ordinal of a one character string.";
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001662
1663
Guido van Rossum79f25d91997-04-29 20:08:16 +00001664static PyObject *
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001665builtin_pow(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001666 PyObject *self;
1667 PyObject *args;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001668{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001669 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001670
Guido van Rossum79f25d91997-04-29 20:08:16 +00001671 if (!PyArg_ParseTuple(args, "OO|O:pow", &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001672 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001673 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001674}
1675
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001676static char pow_doc[] =
1677"pow(x, y[, z]) -> number\n\
1678\n\
1679With two arguments, equivalent to x**y. With three arguments,\n\
1680equivalent to (x**y) % z, but may be more efficient (e.g. for longs).";
1681
1682
Guido van Rossum124eff01999-02-23 16:11:01 +00001683/* Return number of items in range/xrange (lo, hi, step). step > 0
1684 * required. Return a value < 0 if & only if the true value is too
1685 * large to fit in a signed long.
1686 */
1687static long
1688get_len_of_range(lo, hi, step)
1689 long lo;
1690 long hi;
1691 long step; /* must be > 0 */
1692{
1693 /* -------------------------------------------------------------
1694 If lo >= hi, the range is empty.
1695 Else if n values are in the range, the last one is
1696 lo + (n-1)*step, which must be <= hi-1. Rearranging,
1697 n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
1698 the proper value. Since lo < hi in this case, hi-lo-1 >= 0, so
1699 the RHS is non-negative and so truncation is the same as the
1700 floor. Letting M be the largest positive long, the worst case
1701 for the RHS numerator is hi=M, lo=-M-1, and then
1702 hi-lo-1 = M-(-M-1)-1 = 2*M. Therefore unsigned long has enough
1703 precision to compute the RHS exactly.
1704 ---------------------------------------------------------------*/
1705 long n = 0;
1706 if (lo < hi) {
1707 unsigned long uhi = (unsigned long)hi;
1708 unsigned long ulo = (unsigned long)lo;
1709 unsigned long diff = uhi - ulo - 1;
1710 n = (long)(diff / (unsigned long)step + 1);
1711 }
1712 return n;
1713}
1714
Guido van Rossum79f25d91997-04-29 20:08:16 +00001715static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001716builtin_range(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001717 PyObject *self;
1718 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001719{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001720 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum124eff01999-02-23 16:11:01 +00001721 long bign;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001722 int i, n;
Guido van Rossum124eff01999-02-23 16:11:01 +00001723
Guido van Rossum79f25d91997-04-29 20:08:16 +00001724 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001725
Guido van Rossum79f25d91997-04-29 20:08:16 +00001726 if (PyTuple_Size(args) <= 1) {
1727 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001728 "l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001729 &ihigh))
1730 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001731 }
1732 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001733 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001734 "ll|l;range() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001735 &ilow, &ihigh, &istep))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001736 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001737 }
1738 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001739 PyErr_SetString(PyExc_ValueError, "zero step for range()");
Guido van Rossum3f5da241990-12-20 15:06:42 +00001740 return NULL;
1741 }
Guido van Rossum124eff01999-02-23 16:11:01 +00001742 if (istep > 0)
1743 bign = get_len_of_range(ilow, ihigh, istep);
1744 else
1745 bign = get_len_of_range(ihigh, ilow, -istep);
1746 n = (int)bign;
1747 if (bign < 0 || (long)n != bign) {
Guido van Rossume23cde21999-01-12 05:07:47 +00001748 PyErr_SetString(PyExc_OverflowError,
Guido van Rossum124eff01999-02-23 16:11:01 +00001749 "range() has too many items");
Guido van Rossume23cde21999-01-12 05:07:47 +00001750 return NULL;
1751 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001752 v = PyList_New(n);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001753 if (v == NULL)
1754 return NULL;
1755 for (i = 0; i < n; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001756 PyObject *w = PyInt_FromLong(ilow);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001757 if (w == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758 Py_DECREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001759 return NULL;
1760 }
Guido van Rossuma937d141998-04-24 18:22:02 +00001761 PyList_SET_ITEM(v, i, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001762 ilow += istep;
1763 }
1764 return v;
1765}
1766
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001767static char range_doc[] =
1768"range([start,] stop[, step]) -> list of integers\n\
1769\n\
1770Return a list containing an arithmetic progression of integers.\n\
1771range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.\n\
1772When step is given, it specifies the increment (or decrement).\n\
1773For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!\n\
1774These are exactly the valid indices for a list of 4 elements.";
1775
1776
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001778builtin_xrange(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 PyObject *self;
1780 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001781{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782 long ilow = 0, ihigh = 0, istep = 1;
Guido van Rossum0865dd91995-01-17 16:30:22 +00001783 long n;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001784
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785 if (PyTuple_Size(args) <= 1) {
1786 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001787 "l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001788 &ihigh))
1789 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001790 }
1791 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001792 if (!PyArg_ParseTuple(args,
Guido van Rossum0865dd91995-01-17 16:30:22 +00001793 "ll|l;xrange() requires 1-3 int arguments",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001794 &ilow, &ihigh, &istep))
Guido van Rossum12d12c51993-10-26 17:58:25 +00001795 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001796 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001797 if (istep == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001798 PyErr_SetString(PyExc_ValueError, "zero step for xrange()");
Guido van Rossum12d12c51993-10-26 17:58:25 +00001799 return NULL;
1800 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801 if (istep > 0)
Guido van Rossum124eff01999-02-23 16:11:01 +00001802 n = get_len_of_range(ilow, ihigh, istep);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803 else
Guido van Rossum124eff01999-02-23 16:11:01 +00001804 n = get_len_of_range(ihigh, ilow, -istep);
1805 if (n < 0) {
1806 PyErr_SetString(PyExc_OverflowError,
1807 "xrange() has more than sys.maxint items");
1808 return NULL;
1809 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 return PyRange_New(ilow, n, istep, 1);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001811}
1812
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001813static char xrange_doc[] =
1814"xrange([start,] stop[, step]) -> xrange object\n\
1815\n\
1816Like range(), but instead of returning a list, returns an object that\n\
1817generates the numbers in the range on demand. This is slightly slower\n\
1818than range() but more memory efficient.";
1819
1820
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001822builtin_raw_input(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 PyObject *self;
1824 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001825{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001826 PyObject *v = NULL;
1827 PyObject *f;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001828
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 if (!PyArg_ParseTuple(args, "|O:[raw_]input", &v))
Guido van Rossum3165fe61992-09-25 21:59:05 +00001830 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001831 if (PyFile_AsFile(PySys_GetObject("stdin")) == stdin &&
1832 PyFile_AsFile(PySys_GetObject("stdout")) == stdout &&
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001833 isatty(fileno(stdin)) && isatty(fileno(stdout))) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001834 PyObject *po;
Guido van Rossum872537c1995-07-07 22:43:42 +00001835 char *prompt;
1836 char *s;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001837 PyObject *result;
Guido van Rossum872537c1995-07-07 22:43:42 +00001838 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001839 po = PyObject_Str(v);
Guido van Rossum872537c1995-07-07 22:43:42 +00001840 if (po == NULL)
1841 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001842 prompt = PyString_AsString(po);
Guido van Rossumd9b52081998-06-26 18:25:38 +00001843 if (prompt == NULL)
1844 return NULL;
Guido van Rossum872537c1995-07-07 22:43:42 +00001845 }
1846 else {
1847 po = NULL;
1848 prompt = "";
1849 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001850 s = PyOS_Readline(prompt);
1851 Py_XDECREF(po);
Guido van Rossum872537c1995-07-07 22:43:42 +00001852 if (s == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001853 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossum872537c1995-07-07 22:43:42 +00001854 return NULL;
1855 }
1856 if (*s == '\0') {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001857 PyErr_SetNone(PyExc_EOFError);
Guido van Rossum872537c1995-07-07 22:43:42 +00001858 result = NULL;
1859 }
1860 else { /* strip trailing '\n' */
Guido van Rossum106f2da2000-06-28 21:12:25 +00001861 size_t len = strlen(s);
1862 if (len > INT_MAX) {
1863 PyErr_SetString(PyExc_OverflowError, "input too long");
1864 result = NULL;
1865 }
1866 else {
1867 result = PyString_FromStringAndSize(s, (int)(len-1));
1868 }
Guido van Rossum872537c1995-07-07 22:43:42 +00001869 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001870 PyMem_FREE(s);
Guido van Rossum872537c1995-07-07 22:43:42 +00001871 return result;
1872 }
Guido van Rossum90933611991-06-07 16:10:43 +00001873 if (v != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001874 f = PySys_GetObject("stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001875 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001877 return NULL;
1878 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001879 if (Py_FlushLine() != 0 ||
1880 PyFile_WriteObject(v, f, Py_PRINT_RAW) != 0)
Guido van Rossum90933611991-06-07 16:10:43 +00001881 return NULL;
1882 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883 f = PySys_GetObject("stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001884 if (f == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001885 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdin");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001886 return NULL;
1887 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001888 return PyFile_GetLine(f, -1);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001889}
1890
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001891static char raw_input_doc[] =
1892"raw_input([prompt]) -> string\n\
1893\n\
1894Read a string from standard input. The trailing newline is stripped.\n\
1895If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1896On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1897is printed without a trailing newline before reading.";
1898
1899
Guido van Rossum79f25d91997-04-29 20:08:16 +00001900static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +00001901builtin_reduce(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001902 PyObject *self;
1903 PyObject *args;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001904{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001905 PyObject *seq, *func, *result = NULL;
1906 PySequenceMethods *sqf;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001907 register int i;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001908
Guido van Rossum79f25d91997-04-29 20:08:16 +00001909 if (!PyArg_ParseTuple(args, "OO|O:reduce", &func, &seq, &result))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001910 return NULL;
1911 if (result != NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912 Py_INCREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001913
Guido van Rossum09df08a1998-05-22 00:51:39 +00001914 sqf = seq->ob_type->tp_as_sequence;
1915 if (sqf == NULL || sqf->sq_item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 PyErr_SetString(PyExc_TypeError,
Guido van Rossum12d12c51993-10-26 17:58:25 +00001917 "2nd argument to reduce() must be a sequence object");
1918 return NULL;
1919 }
1920
Guido van Rossum79f25d91997-04-29 20:08:16 +00001921 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001922 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001923
Guido van Rossum2d951851994-08-29 12:52:16 +00001924 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001925 PyObject *op2;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001926
1927 if (args->ob_refcnt > 1) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001928 Py_DECREF(args);
1929 if ((args = PyTuple_New(2)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001930 goto Fail;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001931 }
1932
Guido van Rossum2d951851994-08-29 12:52:16 +00001933 if ((op2 = (*sqf->sq_item)(seq, i)) == NULL) {
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001934 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001935 PyErr_Clear();
Guido van Rossum2d951851994-08-29 12:52:16 +00001936 break;
1937 }
1938 goto Fail;
1939 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001940
Guido van Rossum2d951851994-08-29 12:52:16 +00001941 if (result == NULL)
1942 result = op2;
1943 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001944 PyTuple_SetItem(args, 0, result);
1945 PyTuple_SetItem(args, 1, op2);
1946 if ((result = PyEval_CallObject(func, args)) == NULL)
Guido van Rossum2d951851994-08-29 12:52:16 +00001947 goto Fail;
1948 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001949 }
1950
Guido van Rossum79f25d91997-04-29 20:08:16 +00001951 Py_DECREF(args);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001952
Guido van Rossum2d951851994-08-29 12:52:16 +00001953 if (result == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001954 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001955 "reduce of empty sequence with no initial value");
1956
Guido van Rossum12d12c51993-10-26 17:58:25 +00001957 return result;
1958
Guido van Rossum2d951851994-08-29 12:52:16 +00001959Fail:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001960 Py_XDECREF(args);
1961 Py_XDECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001962 return NULL;
1963}
1964
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001965static char reduce_doc[] =
1966"reduce(function, sequence[, initial]) -> value\n\
1967\n\
1968Apply a function of two arguments cumulatively to the items of a sequence,\n\
1969from left to right, so as to reduce the sequence to a single value.\n\
1970For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\
1971((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\
1972of the sequence in the calculation, and serves as a default when the\n\
1973sequence is empty.";
1974
1975
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001977builtin_reload(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001978 PyObject *self;
1979 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001980{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001981 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001982
Guido van Rossum79f25d91997-04-29 20:08:16 +00001983 if (!PyArg_ParseTuple(args, "O:reload", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001984 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001986}
1987
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001988static char reload_doc[] =
1989"reload(module) -> module\n\
1990\n\
1991Reload the module. The module must have been successfully imported before.";
1992
1993
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001995builtin_repr(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001996 PyObject *self;
1997 PyObject *args;
Guido van Rossumc89705d1992-11-26 08:54:07 +00001998{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001999 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002000
Guido van Rossum79f25d91997-04-29 20:08:16 +00002001 if (!PyArg_ParseTuple(args, "O:repr", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00002002 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002003 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002004}
2005
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002006static char repr_doc[] =
2007"repr(object) -> string\n\
2008\n\
2009Return the canonical string representation of the object.\n\
2010For most object types, eval(repr(object)) == object.";
2011
2012
Guido van Rossum79f25d91997-04-29 20:08:16 +00002013static PyObject *
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002014builtin_round(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002015 PyObject *self;
2016 PyObject *args;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002017{
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002018 double x;
2019 double f;
2020 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002021 int i;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002022
Guido van Rossum79f25d91997-04-29 20:08:16 +00002023 if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits))
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002024 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002025 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002026 i = abs(ndigits);
2027 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002028 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00002029 if (ndigits < 0)
2030 x /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002031 else
Guido van Rossum1e162d31998-05-09 14:42:25 +00002032 x *= f;
2033 if (x >= 0.0)
2034 x = floor(x + 0.5);
2035 else
2036 x = ceil(x - 0.5);
2037 if (ndigits < 0)
2038 x *= f;
2039 else
2040 x /= f;
2041 return PyFloat_FromDouble(x);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002042}
2043
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002044static char round_doc[] =
2045"round(number[, ndigits]) -> floating point number\n\
2046\n\
2047Round a number to a given precision in decimal digits (default 0 digits).\n\
2048This always returns a floating point number. Precision may be negative.";
2049
2050
Guido van Rossum79f25d91997-04-29 20:08:16 +00002051static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002052builtin_str(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002053 PyObject *self;
2054 PyObject *args;
Guido van Rossumc89705d1992-11-26 08:54:07 +00002055{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002056 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002057
Guido van Rossum79f25d91997-04-29 20:08:16 +00002058 if (!PyArg_ParseTuple(args, "O:str", &v))
Guido van Rossumc89705d1992-11-26 08:54:07 +00002059 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002060 return PyObject_Str(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002061}
2062
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002063static char str_doc[] =
2064"str(object) -> string\n\
2065\n\
2066Return a nice string representation of the object.\n\
2067If the argument is a string, the return value is the same object.";
2068
2069
Guido van Rossum79f25d91997-04-29 20:08:16 +00002070static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002071builtin_tuple(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072 PyObject *self;
2073 PyObject *args;
Guido van Rossumcae027b1994-08-29 12:53:11 +00002074{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002075 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002076
Guido van Rossum79f25d91997-04-29 20:08:16 +00002077 if (!PyArg_ParseTuple(args, "O:tuple", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002078 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00002079 return PySequence_Tuple(v);
Guido van Rossumcae027b1994-08-29 12:53:11 +00002080}
2081
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002082static char tuple_doc[] =
2083"tuple(sequence) -> list\n\
2084\n\
2085Return a tuple whose items are the same as those of the argument sequence.\n\
2086If the argument is a tuple, the return value is the same object.";
2087
2088
Guido van Rossum79f25d91997-04-29 20:08:16 +00002089static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002090builtin_type(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002091 PyObject *self;
2092 PyObject *args;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002093{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002094 PyObject *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002095
Guido van Rossum79f25d91997-04-29 20:08:16 +00002096 if (!PyArg_ParseTuple(args, "O:type", &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002097 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002098 v = (PyObject *)v->ob_type;
2099 Py_INCREF(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002100 return v;
2101}
2102
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002103static char type_doc[] =
2104"type(object) -> type object\n\
2105\n\
2106Return the type of the object.";
2107
2108
Guido van Rossum79f25d91997-04-29 20:08:16 +00002109static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002110builtin_vars(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002111 PyObject *self;
2112 PyObject *args;
Guido van Rossum2d951851994-08-29 12:52:16 +00002113{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002114 PyObject *v = NULL;
2115 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002116
Guido van Rossum79f25d91997-04-29 20:08:16 +00002117 if (!PyArg_ParseTuple(args, "|O:vars", &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002118 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00002119 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002120 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002121 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002122 if (!PyErr_Occurred())
2123 PyErr_SetString(PyExc_SystemError,
2124 "no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00002125 }
2126 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00002127 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00002128 }
2129 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002130 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00002131 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002132 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00002133 "vars() argument must have __dict__ attribute");
2134 return NULL;
2135 }
2136 }
2137 return d;
2138}
2139
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002140static char vars_doc[] =
2141"vars([object]) -> dictionary\n\
2142\n\
2143Without arguments, equivalent to locals().\n\
2144With an argument, equivalent to object.__dict__.";
2145
Guido van Rossum668213d1999-06-16 17:28:37 +00002146static int
2147abstract_issubclass(derived, cls, err, first)
2148 PyObject *derived;
2149 PyObject *cls;
2150 char *err;
2151 int first;
2152{
2153 static PyObject *__bases__ = NULL;
2154 PyObject *bases;
Guido van Rossum7f851861999-06-17 19:12:39 +00002155 int i, n;
Guido van Rossum668213d1999-06-16 17:28:37 +00002156 int r = 0;
2157
2158 if (__bases__ == NULL) {
2159 __bases__ = PyString_FromString("__bases__");
2160 if (__bases__ == NULL)
2161 return -1;
2162 }
2163
2164 if (first) {
2165 bases = PyObject_GetAttr(cls, __bases__);
2166 if (bases == NULL || !PyTuple_Check(bases)) {
2167 Py_XDECREF(bases);
2168 PyErr_SetString(PyExc_TypeError, err);
2169 return -1;
2170 }
2171 Py_DECREF(bases);
2172 }
2173
2174 if (derived == cls)
2175 return 1;
2176
2177 bases = PyObject_GetAttr(derived, __bases__);
2178 if (bases == NULL || !PyTuple_Check(bases)) {
2179 Py_XDECREF(bases);
2180 PyErr_SetString(PyExc_TypeError, err);
2181 return -1;
2182 }
2183
2184 n = PyTuple_GET_SIZE(bases);
2185 for (i = 0; i < n; i++) {
2186 r = abstract_issubclass(PyTuple_GET_ITEM(bases, i),
2187 cls, err, 0);
2188 if (r != 0)
2189 break;
2190 }
2191
2192 Py_DECREF(bases);
2193
2194 return r;
2195}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002196
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002197static PyObject *
2198builtin_isinstance(self, args)
2199 PyObject *self;
2200 PyObject *args;
2201{
2202 PyObject *inst;
2203 PyObject *cls;
Guido van Rossum668213d1999-06-16 17:28:37 +00002204 PyObject *icls;
2205 static PyObject *__class__ = NULL;
2206 int retval = 0;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002207
Guido van Rossum43713e52000-02-29 13:59:29 +00002208 if (!PyArg_ParseTuple(args, "OO:isinstance", &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002209 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002210
Guido van Rossum668213d1999-06-16 17:28:37 +00002211 if (PyClass_Check(cls)) {
2212 if (PyInstance_Check(inst)) {
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002213 PyObject *inclass =
2214 (PyObject*)((PyInstanceObject*)inst)->in_class;
2215 retval = PyClass_IsSubclass(inclass, cls);
2216 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002217 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002218 else if (PyType_Check(cls)) {
2219 retval = ((PyObject *)(inst->ob_type) == cls);
2220 }
2221 else if (!PyInstance_Check(inst)) {
2222 if (__class__ == NULL) {
2223 __class__ = PyString_FromString("__class__");
2224 if (__class__ == NULL)
2225 return NULL;
2226 }
2227 icls = PyObject_GetAttr(inst, __class__);
2228 if (icls != NULL) {
2229 retval = abstract_issubclass(
2230 icls, cls,
2231 "second argument must be a class",
2232 1);
2233 Py_DECREF(icls);
2234 if (retval < 0)
2235 return NULL;
2236 }
2237 else {
2238 PyErr_SetString(PyExc_TypeError,
2239 "second argument must be a class");
2240 return NULL;
2241 }
2242 }
2243 else {
2244 PyErr_SetString(PyExc_TypeError,
2245 "second argument must be a class");
2246 return NULL;
2247 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002248 return PyInt_FromLong(retval);
2249}
2250
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002251static char isinstance_doc[] =
2252"isinstance(object, class-or-type) -> Boolean\n\
2253\n\
2254Return whether an object is an instance of a class or of a subclass thereof.\n\
2255With a type as second argument, return whether that is the object's type.";
2256
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002257
2258static PyObject *
2259builtin_issubclass(self, args)
2260 PyObject *self;
2261 PyObject *args;
2262{
2263 PyObject *derived;
2264 PyObject *cls;
2265 int retval;
2266
Guido van Rossum43713e52000-02-29 13:59:29 +00002267 if (!PyArg_ParseTuple(args, "OO:issubclass", &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002268 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002269
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002270 if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
Guido van Rossum668213d1999-06-16 17:28:37 +00002271 retval = abstract_issubclass(
2272 derived, cls, "arguments must be classes", 1);
2273 if (retval < 0)
2274 return NULL;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002275 }
Guido van Rossum668213d1999-06-16 17:28:37 +00002276 else {
2277 /* shortcut */
2278 if (!(retval = (derived == cls)))
2279 retval = PyClass_IsSubclass(derived, cls);
2280 }
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002281
2282 return PyInt_FromLong(retval);
2283}
2284
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002285static char issubclass_doc[] =
2286"issubclass(C, B) -> Boolean\n\
2287\n\
2288Return whether class C is a subclass (i.e., a derived class) of class B.";
2289
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002290
Guido van Rossum79f25d91997-04-29 20:08:16 +00002291static PyMethodDef builtin_methods[] = {
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002292 {"__import__", builtin___import__, 1, import_doc},
2293 {"abs", builtin_abs, 1, abs_doc},
2294 {"apply", builtin_apply, 1, apply_doc},
Guido van Rossum0daf0221999-03-19 19:07:19 +00002295 {"buffer", builtin_buffer, 1, buffer_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002296 {"callable", builtin_callable, 1, callable_doc},
2297 {"chr", builtin_chr, 1, chr_doc},
2298 {"cmp", builtin_cmp, 1, cmp_doc},
2299 {"coerce", builtin_coerce, 1, coerce_doc},
2300 {"compile", builtin_compile, 1, compile_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002301#ifndef WITHOUT_COMPLEX
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002302 {"complex", builtin_complex, 1, complex_doc},
Guido van Rossum8a5c5d21996-01-12 01:09:56 +00002303#endif
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002304 {"delattr", builtin_delattr, 1, delattr_doc},
2305 {"dir", builtin_dir, 1, dir_doc},
2306 {"divmod", builtin_divmod, 1, divmod_doc},
2307 {"eval", builtin_eval, 1, eval_doc},
2308 {"execfile", builtin_execfile, 1, execfile_doc},
2309 {"filter", builtin_filter, 1, filter_doc},
2310 {"float", builtin_float, 1, float_doc},
2311 {"getattr", builtin_getattr, 1, getattr_doc},
2312 {"globals", builtin_globals, 1, globals_doc},
2313 {"hasattr", builtin_hasattr, 1, hasattr_doc},
2314 {"hash", builtin_hash, 1, hash_doc},
2315 {"hex", builtin_hex, 1, hex_doc},
2316 {"id", builtin_id, 1, id_doc},
2317 {"input", builtin_input, 1, input_doc},
2318 {"intern", builtin_intern, 1, intern_doc},
2319 {"int", builtin_int, 1, int_doc},
2320 {"isinstance", builtin_isinstance, 1, isinstance_doc},
2321 {"issubclass", builtin_issubclass, 1, issubclass_doc},
2322 {"len", builtin_len, 1, len_doc},
2323 {"list", builtin_list, 1, list_doc},
2324 {"locals", builtin_locals, 1, locals_doc},
2325 {"long", builtin_long, 1, long_doc},
2326 {"map", builtin_map, 1, map_doc},
2327 {"max", builtin_max, 1, max_doc},
2328 {"min", builtin_min, 1, min_doc},
2329 {"oct", builtin_oct, 1, oct_doc},
2330 {"open", builtin_open, 1, open_doc},
2331 {"ord", builtin_ord, 1, ord_doc},
2332 {"pow", builtin_pow, 1, pow_doc},
2333 {"range", builtin_range, 1, range_doc},
2334 {"raw_input", builtin_raw_input, 1, raw_input_doc},
2335 {"reduce", builtin_reduce, 1, reduce_doc},
2336 {"reload", builtin_reload, 1, reload_doc},
2337 {"repr", builtin_repr, 1, repr_doc},
2338 {"round", builtin_round, 1, round_doc},
2339 {"setattr", builtin_setattr, 1, setattr_doc},
2340 {"slice", builtin_slice, 1, slice_doc},
2341 {"str", builtin_str, 1, str_doc},
2342 {"tuple", builtin_tuple, 1, tuple_doc},
2343 {"type", builtin_type, 1, type_doc},
Guido van Rossum09095f32000-03-10 23:00:52 +00002344 {"unicode", builtin_unicode, 1, unicode_doc},
2345 {"unichr", builtin_unichr, 1, unichr_doc},
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002346 {"vars", builtin_vars, 1, vars_doc},
2347 {"xrange", builtin_xrange, 1, xrange_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002348 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002349};
2350
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002351static char builtin_doc[] =
2352"Built-in functions, exceptions, and other objects.\n\
2353\n\
2354Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.";
2355
Guido van Rossum25ce5661997-08-02 03:10:38 +00002356PyObject *
Barry Warsaw78e6c672000-05-25 23:15:05 +00002357_PyBuiltin_Init()
Guido van Rossum25ce5661997-08-02 03:10:38 +00002358{
Fred Drake5550de32000-06-20 04:54:19 +00002359 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002360 mod = Py_InitModule4("__builtin__", builtin_methods,
2361 builtin_doc, (PyObject *)NULL,
2362 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002363 if (mod == NULL)
2364 return NULL;
2365 dict = PyModule_GetDict(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002366 if (PyDict_SetItemString(dict, "None", Py_None) < 0)
2367 return NULL;
2368 if (PyDict_SetItemString(dict, "Ellipsis", Py_Ellipsis) < 0)
2369 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002370 debug = PyInt_FromLong(Py_OptimizeFlag == 0);
2371 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2372 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002373 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002374 }
2375 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002376
Guido van Rossum25ce5661997-08-02 03:10:38 +00002377 return mod;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002378}
2379
Guido van Rossume77a7571993-11-03 15:01:26 +00002380/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002381
Guido van Rossum79f25d91997-04-29 20:08:16 +00002382static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +00002383filtertuple(func, tuple)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002384 PyObject *func;
2385 PyObject *tuple;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002386{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002387 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002388 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002389 int len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002390
Guido van Rossumb7b45621995-08-04 04:07:45 +00002391 if (len == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002392 Py_INCREF(tuple);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002393 return tuple;
2394 }
2395
Guido van Rossum79f25d91997-04-29 20:08:16 +00002396 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002397 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002398
Guido van Rossum12d12c51993-10-26 17:58:25 +00002399 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002400 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002401 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002402
Guido van Rossum79f25d91997-04-29 20:08:16 +00002403 if ((item = PyTuple_GetItem(tuple, i)) == NULL)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002404 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002405 if (func == Py_None) {
2406 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002407 good = item;
2408 }
2409 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002410 PyObject *arg = Py_BuildValue("(O)", item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002411 if (arg == NULL)
2412 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002413 good = PyEval_CallObject(func, arg);
2414 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002415 if (good == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002416 goto Fail_1;
2417 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002418 ok = PyObject_IsTrue(good);
2419 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002420 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002421 Py_INCREF(item);
2422 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002423 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002424 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002425 }
2426
Guido van Rossum79f25d91997-04-29 20:08:16 +00002427 if (_PyTuple_Resize(&result, j, 0) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002428 return NULL;
2429
Guido van Rossum12d12c51993-10-26 17:58:25 +00002430 return result;
2431
Guido van Rossum12d12c51993-10-26 17:58:25 +00002432Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002433 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002434 return NULL;
2435}
2436
2437
Guido van Rossume77a7571993-11-03 15:01:26 +00002438/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002439
Guido van Rossum79f25d91997-04-29 20:08:16 +00002440static PyObject *
Guido van Rossum12d12c51993-10-26 17:58:25 +00002441filterstring(func, strobj)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002442 PyObject *func;
2443 PyObject *strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002444{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002445 PyObject *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002446 register int i, j;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002447 int len = PyString_Size(strobj);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002448
Guido van Rossum79f25d91997-04-29 20:08:16 +00002449 if (func == Py_None) {
Guido van Rossum2586bf01993-11-01 16:21:44 +00002450 /* No character is ever false -- share input string */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002451 Py_INCREF(strobj);
Guido van Rossum2d951851994-08-29 12:52:16 +00002452 return strobj;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002453 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002454 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002455 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002456
Guido van Rossum12d12c51993-10-26 17:58:25 +00002457 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002458 PyObject *item, *arg, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002459 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002460
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002461 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2462 if (item == NULL)
2463 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002464 arg = Py_BuildValue("(O)", item);
2465 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002466 if (arg == NULL)
2467 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002468 good = PyEval_CallObject(func, arg);
2469 Py_DECREF(arg);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002470 if (good == NULL)
2471 goto Fail_1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002472 ok = PyObject_IsTrue(good);
2473 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002474 if (ok)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002475 PyString_AS_STRING((PyStringObject *)result)[j++] =
2476 PyString_AS_STRING((PyStringObject *)item)[0];
Guido van Rossum12d12c51993-10-26 17:58:25 +00002477 }
2478
Guido van Rossum79f25d91997-04-29 20:08:16 +00002479 if (j < len && _PyString_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002480 return NULL;
2481
Guido van Rossum12d12c51993-10-26 17:58:25 +00002482 return result;
2483
Guido van Rossum12d12c51993-10-26 17:58:25 +00002484Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002485 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002486 return NULL;
2487}