blob: a2e48b1d9cc8c8b0503c4d5796f136be24bdd975 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Guido van Rossume2ae77b2001-10-24 20:42:55 +000011#ifdef RISCOS
12#include "unixstuff.h"
13#endif
14
Mark Hammond26cffde2001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
17*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde2001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Mark Hammond26cffde2001-05-14 12:17:34 +000022#else
23const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
24#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000025
Guido van Rossum12d12c51993-10-26 17:58:25 +000026/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000027static PyObject *filterstring(PyObject *, PyObject *);
Martin v. Löwis8afd7572003-01-25 22:46:11 +000028static PyObject *filterunicode(PyObject *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000029static PyObject *filtertuple (PyObject *, PyObject *);
Guido van Rossum12d12c51993-10-26 17:58:25 +000030
Guido van Rossum79f25d91997-04-29 20:08:16 +000031static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000032builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
33{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000034 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
35 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000036 Py_ssize_t nargs, nbases;
37
38 assert(args != NULL);
39 if (!PyTuple_Check(args)) {
40 PyErr_SetString(PyExc_TypeError,
41 "__build_class__: args is not a tuple");
42 return NULL;
43 }
44 nargs = PyTuple_GET_SIZE(args);
45 if (nargs < 2) {
46 PyErr_SetString(PyExc_TypeError,
47 "__build_class__: not enough arguments");
48 return NULL;
49 }
50 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
51 name = PyTuple_GET_ITEM(args, 1);
Martin v. Löwis5b222132007-06-10 09:51:05 +000052 if ((!PyString_Check(name) && !PyUnicode_Check(name))) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000053 PyErr_SetString(PyExc_TypeError,
54 "__build_class__: name is not a string");
55 return NULL;
56 }
57 bases = PyTuple_GetSlice(args, 2, nargs);
58 if (bases == NULL)
59 return NULL;
60 nbases = nargs - 2;
61
62 if (kwds == NULL) {
63 meta = NULL;
64 mkw = NULL;
65 }
66 else {
67 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
68 if (mkw == NULL) {
69 Py_DECREF(bases);
70 return NULL;
71 }
72 meta = PyDict_GetItemString(mkw, "metaclass");
73 if (meta != NULL) {
74 Py_INCREF(meta);
75 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
76 Py_DECREF(meta);
77 Py_DECREF(mkw);
78 Py_DECREF(bases);
79 return NULL;
80 }
81 }
82 }
83 if (meta == NULL) {
84 if (PyTuple_GET_SIZE(bases) == 0)
85 meta = (PyObject *) (&PyType_Type);
86 else {
87 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
88 meta = (PyObject *) (base0->ob_type);
89 }
90 Py_INCREF(meta);
91 }
92 prep = PyObject_GetAttrString(meta, "__prepare__");
93 if (prep == NULL) {
94 PyErr_Clear();
95 ns = PyDict_New();
96 }
97 else {
98 PyObject *pargs = Py_BuildValue("OO", name, bases);
99 if (pargs == NULL) {
100 Py_DECREF(prep);
101 Py_DECREF(meta);
102 Py_XDECREF(mkw);
103 Py_DECREF(bases);
104 return NULL;
105 }
106 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
107 Py_DECREF(pargs);
108 Py_DECREF(prep);
109 if (ns == NULL) {
110 Py_DECREF(meta);
111 Py_XDECREF(mkw);
112 Py_DECREF(bases);
113 return NULL;
114 }
115 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000116 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
117 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000118 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000119 margs = Py_BuildValue("OOO", name, bases, ns);
120 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000121 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000122 Py_DECREF(margs);
123 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000124 if (cls != NULL && PyCell_Check(cell)) {
125 Py_INCREF(cls);
126 PyCell_SET(cell, cls);
127 }
128 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000129 }
130 Py_DECREF(ns);
131 Py_DECREF(meta);
132 Py_XDECREF(mkw);
133 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000134 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000135}
136
137PyDoc_STRVAR(build_class_doc,
138"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
139\n\
140Internal helper function used by the class statement.");
141
142static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000143builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000144{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000145 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
146 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000147 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000148 PyObject *globals = NULL;
149 PyObject *locals = NULL;
150 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000151 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000152
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000153 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
154 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000155 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000156 return PyImport_ImportModuleLevel(name, globals, locals,
157 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000158}
159
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000160PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000161"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000162\n\
163Import a module. The globals are only used to determine the context;\n\
164they are not modified. The locals are currently unused. The fromlist\n\
165should be a list of names to emulate ``from name import ...'', or an\n\
166empty list to emulate ``import name''.\n\
167When importing a module from a package, note that __import__('A.B', ...)\n\
168returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000169fromlist is not empty. Level is used to determine whether to perform \n\
170absolute or relative imports. -1 is the original strategy of attempting\n\
171both absolute and relative imports, 0 is absolute, a positive number\n\
172is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000173
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000174
Guido van Rossum79f25d91997-04-29 20:08:16 +0000175static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000176builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000177{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000178 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000179}
180
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000181PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000182"abs(number) -> number\n\
183\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000184Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000185
Raymond Hettinger96229b12005-03-11 06:49:40 +0000186static PyObject *
187builtin_all(PyObject *self, PyObject *v)
188{
189 PyObject *it, *item;
190
191 it = PyObject_GetIter(v);
192 if (it == NULL)
193 return NULL;
194
195 while ((item = PyIter_Next(it)) != NULL) {
196 int cmp = PyObject_IsTrue(item);
197 Py_DECREF(item);
198 if (cmp < 0) {
199 Py_DECREF(it);
200 return NULL;
201 }
202 if (cmp == 0) {
203 Py_DECREF(it);
204 Py_RETURN_FALSE;
205 }
206 }
207 Py_DECREF(it);
208 if (PyErr_Occurred())
209 return NULL;
210 Py_RETURN_TRUE;
211}
212
213PyDoc_STRVAR(all_doc,
214"all(iterable) -> bool\n\
215\n\
216Return True if bool(x) is True for all values x in the iterable.");
217
218static PyObject *
219builtin_any(PyObject *self, PyObject *v)
220{
221 PyObject *it, *item;
222
223 it = PyObject_GetIter(v);
224 if (it == NULL)
225 return NULL;
226
227 while ((item = PyIter_Next(it)) != NULL) {
228 int cmp = PyObject_IsTrue(item);
229 Py_DECREF(item);
230 if (cmp < 0) {
231 Py_DECREF(it);
232 return NULL;
233 }
234 if (cmp == 1) {
235 Py_DECREF(it);
236 Py_RETURN_TRUE;
237 }
238 }
239 Py_DECREF(it);
240 if (PyErr_Occurred())
241 return NULL;
242 Py_RETURN_FALSE;
243}
244
245PyDoc_STRVAR(any_doc,
246"any(iterable) -> bool\n\
247\n\
248Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000249
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000250
Guido van Rossum79f25d91997-04-29 20:08:16 +0000251static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000252builtin_bin(PyObject *self, PyObject *v)
253{
254 return PyNumber_ToBase(v, 2);
255}
256
257PyDoc_STRVAR(bin_doc,
258"bin(number) -> string\n\
259\n\
260Return the binary representation of an integer or long integer.");
261
262
263static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000264builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000265{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000266 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000267 Py_ssize_t len; /* guess for result list size */
268 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000269
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000270 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000271 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000272
Tim Peters0e57abf2001-05-02 07:39:38 +0000273 /* Strings and tuples return a result of the same type. */
274 if (PyString_Check(seq))
275 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000276 if (PyUnicode_Check(seq))
277 return filterunicode(func, seq);
Tim Peters0e57abf2001-05-02 07:39:38 +0000278 if (PyTuple_Check(seq))
279 return filtertuple(func, seq);
280
Georg Brandle35b6572005-07-19 22:20:20 +0000281 /* Pre-allocate argument list tuple. */
282 arg = PyTuple_New(1);
283 if (arg == NULL)
284 return NULL;
285
Tim Peters0e57abf2001-05-02 07:39:38 +0000286 /* Get iterator. */
287 it = PyObject_GetIter(seq);
288 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000289 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000290
291 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000292 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000293 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000294 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
295 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
296 goto Fail_it;
297 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000298 PyErr_Clear();
299 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000300 }
301
Tim Peters0e57abf2001-05-02 07:39:38 +0000302 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000303 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000304 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000305 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000306 result = seq;
307 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000308 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000309 result = PyList_New(len);
310 if (result == NULL)
311 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000312 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000313
Tim Peters0e57abf2001-05-02 07:39:38 +0000314 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000315 j = 0;
316 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000317 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000318 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000319
Tim Peters0e57abf2001-05-02 07:39:38 +0000320 item = PyIter_Next(it);
321 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000322 if (PyErr_Occurred())
323 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000324 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000325 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000326
Neil Schemenauer68973552003-08-14 20:37:34 +0000327 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000328 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000329 }
330 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000331 PyObject *good;
332 PyTuple_SET_ITEM(arg, 0, item);
333 good = PyObject_Call(func, arg, NULL);
334 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000335 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000336 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000337 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000338 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000339 ok = PyObject_IsTrue(good);
340 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000341 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000342 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000343 if (j < len)
344 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000345 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000346 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000347 Py_DECREF(item);
348 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000349 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000350 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000351 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000352 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000353 else
354 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000355 }
356
Guido van Rossum12d12c51993-10-26 17:58:25 +0000357
Tim Peters0e57abf2001-05-02 07:39:38 +0000358 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000359 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000360 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000361
Tim Peters3c6b1482001-05-21 08:07:05 +0000362 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000363 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000364 return result;
365
Tim Peters0e57abf2001-05-02 07:39:38 +0000366Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000367 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000368Fail_it:
369 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000370Fail_arg:
371 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000372 return NULL;
373}
374
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000375PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000376"filter(function or None, sequence) -> list, tuple, or string\n"
377"\n"
378"Return those items of sequence for which function(item) is true. If\n"
379"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000380"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000381
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000382
Guido van Rossum79f25d91997-04-29 20:08:16 +0000383static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000384builtin_chr8(PyObject *self, PyObject *args)
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000385{
386 long x;
387 char s[1];
388
389 if (!PyArg_ParseTuple(args, "l:chr8", &x))
390 return NULL;
391 if (x < 0 || x >= 256) {
392 PyErr_SetString(PyExc_ValueError,
393 "chr8() arg not in range(256)");
394 return NULL;
395 }
396 s[0] = (char)x;
397 return PyString_FromStringAndSize(s, 1);
398}
399
Walter Dörwalde7efd592007-06-05 20:07:21 +0000400PyDoc_STRVAR(chr8_doc,
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000401"chr8(i) -> 8-bit character\n\
402\n\
403Return a string of one character with ordinal i; 0 <= i < 256.");
404
405
406static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000407builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000408{
409 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000410
Walter Dörwalde7efd592007-06-05 20:07:21 +0000411 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000412 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000413
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000414 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000415}
416
Walter Dörwalde7efd592007-06-05 20:07:21 +0000417PyDoc_STRVAR(chr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000418"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000419\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000420Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Guido van Rossum09095f32000-03-10 23:00:52 +0000421
422
423static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000424builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000425{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000426 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000427 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000428
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000429 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000430 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000431 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000432 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000433 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000434}
435
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000436PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000437"cmp(x, y) -> integer\n\
438\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000439Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000440
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000441
442static char *
443source_as_string(PyObject *cmd)
444{
445 char *str;
446 Py_ssize_t size;
447
448 if (!PyObject_CheckReadBuffer(cmd) &&
449 !PyUnicode_Check(cmd)) {
450 PyErr_SetString(PyExc_TypeError,
451 "eval()/exec() arg 1 must be a string, bytes or code object");
452 return NULL;
453 }
454
455 if (PyUnicode_Check(cmd)) {
456 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
457 if (cmd == NULL)
458 return NULL;
459 }
460 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
461 return NULL;
462 }
463 if (strlen(str) != size) {
464 PyErr_SetString(PyExc_TypeError,
465 "source code string cannot contain null bytes");
466 return NULL;
467 }
468 return str;
469}
470
Guido van Rossum79f25d91997-04-29 20:08:16 +0000471static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000472builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000473{
474 char *str;
475 char *filename;
476 char *startstr;
477 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000478 int dont_inherit = 0;
479 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000480 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000481 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000482 static char *kwlist[] = {"source", "filename", "mode", "flags",
483 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000484
Guido van Rossumd8faa362007-04-27 19:54:29 +0000485 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
486 kwlist, &cmd, &filename, &startstr,
487 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000488 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000489
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000490 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000491
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000492 str = source_as_string(cmd);
493 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000494 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000495
Guido van Rossum5b722181993-03-30 17:46:03 +0000496 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000497 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000498 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000499 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000500 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000501 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000502 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000504 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000505 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000506 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000507
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000508 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000509 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000510 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000511 PyErr_SetString(PyExc_ValueError,
512 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000513 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000514 }
515 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
516
Tim Peters6cd6a822001-08-17 22:11:27 +0000517 if (!dont_inherit) {
518 PyEval_MergeCompilerFlags(&cf);
519 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000520 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000521}
522
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000523PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000524"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000525\n\
526Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000527into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000528The filename will be used for run-time error messages.\n\
529The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000530single (interactive) statement, or 'eval' to compile an expression.\n\
531The flags argument, if present, controls which future statements influence\n\
532the compilation of the code.\n\
533The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
534the effects of any future statements in effect in the code calling\n\
535compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000536in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000537
Guido van Rossum79f25d91997-04-29 20:08:16 +0000538static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000539builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000540{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000541 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000542
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000543 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000544 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000545 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000546}
547
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000548PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000549"dir([object]) -> list of strings\n"
550"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000551"If called without an argument, return the names in the current scope.\n"
552"Else, return an alphabetized list of names comprising (some of) the attributes\n"
553"of the given object, and of attributes reachable from it.\n"
554"If the object supplies a method named __dir__, it will be used; otherwise\n"
555"the default dir() logic is used and returns:\n"
556" for a module object: the module's attributes.\n"
557" for a class object: its attributes, and recursively the attributes\n"
558" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000559" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000560" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000561
Guido van Rossum79f25d91997-04-29 20:08:16 +0000562static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000563builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000564{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000565 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000566
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000567 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000568 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000569 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000570}
571
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000572PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000573"divmod(x, y) -> (div, mod)\n\
574\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000575Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000576
577
Guido van Rossum79f25d91997-04-29 20:08:16 +0000578static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000579builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000580{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000581 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000582 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000583 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000584 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000585
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000586 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000587 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000588 if (locals != Py_None && !PyMapping_Check(locals)) {
589 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000590 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000591 }
592 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000593 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000594 "globals must be a real dict; try eval(expr, {}, mapping)"
595 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000596 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000597 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598 if (globals == Py_None) {
599 globals = PyEval_GetGlobals();
600 if (locals == Py_None)
601 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000602 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000604 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000605
Georg Brandl77c85e62005-09-15 10:46:13 +0000606 if (globals == NULL || locals == NULL) {
607 PyErr_SetString(PyExc_TypeError,
608 "eval must be given globals and locals "
609 "when called without a frame");
610 return NULL;
611 }
612
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
614 if (PyDict_SetItemString(globals, "__builtins__",
615 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000616 return NULL;
617 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000618
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000619 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000620 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000621 PyErr_SetString(PyExc_TypeError,
622 "code object passed to eval() may not contain free variables");
623 return NULL;
624 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000625 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000626 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000627
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000628 str = source_as_string(cmd);
629 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000630 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000631
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000632 while (*str == ' ' || *str == '\t')
633 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000634
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000635 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000636 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000637 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
638 Py_XDECREF(tmp);
639 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000640}
641
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000642PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000643"eval(source[, globals[, locals]]) -> value\n\
644\n\
645Evaluate the source in the context of globals and locals.\n\
646The source may be a string representing a Python expression\n\
647or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000648The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000649defaulting to the current globals and locals.\n\
650If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000651
Georg Brandl7cae87c2006-09-06 06:51:57 +0000652static PyObject *
653builtin_exec(PyObject *self, PyObject *args)
654{
655 PyObject *v;
656 PyObject *prog, *globals = Py_None, *locals = Py_None;
657 int plain = 0;
658
659 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
660 return NULL;
661
662 if (globals == Py_None) {
663 globals = PyEval_GetGlobals();
664 if (locals == Py_None) {
665 locals = PyEval_GetLocals();
666 plain = 1;
667 }
668 if (!globals || !locals) {
669 PyErr_SetString(PyExc_SystemError,
670 "globals and locals cannot be NULL");
671 return NULL;
672 }
673 }
674 else if (locals == Py_None)
675 locals = globals;
676 if (!PyString_Check(prog) &&
677 !PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000678 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000679 PyErr_Format(PyExc_TypeError,
680 "exec() arg 1 must be a string, file, or code "
681 "object, not %.100s", prog->ob_type->tp_name);
682 return NULL;
683 }
684 if (!PyDict_Check(globals)) {
685 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
686 globals->ob_type->tp_name);
687 return NULL;
688 }
689 if (!PyMapping_Check(locals)) {
690 PyErr_Format(PyExc_TypeError,
691 "arg 3 must be a mapping or None, not %.100s",
692 locals->ob_type->tp_name);
693 return NULL;
694 }
695 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
696 if (PyDict_SetItemString(globals, "__builtins__",
697 PyEval_GetBuiltins()) != 0)
698 return NULL;
699 }
700
701 if (PyCode_Check(prog)) {
702 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
703 PyErr_SetString(PyExc_TypeError,
704 "code object passed to exec() may not "
705 "contain free variables");
706 return NULL;
707 }
708 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
709 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000710 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000711 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000712 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000713 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000714 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000715 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716 if (PyEval_MergeCompilerFlags(&cf))
717 v = PyRun_StringFlags(str, Py_file_input, globals,
718 locals, &cf);
719 else
720 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000721 }
722 if (v == NULL)
723 return NULL;
724 Py_DECREF(v);
725 Py_RETURN_NONE;
726}
727
728PyDoc_STRVAR(exec_doc,
729"exec(object[, globals[, locals]])\n\
730\n\
731Read and execute code from a object, which can be a string, a code\n\
732object or a file object.\n\
733The globals and locals are dictionaries, defaulting to the current\n\
734globals and locals. If only globals is given, locals defaults to it.");
735
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000736
Guido van Rossum79f25d91997-04-29 20:08:16 +0000737static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000738builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000739{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000740 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000741 PyObject *globals = Py_None, *locals = Py_None;
742 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000743 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000744 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000745 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000747 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000748 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000749 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000750 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000751 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000752 if (locals != Py_None && !PyMapping_Check(locals)) {
753 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
754 return NULL;
755 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000756 if (globals == Py_None) {
757 globals = PyEval_GetGlobals();
758 if (locals == Py_None)
759 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000760 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000761 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000762 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
764 if (PyDict_SetItemString(globals, "__builtins__",
765 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000766 return NULL;
767 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000768
769 exists = 0;
770 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000771#if defined(PLAN9)
772 {
773 Dir *d;
774
775 if ((d = dirstat(filename))!=nil) {
776 if(d->mode & DMDIR)
777 werrstr("is a directory");
778 else
779 exists = 1;
780 free(d);
781 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000782 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000783#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000784 if (object_exists(filename)) {
785 if (isdir(filename))
786 errno = EISDIR;
787 else
788 exists = 1;
789 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000790#else /* standard Posix */
791 {
792 struct stat s;
793 if (stat(filename, &s) == 0) {
794 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000795# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000796 errno = EOS2ERR;
797# else
798 errno = EISDIR;
799# endif
800 else
801 exists = 1;
802 }
803 }
804#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000805
806 if (exists) {
807 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000808 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000809 Py_END_ALLOW_THREADS
810
811 if (fp == NULL) {
812 exists = 0;
813 }
814 }
815
816 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000817 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000818 return NULL;
819 }
Tim Peters5ba58662001-07-16 02:29:45 +0000820 cf.cf_flags = 0;
821 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000822 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000823 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000824 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000825 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000826 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000827 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000828}
829
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000830PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000831"execfile(filename[, globals[, locals]])\n\
832\n\
833Read and execute a Python script from a file.\n\
834The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000835globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000836
837
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000839builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000840{
Martin v. Löwis5b222132007-06-10 09:51:05 +0000841 PyObject *v, *result, *dflt = NULL, *release = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000844 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000845 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000846
847 if (PyString_Check(name)) {
848 release = PyString_AsDecodedObject(name, NULL, NULL);
849 if (!release)
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000850 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000851 name = release;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000852 }
853
Martin v. Löwis5b222132007-06-10 09:51:05 +0000854 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000855 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000856 "getattr(): attribute name must be string");
Martin v. Löwis5b222132007-06-10 09:51:05 +0000857 Py_XDECREF(release);
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000858 return NULL;
859 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000860 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000861 if (result == NULL && dflt != NULL &&
862 PyErr_ExceptionMatches(PyExc_AttributeError))
863 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000864 PyErr_Clear();
865 Py_INCREF(dflt);
866 result = dflt;
867 }
Martin v. Löwis5b222132007-06-10 09:51:05 +0000868 Py_XDECREF(release);
Guido van Rossum950ff291998-06-29 13:38:57 +0000869 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000870}
871
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000872PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000873"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000874\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000875Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
876When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000877exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000878
879
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000881builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000882{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000884
Guido van Rossum79f25d91997-04-29 20:08:16 +0000885 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000886 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000887 return d;
888}
889
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000890PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000891"globals() -> dictionary\n\
892\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000893Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000894
895
Guido van Rossum79f25d91997-04-29 20:08:16 +0000896static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000897builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000898{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 PyObject *v;
900 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000901
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000902 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000903 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000904 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000905 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000906 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000907 return NULL;
908 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000910 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000912 Py_INCREF(Py_False);
913 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000914 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000915 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000916 Py_INCREF(Py_True);
917 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000918}
919
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000921"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922\n\
923Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000924(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000925
926
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000928builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000929{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000930 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000931}
932
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000933PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000934"id(object) -> integer\n\
935\n\
936Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000937simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000938
939
Guido van Rossum79f25d91997-04-29 20:08:16 +0000940static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000941builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000942{
943 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000944 PyObject *it; /* the iterator object */
945 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000946 } sequence;
947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000949 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000950 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000951 register int i, j;
952
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000954 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 PyErr_SetString(PyExc_TypeError,
956 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000957 return NULL;
958 }
959
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000961 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000962
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000963 if (func == Py_None && n == 1) {
964 /* map(None, S) is the same as list(S). */
965 return PySequence_List(PyTuple_GetItem(args, 1));
966 }
967
Tim Peters4e9afdc2001-05-03 23:54:49 +0000968 /* Get space for sequence descriptors. Must NULL out the iterator
969 * pointers so that jumping to Fail_2 later doesn't see trash.
970 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
972 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000973 return NULL;
974 }
975 for (i = 0; i < n; ++i) {
976 seqs[i].it = (PyObject*)NULL;
977 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000978 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000979
Tim Peters4e9afdc2001-05-03 23:54:49 +0000980 /* Do a first pass to obtain iterators for the arguments, and set len
981 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000982 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000983 len = 0;
984 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
985 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000986 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000987
Tim Peters4e9afdc2001-05-03 23:54:49 +0000988 /* Get iterator. */
989 curseq = PyTuple_GetItem(args, i+1);
990 sqp->it = PyObject_GetIter(curseq);
991 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000992 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000993 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000994 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000995 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000997 goto Fail_2;
998 }
999
Tim Peters4e9afdc2001-05-03 23:54:49 +00001000 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +00001001 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001002 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001003 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1004 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1005 goto Fail_2;
1006 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001007 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001008 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001009 }
1010 if (curlen > len)
1011 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001012 }
1013
Tim Peters4e9afdc2001-05-03 23:54:49 +00001014 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001015 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001016 goto Fail_2;
1017
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001019 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001020 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001021 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001022
Guido van Rossum79f25d91997-04-29 20:08:16 +00001023 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001024 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001025 else if ((alist = PyTuple_New(n)) == NULL)
1026 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001027
1028 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001029 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001030 Py_INCREF(Py_None);
1031 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001032 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001033 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001034 item = PyIter_Next(sqp->it);
1035 if (item)
1036 ++numactive;
1037 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001038 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001039 Py_XDECREF(alist);
1040 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001041 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001042 Py_INCREF(Py_None);
1043 item = Py_None;
1044 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001045 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001046 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001047 if (alist)
1048 PyTuple_SET_ITEM(alist, j, item);
1049 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001050 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001051 }
1052
Guido van Rossum32120311995-07-10 13:52:21 +00001053 if (!alist)
1054 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001055
Tim Peters4e9afdc2001-05-03 23:54:49 +00001056 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001058 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001060
Guido van Rossum79f25d91997-04-29 20:08:16 +00001061 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001062 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001063 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064 value = PyEval_CallObject(func, alist);
1065 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001066 if (value == NULL)
1067 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001068 }
1069 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001070 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001071 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001072 if (status < 0)
1073 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001074 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001075 else if (PyList_SetItem(result, i, value) < 0)
1076 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001077 }
1078
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001079 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1080 goto Fail_1;
1081
Tim Peters4e9afdc2001-05-03 23:54:49 +00001082 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001083
Guido van Rossum12d12c51993-10-26 17:58:25 +00001084Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001086Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001087 result = NULL;
1088Succeed:
1089 assert(seqs);
1090 for (i = 0; i < n; ++i)
1091 Py_XDECREF(seqs[i].it);
1092 PyMem_DEL(seqs);
1093 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001094}
1095
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001096PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001097"map(function, sequence[, sequence, ...]) -> list\n\
1098\n\
1099Return a list of the results of applying the function to the items of\n\
1100the argument sequence(s). If more than one sequence is given, the\n\
1101function is called with an argument list consisting of the corresponding\n\
1102item of each sequence, substituting None for missing values when not all\n\
1103sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001104the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001105
1106
Guido van Rossum79f25d91997-04-29 20:08:16 +00001107static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001108builtin_next(PyObject *self, PyObject *args)
1109{
1110 PyObject *it, *res;
1111 PyObject *def = NULL;
1112
1113 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1114 return NULL;
1115 if (!PyIter_Check(it)) {
1116 PyErr_Format(PyExc_TypeError,
1117 "%.200s object is not an iterator", it->ob_type->tp_name);
1118 return NULL;
1119 }
1120
1121 res = (*it->ob_type->tp_iternext)(it);
1122 if (res == NULL) {
1123 if (def) {
1124 if (PyErr_Occurred() &&
1125 !PyErr_ExceptionMatches(PyExc_StopIteration))
1126 return NULL;
1127 PyErr_Clear();
1128 Py_INCREF(def);
1129 return def;
1130 } else if (PyErr_Occurred()) {
1131 return NULL;
1132 } else {
1133 PyErr_SetNone(PyExc_StopIteration);
1134 return NULL;
1135 }
1136 }
1137 return res;
1138}
1139
1140PyDoc_STRVAR(next_doc,
1141"next(iterator[, default])\n\
1142\n\
1143Return the next item from the iterator. If default is given and the iterator\n\
1144is exhausted, it is returned instead of raising StopIteration.");
1145
1146
1147static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001148builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001149{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001150 PyObject *v;
1151 PyObject *name;
1152 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001153
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001154 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001155 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001157 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001158 Py_INCREF(Py_None);
1159 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001160}
1161
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001162PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001163"setattr(object, name, value)\n\
1164\n\
1165Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001166``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001167
1168
Guido van Rossum79f25d91997-04-29 20:08:16 +00001169static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001170builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001171{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001172 PyObject *v;
1173 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001174
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001175 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001176 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001178 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 Py_INCREF(Py_None);
1180 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001181}
1182
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001183PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001184"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185\n\
1186Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001187``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188
1189
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001191builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001192{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001193 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001194
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001196 if (x == -1)
1197 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001199}
1200
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001201PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001202"hash(object) -> integer\n\
1203\n\
1204Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001205the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001206
1207
Guido van Rossum79f25d91997-04-29 20:08:16 +00001208static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001209builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001210{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001211 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001212}
1213
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001214PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001215"hex(number) -> string\n\
1216\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001217Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001218
1219
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001221builtin_iter(PyObject *self, PyObject *args)
1222{
1223 PyObject *v, *w = NULL;
1224
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001225 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001226 return NULL;
1227 if (w == NULL)
1228 return PyObject_GetIter(v);
1229 if (!PyCallable_Check(v)) {
1230 PyErr_SetString(PyExc_TypeError,
1231 "iter(v, w): v must be callable");
1232 return NULL;
1233 }
1234 return PyCallIter_New(v, w);
1235}
1236
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001237PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001238"iter(collection) -> iterator\n\
1239iter(callable, sentinel) -> iterator\n\
1240\n\
1241Get an iterator from an object. In the first form, the argument must\n\
1242supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001243In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001244
1245
1246static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001247builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001248{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001249 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001250
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001251 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001252 if (res < 0 && PyErr_Occurred())
1253 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001254 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001255}
1256
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001257PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001258"len(object) -> integer\n\
1259\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001260Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001261
1262
Guido van Rossum79f25d91997-04-29 20:08:16 +00001263static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001264builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001265{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001266 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001267
Guido van Rossum79f25d91997-04-29 20:08:16 +00001268 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001269 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001270 return d;
1271}
1272
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001273PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001274"locals() -> dictionary\n\
1275\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001276Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001277
1278
Guido van Rossum79f25d91997-04-29 20:08:16 +00001279static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001280min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001281{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001282 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001283 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001284
Guido van Rossum79f25d91997-04-29 20:08:16 +00001285 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001286 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001287 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001288 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001289
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001290 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1291 keyfunc = PyDict_GetItemString(kwds, "key");
1292 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001293 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001294 "%s() got an unexpected keyword argument", name);
1295 return NULL;
1296 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001297 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001298
Tim Petersc3074532001-05-03 07:00:32 +00001299 it = PyObject_GetIter(v);
1300 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001301 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001302
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001303 maxitem = NULL; /* the result */
1304 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001305 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306 /* get the value from the key function */
1307 if (keyfunc != NULL) {
1308 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1309 if (val == NULL)
1310 goto Fail_it_item;
1311 }
1312 /* no key function; the value is the item */
1313 else {
1314 val = item;
1315 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001316 }
Tim Petersc3074532001-05-03 07:00:32 +00001317
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001318 /* maximum value and item are unset; set them */
1319 if (maxval == NULL) {
1320 maxitem = item;
1321 maxval = val;
1322 }
1323 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001324 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001325 int cmp = PyObject_RichCompareBool(val, maxval, op);
1326 if (cmp < 0)
1327 goto Fail_it_item_and_val;
1328 else if (cmp > 0) {
1329 Py_DECREF(maxval);
1330 Py_DECREF(maxitem);
1331 maxval = val;
1332 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001333 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001334 else {
1335 Py_DECREF(item);
1336 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001337 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001338 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001339 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001340 if (PyErr_Occurred())
1341 goto Fail_it;
1342 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001343 PyErr_Format(PyExc_ValueError,
1344 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001345 assert(maxitem == NULL);
1346 }
1347 else
1348 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001349 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001350 return maxitem;
1351
1352Fail_it_item_and_val:
1353 Py_DECREF(val);
1354Fail_it_item:
1355 Py_DECREF(item);
1356Fail_it:
1357 Py_XDECREF(maxval);
1358 Py_XDECREF(maxitem);
1359 Py_DECREF(it);
1360 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001361}
1362
Guido van Rossum79f25d91997-04-29 20:08:16 +00001363static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001364builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001365{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001366 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001367}
1368
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001369PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001370"min(iterable[, key=func]) -> value\n\
1371min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001372\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001373With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001374With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001375
1376
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001378builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001379{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001380 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001381}
1382
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001383PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001384"max(iterable[, key=func]) -> value\n\
1385max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001386\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001387With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001388With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001389
1390
Guido van Rossum79f25d91997-04-29 20:08:16 +00001391static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001392builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001393{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001394 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001395}
1396
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001397PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001398"oct(number) -> string\n\
1399\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001400Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001401
1402
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001404builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001405{
Guido van Rossum09095f32000-03-10 23:00:52 +00001406 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001407 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001408
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001409 if (PyString_Check(obj)) {
1410 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001411 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001412 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001413 return PyInt_FromLong(ord);
1414 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001415 }
1416 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001417 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001418 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001419 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001420 return PyInt_FromLong(ord);
1421 }
Guido van Rossum6f376c42007-05-24 14:31:33 +00001422 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001423 else if (PyBytes_Check(obj)) {
1424 /* XXX Hopefully this is temporary */
1425 size = PyBytes_GET_SIZE(obj);
1426 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001427 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001428 return PyInt_FromLong(ord);
1429 }
1430 }
1431 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001432 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001433 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001434 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001435 return NULL;
1436 }
1437
Guido van Rossumad991772001-01-12 16:03:05 +00001438 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001439 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001440 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001441 size);
1442 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001443}
1444
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001445PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001446"ord(c) -> integer\n\
1447\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001448Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001449
1450
Guido van Rossum79f25d91997-04-29 20:08:16 +00001451static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001452builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001453{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001454 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001455
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001456 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001457 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001458 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001459}
1460
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001461PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001462"pow(x, y[, z]) -> number\n\
1463\n\
1464With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001465equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001466
1467
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001468
Guido van Rossum34343512006-11-30 22:13:52 +00001469static PyObject *
1470builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1471{
1472 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001473 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001474 PyObject *sep = NULL, *end = NULL, *file = NULL;
1475 int i, err;
1476
Georg Brandl257d3d92007-02-26 10:35:10 +00001477 if (dummy_args == NULL) {
1478 if (!(dummy_args = PyTuple_New(0)))
1479 return NULL;
1480 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001481 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001482 kwlist, &sep, &end, &file))
1483 return NULL;
1484 if (file == NULL || file == Py_None)
1485 file = PySys_GetObject("stdout");
1486
Georg Brandl16f3e032006-11-30 22:46:03 +00001487 if (sep && sep != Py_None && !PyString_Check(sep) &&
1488 !PyUnicode_Check(sep)) {
1489 PyErr_Format(PyExc_TypeError,
1490 "sep must be None, str or unicode, not %.200s",
1491 sep->ob_type->tp_name);
1492 return NULL;
1493 }
1494 if (end && end != Py_None && !PyString_Check(end) &&
1495 !PyUnicode_Check(end)) {
1496 PyErr_Format(PyExc_TypeError,
1497 "end must be None, str or unicode, not %.200s",
1498 end->ob_type->tp_name);
1499 return NULL;
1500 }
Guido van Rossum34343512006-11-30 22:13:52 +00001501
1502 for (i = 0; i < PyTuple_Size(args); i++) {
1503 if (i > 0) {
1504 if (sep == NULL || sep == Py_None)
1505 err = PyFile_WriteString(" ", file);
1506 else
1507 err = PyFile_WriteObject(sep, file,
1508 Py_PRINT_RAW);
1509 if (err)
1510 return NULL;
1511 }
1512 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1513 Py_PRINT_RAW);
1514 if (err)
1515 return NULL;
1516 }
1517
1518 if (end == NULL || end == Py_None)
1519 err = PyFile_WriteString("\n", file);
1520 else
1521 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1522 if (err)
1523 return NULL;
1524
1525 Py_RETURN_NONE;
1526}
1527
1528PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001529"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001530\n\
1531Prints the values to a stream, or to sys.stdout by default.\n\
1532Optional keyword arguments:\n\
1533file: a file-like object (stream); defaults to the current sys.stdout.\n\
1534sep: string inserted between values, default a space.\n\
1535end: string appended after the last value, default a newline.");
1536
1537
Guido van Rossuma88a0332007-02-26 16:59:55 +00001538static PyObject *
1539builtin_input(PyObject *self, PyObject *args)
1540{
Guido van Rossumeba76962007-05-27 09:13:28 +00001541 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001542 PyObject *fin = PySys_GetObject("stdin");
1543 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001544 PyObject *ferr = PySys_GetObject("stderr");
1545 PyObject *tmp;
1546 long fd;
1547 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001548
Guido van Rossumeba76962007-05-27 09:13:28 +00001549 /* Parse arguments */
1550 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001551 return NULL;
1552
Guido van Rossumeba76962007-05-27 09:13:28 +00001553 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001554 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001555 PyErr_SetString(PyExc_RuntimeError,
1556 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001557 return NULL;
1558 }
1559 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001560 PyErr_SetString(PyExc_RuntimeError,
1561 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001562 return NULL;
1563 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001564 if (ferr == NULL) {
1565 PyErr_SetString(PyExc_RuntimeError,
1566 "input(): lost sys.stderr");
1567 return NULL;
1568 }
1569
1570 /* First of all, flush stderr */
1571 tmp = PyObject_CallMethod(ferr, "flush", "");
1572 if (tmp == NULL)
1573 return NULL;
1574 Py_DECREF(tmp);
1575
1576 /* We should only use (GNU) readline if Python's sys.stdin and
1577 sys.stdout are the same as C's stdin and stdout, because we
1578 need to pass it those. */
1579 tmp = PyObject_CallMethod(fin, "fileno", "");
1580 if (tmp == NULL)
1581 return NULL;
1582 fd = PyInt_AsLong(tmp);
1583 if (fd < 0 && PyErr_Occurred())
1584 return NULL;
1585 Py_DECREF(tmp);
1586 tty = fd == fileno(stdin) && isatty(fd);
1587 if (tty) {
1588 tmp = PyObject_CallMethod(fout, "fileno", "");
1589 if (tmp == NULL)
1590 return NULL;
1591 fd = PyInt_AsLong(tmp);
1592 Py_DECREF(tmp);
1593 if (fd < 0 && PyErr_Occurred())
1594 return NULL;
1595 tty = fd == fileno(stdout) && isatty(fd);
1596 }
1597
1598 /* If we're interactive, use (GNU) readline */
1599 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001600 PyObject *po;
1601 char *prompt;
1602 char *s;
1603 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001604 tmp = PyObject_CallMethod(fout, "flush", "");
1605 if (tmp == NULL)
1606 return NULL;
1607 Py_DECREF(tmp);
1608 if (promptarg != NULL) {
1609 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001610 if (po == NULL)
1611 return NULL;
1612 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001613 if (prompt == NULL) {
1614 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001615 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001616 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001617 }
1618 else {
1619 po = NULL;
1620 prompt = "";
1621 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001622 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001623 Py_XDECREF(po);
1624 if (s == NULL) {
1625 if (!PyErr_Occurred())
1626 PyErr_SetNone(PyExc_KeyboardInterrupt);
1627 return NULL;
1628 }
1629 if (*s == '\0') {
1630 PyErr_SetNone(PyExc_EOFError);
1631 result = NULL;
1632 }
1633 else { /* strip trailing '\n' */
1634 size_t len = strlen(s);
1635 if (len > PY_SSIZE_T_MAX) {
1636 PyErr_SetString(PyExc_OverflowError,
1637 "input: input too long");
1638 result = NULL;
1639 }
1640 else {
1641 result = PyString_FromStringAndSize(s, len-1);
1642 }
1643 }
1644 PyMem_FREE(s);
1645 return result;
1646 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001647
1648 /* Fallback if we're not interactive */
1649 if (promptarg != NULL) {
1650 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001651 return NULL;
1652 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001653 tmp = PyObject_CallMethod(fout, "flush", "");
1654 if (tmp == NULL)
1655 return NULL;
1656 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001657 return PyFile_GetLine(fin, -1);
1658}
1659
1660PyDoc_STRVAR(input_doc,
1661"input([prompt]) -> string\n\
1662\n\
1663Read a string from standard input. The trailing newline is stripped.\n\
1664If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1665On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1666is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001667
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001668
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001670builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001671{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001672 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001673}
1674
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001675PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001676"repr(object) -> string\n\
1677\n\
1678Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001679For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001680
1681
Guido van Rossum79f25d91997-04-29 20:08:16 +00001682static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001683builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001684{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001685 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001686 double f;
1687 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001688 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001689 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001690
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001691 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1692 kwlist, &number, &ndigits))
1693 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001694 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001695 i = abs(ndigits);
1696 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001697 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001698 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001699 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001700 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001701 number *= f;
1702 if (number >= 0.0)
1703 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001704 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001705 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001706 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001707 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001708 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001709 number /= f;
1710 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001711}
1712
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001713PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001714"round(number[, ndigits]) -> floating point number\n\
1715\n\
1716Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001717This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001718
Raymond Hettinger64958a12003-12-17 20:43:33 +00001719static PyObject *
1720builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1721{
1722 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1723 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001724 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001725 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001726
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001727 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001728 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1729 kwlist, &seq, &compare, &keyfunc, &reverse))
1730 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001731
1732 newlist = PySequence_List(seq);
1733 if (newlist == NULL)
1734 return NULL;
1735
1736 callable = PyObject_GetAttrString(newlist, "sort");
1737 if (callable == NULL) {
1738 Py_DECREF(newlist);
1739 return NULL;
1740 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001741
Raymond Hettinger64958a12003-12-17 20:43:33 +00001742 newargs = PyTuple_GetSlice(args, 1, 4);
1743 if (newargs == NULL) {
1744 Py_DECREF(newlist);
1745 Py_DECREF(callable);
1746 return NULL;
1747 }
1748
1749 v = PyObject_Call(callable, newargs, kwds);
1750 Py_DECREF(newargs);
1751 Py_DECREF(callable);
1752 if (v == NULL) {
1753 Py_DECREF(newlist);
1754 return NULL;
1755 }
1756 Py_DECREF(v);
1757 return newlist;
1758}
1759
1760PyDoc_STRVAR(sorted_doc,
1761"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001762
Guido van Rossum79f25d91997-04-29 20:08:16 +00001763static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001764builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001765{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 PyObject *v = NULL;
1767 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001768
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001769 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001770 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001771 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001773 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001774 if (!PyErr_Occurred())
1775 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001776 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001777 }
1778 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001780 }
1781 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001782 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001783 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001784 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001785 "vars() argument must have __dict__ attribute");
1786 return NULL;
1787 }
1788 }
1789 return d;
1790}
1791
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001792PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001793"vars([object]) -> dictionary\n\
1794\n\
1795Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001796With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001797
Alex Martellia70b1912003-04-22 08:12:33 +00001798
1799static PyObject*
1800builtin_sum(PyObject *self, PyObject *args)
1801{
1802 PyObject *seq;
1803 PyObject *result = NULL;
1804 PyObject *temp, *item, *iter;
1805
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001806 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001807 return NULL;
1808
1809 iter = PyObject_GetIter(seq);
1810 if (iter == NULL)
1811 return NULL;
1812
1813 if (result == NULL) {
1814 result = PyInt_FromLong(0);
1815 if (result == NULL) {
1816 Py_DECREF(iter);
1817 return NULL;
1818 }
1819 } else {
1820 /* reject string values for 'start' parameter */
1821 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1822 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001823 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001824 Py_DECREF(iter);
1825 return NULL;
1826 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001827 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001828 }
1829
1830 for(;;) {
1831 item = PyIter_Next(iter);
1832 if (item == NULL) {
1833 /* error, or end-of-sequence */
1834 if (PyErr_Occurred()) {
1835 Py_DECREF(result);
1836 result = NULL;
1837 }
1838 break;
1839 }
Alex Martellia253e182003-10-25 23:24:14 +00001840 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001841 Py_DECREF(result);
1842 Py_DECREF(item);
1843 result = temp;
1844 if (result == NULL)
1845 break;
1846 }
1847 Py_DECREF(iter);
1848 return result;
1849}
1850
1851PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001852"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001853\n\
1854Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001855of parameter 'start' (which defaults to 0). When the sequence is\n\
1856empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001857
1858
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001859static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001860builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001861{
1862 PyObject *inst;
1863 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001864 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001865
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001866 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001867 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001868
Guido van Rossum823649d2001-03-21 18:40:58 +00001869 retval = PyObject_IsInstance(inst, cls);
1870 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001871 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001872 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001873}
1874
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001875PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001876"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001877\n\
1878Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001879With a type as second argument, return whether that is the object's type.\n\
1880The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001881isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001882
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001883
1884static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001885builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001886{
1887 PyObject *derived;
1888 PyObject *cls;
1889 int retval;
1890
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001891 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001892 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001893
Guido van Rossum823649d2001-03-21 18:40:58 +00001894 retval = PyObject_IsSubclass(derived, cls);
1895 if (retval < 0)
1896 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001897 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001898}
1899
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001900PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001901"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001902\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001903Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1904When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1905is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001906
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001907
Barry Warsawbd599b52000-08-03 15:45:29 +00001908static PyObject*
1909builtin_zip(PyObject *self, PyObject *args)
1910{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001911 /* args must be a tuple */
1912 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001913
Guido van Rossumb65fb332006-08-25 23:26:40 +00001914 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001915}
1916
1917
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001918PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001919"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001920\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001921Return an iterator yielding tuples, where each tuple contains the\n\
1922corresponding element from each of the argument iterables.\n\
1923The returned iterator ends when the shortest argument iterable is exhausted.\n\
1924NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00001925
1926
Guido van Rossum79f25d91997-04-29 20:08:16 +00001927static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001928 {"__build_class__", (PyCFunction)builtin___build_class__,
1929 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001930 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001931 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001932 {"all", builtin_all, METH_O, all_doc},
1933 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001934 {"bin", builtin_bin, METH_O, bin_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001935 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1936 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001937 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001938 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001939 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1940 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1941 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1942 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001943 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001944 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1945 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1946 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1947 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1948 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1949 {"hash", builtin_hash, METH_O, hash_doc},
1950 {"hex", builtin_hex, METH_O, hex_doc},
1951 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001952 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001953 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1954 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1955 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1956 {"len", builtin_len, METH_O, len_doc},
1957 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1958 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001959 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1960 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001961 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001962 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001963 {"ord", builtin_ord, METH_O, ord_doc},
1964 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001965 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001966 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001967 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001968 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001969 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001970 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001971 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001972 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001973 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001974};
1975
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001976PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001977"Built-in functions, exceptions, and other objects.\n\
1978\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001979Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001980
Guido van Rossum25ce5661997-08-02 03:10:38 +00001981PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001982_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001983{
Fred Drake5550de32000-06-20 04:54:19 +00001984 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001985 mod = Py_InitModule4("__builtin__", builtin_methods,
1986 builtin_doc, (PyObject *)NULL,
1987 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001988 if (mod == NULL)
1989 return NULL;
1990 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00001991
Tim Peters7571a0f2003-03-23 17:52:28 +00001992#ifdef Py_TRACE_REFS
1993 /* __builtin__ exposes a number of statically allocated objects
1994 * that, before this code was added in 2.3, never showed up in
1995 * the list of "all objects" maintained by Py_TRACE_REFS. As a
1996 * result, programs leaking references to None and False (etc)
1997 * couldn't be diagnosed by examining sys.getobjects(0).
1998 */
1999#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2000#else
2001#define ADD_TO_ALL(OBJECT) (void)0
2002#endif
2003
Tim Peters4b7625e2001-09-13 21:37:17 +00002004#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002005 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2006 return NULL; \
2007 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002008
2009 SETBUILTIN("None", Py_None);
2010 SETBUILTIN("Ellipsis", Py_Ellipsis);
2011 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002012 SETBUILTIN("False", Py_False);
2013 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002014 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002015 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002016 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002017 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002018 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002019#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002020 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002021#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002022 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002023 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002024 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002025 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002026 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002027 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002028 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002029 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002030 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002031 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002032 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002033 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002034 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002035 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002036 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002037 SETBUILTIN("super", &PySuper_Type);
2038 SETBUILTIN("tuple", &PyTuple_Type);
2039 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002040 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002041 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2042 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002043 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002044 }
2045 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002046
Guido van Rossum25ce5661997-08-02 03:10:38 +00002047 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002048#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002049#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002050}
2051
Guido van Rossume77a7571993-11-03 15:01:26 +00002052/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002053
Guido van Rossum79f25d91997-04-29 20:08:16 +00002054static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002055filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002056{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002057 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002058 Py_ssize_t i, j;
2059 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002060
Guido van Rossumb7b45621995-08-04 04:07:45 +00002061 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002062 if (PyTuple_CheckExact(tuple))
2063 Py_INCREF(tuple);
2064 else
2065 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002066 return tuple;
2067 }
2068
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002070 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002071
Guido van Rossum12d12c51993-10-26 17:58:25 +00002072 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002073 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002074 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002075
Walter Dörwald8dd19322003-02-10 17:36:40 +00002076 if (tuple->ob_type->tp_as_sequence &&
2077 tuple->ob_type->tp_as_sequence->sq_item) {
2078 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002079 if (item == NULL)
2080 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002081 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002082 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002083 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002084 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002085 if (func == Py_None) {
2086 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002087 good = item;
2088 }
2089 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002090 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002091 if (arg == NULL) {
2092 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002093 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002094 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002095 good = PyEval_CallObject(func, arg);
2096 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002097 if (good == NULL) {
2098 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002099 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002100 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002101 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002102 ok = PyObject_IsTrue(good);
2103 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002104 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002105 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002106 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002107 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002108 else
2109 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002110 }
2111
Tim Peters4324aa32001-05-28 22:30:08 +00002112 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002113 return NULL;
2114
Guido van Rossum12d12c51993-10-26 17:58:25 +00002115 return result;
2116
Guido van Rossum12d12c51993-10-26 17:58:25 +00002117Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002118 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002119 return NULL;
2120}
2121
2122
Guido van Rossume77a7571993-11-03 15:01:26 +00002123/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002124
Guido van Rossum79f25d91997-04-29 20:08:16 +00002125static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002126filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002127{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002128 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002129 Py_ssize_t i, j;
2130 Py_ssize_t len = PyString_Size(strobj);
2131 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002132
Guido van Rossum79f25d91997-04-29 20:08:16 +00002133 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002134 /* If it's a real string we can return the original,
2135 * as no character is ever false and __getitem__
2136 * does return this character. If it's a subclass
2137 * we must go through the __getitem__ loop */
2138 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002139 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002140 return strobj;
2141 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002142 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002143 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002144 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002145
Guido van Rossum12d12c51993-10-26 17:58:25 +00002146 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002147 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002148 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002149
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002150 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2151 if (item == NULL)
2152 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002153 if (func==Py_None) {
2154 ok = 1;
2155 } else {
2156 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002157 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002158 if (arg == NULL) {
2159 Py_DECREF(item);
2160 goto Fail_1;
2161 }
2162 good = PyEval_CallObject(func, arg);
2163 Py_DECREF(arg);
2164 if (good == NULL) {
2165 Py_DECREF(item);
2166 goto Fail_1;
2167 }
2168 ok = PyObject_IsTrue(good);
2169 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002170 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002171 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002172 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002173 if (!PyString_Check(item)) {
2174 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2175 " __getitem__ returned different type");
2176 Py_DECREF(item);
2177 goto Fail_1;
2178 }
2179 reslen = PyString_GET_SIZE(item);
2180 if (reslen == 1) {
2181 PyString_AS_STRING(result)[j++] =
2182 PyString_AS_STRING(item)[0];
2183 } else {
2184 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002185 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002186 if (need > outlen) {
2187 /* overallocate, to avoid reallocations */
2188 if (need<2*outlen)
2189 need = 2*outlen;
2190 if (_PyString_Resize(&result, need)) {
2191 Py_DECREF(item);
2192 return NULL;
2193 }
2194 outlen = need;
2195 }
2196 memcpy(
2197 PyString_AS_STRING(result) + j,
2198 PyString_AS_STRING(item),
2199 reslen
2200 );
2201 j += reslen;
2202 }
2203 }
Tim Peters388ed082001-04-07 20:34:48 +00002204 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002205 }
2206
Walter Dörwald903f1e02003-02-04 16:28:00 +00002207 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002208 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002209
Guido van Rossum12d12c51993-10-26 17:58:25 +00002210 return result;
2211
Guido van Rossum12d12c51993-10-26 17:58:25 +00002212Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002213 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002214 return NULL;
2215}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002216
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002217/* Helper for filter(): filter a Unicode object through a function */
2218
2219static PyObject *
2220filterunicode(PyObject *func, PyObject *strobj)
2221{
2222 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002223 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002224 Py_ssize_t len = PyUnicode_GetSize(strobj);
2225 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002226
2227 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002228 /* If it's a real string we can return the original,
2229 * as no character is ever false and __getitem__
2230 * does return this character. If it's a subclass
2231 * we must go through the __getitem__ loop */
2232 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002233 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002234 return strobj;
2235 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002236 }
2237 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2238 return NULL;
2239
2240 for (i = j = 0; i < len; ++i) {
2241 PyObject *item, *arg, *good;
2242 int ok;
2243
2244 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2245 if (item == NULL)
2246 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002247 if (func == Py_None) {
2248 ok = 1;
2249 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002250 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002251 if (arg == NULL) {
2252 Py_DECREF(item);
2253 goto Fail_1;
2254 }
2255 good = PyEval_CallObject(func, arg);
2256 Py_DECREF(arg);
2257 if (good == NULL) {
2258 Py_DECREF(item);
2259 goto Fail_1;
2260 }
2261 ok = PyObject_IsTrue(good);
2262 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002263 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002264 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002265 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002266 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002267 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002268 "can't filter unicode to unicode:"
2269 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002270 Py_DECREF(item);
2271 goto Fail_1;
2272 }
2273 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002274 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002275 PyUnicode_AS_UNICODE(result)[j++] =
2276 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002277 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002278 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002279 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002280 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002281 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002282 to avoid reallocations */
2283 if (need < 2 * outlen)
2284 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002285 if (PyUnicode_Resize(
2286 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002287 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002288 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002289 }
2290 outlen = need;
2291 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002292 memcpy(PyUnicode_AS_UNICODE(result) + j,
2293 PyUnicode_AS_UNICODE(item),
2294 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002295 j += reslen;
2296 }
2297 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002298 Py_DECREF(item);
2299 }
2300
Walter Dörwald903f1e02003-02-04 16:28:00 +00002301 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002302 PyUnicode_Resize(&result, j);
2303
2304 return result;
2305
2306Fail_1:
2307 Py_DECREF(result);
2308 return NULL;
2309}