blob: 3b43ff953a9ef775d3c66feaad9c9569e1329ef7 [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 Hammond26cffde42001-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 Hammond26cffde42001-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 Hammond26cffde42001-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{
34 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *res;
35 Py_ssize_t nargs, nbases;
36
37 assert(args != NULL);
38 if (!PyTuple_Check(args)) {
39 PyErr_SetString(PyExc_TypeError,
40 "__build_class__: args is not a tuple");
41 return NULL;
42 }
43 nargs = PyTuple_GET_SIZE(args);
44 if (nargs < 2) {
45 PyErr_SetString(PyExc_TypeError,
46 "__build_class__: not enough arguments");
47 return NULL;
48 }
49 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
50 name = PyTuple_GET_ITEM(args, 1);
Martin v. Löwis5b222132007-06-10 09:51:05 +000051 if ((!PyString_Check(name) && !PyUnicode_Check(name))) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000052 PyErr_SetString(PyExc_TypeError,
53 "__build_class__: name is not a string");
54 return NULL;
55 }
56 bases = PyTuple_GetSlice(args, 2, nargs);
57 if (bases == NULL)
58 return NULL;
59 nbases = nargs - 2;
60
61 if (kwds == NULL) {
62 meta = NULL;
63 mkw = NULL;
64 }
65 else {
66 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
67 if (mkw == NULL) {
68 Py_DECREF(bases);
69 return NULL;
70 }
71 meta = PyDict_GetItemString(mkw, "metaclass");
72 if (meta != NULL) {
73 Py_INCREF(meta);
74 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
75 Py_DECREF(meta);
76 Py_DECREF(mkw);
77 Py_DECREF(bases);
78 return NULL;
79 }
80 }
81 }
82 if (meta == NULL) {
83 if (PyTuple_GET_SIZE(bases) == 0)
84 meta = (PyObject *) (&PyType_Type);
85 else {
86 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
87 meta = (PyObject *) (base0->ob_type);
88 }
89 Py_INCREF(meta);
90 }
91 prep = PyObject_GetAttrString(meta, "__prepare__");
92 if (prep == NULL) {
93 PyErr_Clear();
94 ns = PyDict_New();
95 }
96 else {
97 PyObject *pargs = Py_BuildValue("OO", name, bases);
98 if (pargs == NULL) {
99 Py_DECREF(prep);
100 Py_DECREF(meta);
101 Py_XDECREF(mkw);
102 Py_DECREF(bases);
103 return NULL;
104 }
105 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
106 Py_DECREF(pargs);
107 Py_DECREF(prep);
108 if (ns == NULL) {
109 Py_DECREF(meta);
110 Py_XDECREF(mkw);
111 Py_DECREF(bases);
112 return NULL;
113 }
114 }
115 res = PyObject_CallFunctionObjArgs(func, ns, NULL);
116 if (res != NULL) {
117 PyObject *margs;
118 Py_DECREF(res);
119 res = NULL;
120 margs = Py_BuildValue("OOO", name, bases, ns);
121 if (margs != NULL) {
122 res = PyEval_CallObjectWithKeywords(meta, margs, mkw);
123 Py_DECREF(margs);
124 }
125 }
126 Py_DECREF(ns);
127 Py_DECREF(meta);
128 Py_XDECREF(mkw);
129 Py_DECREF(bases);
130 return res;
131}
132
133PyDoc_STRVAR(build_class_doc,
134"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
135\n\
136Internal helper function used by the class statement.");
137
138static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000139builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000140{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000141 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
142 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000143 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000144 PyObject *globals = NULL;
145 PyObject *locals = NULL;
146 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000147 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000148
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000149 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
150 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000151 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000152 return PyImport_ImportModuleLevel(name, globals, locals,
153 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000154}
155
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000156PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000157"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000158\n\
159Import a module. The globals are only used to determine the context;\n\
160they are not modified. The locals are currently unused. The fromlist\n\
161should be a list of names to emulate ``from name import ...'', or an\n\
162empty list to emulate ``import name''.\n\
163When importing a module from a package, note that __import__('A.B', ...)\n\
164returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000165fromlist is not empty. Level is used to determine whether to perform \n\
166absolute or relative imports. -1 is the original strategy of attempting\n\
167both absolute and relative imports, 0 is absolute, a positive number\n\
168is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000169
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000170
Guido van Rossum79f25d91997-04-29 20:08:16 +0000171static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000172builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000173{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000174 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000175}
176
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000177PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000178"abs(number) -> number\n\
179\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000180Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000181
Raymond Hettinger96229b12005-03-11 06:49:40 +0000182static PyObject *
183builtin_all(PyObject *self, PyObject *v)
184{
185 PyObject *it, *item;
186
187 it = PyObject_GetIter(v);
188 if (it == NULL)
189 return NULL;
190
191 while ((item = PyIter_Next(it)) != NULL) {
192 int cmp = PyObject_IsTrue(item);
193 Py_DECREF(item);
194 if (cmp < 0) {
195 Py_DECREF(it);
196 return NULL;
197 }
198 if (cmp == 0) {
199 Py_DECREF(it);
200 Py_RETURN_FALSE;
201 }
202 }
203 Py_DECREF(it);
204 if (PyErr_Occurred())
205 return NULL;
206 Py_RETURN_TRUE;
207}
208
209PyDoc_STRVAR(all_doc,
210"all(iterable) -> bool\n\
211\n\
212Return True if bool(x) is True for all values x in the iterable.");
213
214static PyObject *
215builtin_any(PyObject *self, PyObject *v)
216{
217 PyObject *it, *item;
218
219 it = PyObject_GetIter(v);
220 if (it == NULL)
221 return NULL;
222
223 while ((item = PyIter_Next(it)) != NULL) {
224 int cmp = PyObject_IsTrue(item);
225 Py_DECREF(item);
226 if (cmp < 0) {
227 Py_DECREF(it);
228 return NULL;
229 }
230 if (cmp == 1) {
231 Py_DECREF(it);
232 Py_RETURN_TRUE;
233 }
234 }
235 Py_DECREF(it);
236 if (PyErr_Occurred())
237 return NULL;
238 Py_RETURN_FALSE;
239}
240
241PyDoc_STRVAR(any_doc,
242"any(iterable) -> bool\n\
243\n\
244Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000245
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000246
Guido van Rossum79f25d91997-04-29 20:08:16 +0000247static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000248builtin_filter(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000249{
Guido van Rossumc7903a12002-08-16 07:04:56 +0000250 PyObject *func, *seq, *result, *it, *arg;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000251 Py_ssize_t len; /* guess for result list size */
252 register Py_ssize_t j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000253
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000254 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000255 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000256
Tim Peters0e57abf2001-05-02 07:39:38 +0000257 /* Strings and tuples return a result of the same type. */
258 if (PyString_Check(seq))
259 return filterstring(func, seq);
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000260 if (PyUnicode_Check(seq))
261 return filterunicode(func, seq);
Tim Peters0e57abf2001-05-02 07:39:38 +0000262 if (PyTuple_Check(seq))
263 return filtertuple(func, seq);
264
Georg Brandle35b6572005-07-19 22:20:20 +0000265 /* Pre-allocate argument list tuple. */
266 arg = PyTuple_New(1);
267 if (arg == NULL)
268 return NULL;
269
Tim Peters0e57abf2001-05-02 07:39:38 +0000270 /* Get iterator. */
271 it = PyObject_GetIter(seq);
272 if (it == NULL)
Georg Brandle35b6572005-07-19 22:20:20 +0000273 goto Fail_arg;
Tim Peters0e57abf2001-05-02 07:39:38 +0000274
275 /* Guess a result list size. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000276 len = _PyObject_LengthHint(seq);
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000277 if (len < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000278 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
279 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
280 goto Fail_it;
281 }
Raymond Hettingerb86269d2004-01-04 11:00:08 +0000282 PyErr_Clear();
283 len = 8; /* arbitrary */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000284 }
285
Tim Peters0e57abf2001-05-02 07:39:38 +0000286 /* Get a result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000287 if (PyList_Check(seq) && seq->ob_refcnt == 1) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000288 /* Eww - can modify the list in-place. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000289 Py_INCREF(seq);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290 result = seq;
291 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000292 else {
Tim Peters0e57abf2001-05-02 07:39:38 +0000293 result = PyList_New(len);
294 if (result == NULL)
295 goto Fail_it;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000296 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000297
Tim Peters0e57abf2001-05-02 07:39:38 +0000298 /* Build the result list. */
Tim Petersf4848da2001-05-05 00:14:56 +0000299 j = 0;
300 for (;;) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000301 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000302 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000303
Tim Peters0e57abf2001-05-02 07:39:38 +0000304 item = PyIter_Next(it);
305 if (item == NULL) {
Tim Petersf4848da2001-05-05 00:14:56 +0000306 if (PyErr_Occurred())
307 goto Fail_result_it;
Tim Peters0e57abf2001-05-02 07:39:38 +0000308 break;
Guido van Rossum2d951851994-08-29 12:52:16 +0000309 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000310
Neil Schemenauer68973552003-08-14 20:37:34 +0000311 if (func == (PyObject *)&PyBool_Type || func == Py_None) {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000312 ok = PyObject_IsTrue(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000313 }
314 else {
Guido van Rossumc7903a12002-08-16 07:04:56 +0000315 PyObject *good;
316 PyTuple_SET_ITEM(arg, 0, item);
317 good = PyObject_Call(func, arg, NULL);
318 PyTuple_SET_ITEM(arg, 0, NULL);
Guido van Rossum58b68731995-01-10 17:40:55 +0000319 if (good == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000320 Py_DECREF(item);
Tim Peters0e57abf2001-05-02 07:39:38 +0000321 goto Fail_result_it;
Guido van Rossum58b68731995-01-10 17:40:55 +0000322 }
Guido van Rossumc7903a12002-08-16 07:04:56 +0000323 ok = PyObject_IsTrue(good);
324 Py_DECREF(good);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000325 }
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000326 if (ok) {
Tim Peters0e57abf2001-05-02 07:39:38 +0000327 if (j < len)
328 PyList_SET_ITEM(result, j, item);
Guido van Rossum2d951851994-08-29 12:52:16 +0000329 else {
Barry Warsawfa77e091999-01-28 18:49:12 +0000330 int status = PyList_Append(result, item);
Barry Warsawfa77e091999-01-28 18:49:12 +0000331 Py_DECREF(item);
332 if (status < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000333 goto Fail_result_it;
Guido van Rossum2d951851994-08-29 12:52:16 +0000334 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000335 ++j;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000336 }
Tim Peters0e57abf2001-05-02 07:39:38 +0000337 else
338 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000339 }
340
Guido van Rossum12d12c51993-10-26 17:58:25 +0000341
Tim Peters0e57abf2001-05-02 07:39:38 +0000342 /* Cut back result list if len is too big. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000343 if (j < len && PyList_SetSlice(result, j, len, NULL) < 0)
Tim Peters0e57abf2001-05-02 07:39:38 +0000344 goto Fail_result_it;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000345
Tim Peters3c6b1482001-05-21 08:07:05 +0000346 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000347 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000348 return result;
349
Tim Peters0e57abf2001-05-02 07:39:38 +0000350Fail_result_it:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000351 Py_DECREF(result);
Tim Peters0e57abf2001-05-02 07:39:38 +0000352Fail_it:
353 Py_DECREF(it);
Guido van Rossumc7903a12002-08-16 07:04:56 +0000354Fail_arg:
355 Py_DECREF(arg);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000356 return NULL;
357}
358
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000359PyDoc_STRVAR(filter_doc,
Tim Petersd50e5442002-03-09 00:06:26 +0000360"filter(function or None, sequence) -> list, tuple, or string\n"
361"\n"
362"Return those items of sequence for which function(item) is true. If\n"
363"function is None, return the items that are true. If sequence is a tuple\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000364"or string, return the same type, else return a list.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000365
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000366
Guido van Rossum79f25d91997-04-29 20:08:16 +0000367static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000368builtin_chr8(PyObject *self, PyObject *args)
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000369{
370 long x;
371 char s[1];
372
373 if (!PyArg_ParseTuple(args, "l:chr8", &x))
374 return NULL;
375 if (x < 0 || x >= 256) {
376 PyErr_SetString(PyExc_ValueError,
377 "chr8() arg not in range(256)");
378 return NULL;
379 }
380 s[0] = (char)x;
381 return PyString_FromStringAndSize(s, 1);
382}
383
Walter Dörwalde7efd592007-06-05 20:07:21 +0000384PyDoc_STRVAR(chr8_doc,
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000385"chr8(i) -> 8-bit character\n\
386\n\
387Return a string of one character with ordinal i; 0 <= i < 256.");
388
389
390static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000391builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000392{
393 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000394
Walter Dörwalde7efd592007-06-05 20:07:21 +0000395 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000396 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000397
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000398 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000399}
400
Walter Dörwalde7efd592007-06-05 20:07:21 +0000401PyDoc_STRVAR(chr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000402"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000403\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000404Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Guido van Rossum09095f32000-03-10 23:00:52 +0000405
406
407static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000408builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000409{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000410 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000411 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000412
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000413 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000414 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000415 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000416 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000417 return PyInt_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000418}
419
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000420PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000421"cmp(x, y) -> integer\n\
422\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000423Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000424
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000425
426static char *
427source_as_string(PyObject *cmd)
428{
429 char *str;
430 Py_ssize_t size;
431
432 if (!PyObject_CheckReadBuffer(cmd) &&
433 !PyUnicode_Check(cmd)) {
434 PyErr_SetString(PyExc_TypeError,
435 "eval()/exec() arg 1 must be a string, bytes or code object");
436 return NULL;
437 }
438
439 if (PyUnicode_Check(cmd)) {
440 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
441 if (cmd == NULL)
442 return NULL;
443 }
444 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
445 return NULL;
446 }
447 if (strlen(str) != size) {
448 PyErr_SetString(PyExc_TypeError,
449 "source code string cannot contain null bytes");
450 return NULL;
451 }
452 return str;
453}
454
Guido van Rossum79f25d91997-04-29 20:08:16 +0000455static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000456builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000457{
458 char *str;
459 char *filename;
460 char *startstr;
461 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000462 int dont_inherit = 0;
463 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000464 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000465 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000466 static char *kwlist[] = {"source", "filename", "mode", "flags",
467 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000468
Guido van Rossumd8faa362007-04-27 19:54:29 +0000469 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
470 kwlist, &cmd, &filename, &startstr,
471 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000472 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000473
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000474 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000475
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000476 str = source_as_string(cmd);
477 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000478 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000479
Guido van Rossum5b722181993-03-30 17:46:03 +0000480 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000481 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000482 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000483 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000484 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000485 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000486 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000488 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000489 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000490 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000491
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000492 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000493 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000494 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000495 PyErr_SetString(PyExc_ValueError,
496 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000497 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000498 }
499 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
500
Tim Peters6cd6a822001-08-17 22:11:27 +0000501 if (!dont_inherit) {
502 PyEval_MergeCompilerFlags(&cf);
503 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000504 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000505}
506
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000507PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000508"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000509\n\
510Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000511into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000512The filename will be used for run-time error messages.\n\
513The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000514single (interactive) statement, or 'eval' to compile an expression.\n\
515The flags argument, if present, controls which future statements influence\n\
516the compilation of the code.\n\
517The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
518the effects of any future statements in effect in the code calling\n\
519compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000520in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000521
Guido van Rossum79f25d91997-04-29 20:08:16 +0000522static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000523builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000524{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000525 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000527 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000529 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000530}
531
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000532PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000533"dir([object]) -> list of strings\n"
534"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000535"If called without an argument, return the names in the current scope.\n"
536"Else, return an alphabetized list of names comprising (some of) the attributes\n"
537"of the given object, and of attributes reachable from it.\n"
538"If the object supplies a method named __dir__, it will be used; otherwise\n"
539"the default dir() logic is used and returns:\n"
540" for a module object: the module's attributes.\n"
541" for a class object: its attributes, and recursively the attributes\n"
542" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000543" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000544" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000545
Guido van Rossum79f25d91997-04-29 20:08:16 +0000546static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000547builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000548{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000549 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000550
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000551 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000552 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000553 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000554}
555
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000556PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000557"divmod(x, y) -> (div, mod)\n\
558\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000559Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000560
561
Guido van Rossum79f25d91997-04-29 20:08:16 +0000562static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000563builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000564{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000565 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000566 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000567 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000568 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000569
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000570 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000572 if (locals != Py_None && !PyMapping_Check(locals)) {
573 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000574 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000575 }
576 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000577 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000578 "globals must be a real dict; try eval(expr, {}, mapping)"
579 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000580 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000581 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000582 if (globals == Py_None) {
583 globals = PyEval_GetGlobals();
584 if (locals == Py_None)
585 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000586 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000588 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000589
Georg Brandl77c85e62005-09-15 10:46:13 +0000590 if (globals == NULL || locals == NULL) {
591 PyErr_SetString(PyExc_TypeError,
592 "eval must be given globals and locals "
593 "when called without a frame");
594 return NULL;
595 }
596
Guido van Rossum79f25d91997-04-29 20:08:16 +0000597 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
598 if (PyDict_SetItemString(globals, "__builtins__",
599 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000600 return NULL;
601 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000602
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000603 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000604 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000605 PyErr_SetString(PyExc_TypeError,
606 "code object passed to eval() may not contain free variables");
607 return NULL;
608 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000610 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000611
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000612 str = source_as_string(cmd);
613 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000614 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000615
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 while (*str == ' ' || *str == '\t')
617 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000618
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000619 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000620 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000621 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
622 Py_XDECREF(tmp);
623 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000624}
625
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000626PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000627"eval(source[, globals[, locals]]) -> value\n\
628\n\
629Evaluate the source in the context of globals and locals.\n\
630The source may be a string representing a Python expression\n\
631or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000632The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000633defaulting to the current globals and locals.\n\
634If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000635
Georg Brandl7cae87c2006-09-06 06:51:57 +0000636static PyObject *
637builtin_exec(PyObject *self, PyObject *args)
638{
639 PyObject *v;
640 PyObject *prog, *globals = Py_None, *locals = Py_None;
641 int plain = 0;
642
643 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
644 return NULL;
645
646 if (globals == Py_None) {
647 globals = PyEval_GetGlobals();
648 if (locals == Py_None) {
649 locals = PyEval_GetLocals();
650 plain = 1;
651 }
652 if (!globals || !locals) {
653 PyErr_SetString(PyExc_SystemError,
654 "globals and locals cannot be NULL");
655 return NULL;
656 }
657 }
658 else if (locals == Py_None)
659 locals = globals;
660 if (!PyString_Check(prog) &&
661 !PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000662 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000663 PyErr_Format(PyExc_TypeError,
664 "exec() arg 1 must be a string, file, or code "
665 "object, not %.100s", prog->ob_type->tp_name);
666 return NULL;
667 }
668 if (!PyDict_Check(globals)) {
669 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
670 globals->ob_type->tp_name);
671 return NULL;
672 }
673 if (!PyMapping_Check(locals)) {
674 PyErr_Format(PyExc_TypeError,
675 "arg 3 must be a mapping or None, not %.100s",
676 locals->ob_type->tp_name);
677 return NULL;
678 }
679 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
680 if (PyDict_SetItemString(globals, "__builtins__",
681 PyEval_GetBuiltins()) != 0)
682 return NULL;
683 }
684
685 if (PyCode_Check(prog)) {
686 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
687 PyErr_SetString(PyExc_TypeError,
688 "code object passed to exec() may not "
689 "contain free variables");
690 return NULL;
691 }
692 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
693 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000694 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000695 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000696 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000697 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000698 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000699 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000700 if (PyEval_MergeCompilerFlags(&cf))
701 v = PyRun_StringFlags(str, Py_file_input, globals,
702 locals, &cf);
703 else
704 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000705 }
706 if (v == NULL)
707 return NULL;
708 Py_DECREF(v);
709 Py_RETURN_NONE;
710}
711
712PyDoc_STRVAR(exec_doc,
713"exec(object[, globals[, locals]])\n\
714\n\
715Read and execute code from a object, which can be a string, a code\n\
716object or a file object.\n\
717The globals and locals are dictionaries, defaulting to the current\n\
718globals and locals. If only globals is given, locals defaults to it.");
719
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000720
Guido van Rossum79f25d91997-04-29 20:08:16 +0000721static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000722builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000723{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000724 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000725 PyObject *globals = Py_None, *locals = Py_None;
726 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000727 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000728 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000729 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000730
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000731 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000732 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000733 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000734 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000735 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000736 if (locals != Py_None && !PyMapping_Check(locals)) {
737 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
738 return NULL;
739 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000740 if (globals == Py_None) {
741 globals = PyEval_GetGlobals();
742 if (locals == Py_None)
743 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000744 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000745 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000746 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
748 if (PyDict_SetItemString(globals, "__builtins__",
749 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000750 return NULL;
751 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000752
753 exists = 0;
754 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000755#if defined(PLAN9)
756 {
757 Dir *d;
758
759 if ((d = dirstat(filename))!=nil) {
760 if(d->mode & DMDIR)
761 werrstr("is a directory");
762 else
763 exists = 1;
764 free(d);
765 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000766 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000767#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000768 if (object_exists(filename)) {
769 if (isdir(filename))
770 errno = EISDIR;
771 else
772 exists = 1;
773 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000774#else /* standard Posix */
775 {
776 struct stat s;
777 if (stat(filename, &s) == 0) {
778 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000779# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000780 errno = EOS2ERR;
781# else
782 errno = EISDIR;
783# endif
784 else
785 exists = 1;
786 }
787 }
788#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000789
790 if (exists) {
791 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000792 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000793 Py_END_ALLOW_THREADS
794
795 if (fp == NULL) {
796 exists = 0;
797 }
798 }
799
800 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000801 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000802 return NULL;
803 }
Tim Peters5ba58662001-07-16 02:29:45 +0000804 cf.cf_flags = 0;
805 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000806 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000807 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000808 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000809 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000810 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000811 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000812}
813
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000814PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000815"execfile(filename[, globals[, locals]])\n\
816\n\
817Read and execute a Python script from a file.\n\
818The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000819globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000820
821
Guido van Rossum79f25d91997-04-29 20:08:16 +0000822static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000823builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000824{
Martin v. Löwis5b222132007-06-10 09:51:05 +0000825 PyObject *v, *result, *dflt = NULL, *release = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000826 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000827
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000828 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000829 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000830
831 if (PyString_Check(name)) {
832 release = PyString_AsDecodedObject(name, NULL, NULL);
833 if (!release)
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000834 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000835 name = release;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000836 }
837
Martin v. Löwis5b222132007-06-10 09:51:05 +0000838 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000839 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000840 "getattr(): attribute name must be string");
Martin v. Löwis5b222132007-06-10 09:51:05 +0000841 Py_XDECREF(release);
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000842 return NULL;
843 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000844 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000845 if (result == NULL && dflt != NULL &&
846 PyErr_ExceptionMatches(PyExc_AttributeError))
847 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000848 PyErr_Clear();
849 Py_INCREF(dflt);
850 result = dflt;
851 }
Martin v. Löwis5b222132007-06-10 09:51:05 +0000852 Py_XDECREF(release);
Guido van Rossum950ff291998-06-29 13:38:57 +0000853 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000854}
855
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000856PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000857"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000858\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000859Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
860When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000861exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000862
863
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000865builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000866{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000868
Guido van Rossum79f25d91997-04-29 20:08:16 +0000869 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000870 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000871 return d;
872}
873
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000874PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000875"globals() -> dictionary\n\
876\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000877Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000878
879
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000881builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000882{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000883 PyObject *v;
884 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000885
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000886 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000887 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000888 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000889 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000890 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000891 return NULL;
892 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000893 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000896 Py_INCREF(Py_False);
897 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000898 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000899 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000900 Py_INCREF(Py_True);
901 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000902}
903
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000904PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000905"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000906\n\
907Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000908(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000909
910
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000912builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000913{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000914 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000915}
916
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918"id(object) -> integer\n\
919\n\
920Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000921simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922
923
Guido van Rossum79f25d91997-04-29 20:08:16 +0000924static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000925builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000926{
927 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000928 PyObject *it; /* the iterator object */
929 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000930 } sequence;
931
Guido van Rossum79f25d91997-04-29 20:08:16 +0000932 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000933 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000934 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000935 register int i, j;
936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000938 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939 PyErr_SetString(PyExc_TypeError,
940 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000941 return NULL;
942 }
943
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000945 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000946
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000947 if (func == Py_None && n == 1) {
948 /* map(None, S) is the same as list(S). */
949 return PySequence_List(PyTuple_GetItem(args, 1));
950 }
951
Tim Peters4e9afdc2001-05-03 23:54:49 +0000952 /* Get space for sequence descriptors. Must NULL out the iterator
953 * pointers so that jumping to Fail_2 later doesn't see trash.
954 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
956 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000957 return NULL;
958 }
959 for (i = 0; i < n; ++i) {
960 seqs[i].it = (PyObject*)NULL;
961 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000962 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000963
Tim Peters4e9afdc2001-05-03 23:54:49 +0000964 /* Do a first pass to obtain iterators for the arguments, and set len
965 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000966 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000967 len = 0;
968 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
969 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000970 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000971
Tim Peters4e9afdc2001-05-03 23:54:49 +0000972 /* Get iterator. */
973 curseq = PyTuple_GetItem(args, i+1);
974 sqp->it = PyObject_GetIter(curseq);
975 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000976 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000977 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000978 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000979 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000981 goto Fail_2;
982 }
983
Tim Peters4e9afdc2001-05-03 23:54:49 +0000984 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +0000985 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000986 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +0000987 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
988 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
989 goto Fail_2;
990 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000991 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000992 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +0000993 }
994 if (curlen > len)
995 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000996 }
997
Tim Peters4e9afdc2001-05-03 23:54:49 +0000998 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000999 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001000 goto Fail_2;
1001
Tim Peters4e9afdc2001-05-03 23:54:49 +00001002 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001003 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001005 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001006
Guido van Rossum79f25d91997-04-29 20:08:16 +00001007 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001008 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001009 else if ((alist = PyTuple_New(n)) == NULL)
1010 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001011
1012 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001013 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001014 Py_INCREF(Py_None);
1015 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001016 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001017 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001018 item = PyIter_Next(sqp->it);
1019 if (item)
1020 ++numactive;
1021 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001022 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001023 Py_XDECREF(alist);
1024 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001025 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001026 Py_INCREF(Py_None);
1027 item = Py_None;
1028 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001029 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001030 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001031 if (alist)
1032 PyTuple_SET_ITEM(alist, j, item);
1033 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001034 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001035 }
1036
Guido van Rossum32120311995-07-10 13:52:21 +00001037 if (!alist)
1038 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001039
Tim Peters4e9afdc2001-05-03 23:54:49 +00001040 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001042 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001043 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001044
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001046 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001047 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048 value = PyEval_CallObject(func, alist);
1049 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001050 if (value == NULL)
1051 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001052 }
1053 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001054 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001055 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001056 if (status < 0)
1057 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001058 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001059 else if (PyList_SetItem(result, i, value) < 0)
1060 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001061 }
1062
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001063 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1064 goto Fail_1;
1065
Tim Peters4e9afdc2001-05-03 23:54:49 +00001066 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001067
Guido van Rossum12d12c51993-10-26 17:58:25 +00001068Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001069 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001070Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001071 result = NULL;
1072Succeed:
1073 assert(seqs);
1074 for (i = 0; i < n; ++i)
1075 Py_XDECREF(seqs[i].it);
1076 PyMem_DEL(seqs);
1077 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001078}
1079
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001080PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001081"map(function, sequence[, sequence, ...]) -> list\n\
1082\n\
1083Return a list of the results of applying the function to the items of\n\
1084the argument sequence(s). If more than one sequence is given, the\n\
1085function is called with an argument list consisting of the corresponding\n\
1086item of each sequence, substituting None for missing values when not all\n\
1087sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001089
1090
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001092builtin_next(PyObject *self, PyObject *args)
1093{
1094 PyObject *it, *res;
1095 PyObject *def = NULL;
1096
1097 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1098 return NULL;
1099 if (!PyIter_Check(it)) {
1100 PyErr_Format(PyExc_TypeError,
1101 "%.200s object is not an iterator", it->ob_type->tp_name);
1102 return NULL;
1103 }
1104
1105 res = (*it->ob_type->tp_iternext)(it);
1106 if (res == NULL) {
1107 if (def) {
1108 if (PyErr_Occurred() &&
1109 !PyErr_ExceptionMatches(PyExc_StopIteration))
1110 return NULL;
1111 PyErr_Clear();
1112 Py_INCREF(def);
1113 return def;
1114 } else if (PyErr_Occurred()) {
1115 return NULL;
1116 } else {
1117 PyErr_SetNone(PyExc_StopIteration);
1118 return NULL;
1119 }
1120 }
1121 return res;
1122}
1123
1124PyDoc_STRVAR(next_doc,
1125"next(iterator[, default])\n\
1126\n\
1127Return the next item from the iterator. If default is given and the iterator\n\
1128is exhausted, it is returned instead of raising StopIteration.");
1129
1130
1131static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001132builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001133{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001134 PyObject *v;
1135 PyObject *name;
1136 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001137
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001138 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001139 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001140 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001141 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142 Py_INCREF(Py_None);
1143 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001144}
1145
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001146PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001147"setattr(object, name, value)\n\
1148\n\
1149Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001150``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001151
1152
Guido van Rossum79f25d91997-04-29 20:08:16 +00001153static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001154builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001155{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001156 PyObject *v;
1157 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001159 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001160 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001161 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001162 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001163 Py_INCREF(Py_None);
1164 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001165}
1166
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001168"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001169\n\
1170Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001171``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001172
1173
Guido van Rossum79f25d91997-04-29 20:08:16 +00001174static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001175builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001176{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001177 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001178
Guido van Rossum79f25d91997-04-29 20:08:16 +00001179 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001180 if (x == -1)
1181 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001182 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001183}
1184
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001185PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186"hash(object) -> integer\n\
1187\n\
1188Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001189the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001190
1191
Guido van Rossum79f25d91997-04-29 20:08:16 +00001192static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001193builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001194{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001196 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001197
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001198 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001199 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001201 "hex() argument can't be converted to hex");
1202 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001203 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001204 res = (*nb->nb_hex)(v);
Guido van Rossume1083732007-05-15 21:32:59 +00001205 if (res && !PyString_Check(res) && !PyUnicode_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001206 PyErr_Format(PyExc_TypeError,
1207 "__hex__ returned non-string (type %.200s)",
1208 res->ob_type->tp_name);
1209 Py_DECREF(res);
1210 return NULL;
1211 }
1212 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001213}
1214
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001215PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001216"hex(number) -> string\n\
1217\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001218Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001219
1220
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001222builtin_iter(PyObject *self, PyObject *args)
1223{
1224 PyObject *v, *w = NULL;
1225
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001226 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001227 return NULL;
1228 if (w == NULL)
1229 return PyObject_GetIter(v);
1230 if (!PyCallable_Check(v)) {
1231 PyErr_SetString(PyExc_TypeError,
1232 "iter(v, w): v must be callable");
1233 return NULL;
1234 }
1235 return PyCallIter_New(v, w);
1236}
1237
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001238PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001239"iter(collection) -> iterator\n\
1240iter(callable, sentinel) -> iterator\n\
1241\n\
1242Get an iterator from an object. In the first form, the argument must\n\
1243supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001244In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001245
1246
1247static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001248builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001249{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001250 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001251
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001252 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001253 if (res < 0 && PyErr_Occurred())
1254 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001255 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001256}
1257
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001258PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001259"len(object) -> integer\n\
1260\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001261Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001262
1263
Guido van Rossum79f25d91997-04-29 20:08:16 +00001264static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001265builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001266{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001267 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001268
Guido van Rossum79f25d91997-04-29 20:08:16 +00001269 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001270 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001271 return d;
1272}
1273
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001274PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001275"locals() -> dictionary\n\
1276\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001277Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001278
1279
Guido van Rossum79f25d91997-04-29 20:08:16 +00001280static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001281min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001282{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001283 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001284 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001285
Guido van Rossum79f25d91997-04-29 20:08:16 +00001286 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001287 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001288 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001289 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001290
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001291 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1292 keyfunc = PyDict_GetItemString(kwds, "key");
1293 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001294 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001295 "%s() got an unexpected keyword argument", name);
1296 return NULL;
1297 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001298 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001299
Tim Petersc3074532001-05-03 07:00:32 +00001300 it = PyObject_GetIter(v);
1301 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001302 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001303
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 maxitem = NULL; /* the result */
1305 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001306 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001307 /* get the value from the key function */
1308 if (keyfunc != NULL) {
1309 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1310 if (val == NULL)
1311 goto Fail_it_item;
1312 }
1313 /* no key function; the value is the item */
1314 else {
1315 val = item;
1316 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001317 }
Tim Petersc3074532001-05-03 07:00:32 +00001318
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319 /* maximum value and item are unset; set them */
1320 if (maxval == NULL) {
1321 maxitem = item;
1322 maxval = val;
1323 }
1324 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001325 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001326 int cmp = PyObject_RichCompareBool(val, maxval, op);
1327 if (cmp < 0)
1328 goto Fail_it_item_and_val;
1329 else if (cmp > 0) {
1330 Py_DECREF(maxval);
1331 Py_DECREF(maxitem);
1332 maxval = val;
1333 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001334 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001335 else {
1336 Py_DECREF(item);
1337 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001338 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001339 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001340 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001341 if (PyErr_Occurred())
1342 goto Fail_it;
1343 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001344 PyErr_Format(PyExc_ValueError,
1345 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001346 assert(maxitem == NULL);
1347 }
1348 else
1349 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001350 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001351 return maxitem;
1352
1353Fail_it_item_and_val:
1354 Py_DECREF(val);
1355Fail_it_item:
1356 Py_DECREF(item);
1357Fail_it:
1358 Py_XDECREF(maxval);
1359 Py_XDECREF(maxitem);
1360 Py_DECREF(it);
1361 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001362}
1363
Guido van Rossum79f25d91997-04-29 20:08:16 +00001364static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001365builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001366{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001367 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001368}
1369
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001370PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001371"min(iterable[, key=func]) -> value\n\
1372min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001373\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001374With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001375With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001376
1377
Guido van Rossum79f25d91997-04-29 20:08:16 +00001378static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001380{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001381 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001382}
1383
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001384PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001385"max(iterable[, key=func]) -> value\n\
1386max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001387\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001388With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001389With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001390
1391
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001393builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001394{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001395 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001396 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001397
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001398 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1399 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001400 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001401 "oct() argument can't be converted to oct");
1402 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001403 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001404 res = (*nb->nb_oct)(v);
Guido van Rossume1083732007-05-15 21:32:59 +00001405 if (res && !PyString_Check(res) && !PyUnicode_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001406 PyErr_Format(PyExc_TypeError,
1407 "__oct__ returned non-string (type %.200s)",
1408 res->ob_type->tp_name);
1409 Py_DECREF(res);
1410 return NULL;
1411 }
1412 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001413}
1414
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001415PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001416"oct(number) -> string\n\
1417\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001418Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001419
1420
Guido van Rossum79f25d91997-04-29 20:08:16 +00001421static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001422builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001423{
Guido van Rossum09095f32000-03-10 23:00:52 +00001424 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001425 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001426
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001427 if (PyString_Check(obj)) {
1428 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001429 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001430 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001431 return PyInt_FromLong(ord);
1432 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001433 }
1434 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001435 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001436 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001437 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001438 return PyInt_FromLong(ord);
1439 }
Guido van Rossum6f376c42007-05-24 14:31:33 +00001440 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001441 else if (PyBytes_Check(obj)) {
1442 /* XXX Hopefully this is temporary */
1443 size = PyBytes_GET_SIZE(obj);
1444 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001445 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001446 return PyInt_FromLong(ord);
1447 }
1448 }
1449 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001450 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001451 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001452 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001453 return NULL;
1454 }
1455
Guido van Rossumad991772001-01-12 16:03:05 +00001456 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001457 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001458 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001459 size);
1460 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001461}
1462
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001463PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001464"ord(c) -> integer\n\
1465\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001466Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001467
1468
Guido van Rossum79f25d91997-04-29 20:08:16 +00001469static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001470builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001471{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001472 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001473
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001474 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001475 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001476 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001477}
1478
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001479PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001480"pow(x, y[, z]) -> number\n\
1481\n\
1482With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001483equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001484
1485
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001486
Guido van Rossum34343512006-11-30 22:13:52 +00001487static PyObject *
1488builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1489{
1490 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001491 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001492 PyObject *sep = NULL, *end = NULL, *file = NULL;
1493 int i, err;
1494
Georg Brandl257d3d92007-02-26 10:35:10 +00001495 if (dummy_args == NULL) {
1496 if (!(dummy_args = PyTuple_New(0)))
1497 return NULL;
1498 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001499 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001500 kwlist, &sep, &end, &file))
1501 return NULL;
1502 if (file == NULL || file == Py_None)
1503 file = PySys_GetObject("stdout");
1504
Georg Brandl16f3e032006-11-30 22:46:03 +00001505 if (sep && sep != Py_None && !PyString_Check(sep) &&
1506 !PyUnicode_Check(sep)) {
1507 PyErr_Format(PyExc_TypeError,
1508 "sep must be None, str or unicode, not %.200s",
1509 sep->ob_type->tp_name);
1510 return NULL;
1511 }
1512 if (end && end != Py_None && !PyString_Check(end) &&
1513 !PyUnicode_Check(end)) {
1514 PyErr_Format(PyExc_TypeError,
1515 "end must be None, str or unicode, not %.200s",
1516 end->ob_type->tp_name);
1517 return NULL;
1518 }
Guido van Rossum34343512006-11-30 22:13:52 +00001519
1520 for (i = 0; i < PyTuple_Size(args); i++) {
1521 if (i > 0) {
1522 if (sep == NULL || sep == Py_None)
1523 err = PyFile_WriteString(" ", file);
1524 else
1525 err = PyFile_WriteObject(sep, file,
1526 Py_PRINT_RAW);
1527 if (err)
1528 return NULL;
1529 }
1530 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1531 Py_PRINT_RAW);
1532 if (err)
1533 return NULL;
1534 }
1535
1536 if (end == NULL || end == Py_None)
1537 err = PyFile_WriteString("\n", file);
1538 else
1539 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1540 if (err)
1541 return NULL;
1542
1543 Py_RETURN_NONE;
1544}
1545
1546PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001547"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001548\n\
1549Prints the values to a stream, or to sys.stdout by default.\n\
1550Optional keyword arguments:\n\
1551file: a file-like object (stream); defaults to the current sys.stdout.\n\
1552sep: string inserted between values, default a space.\n\
1553end: string appended after the last value, default a newline.");
1554
1555
Guido van Rossuma88a0332007-02-26 16:59:55 +00001556static PyObject *
1557builtin_input(PyObject *self, PyObject *args)
1558{
Guido van Rossumeba76962007-05-27 09:13:28 +00001559 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001560 PyObject *fin = PySys_GetObject("stdin");
1561 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001562 PyObject *ferr = PySys_GetObject("stderr");
1563 PyObject *tmp;
1564 long fd;
1565 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001566
Guido van Rossumeba76962007-05-27 09:13:28 +00001567 /* Parse arguments */
1568 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001569 return NULL;
1570
Guido van Rossumeba76962007-05-27 09:13:28 +00001571 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001572 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001573 PyErr_SetString(PyExc_RuntimeError,
1574 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001575 return NULL;
1576 }
1577 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001578 PyErr_SetString(PyExc_RuntimeError,
1579 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001580 return NULL;
1581 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001582 if (ferr == NULL) {
1583 PyErr_SetString(PyExc_RuntimeError,
1584 "input(): lost sys.stderr");
1585 return NULL;
1586 }
1587
1588 /* First of all, flush stderr */
1589 tmp = PyObject_CallMethod(ferr, "flush", "");
1590 if (tmp == NULL)
1591 return NULL;
1592 Py_DECREF(tmp);
1593
1594 /* We should only use (GNU) readline if Python's sys.stdin and
1595 sys.stdout are the same as C's stdin and stdout, because we
1596 need to pass it those. */
1597 tmp = PyObject_CallMethod(fin, "fileno", "");
1598 if (tmp == NULL)
1599 return NULL;
1600 fd = PyInt_AsLong(tmp);
1601 if (fd < 0 && PyErr_Occurred())
1602 return NULL;
1603 Py_DECREF(tmp);
1604 tty = fd == fileno(stdin) && isatty(fd);
1605 if (tty) {
1606 tmp = PyObject_CallMethod(fout, "fileno", "");
1607 if (tmp == NULL)
1608 return NULL;
1609 fd = PyInt_AsLong(tmp);
1610 Py_DECREF(tmp);
1611 if (fd < 0 && PyErr_Occurred())
1612 return NULL;
1613 tty = fd == fileno(stdout) && isatty(fd);
1614 }
1615
1616 /* If we're interactive, use (GNU) readline */
1617 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001618 PyObject *po;
1619 char *prompt;
1620 char *s;
1621 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001622 tmp = PyObject_CallMethod(fout, "flush", "");
1623 if (tmp == NULL)
1624 return NULL;
1625 Py_DECREF(tmp);
1626 if (promptarg != NULL) {
1627 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001628 if (po == NULL)
1629 return NULL;
1630 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001631 if (prompt == NULL) {
1632 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001633 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001634 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001635 }
1636 else {
1637 po = NULL;
1638 prompt = "";
1639 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001640 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001641 Py_XDECREF(po);
1642 if (s == NULL) {
1643 if (!PyErr_Occurred())
1644 PyErr_SetNone(PyExc_KeyboardInterrupt);
1645 return NULL;
1646 }
1647 if (*s == '\0') {
1648 PyErr_SetNone(PyExc_EOFError);
1649 result = NULL;
1650 }
1651 else { /* strip trailing '\n' */
1652 size_t len = strlen(s);
1653 if (len > PY_SSIZE_T_MAX) {
1654 PyErr_SetString(PyExc_OverflowError,
1655 "input: input too long");
1656 result = NULL;
1657 }
1658 else {
1659 result = PyString_FromStringAndSize(s, len-1);
1660 }
1661 }
1662 PyMem_FREE(s);
1663 return result;
1664 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001665
1666 /* Fallback if we're not interactive */
1667 if (promptarg != NULL) {
1668 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001669 return NULL;
1670 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001671 tmp = PyObject_CallMethod(fout, "flush", "");
1672 if (tmp == NULL)
1673 return NULL;
1674 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001675 return PyFile_GetLine(fin, -1);
1676}
1677
1678PyDoc_STRVAR(input_doc,
1679"input([prompt]) -> string\n\
1680\n\
1681Read a string from standard input. The trailing newline is stripped.\n\
1682If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1683On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1684is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001685
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001686
Guido van Rossum79f25d91997-04-29 20:08:16 +00001687static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001688builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001689{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001690 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001691}
1692
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001693PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001694"repr(object) -> string\n\
1695\n\
1696Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001697For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001698
1699
Guido van Rossum79f25d91997-04-29 20:08:16 +00001700static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001701builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001702{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001703 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001704 double f;
1705 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001706 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001707 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001708
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001709 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1710 kwlist, &number, &ndigits))
1711 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001712 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001713 i = abs(ndigits);
1714 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001715 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001716 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001717 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001718 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001719 number *= f;
1720 if (number >= 0.0)
1721 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001722 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001723 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001724 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001725 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001726 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001727 number /= f;
1728 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001729}
1730
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001731PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001732"round(number[, ndigits]) -> floating point number\n\
1733\n\
1734Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001735This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001736
Raymond Hettinger64958a12003-12-17 20:43:33 +00001737static PyObject *
1738builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1739{
1740 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1741 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001742 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001743 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001744
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001745 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001746 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1747 kwlist, &seq, &compare, &keyfunc, &reverse))
1748 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001749
1750 newlist = PySequence_List(seq);
1751 if (newlist == NULL)
1752 return NULL;
1753
1754 callable = PyObject_GetAttrString(newlist, "sort");
1755 if (callable == NULL) {
1756 Py_DECREF(newlist);
1757 return NULL;
1758 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001759
Raymond Hettinger64958a12003-12-17 20:43:33 +00001760 newargs = PyTuple_GetSlice(args, 1, 4);
1761 if (newargs == NULL) {
1762 Py_DECREF(newlist);
1763 Py_DECREF(callable);
1764 return NULL;
1765 }
1766
1767 v = PyObject_Call(callable, newargs, kwds);
1768 Py_DECREF(newargs);
1769 Py_DECREF(callable);
1770 if (v == NULL) {
1771 Py_DECREF(newlist);
1772 return NULL;
1773 }
1774 Py_DECREF(v);
1775 return newlist;
1776}
1777
1778PyDoc_STRVAR(sorted_doc,
1779"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001780
Guido van Rossum79f25d91997-04-29 20:08:16 +00001781static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001782builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001783{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001784 PyObject *v = NULL;
1785 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001786
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001787 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001788 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001789 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001790 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001791 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001792 if (!PyErr_Occurred())
1793 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001794 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001795 }
1796 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001797 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001798 }
1799 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001800 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001801 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001802 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001803 "vars() argument must have __dict__ attribute");
1804 return NULL;
1805 }
1806 }
1807 return d;
1808}
1809
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001810PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001811"vars([object]) -> dictionary\n\
1812\n\
1813Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001814With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001815
Alex Martellia70b1912003-04-22 08:12:33 +00001816
1817static PyObject*
1818builtin_sum(PyObject *self, PyObject *args)
1819{
1820 PyObject *seq;
1821 PyObject *result = NULL;
1822 PyObject *temp, *item, *iter;
1823
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001824 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001825 return NULL;
1826
1827 iter = PyObject_GetIter(seq);
1828 if (iter == NULL)
1829 return NULL;
1830
1831 if (result == NULL) {
1832 result = PyInt_FromLong(0);
1833 if (result == NULL) {
1834 Py_DECREF(iter);
1835 return NULL;
1836 }
1837 } else {
1838 /* reject string values for 'start' parameter */
1839 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1840 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001841 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001842 Py_DECREF(iter);
1843 return NULL;
1844 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001845 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001846 }
1847
1848 for(;;) {
1849 item = PyIter_Next(iter);
1850 if (item == NULL) {
1851 /* error, or end-of-sequence */
1852 if (PyErr_Occurred()) {
1853 Py_DECREF(result);
1854 result = NULL;
1855 }
1856 break;
1857 }
Alex Martellia253e182003-10-25 23:24:14 +00001858 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001859 Py_DECREF(result);
1860 Py_DECREF(item);
1861 result = temp;
1862 if (result == NULL)
1863 break;
1864 }
1865 Py_DECREF(iter);
1866 return result;
1867}
1868
1869PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001870"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001871\n\
1872Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001873of parameter 'start' (which defaults to 0). When the sequence is\n\
1874empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001875
1876
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001877static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001878builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001879{
1880 PyObject *inst;
1881 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001882 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001883
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001884 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001885 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001886
Guido van Rossum823649d2001-03-21 18:40:58 +00001887 retval = PyObject_IsInstance(inst, cls);
1888 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001889 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001890 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001891}
1892
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001893PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001894"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001895\n\
1896Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001897With a type as second argument, return whether that is the object's type.\n\
1898The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001899isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001900
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001901
1902static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001903builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001904{
1905 PyObject *derived;
1906 PyObject *cls;
1907 int retval;
1908
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001909 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001910 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001911
Guido van Rossum823649d2001-03-21 18:40:58 +00001912 retval = PyObject_IsSubclass(derived, cls);
1913 if (retval < 0)
1914 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001915 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001916}
1917
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001918PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001919"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001920\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001921Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1922When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1923is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001924
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001925
Barry Warsawbd599b52000-08-03 15:45:29 +00001926static PyObject*
1927builtin_zip(PyObject *self, PyObject *args)
1928{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001929 /* args must be a tuple */
1930 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001931
Guido van Rossumb65fb332006-08-25 23:26:40 +00001932 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001933}
1934
1935
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001936PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001937"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001938\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001939Return an iterator yielding tuples, where each tuple contains the\n\
1940corresponding element from each of the argument iterables.\n\
1941The returned iterator ends when the shortest argument iterable is exhausted.\n\
1942NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00001943
1944
Guido van Rossum79f25d91997-04-29 20:08:16 +00001945static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001946 {"__build_class__", (PyCFunction)builtin___build_class__,
1947 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001948 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001949 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001950 {"all", builtin_all, METH_O, all_doc},
1951 {"any", builtin_any, METH_O, any_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001952 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1953 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001954 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001955 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001956 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1957 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1958 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1959 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001960 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001961 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1962 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1963 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1964 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1965 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1966 {"hash", builtin_hash, METH_O, hash_doc},
1967 {"hex", builtin_hex, METH_O, hex_doc},
1968 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001969 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001970 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1971 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1972 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1973 {"len", builtin_len, METH_O, len_doc},
1974 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
1975 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001976 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
1977 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00001978 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001979 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001980 {"ord", builtin_ord, METH_O, ord_doc},
1981 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00001982 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001983 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001984 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001985 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00001986 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00001987 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001988 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001989 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00001990 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00001991};
1992
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001993PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001994"Built-in functions, exceptions, and other objects.\n\
1995\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001996Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001997
Guido van Rossum25ce5661997-08-02 03:10:38 +00001998PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001999_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002000{
Fred Drake5550de32000-06-20 04:54:19 +00002001 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002002 mod = Py_InitModule4("__builtin__", builtin_methods,
2003 builtin_doc, (PyObject *)NULL,
2004 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002005 if (mod == NULL)
2006 return NULL;
2007 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002008
Tim Peters7571a0f2003-03-23 17:52:28 +00002009#ifdef Py_TRACE_REFS
2010 /* __builtin__ exposes a number of statically allocated objects
2011 * that, before this code was added in 2.3, never showed up in
2012 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2013 * result, programs leaking references to None and False (etc)
2014 * couldn't be diagnosed by examining sys.getobjects(0).
2015 */
2016#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2017#else
2018#define ADD_TO_ALL(OBJECT) (void)0
2019#endif
2020
Tim Peters4b7625e2001-09-13 21:37:17 +00002021#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002022 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2023 return NULL; \
2024 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002025
2026 SETBUILTIN("None", Py_None);
2027 SETBUILTIN("Ellipsis", Py_Ellipsis);
2028 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002029 SETBUILTIN("False", Py_False);
2030 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002031 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002032 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002033 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002034 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002035 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002036#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002037 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002038#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002039 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002040 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002041 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002042 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002043 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002044 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002045 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002046 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002047 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002048 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002049 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002050 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002051 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002052 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002053 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002054 SETBUILTIN("super", &PySuper_Type);
2055 SETBUILTIN("tuple", &PyTuple_Type);
2056 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002057 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002058 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2059 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002060 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002061 }
2062 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002063
Guido van Rossum25ce5661997-08-02 03:10:38 +00002064 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002065#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002066#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002067}
2068
Guido van Rossume77a7571993-11-03 15:01:26 +00002069/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002070
Guido van Rossum79f25d91997-04-29 20:08:16 +00002071static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002072filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002073{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002074 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002075 Py_ssize_t i, j;
2076 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002077
Guido van Rossumb7b45621995-08-04 04:07:45 +00002078 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002079 if (PyTuple_CheckExact(tuple))
2080 Py_INCREF(tuple);
2081 else
2082 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002083 return tuple;
2084 }
2085
Guido van Rossum79f25d91997-04-29 20:08:16 +00002086 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002087 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002088
Guido van Rossum12d12c51993-10-26 17:58:25 +00002089 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002090 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002091 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002092
Walter Dörwald8dd19322003-02-10 17:36:40 +00002093 if (tuple->ob_type->tp_as_sequence &&
2094 tuple->ob_type->tp_as_sequence->sq_item) {
2095 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002096 if (item == NULL)
2097 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002098 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002099 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002100 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002101 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002102 if (func == Py_None) {
2103 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002104 good = item;
2105 }
2106 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002107 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002108 if (arg == NULL) {
2109 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002110 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002111 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002112 good = PyEval_CallObject(func, arg);
2113 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002114 if (good == NULL) {
2115 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002116 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002117 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002118 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002119 ok = PyObject_IsTrue(good);
2120 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002121 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002122 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002123 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002124 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002125 else
2126 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002127 }
2128
Tim Peters4324aa32001-05-28 22:30:08 +00002129 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002130 return NULL;
2131
Guido van Rossum12d12c51993-10-26 17:58:25 +00002132 return result;
2133
Guido van Rossum12d12c51993-10-26 17:58:25 +00002134Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002135 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002136 return NULL;
2137}
2138
2139
Guido van Rossume77a7571993-11-03 15:01:26 +00002140/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002141
Guido van Rossum79f25d91997-04-29 20:08:16 +00002142static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002143filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002144{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002145 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002146 Py_ssize_t i, j;
2147 Py_ssize_t len = PyString_Size(strobj);
2148 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002149
Guido van Rossum79f25d91997-04-29 20:08:16 +00002150 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002151 /* If it's a real string we can return the original,
2152 * as no character is ever false and __getitem__
2153 * does return this character. If it's a subclass
2154 * we must go through the __getitem__ loop */
2155 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002156 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002157 return strobj;
2158 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002159 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002160 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002161 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002162
Guido van Rossum12d12c51993-10-26 17:58:25 +00002163 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002164 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002165 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002166
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002167 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2168 if (item == NULL)
2169 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002170 if (func==Py_None) {
2171 ok = 1;
2172 } else {
2173 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002174 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002175 if (arg == NULL) {
2176 Py_DECREF(item);
2177 goto Fail_1;
2178 }
2179 good = PyEval_CallObject(func, arg);
2180 Py_DECREF(arg);
2181 if (good == NULL) {
2182 Py_DECREF(item);
2183 goto Fail_1;
2184 }
2185 ok = PyObject_IsTrue(good);
2186 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002187 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002188 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002189 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002190 if (!PyString_Check(item)) {
2191 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2192 " __getitem__ returned different type");
2193 Py_DECREF(item);
2194 goto Fail_1;
2195 }
2196 reslen = PyString_GET_SIZE(item);
2197 if (reslen == 1) {
2198 PyString_AS_STRING(result)[j++] =
2199 PyString_AS_STRING(item)[0];
2200 } else {
2201 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002202 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002203 if (need > outlen) {
2204 /* overallocate, to avoid reallocations */
2205 if (need<2*outlen)
2206 need = 2*outlen;
2207 if (_PyString_Resize(&result, need)) {
2208 Py_DECREF(item);
2209 return NULL;
2210 }
2211 outlen = need;
2212 }
2213 memcpy(
2214 PyString_AS_STRING(result) + j,
2215 PyString_AS_STRING(item),
2216 reslen
2217 );
2218 j += reslen;
2219 }
2220 }
Tim Peters388ed082001-04-07 20:34:48 +00002221 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002222 }
2223
Walter Dörwald903f1e02003-02-04 16:28:00 +00002224 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002225 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002226
Guido van Rossum12d12c51993-10-26 17:58:25 +00002227 return result;
2228
Guido van Rossum12d12c51993-10-26 17:58:25 +00002229Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002230 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002231 return NULL;
2232}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002233
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002234/* Helper for filter(): filter a Unicode object through a function */
2235
2236static PyObject *
2237filterunicode(PyObject *func, PyObject *strobj)
2238{
2239 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002240 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002241 Py_ssize_t len = PyUnicode_GetSize(strobj);
2242 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002243
2244 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002245 /* If it's a real string we can return the original,
2246 * as no character is ever false and __getitem__
2247 * does return this character. If it's a subclass
2248 * we must go through the __getitem__ loop */
2249 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002250 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002251 return strobj;
2252 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002253 }
2254 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2255 return NULL;
2256
2257 for (i = j = 0; i < len; ++i) {
2258 PyObject *item, *arg, *good;
2259 int ok;
2260
2261 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2262 if (item == NULL)
2263 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002264 if (func == Py_None) {
2265 ok = 1;
2266 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002267 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002268 if (arg == NULL) {
2269 Py_DECREF(item);
2270 goto Fail_1;
2271 }
2272 good = PyEval_CallObject(func, arg);
2273 Py_DECREF(arg);
2274 if (good == NULL) {
2275 Py_DECREF(item);
2276 goto Fail_1;
2277 }
2278 ok = PyObject_IsTrue(good);
2279 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002280 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002281 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002282 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002283 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002284 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002285 "can't filter unicode to unicode:"
2286 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002287 Py_DECREF(item);
2288 goto Fail_1;
2289 }
2290 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002291 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002292 PyUnicode_AS_UNICODE(result)[j++] =
2293 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002294 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002295 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002296 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002297 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002298 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002299 to avoid reallocations */
2300 if (need < 2 * outlen)
2301 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002302 if (PyUnicode_Resize(
2303 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002304 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002305 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002306 }
2307 outlen = need;
2308 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002309 memcpy(PyUnicode_AS_UNICODE(result) + j,
2310 PyUnicode_AS_UNICODE(item),
2311 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002312 j += reslen;
2313 }
2314 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002315 Py_DECREF(item);
2316 }
2317
Walter Dörwald903f1e02003-02-04 16:28:00 +00002318 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002319 PyUnicode_Resize(&result, j);
2320
2321 return result;
2322
2323Fail_1:
2324 Py_DECREF(result);
2325 return NULL;
2326}