blob: 43bbea92b2274d91bedb7f661d06b0c5b6e351d9 [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);
51 if (!PyString_Check(name)) {
52 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) &&
662 !PyCode_Check(prog) &&
663 !PyFile_Check(prog)) {
664 PyErr_Format(PyExc_TypeError,
665 "exec() arg 1 must be a string, file, or code "
666 "object, not %.100s", prog->ob_type->tp_name);
667 return NULL;
668 }
669 if (!PyDict_Check(globals)) {
670 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
671 globals->ob_type->tp_name);
672 return NULL;
673 }
674 if (!PyMapping_Check(locals)) {
675 PyErr_Format(PyExc_TypeError,
676 "arg 3 must be a mapping or None, not %.100s",
677 locals->ob_type->tp_name);
678 return NULL;
679 }
680 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
681 if (PyDict_SetItemString(globals, "__builtins__",
682 PyEval_GetBuiltins()) != 0)
683 return NULL;
684 }
685
686 if (PyCode_Check(prog)) {
687 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
688 PyErr_SetString(PyExc_TypeError,
689 "code object passed to exec() may not "
690 "contain free variables");
691 return NULL;
692 }
693 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
694 }
695 else if (PyFile_Check(prog)) {
696 FILE *fp = PyFile_AsFile(prog);
697 char *name = PyString_AsString(PyFile_Name(prog));
698 PyCompilerFlags cf;
699 cf.cf_flags = 0;
700 if (PyEval_MergeCompilerFlags(&cf))
701 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
702 locals, &cf);
703 else
704 v = PyRun_File(fp, name, Py_file_input, globals,
705 locals);
706 }
707 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000708 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000709 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000710 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000711 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000712 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000713 if (PyEval_MergeCompilerFlags(&cf))
714 v = PyRun_StringFlags(str, Py_file_input, globals,
715 locals, &cf);
716 else
717 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000718 }
719 if (v == NULL)
720 return NULL;
721 Py_DECREF(v);
722 Py_RETURN_NONE;
723}
724
725PyDoc_STRVAR(exec_doc,
726"exec(object[, globals[, locals]])\n\
727\n\
728Read and execute code from a object, which can be a string, a code\n\
729object or a file object.\n\
730The globals and locals are dictionaries, defaulting to the current\n\
731globals and locals. If only globals is given, locals defaults to it.");
732
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000733
Guido van Rossum79f25d91997-04-29 20:08:16 +0000734static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000735builtin_execfile(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000736{
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000737 char *filename;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738 PyObject *globals = Py_None, *locals = Py_None;
739 PyObject *res;
Guido van Rossumb3a639e2001-09-05 13:37:47 +0000740 FILE* fp = NULL;
Tim Peters5ba58662001-07-16 02:29:45 +0000741 PyCompilerFlags cf;
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000742 int exists;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000743
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000744 if (!PyArg_ParseTuple(args, "s|O!O:execfile",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745 &filename,
Guido van Rossum79f25d91997-04-29 20:08:16 +0000746 &PyDict_Type, &globals,
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000747 &locals))
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000748 return NULL;
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000749 if (locals != Py_None && !PyMapping_Check(locals)) {
750 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
751 return NULL;
752 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 if (globals == Py_None) {
754 globals = PyEval_GetGlobals();
755 if (locals == Py_None)
756 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000757 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000758 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000759 locals = globals;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000760 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
761 if (PyDict_SetItemString(globals, "__builtins__",
762 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000763 return NULL;
764 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000765
766 exists = 0;
767 /* Test for existence or directory. */
Martin v. Löwis3484a182002-03-09 12:07:51 +0000768#if defined(PLAN9)
769 {
770 Dir *d;
771
772 if ((d = dirstat(filename))!=nil) {
773 if(d->mode & DMDIR)
774 werrstr("is a directory");
775 else
776 exists = 1;
777 free(d);
778 }
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000779 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000780#elif defined(RISCOS)
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000781 if (object_exists(filename)) {
782 if (isdir(filename))
783 errno = EISDIR;
784 else
785 exists = 1;
786 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000787#else /* standard Posix */
788 {
789 struct stat s;
790 if (stat(filename, &s) == 0) {
791 if (S_ISDIR(s.st_mode))
Andrew MacIntyreda4d6cb2004-03-29 11:53:38 +0000792# if defined(PYOS_OS2) && defined(PYCC_VACPP)
Martin v. Löwis3484a182002-03-09 12:07:51 +0000793 errno = EOS2ERR;
794# else
795 errno = EISDIR;
796# endif
797 else
798 exists = 1;
799 }
800 }
801#endif
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000802
803 if (exists) {
804 Py_BEGIN_ALLOW_THREADS
Jack Jansen7b8c7542002-04-14 20:12:41 +0000805 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Martin v. Löwis6b3a2c42001-08-08 05:30:36 +0000806 Py_END_ALLOW_THREADS
807
808 if (fp == NULL) {
809 exists = 0;
810 }
811 }
812
813 if (!exists) {
Peter Schneider-Kamp4c013422002-08-27 16:58:00 +0000814 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000815 return NULL;
816 }
Tim Peters5ba58662001-07-16 02:29:45 +0000817 cf.cf_flags = 0;
818 if (PyEval_MergeCompilerFlags(&cf))
Tim Peters748b8bb2001-04-28 08:20:22 +0000819 res = PyRun_FileExFlags(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000820 locals, 1, &cf);
Tim Peters5ba58662001-07-16 02:29:45 +0000821 else
Tim Peters748b8bb2001-04-28 08:20:22 +0000822 res = PyRun_FileEx(fp, filename, Py_file_input, globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000823 locals, 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000824 return res;
Guido van Rossum0f61f8a1992-02-25 18:55:05 +0000825}
826
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000827PyDoc_STRVAR(execfile_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000828"execfile(filename[, globals[, locals]])\n\
829\n\
830Read and execute a Python script from a file.\n\
831The globals and locals are dictionaries, defaulting to the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000832globals and locals. If only globals is given, locals defaults to it.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000833
834
Guido van Rossum79f25d91997-04-29 20:08:16 +0000835static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000836builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000837{
Guido van Rossum950ff291998-06-29 13:38:57 +0000838 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000840
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000841 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000842 return NULL;
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000843 if (PyUnicode_Check(name)) {
844 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
845 if (name == NULL)
846 return NULL;
847 }
848
849 if (!PyString_Check(name)) {
850 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000851 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000852 return NULL;
853 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000854 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000855 if (result == NULL && dflt != NULL &&
856 PyErr_ExceptionMatches(PyExc_AttributeError))
857 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000858 PyErr_Clear();
859 Py_INCREF(dflt);
860 result = dflt;
861 }
862 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000863}
864
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000865PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000866"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000867\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000868Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
869When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000870exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000871
872
Guido van Rossum79f25d91997-04-29 20:08:16 +0000873static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000874builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000875{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000876 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000877
Guido van Rossum79f25d91997-04-29 20:08:16 +0000878 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000879 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000880 return d;
881}
882
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000883PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000884"globals() -> dictionary\n\
885\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000886Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000887
888
Guido van Rossum79f25d91997-04-29 20:08:16 +0000889static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000890builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000891{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000892 PyObject *v;
893 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000894
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000895 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000896 return NULL;
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000897 if (PyUnicode_Check(name)) {
898 name = _PyUnicode_AsDefaultEncodedString(name, NULL);
899 if (name == NULL)
900 return NULL;
901 }
902
903 if (!PyString_Check(name)) {
904 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000905 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000906 return NULL;
907 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000908 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000909 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000911 Py_INCREF(Py_False);
912 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000913 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000915 Py_INCREF(Py_True);
916 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000917}
918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000919PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000920"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921\n\
922Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000923(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000924
925
Guido van Rossum79f25d91997-04-29 20:08:16 +0000926static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000927builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000928{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000929 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000930}
931
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000932PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000933"id(object) -> integer\n\
934\n\
935Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000937
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000940builtin_map(PyObject *self, PyObject *args)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000941{
942 typedef struct {
Tim Peters4e9afdc2001-05-03 23:54:49 +0000943 PyObject *it; /* the iterator object */
944 int saw_StopIteration; /* bool: did the iterator end? */
Guido van Rossum12d12c51993-10-26 17:58:25 +0000945 } sequence;
946
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 PyObject *func, *result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000948 sequence *seqs = NULL, *sqp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000949 Py_ssize_t n, len;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000950 register int i, j;
951
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952 n = PyTuple_Size(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000953 if (n < 2) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000954 PyErr_SetString(PyExc_TypeError,
955 "map() requires at least two args");
Guido van Rossum12d12c51993-10-26 17:58:25 +0000956 return NULL;
957 }
958
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959 func = PyTuple_GetItem(args, 0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000960 n--;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000961
Guido van Rossumfa4ac711998-07-10 17:37:30 +0000962 if (func == Py_None && n == 1) {
963 /* map(None, S) is the same as list(S). */
964 return PySequence_List(PyTuple_GetItem(args, 1));
965 }
966
Tim Peters4e9afdc2001-05-03 23:54:49 +0000967 /* Get space for sequence descriptors. Must NULL out the iterator
968 * pointers so that jumping to Fail_2 later doesn't see trash.
969 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000970 if ((seqs = PyMem_NEW(sequence, n)) == NULL) {
971 PyErr_NoMemory();
Tim Peters4e9afdc2001-05-03 23:54:49 +0000972 return NULL;
973 }
974 for (i = 0; i < n; ++i) {
975 seqs[i].it = (PyObject*)NULL;
976 seqs[i].saw_StopIteration = 0;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +0000977 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000978
Tim Peters4e9afdc2001-05-03 23:54:49 +0000979 /* Do a first pass to obtain iterators for the arguments, and set len
980 * to the largest of their lengths.
Tim Peters748b8bb2001-04-28 08:20:22 +0000981 */
Tim Peters4e9afdc2001-05-03 23:54:49 +0000982 len = 0;
983 for (i = 0, sqp = seqs; i < n; ++i, ++sqp) {
984 PyObject *curseq;
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000985 Py_ssize_t curlen;
Guido van Rossumad991772001-01-12 16:03:05 +0000986
Tim Peters4e9afdc2001-05-03 23:54:49 +0000987 /* Get iterator. */
988 curseq = PyTuple_GetItem(args, i+1);
989 sqp->it = PyObject_GetIter(curseq);
990 if (sqp->it == NULL) {
Guido van Rossum12d12c51993-10-26 17:58:25 +0000991 static char errmsg[] =
Tim Peters4e9afdc2001-05-03 23:54:49 +0000992 "argument %d to map() must support iteration";
Guido van Rossum15e33a41997-04-30 19:00:27 +0000993 char errbuf[sizeof(errmsg) + 25];
Jeremy Hylton518ab1c2001-11-28 20:42:20 +0000994 PyOS_snprintf(errbuf, sizeof(errbuf), errmsg, i+2);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995 PyErr_SetString(PyExc_TypeError, errbuf);
Guido van Rossum12d12c51993-10-26 17:58:25 +0000996 goto Fail_2;
997 }
998
Tim Peters4e9afdc2001-05-03 23:54:49 +0000999 /* Update len. */
Armin Rigof5b3e362006-02-11 21:32:43 +00001000 curlen = _PyObject_LengthHint(curseq);
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001001 if (curlen < 0) {
Raymond Hettingera710b332005-08-21 11:03:59 +00001002 if (!PyErr_ExceptionMatches(PyExc_TypeError) &&
1003 !PyErr_ExceptionMatches(PyExc_AttributeError)) {
1004 goto Fail_2;
1005 }
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001006 PyErr_Clear();
Tim Peters4e9afdc2001-05-03 23:54:49 +00001007 curlen = 8; /* arbitrary */
Raymond Hettinger77f3c872004-01-04 08:54:44 +00001008 }
1009 if (curlen > len)
1010 len = curlen;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001011 }
1012
Tim Peters4e9afdc2001-05-03 23:54:49 +00001013 /* Get space for the result list. */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001014 if ((result = (PyObject *) PyList_New(len)) == NULL)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001015 goto Fail_2;
1016
Tim Peters4e9afdc2001-05-03 23:54:49 +00001017 /* Iterate over the sequences until all have stopped. */
Guido van Rossum2d951851994-08-29 12:52:16 +00001018 for (i = 0; ; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001019 PyObject *alist, *item=NULL, *value;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001020 int numactive = 0;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001021
Guido van Rossum79f25d91997-04-29 20:08:16 +00001022 if (func == Py_None && n == 1)
Guido van Rossum32120311995-07-10 13:52:21 +00001023 alist = NULL;
Tim Peters4e9afdc2001-05-03 23:54:49 +00001024 else if ((alist = PyTuple_New(n)) == NULL)
1025 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001026
1027 for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001028 if (sqp->saw_StopIteration) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001029 Py_INCREF(Py_None);
1030 item = Py_None;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001031 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001032 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001033 item = PyIter_Next(sqp->it);
1034 if (item)
1035 ++numactive;
1036 else {
Tim Peters4e9afdc2001-05-03 23:54:49 +00001037 if (PyErr_Occurred()) {
Tim Petersf4848da2001-05-05 00:14:56 +00001038 Py_XDECREF(alist);
1039 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001040 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001041 Py_INCREF(Py_None);
1042 item = Py_None;
1043 sqp->saw_StopIteration = 1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001044 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00001045 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001046 if (alist)
1047 PyTuple_SET_ITEM(alist, j, item);
1048 else
Guido van Rossum2d951851994-08-29 12:52:16 +00001049 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001050 }
1051
Guido van Rossum32120311995-07-10 13:52:21 +00001052 if (!alist)
1053 alist = item;
Guido van Rossum2d951851994-08-29 12:52:16 +00001054
Tim Peters4e9afdc2001-05-03 23:54:49 +00001055 if (numactive == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056 Py_DECREF(alist);
Guido van Rossum2d951851994-08-29 12:52:16 +00001057 break;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001058 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001059
Guido van Rossum79f25d91997-04-29 20:08:16 +00001060 if (func == Py_None)
Guido van Rossum32120311995-07-10 13:52:21 +00001061 value = alist;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001062 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001063 value = PyEval_CallObject(func, alist);
1064 Py_DECREF(alist);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00001065 if (value == NULL)
1066 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001067 }
1068 if (i >= len) {
Barry Warsawfa77e091999-01-28 18:49:12 +00001069 int status = PyList_Append(result, value);
Barry Warsaw21332871999-01-28 04:21:35 +00001070 Py_DECREF(value);
Barry Warsawfa77e091999-01-28 18:49:12 +00001071 if (status < 0)
1072 goto Fail_1;
Guido van Rossum2d951851994-08-29 12:52:16 +00001073 }
Tim Peters4e9afdc2001-05-03 23:54:49 +00001074 else if (PyList_SetItem(result, i, value) < 0)
1075 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001076 }
1077
Guido van Rossumfa4ac711998-07-10 17:37:30 +00001078 if (i < len && PyList_SetSlice(result, i, len, NULL) < 0)
1079 goto Fail_1;
1080
Tim Peters4e9afdc2001-05-03 23:54:49 +00001081 goto Succeed;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001082
Guido van Rossum12d12c51993-10-26 17:58:25 +00001083Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00001085Fail_2:
Tim Peters4e9afdc2001-05-03 23:54:49 +00001086 result = NULL;
1087Succeed:
1088 assert(seqs);
1089 for (i = 0; i < n; ++i)
1090 Py_XDECREF(seqs[i].it);
1091 PyMem_DEL(seqs);
1092 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001093}
1094
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001095PyDoc_STRVAR(map_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001096"map(function, sequence[, sequence, ...]) -> list\n\
1097\n\
1098Return a list of the results of applying the function to the items of\n\
1099the argument sequence(s). If more than one sequence is given, the\n\
1100function is called with an argument list consisting of the corresponding\n\
1101item of each sequence, substituting None for missing values when not all\n\
1102sequences have the same length. If the function is None, return a list of\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001103the items of the sequence (or a list of tuples if more than one sequence).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001104
1105
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001107builtin_next(PyObject *self, PyObject *args)
1108{
1109 PyObject *it, *res;
1110 PyObject *def = NULL;
1111
1112 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1113 return NULL;
1114 if (!PyIter_Check(it)) {
1115 PyErr_Format(PyExc_TypeError,
1116 "%.200s object is not an iterator", it->ob_type->tp_name);
1117 return NULL;
1118 }
1119
1120 res = (*it->ob_type->tp_iternext)(it);
1121 if (res == NULL) {
1122 if (def) {
1123 if (PyErr_Occurred() &&
1124 !PyErr_ExceptionMatches(PyExc_StopIteration))
1125 return NULL;
1126 PyErr_Clear();
1127 Py_INCREF(def);
1128 return def;
1129 } else if (PyErr_Occurred()) {
1130 return NULL;
1131 } else {
1132 PyErr_SetNone(PyExc_StopIteration);
1133 return NULL;
1134 }
1135 }
1136 return res;
1137}
1138
1139PyDoc_STRVAR(next_doc,
1140"next(iterator[, default])\n\
1141\n\
1142Return the next item from the iterator. If default is given and the iterator\n\
1143is exhausted, it is returned instead of raising StopIteration.");
1144
1145
1146static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001147builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001148{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149 PyObject *v;
1150 PyObject *name;
1151 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001152
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001153 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001154 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001156 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001157 Py_INCREF(Py_None);
1158 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001159}
1160
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001161PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001162"setattr(object, name, value)\n\
1163\n\
1164Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001165``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001166
1167
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001169builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001170{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171 PyObject *v;
1172 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001173
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001174 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001175 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001177 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001178 Py_INCREF(Py_None);
1179 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001180}
1181
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001182PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001183"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184\n\
1185Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001186``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001187
1188
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001190builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001191{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001192 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001193
Guido van Rossum79f25d91997-04-29 20:08:16 +00001194 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001195 if (x == -1)
1196 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001197 return PyInt_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001198}
1199
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001200PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001201"hash(object) -> integer\n\
1202\n\
1203Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001204the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001205
1206
Guido van Rossum79f25d91997-04-29 20:08:16 +00001207static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001208builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001209{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001210 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001211 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001212
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001213 if ((nb = v->ob_type->tp_as_number) == NULL ||
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001214 nb->nb_hex == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001216 "hex() argument can't be converted to hex");
1217 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001218 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001219 res = (*nb->nb_hex)(v);
Guido van Rossume1083732007-05-15 21:32:59 +00001220 if (res && !PyString_Check(res) && !PyUnicode_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001221 PyErr_Format(PyExc_TypeError,
1222 "__hex__ returned non-string (type %.200s)",
1223 res->ob_type->tp_name);
1224 Py_DECREF(res);
1225 return NULL;
1226 }
1227 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001228}
1229
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001230PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001231"hex(number) -> string\n\
1232\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001233Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001234
1235
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001237builtin_iter(PyObject *self, PyObject *args)
1238{
1239 PyObject *v, *w = NULL;
1240
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001241 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001242 return NULL;
1243 if (w == NULL)
1244 return PyObject_GetIter(v);
1245 if (!PyCallable_Check(v)) {
1246 PyErr_SetString(PyExc_TypeError,
1247 "iter(v, w): v must be callable");
1248 return NULL;
1249 }
1250 return PyCallIter_New(v, w);
1251}
1252
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001253PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001254"iter(collection) -> iterator\n\
1255iter(callable, sentinel) -> iterator\n\
1256\n\
1257Get an iterator from an object. In the first form, the argument must\n\
1258supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001259In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001260
1261
1262static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001263builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001264{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001265 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001266
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001267 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001268 if (res < 0 && PyErr_Occurred())
1269 return NULL;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001270 return PyInt_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001271}
1272
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001273PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001274"len(object) -> integer\n\
1275\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001276Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001277
1278
Guido van Rossum79f25d91997-04-29 20:08:16 +00001279static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001280builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001281{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001282 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001283
Guido van Rossum79f25d91997-04-29 20:08:16 +00001284 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001285 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001286 return d;
1287}
1288
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001289PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001290"locals() -> dictionary\n\
1291\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001292Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001293
1294
Guido van Rossum79f25d91997-04-29 20:08:16 +00001295static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001296min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001297{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001298 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001299 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001300
Guido van Rossum79f25d91997-04-29 20:08:16 +00001301 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001302 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001303 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001304 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001305
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1307 keyfunc = PyDict_GetItemString(kwds, "key");
1308 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001309 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001310 "%s() got an unexpected keyword argument", name);
1311 return NULL;
1312 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001313 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001314
Tim Petersc3074532001-05-03 07:00:32 +00001315 it = PyObject_GetIter(v);
1316 if (it == NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001317 return NULL;
Tim Petersc3074532001-05-03 07:00:32 +00001318
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319 maxitem = NULL; /* the result */
1320 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001321 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001322 /* get the value from the key function */
1323 if (keyfunc != NULL) {
1324 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1325 if (val == NULL)
1326 goto Fail_it_item;
1327 }
1328 /* no key function; the value is the item */
1329 else {
1330 val = item;
1331 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001332 }
Tim Petersc3074532001-05-03 07:00:32 +00001333
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001334 /* maximum value and item are unset; set them */
1335 if (maxval == NULL) {
1336 maxitem = item;
1337 maxval = val;
1338 }
1339 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001340 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001341 int cmp = PyObject_RichCompareBool(val, maxval, op);
1342 if (cmp < 0)
1343 goto Fail_it_item_and_val;
1344 else if (cmp > 0) {
1345 Py_DECREF(maxval);
1346 Py_DECREF(maxitem);
1347 maxval = val;
1348 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001349 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001350 else {
1351 Py_DECREF(item);
1352 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001353 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001354 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001355 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356 if (PyErr_Occurred())
1357 goto Fail_it;
1358 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001359 PyErr_Format(PyExc_ValueError,
1360 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001361 assert(maxitem == NULL);
1362 }
1363 else
1364 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001365 Py_DECREF(it);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001366 return maxitem;
1367
1368Fail_it_item_and_val:
1369 Py_DECREF(val);
1370Fail_it_item:
1371 Py_DECREF(item);
1372Fail_it:
1373 Py_XDECREF(maxval);
1374 Py_XDECREF(maxitem);
1375 Py_DECREF(it);
1376 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001377}
1378
Guido van Rossum79f25d91997-04-29 20:08:16 +00001379static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001380builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001381{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001382 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001383}
1384
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001385PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001386"min(iterable[, key=func]) -> value\n\
1387min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001388\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001389With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001390With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001391
1392
Guido van Rossum79f25d91997-04-29 20:08:16 +00001393static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001394builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001395{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001396 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001397}
1398
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001399PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001400"max(iterable[, key=func]) -> value\n\
1401max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001402\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001403With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001404With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001405
1406
Guido van Rossum79f25d91997-04-29 20:08:16 +00001407static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001408builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001409{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001410 PyNumberMethods *nb;
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001411 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001412
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001413 if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
1414 nb->nb_oct == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001415 PyErr_SetString(PyExc_TypeError,
Guido van Rossum1899c2e1992-09-12 11:09:23 +00001416 "oct() argument can't be converted to oct");
1417 return NULL;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001418 }
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001419 res = (*nb->nb_oct)(v);
Guido van Rossume1083732007-05-15 21:32:59 +00001420 if (res && !PyString_Check(res) && !PyUnicode_Check(res)) {
Neil Schemenauer3a313e32004-07-19 16:29:17 +00001421 PyErr_Format(PyExc_TypeError,
1422 "__oct__ returned non-string (type %.200s)",
1423 res->ob_type->tp_name);
1424 Py_DECREF(res);
1425 return NULL;
1426 }
1427 return res;
Guido van Rossum006bcd41991-10-24 14:54:44 +00001428}
1429
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001430PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001431"oct(number) -> string\n\
1432\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001433Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001434
1435
Guido van Rossum79f25d91997-04-29 20:08:16 +00001436static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001437builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001438{
Guido van Rossum09095f32000-03-10 23:00:52 +00001439 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001440 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001441
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001442 if (PyString_Check(obj)) {
1443 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001444 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001445 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001446 return PyInt_FromLong(ord);
1447 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001448 }
1449 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001450 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001451 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001452 ord = (long)*PyUnicode_AS_UNICODE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001453 return PyInt_FromLong(ord);
1454 }
Guido van Rossum6f376c42007-05-24 14:31:33 +00001455 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001456 else if (PyBytes_Check(obj)) {
1457 /* XXX Hopefully this is temporary */
1458 size = PyBytes_GET_SIZE(obj);
1459 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001460 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Guido van Rossum98f97462007-04-13 03:31:13 +00001461 return PyInt_FromLong(ord);
1462 }
1463 }
1464 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001465 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001466 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001467 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001468 return NULL;
1469 }
1470
Guido van Rossumad991772001-01-12 16:03:05 +00001471 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001472 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001473 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001474 size);
1475 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001476}
1477
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001478PyDoc_STRVAR(ord_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001479"ord(c) -> integer\n\
1480\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001481Return the integer ordinal of a one-character string.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001482
1483
Guido van Rossum79f25d91997-04-29 20:08:16 +00001484static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001485builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001486{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001487 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001488
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001489 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001490 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001491 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001492}
1493
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001494PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001495"pow(x, y[, z]) -> number\n\
1496\n\
1497With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001498equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001499
1500
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001501
Guido van Rossum34343512006-11-30 22:13:52 +00001502static PyObject *
1503builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1504{
1505 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001506 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001507 PyObject *sep = NULL, *end = NULL, *file = NULL;
1508 int i, err;
1509
Georg Brandl257d3d92007-02-26 10:35:10 +00001510 if (dummy_args == NULL) {
1511 if (!(dummy_args = PyTuple_New(0)))
1512 return NULL;
1513 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001514 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001515 kwlist, &sep, &end, &file))
1516 return NULL;
1517 if (file == NULL || file == Py_None)
1518 file = PySys_GetObject("stdout");
1519
Georg Brandl16f3e032006-11-30 22:46:03 +00001520 if (sep && sep != Py_None && !PyString_Check(sep) &&
1521 !PyUnicode_Check(sep)) {
1522 PyErr_Format(PyExc_TypeError,
1523 "sep must be None, str or unicode, not %.200s",
1524 sep->ob_type->tp_name);
1525 return NULL;
1526 }
1527 if (end && end != Py_None && !PyString_Check(end) &&
1528 !PyUnicode_Check(end)) {
1529 PyErr_Format(PyExc_TypeError,
1530 "end must be None, str or unicode, not %.200s",
1531 end->ob_type->tp_name);
1532 return NULL;
1533 }
Guido van Rossum34343512006-11-30 22:13:52 +00001534
1535 for (i = 0; i < PyTuple_Size(args); i++) {
1536 if (i > 0) {
1537 if (sep == NULL || sep == Py_None)
1538 err = PyFile_WriteString(" ", file);
1539 else
1540 err = PyFile_WriteObject(sep, file,
1541 Py_PRINT_RAW);
1542 if (err)
1543 return NULL;
1544 }
1545 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1546 Py_PRINT_RAW);
1547 if (err)
1548 return NULL;
1549 }
1550
1551 if (end == NULL || end == Py_None)
1552 err = PyFile_WriteString("\n", file);
1553 else
1554 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1555 if (err)
1556 return NULL;
1557
1558 Py_RETURN_NONE;
1559}
1560
1561PyDoc_STRVAR(print_doc,
Guido van Rossum452bf512007-02-09 05:32:43 +00001562"print(value, ..., file=None, sep=' ', end='\\n')\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001563\n\
1564Prints the values to a stream, or to sys.stdout by default.\n\
1565Optional keyword arguments:\n\
1566file: a file-like object (stream); defaults to the current sys.stdout.\n\
1567sep: string inserted between values, default a space.\n\
1568end: string appended after the last value, default a newline.");
1569
1570
Guido van Rossuma88a0332007-02-26 16:59:55 +00001571static PyObject *
1572builtin_input(PyObject *self, PyObject *args)
1573{
Guido van Rossumeba76962007-05-27 09:13:28 +00001574 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001575 PyObject *fin = PySys_GetObject("stdin");
1576 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001577 PyObject *ferr = PySys_GetObject("stderr");
1578 PyObject *tmp;
1579 long fd;
1580 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001581
Guido van Rossumeba76962007-05-27 09:13:28 +00001582 /* Parse arguments */
1583 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001584 return NULL;
1585
Guido van Rossumeba76962007-05-27 09:13:28 +00001586 /* Check that stdin/out/err are intact */
Guido van Rossuma88a0332007-02-26 16:59:55 +00001587 if (fin == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001588 PyErr_SetString(PyExc_RuntimeError,
1589 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001590 return NULL;
1591 }
1592 if (fout == NULL) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001593 PyErr_SetString(PyExc_RuntimeError,
1594 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001595 return NULL;
1596 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001597 if (ferr == NULL) {
1598 PyErr_SetString(PyExc_RuntimeError,
1599 "input(): lost sys.stderr");
1600 return NULL;
1601 }
1602
1603 /* First of all, flush stderr */
1604 tmp = PyObject_CallMethod(ferr, "flush", "");
1605 if (tmp == NULL)
1606 return NULL;
1607 Py_DECREF(tmp);
1608
1609 /* We should only use (GNU) readline if Python's sys.stdin and
1610 sys.stdout are the same as C's stdin and stdout, because we
1611 need to pass it those. */
1612 tmp = PyObject_CallMethod(fin, "fileno", "");
1613 if (tmp == NULL)
1614 return NULL;
1615 fd = PyInt_AsLong(tmp);
1616 if (fd < 0 && PyErr_Occurred())
1617 return NULL;
1618 Py_DECREF(tmp);
1619 tty = fd == fileno(stdin) && isatty(fd);
1620 if (tty) {
1621 tmp = PyObject_CallMethod(fout, "fileno", "");
1622 if (tmp == NULL)
1623 return NULL;
1624 fd = PyInt_AsLong(tmp);
1625 Py_DECREF(tmp);
1626 if (fd < 0 && PyErr_Occurred())
1627 return NULL;
1628 tty = fd == fileno(stdout) && isatty(fd);
1629 }
1630
1631 /* If we're interactive, use (GNU) readline */
1632 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001633 PyObject *po;
1634 char *prompt;
1635 char *s;
1636 PyObject *result;
Guido van Rossumeba76962007-05-27 09:13:28 +00001637 tmp = PyObject_CallMethod(fout, "flush", "");
1638 if (tmp == NULL)
1639 return NULL;
1640 Py_DECREF(tmp);
1641 if (promptarg != NULL) {
1642 po = PyObject_Str(promptarg);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001643 if (po == NULL)
1644 return NULL;
1645 prompt = PyString_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001646 if (prompt == NULL) {
1647 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001648 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001649 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001650 }
1651 else {
1652 po = NULL;
1653 prompt = "";
1654 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001655 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001656 Py_XDECREF(po);
1657 if (s == NULL) {
1658 if (!PyErr_Occurred())
1659 PyErr_SetNone(PyExc_KeyboardInterrupt);
1660 return NULL;
1661 }
1662 if (*s == '\0') {
1663 PyErr_SetNone(PyExc_EOFError);
1664 result = NULL;
1665 }
1666 else { /* strip trailing '\n' */
1667 size_t len = strlen(s);
1668 if (len > PY_SSIZE_T_MAX) {
1669 PyErr_SetString(PyExc_OverflowError,
1670 "input: input too long");
1671 result = NULL;
1672 }
1673 else {
1674 result = PyString_FromStringAndSize(s, len-1);
1675 }
1676 }
1677 PyMem_FREE(s);
1678 return result;
1679 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001680
1681 /* Fallback if we're not interactive */
1682 if (promptarg != NULL) {
1683 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001684 return NULL;
1685 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001686 tmp = PyObject_CallMethod(fout, "flush", "");
1687 if (tmp == NULL)
1688 return NULL;
1689 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001690 return PyFile_GetLine(fin, -1);
1691}
1692
1693PyDoc_STRVAR(input_doc,
1694"input([prompt]) -> string\n\
1695\n\
1696Read a string from standard input. The trailing newline is stripped.\n\
1697If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1698On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1699is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001702builtin_reload(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001703{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001704 return PyImport_ReloadModule(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001705}
1706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001707PyDoc_STRVAR(reload_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001708"reload(module) -> module\n\
1709\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001710Reload the module. The module must have been successfully imported before.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001711
1712
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001714builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001715{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001716 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001717}
1718
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001719PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001720"repr(object) -> string\n\
1721\n\
1722Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001723For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001724
1725
Guido van Rossum79f25d91997-04-29 20:08:16 +00001726static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001727builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001728{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001729 double number;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001730 double f;
1731 int ndigits = 0;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001732 int i;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001733 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001734
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001735 if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round",
1736 kwlist, &number, &ndigits))
1737 return NULL;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001738 f = 1.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001739 i = abs(ndigits);
1740 while (--i >= 0)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001741 f = f*10.0;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001742 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001743 number /= f;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001744 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001745 number *= f;
1746 if (number >= 0.0)
1747 number = floor(number + 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001748 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001749 number = ceil(number - 0.5);
Guido van Rossum1e162d31998-05-09 14:42:25 +00001750 if (ndigits < 0)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001751 number *= f;
Guido van Rossum1e162d31998-05-09 14:42:25 +00001752 else
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001753 number /= f;
1754 return PyFloat_FromDouble(number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001755}
1756
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001757PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758"round(number[, ndigits]) -> floating point number\n\
1759\n\
1760Round a number to a given precision in decimal digits (default 0 digits).\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001761This always returns a floating point number. Precision may be negative.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001762
Raymond Hettinger64958a12003-12-17 20:43:33 +00001763static PyObject *
1764builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1765{
1766 PyObject *newlist, *v, *seq, *compare=NULL, *keyfunc=NULL, *newargs;
1767 PyObject *callable;
Martin v. Löwis15e62742006-02-27 16:46:16 +00001768 static char *kwlist[] = {"iterable", "cmp", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001769 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001770
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001771 /* args 1-4 should match listsort in Objects/listobject.c */
Armin Rigo71d7e702005-09-20 18:13:03 +00001772 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OOi:sorted",
1773 kwlist, &seq, &compare, &keyfunc, &reverse))
1774 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001775
1776 newlist = PySequence_List(seq);
1777 if (newlist == NULL)
1778 return NULL;
1779
1780 callable = PyObject_GetAttrString(newlist, "sort");
1781 if (callable == NULL) {
1782 Py_DECREF(newlist);
1783 return NULL;
1784 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001785
Raymond Hettinger64958a12003-12-17 20:43:33 +00001786 newargs = PyTuple_GetSlice(args, 1, 4);
1787 if (newargs == NULL) {
1788 Py_DECREF(newlist);
1789 Py_DECREF(callable);
1790 return NULL;
1791 }
1792
1793 v = PyObject_Call(callable, newargs, kwds);
1794 Py_DECREF(newargs);
1795 Py_DECREF(callable);
1796 if (v == NULL) {
1797 Py_DECREF(newlist);
1798 return NULL;
1799 }
1800 Py_DECREF(v);
1801 return newlist;
1802}
1803
1804PyDoc_STRVAR(sorted_doc,
1805"sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001806
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001808builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001809{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 PyObject *v = NULL;
1811 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001812
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001813 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001814 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001815 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001816 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001817 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 if (!PyErr_Occurred())
1819 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001820 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001821 }
1822 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001824 }
1825 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001826 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001827 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001829 "vars() argument must have __dict__ attribute");
1830 return NULL;
1831 }
1832 }
1833 return d;
1834}
1835
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001836PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001837"vars([object]) -> dictionary\n\
1838\n\
1839Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001840With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001841
Alex Martellia70b1912003-04-22 08:12:33 +00001842
1843static PyObject*
1844builtin_sum(PyObject *self, PyObject *args)
1845{
1846 PyObject *seq;
1847 PyObject *result = NULL;
1848 PyObject *temp, *item, *iter;
1849
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001850 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001851 return NULL;
1852
1853 iter = PyObject_GetIter(seq);
1854 if (iter == NULL)
1855 return NULL;
1856
1857 if (result == NULL) {
1858 result = PyInt_FromLong(0);
1859 if (result == NULL) {
1860 Py_DECREF(iter);
1861 return NULL;
1862 }
1863 } else {
1864 /* reject string values for 'start' parameter */
1865 if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
1866 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001867 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001868 Py_DECREF(iter);
1869 return NULL;
1870 }
Alex Martelli41c9f882003-04-22 09:24:48 +00001871 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001872 }
1873
1874 for(;;) {
1875 item = PyIter_Next(iter);
1876 if (item == NULL) {
1877 /* error, or end-of-sequence */
1878 if (PyErr_Occurred()) {
1879 Py_DECREF(result);
1880 result = NULL;
1881 }
1882 break;
1883 }
Alex Martellia253e182003-10-25 23:24:14 +00001884 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001885 Py_DECREF(result);
1886 Py_DECREF(item);
1887 result = temp;
1888 if (result == NULL)
1889 break;
1890 }
1891 Py_DECREF(iter);
1892 return result;
1893}
1894
1895PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001896"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001897\n\
1898Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001899of parameter 'start' (which defaults to 0). When the sequence is\n\
1900empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001901
1902
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001903static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001904builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001905{
1906 PyObject *inst;
1907 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001908 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001909
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001910 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001911 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001912
Guido van Rossum823649d2001-03-21 18:40:58 +00001913 retval = PyObject_IsInstance(inst, cls);
1914 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001915 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001916 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001917}
1918
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001919PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001920"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001921\n\
1922Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001923With a type as second argument, return whether that is the object's type.\n\
1924The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001925isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001926
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001927
1928static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001929builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001930{
1931 PyObject *derived;
1932 PyObject *cls;
1933 int retval;
1934
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001935 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001936 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001937
Guido van Rossum823649d2001-03-21 18:40:58 +00001938 retval = PyObject_IsSubclass(derived, cls);
1939 if (retval < 0)
1940 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001941 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001942}
1943
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001944PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001945"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001946\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001947Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1948When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1949is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001950
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001951
Barry Warsawbd599b52000-08-03 15:45:29 +00001952static PyObject*
1953builtin_zip(PyObject *self, PyObject *args)
1954{
Guido van Rossumb65fb332006-08-25 23:26:40 +00001955 /* args must be a tuple */
1956 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001957
Guido van Rossumb65fb332006-08-25 23:26:40 +00001958 return _PyZip_CreateIter(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00001959}
1960
1961
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001962PyDoc_STRVAR(zip_doc,
Guido van Rossum801f0d72006-08-24 19:48:10 +00001963"zip(it1 [, it2 [...]]) -> iter([(it1[0], it2[0] ...), ...])\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00001964\n\
Guido van Rossum801f0d72006-08-24 19:48:10 +00001965Return an iterator yielding tuples, where each tuple contains the\n\
1966corresponding element from each of the argument iterables.\n\
1967The returned iterator ends when the shortest argument iterable is exhausted.\n\
1968NOTE: This is implemented using itertools.izip().");
Barry Warsawbd599b52000-08-03 15:45:29 +00001969
1970
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001972 {"__build_class__", (PyCFunction)builtin___build_class__,
1973 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001974 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001975 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00001976 {"all", builtin_all, METH_O, all_doc},
1977 {"any", builtin_any, METH_O, any_doc},
Walter Dörwalde7efd592007-06-05 20:07:21 +00001978 {"chr", builtin_chr, METH_VARARGS, chr_doc},
1979 {"chr8", builtin_chr8, METH_VARARGS, chr8_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001980 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00001981 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001982 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
1983 {"dir", builtin_dir, METH_VARARGS, dir_doc},
1984 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
1985 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00001986 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001987 {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
1988 {"filter", builtin_filter, METH_VARARGS, filter_doc},
1989 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
1990 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
1991 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
1992 {"hash", builtin_hash, METH_O, hash_doc},
1993 {"hex", builtin_hex, METH_O, hex_doc},
1994 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00001995 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001996 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
1997 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
1998 {"iter", builtin_iter, METH_VARARGS, iter_doc},
1999 {"len", builtin_len, METH_O, len_doc},
2000 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2001 {"map", builtin_map, METH_VARARGS, map_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002002 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2003 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002004 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002005 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002006 {"ord", builtin_ord, METH_O, ord_doc},
2007 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002008 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002009 {"reload", builtin_reload, METH_O, reload_doc},
2010 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002011 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002012 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002013 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002014 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002015 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002016 {"zip", builtin_zip, METH_VARARGS, zip_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002017 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002018};
2019
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002020PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002021"Built-in functions, exceptions, and other objects.\n\
2022\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002023Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002024
Guido van Rossum25ce5661997-08-02 03:10:38 +00002025PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002026_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002027{
Fred Drake5550de32000-06-20 04:54:19 +00002028 PyObject *mod, *dict, *debug;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002029 mod = Py_InitModule4("__builtin__", builtin_methods,
2030 builtin_doc, (PyObject *)NULL,
2031 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002032 if (mod == NULL)
2033 return NULL;
2034 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002035
Tim Peters7571a0f2003-03-23 17:52:28 +00002036#ifdef Py_TRACE_REFS
2037 /* __builtin__ exposes a number of statically allocated objects
2038 * that, before this code was added in 2.3, never showed up in
2039 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2040 * result, programs leaking references to None and False (etc)
2041 * couldn't be diagnosed by examining sys.getobjects(0).
2042 */
2043#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2044#else
2045#define ADD_TO_ALL(OBJECT) (void)0
2046#endif
2047
Tim Peters4b7625e2001-09-13 21:37:17 +00002048#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002049 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2050 return NULL; \
2051 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002052
2053 SETBUILTIN("None", Py_None);
2054 SETBUILTIN("Ellipsis", Py_Ellipsis);
2055 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002056 SETBUILTIN("False", Py_False);
2057 SETBUILTIN("True", Py_True);
Neal Norwitz32a7e7f2002-05-31 19:58:02 +00002058 SETBUILTIN("basestring", &PyBaseString_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002059 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002060 SETBUILTIN("buffer", &PyBuffer_Type);
Guido van Rossum4dfe8a12006-04-22 23:28:04 +00002061 SETBUILTIN("bytes", &PyBytes_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002062 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002063#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002064 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002065#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002066 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002067 SETBUILTIN("enumerate", &PyEnum_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002068 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002069 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002070 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002071 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002072 SETBUILTIN("list", &PyList_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002073 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002074 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002075 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002076 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002077 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002078 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002079 SETBUILTIN("str", &PyUnicode_Type);
Guido van Rossum84fc66d2007-05-03 17:18:26 +00002080 SETBUILTIN("str8", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002081 SETBUILTIN("super", &PySuper_Type);
2082 SETBUILTIN("tuple", &PyTuple_Type);
2083 SETBUILTIN("type", &PyType_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002084 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002085 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2086 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002087 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002088 }
2089 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002090
Guido van Rossum25ce5661997-08-02 03:10:38 +00002091 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002092#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002093#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002094}
2095
Guido van Rossume77a7571993-11-03 15:01:26 +00002096/* Helper for filter(): filter a tuple through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002097
Guido van Rossum79f25d91997-04-29 20:08:16 +00002098static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002099filtertuple(PyObject *func, PyObject *tuple)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002100{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002101 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002102 Py_ssize_t i, j;
2103 Py_ssize_t len = PyTuple_Size(tuple);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002104
Guido van Rossumb7b45621995-08-04 04:07:45 +00002105 if (len == 0) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002106 if (PyTuple_CheckExact(tuple))
2107 Py_INCREF(tuple);
2108 else
2109 tuple = PyTuple_New(0);
Guido van Rossumb7b45621995-08-04 04:07:45 +00002110 return tuple;
2111 }
2112
Guido van Rossum79f25d91997-04-29 20:08:16 +00002113 if ((result = PyTuple_New(len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002114 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002115
Guido van Rossum12d12c51993-10-26 17:58:25 +00002116 for (i = j = 0; i < len; ++i) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002117 PyObject *item, *good;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002118 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002119
Walter Dörwald8dd19322003-02-10 17:36:40 +00002120 if (tuple->ob_type->tp_as_sequence &&
2121 tuple->ob_type->tp_as_sequence->sq_item) {
2122 item = tuple->ob_type->tp_as_sequence->sq_item(tuple, i);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002123 if (item == NULL)
2124 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002125 } else {
Alex Martellia9b9c9f2003-04-23 13:34:35 +00002126 PyErr_SetString(PyExc_TypeError, "filter(): unsubscriptable tuple");
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002127 goto Fail_1;
Walter Dörwald8dd19322003-02-10 17:36:40 +00002128 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002129 if (func == Py_None) {
2130 Py_INCREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002131 good = item;
2132 }
2133 else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002134 PyObject *arg = PyTuple_Pack(1, item);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002135 if (arg == NULL) {
2136 Py_DECREF(item);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002137 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002138 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002139 good = PyEval_CallObject(func, arg);
2140 Py_DECREF(arg);
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002141 if (good == NULL) {
2142 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002143 goto Fail_1;
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002144 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002145 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002146 ok = PyObject_IsTrue(good);
2147 Py_DECREF(good);
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002148 if (ok) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002149 if (PyTuple_SetItem(result, j++, item) < 0)
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002150 goto Fail_1;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002151 }
Walter Dörwaldc58a3a12003-08-18 18:28:45 +00002152 else
2153 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002154 }
2155
Tim Peters4324aa32001-05-28 22:30:08 +00002156 if (_PyTuple_Resize(&result, j) < 0)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002157 return NULL;
2158
Guido van Rossum12d12c51993-10-26 17:58:25 +00002159 return result;
2160
Guido van Rossum12d12c51993-10-26 17:58:25 +00002161Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002162 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002163 return NULL;
2164}
2165
2166
Guido van Rossume77a7571993-11-03 15:01:26 +00002167/* Helper for filter(): filter a string through a function */
Guido van Rossum12d12c51993-10-26 17:58:25 +00002168
Guido van Rossum79f25d91997-04-29 20:08:16 +00002169static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002170filterstring(PyObject *func, PyObject *strobj)
Guido van Rossum12d12c51993-10-26 17:58:25 +00002171{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002172 PyObject *result;
Martin v. Löwis18e16552006-02-15 17:27:45 +00002173 Py_ssize_t i, j;
2174 Py_ssize_t len = PyString_Size(strobj);
2175 Py_ssize_t outlen = len;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002176
Guido van Rossum79f25d91997-04-29 20:08:16 +00002177 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002178 /* If it's a real string we can return the original,
2179 * as no character is ever false and __getitem__
2180 * does return this character. If it's a subclass
2181 * we must go through the __getitem__ loop */
2182 if (PyString_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002183 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002184 return strobj;
2185 }
Guido van Rossum12d12c51993-10-26 17:58:25 +00002186 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002187 if ((result = PyString_FromStringAndSize(NULL, len)) == NULL)
Guido van Rossum2586bf01993-11-01 16:21:44 +00002188 return NULL;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002189
Guido van Rossum12d12c51993-10-26 17:58:25 +00002190 for (i = j = 0; i < len; ++i) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002191 PyObject *item;
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002192 int ok;
Guido van Rossum12d12c51993-10-26 17:58:25 +00002193
Guido van Rossumdc4b93d1993-10-27 14:56:44 +00002194 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2195 if (item == NULL)
2196 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002197 if (func==Py_None) {
2198 ok = 1;
2199 } else {
2200 PyObject *arg, *good;
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002201 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002202 if (arg == NULL) {
2203 Py_DECREF(item);
2204 goto Fail_1;
2205 }
2206 good = PyEval_CallObject(func, arg);
2207 Py_DECREF(arg);
2208 if (good == NULL) {
2209 Py_DECREF(item);
2210 goto Fail_1;
2211 }
2212 ok = PyObject_IsTrue(good);
2213 Py_DECREF(good);
Tim Peters388ed082001-04-07 20:34:48 +00002214 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002215 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002216 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002217 if (!PyString_Check(item)) {
2218 PyErr_SetString(PyExc_TypeError, "can't filter str to str:"
2219 " __getitem__ returned different type");
2220 Py_DECREF(item);
2221 goto Fail_1;
2222 }
2223 reslen = PyString_GET_SIZE(item);
2224 if (reslen == 1) {
2225 PyString_AS_STRING(result)[j++] =
2226 PyString_AS_STRING(item)[0];
2227 } else {
2228 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002229 Py_ssize_t need = j + reslen + len-i-1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002230 if (need > outlen) {
2231 /* overallocate, to avoid reallocations */
2232 if (need<2*outlen)
2233 need = 2*outlen;
2234 if (_PyString_Resize(&result, need)) {
2235 Py_DECREF(item);
2236 return NULL;
2237 }
2238 outlen = need;
2239 }
2240 memcpy(
2241 PyString_AS_STRING(result) + j,
2242 PyString_AS_STRING(item),
2243 reslen
2244 );
2245 j += reslen;
2246 }
2247 }
Tim Peters388ed082001-04-07 20:34:48 +00002248 Py_DECREF(item);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002249 }
2250
Walter Dörwald903f1e02003-02-04 16:28:00 +00002251 if (j < outlen)
Tim Peters5de98422002-04-27 18:44:32 +00002252 _PyString_Resize(&result, j);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002253
Guido van Rossum12d12c51993-10-26 17:58:25 +00002254 return result;
2255
Guido van Rossum12d12c51993-10-26 17:58:25 +00002256Fail_1:
Guido van Rossum79f25d91997-04-29 20:08:16 +00002257 Py_DECREF(result);
Guido van Rossum12d12c51993-10-26 17:58:25 +00002258 return NULL;
2259}
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002260
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002261/* Helper for filter(): filter a Unicode object through a function */
2262
2263static PyObject *
2264filterunicode(PyObject *func, PyObject *strobj)
2265{
2266 PyObject *result;
Martin v. Löwis725507b2006-03-07 12:08:51 +00002267 register Py_ssize_t i, j;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002268 Py_ssize_t len = PyUnicode_GetSize(strobj);
2269 Py_ssize_t outlen = len;
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002270
2271 if (func == Py_None) {
Walter Dörwald1918f772003-02-10 13:19:13 +00002272 /* If it's a real string we can return the original,
2273 * as no character is ever false and __getitem__
2274 * does return this character. If it's a subclass
2275 * we must go through the __getitem__ loop */
2276 if (PyUnicode_CheckExact(strobj)) {
Walter Dörwaldc3da83f2003-02-04 20:24:45 +00002277 Py_INCREF(strobj);
Walter Dörwald1918f772003-02-10 13:19:13 +00002278 return strobj;
2279 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002280 }
2281 if ((result = PyUnicode_FromUnicode(NULL, len)) == NULL)
2282 return NULL;
2283
2284 for (i = j = 0; i < len; ++i) {
2285 PyObject *item, *arg, *good;
2286 int ok;
2287
2288 item = (*strobj->ob_type->tp_as_sequence->sq_item)(strobj, i);
2289 if (item == NULL)
2290 goto Fail_1;
Walter Dörwald1918f772003-02-10 13:19:13 +00002291 if (func == Py_None) {
2292 ok = 1;
2293 } else {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00002294 arg = PyTuple_Pack(1, item);
Walter Dörwald1918f772003-02-10 13:19:13 +00002295 if (arg == NULL) {
2296 Py_DECREF(item);
2297 goto Fail_1;
2298 }
2299 good = PyEval_CallObject(func, arg);
2300 Py_DECREF(arg);
2301 if (good == NULL) {
2302 Py_DECREF(item);
2303 goto Fail_1;
2304 }
2305 ok = PyObject_IsTrue(good);
2306 Py_DECREF(good);
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002307 }
Walter Dörwald903f1e02003-02-04 16:28:00 +00002308 if (ok) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002309 Py_ssize_t reslen;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002310 if (!PyUnicode_Check(item)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002311 PyErr_SetString(PyExc_TypeError,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002312 "can't filter unicode to unicode:"
2313 " __getitem__ returned different type");
Walter Dörwald903f1e02003-02-04 16:28:00 +00002314 Py_DECREF(item);
2315 goto Fail_1;
2316 }
2317 reslen = PyUnicode_GET_SIZE(item);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002318 if (reslen == 1)
Walter Dörwald903f1e02003-02-04 16:28:00 +00002319 PyUnicode_AS_UNICODE(result)[j++] =
2320 PyUnicode_AS_UNICODE(item)[0];
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002321 else {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002322 /* do we need more space? */
Martin v. Löwisd96ee902006-02-16 14:37:16 +00002323 Py_ssize_t need = j + reslen + len - i - 1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002324 if (need > outlen) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002325 /* overallocate,
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002326 to avoid reallocations */
2327 if (need < 2 * outlen)
2328 need = 2 * outlen;
Jeremy Hylton364f6be2003-09-16 03:17:16 +00002329 if (PyUnicode_Resize(
2330 &result, need) < 0) {
Walter Dörwald903f1e02003-02-04 16:28:00 +00002331 Py_DECREF(item);
Walter Dörwald531e0002003-02-04 16:57:49 +00002332 goto Fail_1;
Walter Dörwald903f1e02003-02-04 16:28:00 +00002333 }
2334 outlen = need;
2335 }
Jeremy Hylton1aad9c72003-09-16 03:10:59 +00002336 memcpy(PyUnicode_AS_UNICODE(result) + j,
2337 PyUnicode_AS_UNICODE(item),
2338 reslen*sizeof(Py_UNICODE));
Walter Dörwald903f1e02003-02-04 16:28:00 +00002339 j += reslen;
2340 }
2341 }
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002342 Py_DECREF(item);
2343 }
2344
Walter Dörwald903f1e02003-02-04 16:28:00 +00002345 if (j < outlen)
Martin v. Löwis8afd7572003-01-25 22:46:11 +00002346 PyUnicode_Resize(&result, j);
2347
2348 return result;
2349
2350Fail_1:
2351 Py_DECREF(result);
2352 return NULL;
2353}