blob: 3f270b43631f8ada77662b10573767fab362984c [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"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Benjamin Petersonea281a52011-08-12 23:10:50 -05009#include "asdl.h"
10#include "ast.h"
11
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012#include <ctype.h>
13
Victor Stinnerb744ba12010-05-15 12:27:16 +000014#ifdef HAVE_LANGINFO_H
15#include <langinfo.h> /* CODESET */
16#endif
17
Mark Hammond26cffde42001-05-14 12:17:34 +000018/* The default encoding used by the platform file system APIs
19 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000020
21 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
22 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000023*/
Victor Stinner99b95382011-07-04 14:23:54 +020024#ifdef HAVE_MBCS
Mark Hammond26cffde42001-05-14 12:17:34 +000025const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000027#elif defined(__APPLE__)
28const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020030#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000031const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000032int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000033#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000034
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020035_Py_IDENTIFIER(fileno);
36_Py_IDENTIFIER(flush);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020037
Guido van Rossum79f25d91997-04-29 20:08:16 +000038static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000039builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
40{
Nick Coghlande31b192011-10-23 22:04:16 +100041 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *cell;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000042 PyObject *cls = NULL;
Florent Xicluna4d46c2a2011-10-28 15:00:50 +020043 Py_ssize_t nargs;
Nick Coghlande31b192011-10-23 22:04:16 +100044 int isclass;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020045 _Py_IDENTIFIER(__prepare__);
Guido van Rossum52cc1d82007-03-18 15:41:51 +000046
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000047 assert(args != NULL);
48 if (!PyTuple_Check(args)) {
49 PyErr_SetString(PyExc_TypeError,
50 "__build_class__: args is not a tuple");
51 return NULL;
52 }
53 nargs = PyTuple_GET_SIZE(args);
54 if (nargs < 2) {
55 PyErr_SetString(PyExc_TypeError,
56 "__build_class__: not enough arguments");
57 return NULL;
58 }
59 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -050060 if (!PyFunction_Check(func)) {
61 PyErr_SetString(PyExc_TypeError,
62 "__build__class__: func must be a function");
63 return NULL;
64 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000065 name = PyTuple_GET_ITEM(args, 1);
66 if (!PyUnicode_Check(name)) {
67 PyErr_SetString(PyExc_TypeError,
68 "__build_class__: name is not a string");
69 return NULL;
70 }
71 bases = PyTuple_GetSlice(args, 2, nargs);
72 if (bases == NULL)
73 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000074
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000075 if (kwds == NULL) {
76 meta = NULL;
77 mkw = NULL;
78 }
79 else {
80 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
81 if (mkw == NULL) {
82 Py_DECREF(bases);
83 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000084 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000085 meta = PyDict_GetItemString(mkw, "metaclass");
86 if (meta != NULL) {
87 Py_INCREF(meta);
88 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
89 Py_DECREF(meta);
90 Py_DECREF(mkw);
91 Py_DECREF(bases);
92 return NULL;
93 }
Nick Coghlande31b192011-10-23 22:04:16 +100094 /* metaclass is explicitly given, check if it's indeed a class */
95 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000096 }
97 }
98 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +100099 /* if there are no bases, use type: */
100 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000102 }
103 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000104 else {
105 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
106 meta = (PyObject *) (base0->ob_type);
107 }
108 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000109 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000110 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000111
Nick Coghlande31b192011-10-23 22:04:16 +1000112 if (isclass) {
113 /* meta is really a class, so check for a more derived
114 metaclass, or possible metaclass conflicts: */
115 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
116 bases);
117 if (winner == NULL) {
118 Py_DECREF(meta);
119 Py_XDECREF(mkw);
120 Py_DECREF(bases);
121 return NULL;
122 }
123 if (winner != meta) {
124 Py_DECREF(meta);
125 meta = winner;
126 Py_INCREF(meta);
127 }
128 }
129 /* else: meta is not a class, so we cannot do the metaclass
130 calculation, so we will use the explicitly given object as it is */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200131 prep = _PyObject_GetAttrId(meta, &PyId___prepare__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000132 if (prep == NULL) {
133 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
134 PyErr_Clear();
135 ns = PyDict_New();
136 }
137 else {
138 Py_DECREF(meta);
139 Py_XDECREF(mkw);
140 Py_DECREF(bases);
141 return NULL;
142 }
143 }
144 else {
145 PyObject *pargs = PyTuple_Pack(2, name, bases);
146 if (pargs == NULL) {
147 Py_DECREF(prep);
148 Py_DECREF(meta);
149 Py_XDECREF(mkw);
150 Py_DECREF(bases);
151 return NULL;
152 }
153 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
154 Py_DECREF(pargs);
155 Py_DECREF(prep);
156 }
157 if (ns == NULL) {
158 Py_DECREF(meta);
159 Py_XDECREF(mkw);
160 Py_DECREF(bases);
161 return NULL;
162 }
Benjamin Petersone8e14592013-05-16 14:37:25 -0500163 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
164 NULL, 0, NULL, 0, NULL, 0, NULL,
165 PyFunction_GET_CLOSURE(func));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000166 if (cell != NULL) {
167 PyObject *margs;
168 margs = PyTuple_Pack(3, name, bases, ns);
169 if (margs != NULL) {
170 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
171 Py_DECREF(margs);
172 }
Benjamin Peterson8e8fbea2012-06-01 23:57:36 -0700173 if (cls != NULL && PyCell_Check(cell))
174 PyCell_Set(cell, cls);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000175 Py_DECREF(cell);
176 }
177 Py_DECREF(ns);
178 Py_DECREF(meta);
179 Py_XDECREF(mkw);
180 Py_DECREF(bases);
181 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000182}
183
184PyDoc_STRVAR(build_class_doc,
185"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
186\n\
187Internal helper function used by the class statement.");
188
189static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000190builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000192 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
193 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400194 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400195 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000196
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400197 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000198 kwlist, &name, &globals, &locals, &fromlist, &level))
199 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400200 return PyImport_ImportModuleLevelObject(name, globals, locals,
201 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000202}
203
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000204PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400205"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000206\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000207Import a module. Because this function is meant for use by the Python\n\
208interpreter and not for general use it is better to use\n\
209importlib.import_module() to programmatically import a module.\n\
210\n\
211The globals argument is only used to determine the context;\n\
212they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000213should be a list of names to emulate ``from name import ...'', or an\n\
214empty list to emulate ``import name''.\n\
215When importing a module from a package, note that __import__('A.B', ...)\n\
216returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000217fromlist is not empty. Level is used to determine whether to perform \n\
Brett Cannon722d3ae2012-07-30 17:45:54 -0400218absolute or relative imports. 0 is absolute while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000219is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000220
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000221
Guido van Rossum79f25d91997-04-29 20:08:16 +0000222static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000223builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000224{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000225 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000226}
227
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000228PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000229"abs(number) -> number\n\
230\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000231Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000232
Raymond Hettinger96229b12005-03-11 06:49:40 +0000233static PyObject *
234builtin_all(PyObject *self, PyObject *v)
235{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000236 PyObject *it, *item;
237 PyObject *(*iternext)(PyObject *);
238 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 it = PyObject_GetIter(v);
241 if (it == NULL)
242 return NULL;
243 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 for (;;) {
246 item = iternext(it);
247 if (item == NULL)
248 break;
249 cmp = PyObject_IsTrue(item);
250 Py_DECREF(item);
251 if (cmp < 0) {
252 Py_DECREF(it);
253 return NULL;
254 }
255 if (cmp == 0) {
256 Py_DECREF(it);
257 Py_RETURN_FALSE;
258 }
259 }
260 Py_DECREF(it);
261 if (PyErr_Occurred()) {
262 if (PyErr_ExceptionMatches(PyExc_StopIteration))
263 PyErr_Clear();
264 else
265 return NULL;
266 }
267 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000268}
269
270PyDoc_STRVAR(all_doc,
271"all(iterable) -> bool\n\
272\n\
Ezio Melottib19ed572013-02-15 23:35:14 +0200273Return True if bool(x) is True for all values x in the iterable.\n\
274If the iterable is empty, return True.");
Raymond Hettinger96229b12005-03-11 06:49:40 +0000275
276static PyObject *
277builtin_any(PyObject *self, PyObject *v)
278{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 PyObject *it, *item;
280 PyObject *(*iternext)(PyObject *);
281 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000283 it = PyObject_GetIter(v);
284 if (it == NULL)
285 return NULL;
286 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 for (;;) {
289 item = iternext(it);
290 if (item == NULL)
291 break;
292 cmp = PyObject_IsTrue(item);
293 Py_DECREF(item);
294 if (cmp < 0) {
295 Py_DECREF(it);
296 return NULL;
297 }
298 if (cmp == 1) {
299 Py_DECREF(it);
300 Py_RETURN_TRUE;
301 }
302 }
303 Py_DECREF(it);
304 if (PyErr_Occurred()) {
305 if (PyErr_ExceptionMatches(PyExc_StopIteration))
306 PyErr_Clear();
307 else
308 return NULL;
309 }
310 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000311}
312
313PyDoc_STRVAR(any_doc,
314"any(iterable) -> bool\n\
315\n\
Ezio Melottib19ed572013-02-15 23:35:14 +0200316Return True if bool(x) is True for any x in the iterable.\n\
317If the iterable is empty, return False.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000318
Georg Brandl559e5d72008-06-11 18:37:52 +0000319static PyObject *
320builtin_ascii(PyObject *self, PyObject *v)
321{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322 return PyObject_ASCII(v);
Georg Brandl559e5d72008-06-11 18:37:52 +0000323}
324
325PyDoc_STRVAR(ascii_doc,
326"ascii(object) -> string\n\
327\n\
328As repr(), return a string containing a printable representation of an\n\
329object, but escape the non-ASCII characters in the string returned by\n\
330repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
331to that returned by repr() in Python 2.");
332
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000333
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000335builtin_bin(PyObject *self, PyObject *v)
336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 return PyNumber_ToBase(v, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000338}
339
340PyDoc_STRVAR(bin_doc,
341"bin(number) -> string\n\
342\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -0400343Return the binary representation of an integer.");
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000344
345
Antoine Pitroue71362d2010-11-27 22:00:11 +0000346static PyObject *
347builtin_callable(PyObject *self, PyObject *v)
348{
349 return PyBool_FromLong((long)PyCallable_Check(v));
350}
351
352PyDoc_STRVAR(callable_doc,
353"callable(object) -> bool\n\
354\n\
355Return whether the object is callable (i.e., some kind of function).\n\
356Note that classes are callable, as are instances of classes with a\n\
357__call__() method.");
358
359
Raymond Hettinger17301e92008-03-13 00:19:26 +0000360typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000361 PyObject_HEAD
362 PyObject *func;
363 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000364} filterobject;
365
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000366static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000367filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000368{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 PyObject *func, *seq;
370 PyObject *it;
371 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000372
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000373 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
374 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
377 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 /* Get iterator. */
380 it = PyObject_GetIter(seq);
381 if (it == NULL)
382 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 /* create filterobject structure */
385 lz = (filterobject *)type->tp_alloc(type, 0);
386 if (lz == NULL) {
387 Py_DECREF(it);
388 return NULL;
389 }
390 Py_INCREF(func);
391 lz->func = func;
392 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000395}
396
397static void
398filter_dealloc(filterobject *lz)
399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 PyObject_GC_UnTrack(lz);
401 Py_XDECREF(lz->func);
402 Py_XDECREF(lz->it);
403 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000404}
405
406static int
407filter_traverse(filterobject *lz, visitproc visit, void *arg)
408{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 Py_VISIT(lz->it);
410 Py_VISIT(lz->func);
411 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000412}
413
414static PyObject *
415filter_next(filterobject *lz)
416{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 PyObject *item;
418 PyObject *it = lz->it;
419 long ok;
420 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 iternext = *Py_TYPE(it)->tp_iternext;
423 for (;;) {
424 item = iternext(it);
425 if (item == NULL)
426 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000427
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
429 ok = PyObject_IsTrue(item);
430 } else {
431 PyObject *good;
432 good = PyObject_CallFunctionObjArgs(lz->func,
433 item, NULL);
434 if (good == NULL) {
435 Py_DECREF(item);
436 return NULL;
437 }
438 ok = PyObject_IsTrue(good);
439 Py_DECREF(good);
440 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200441 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000442 return item;
443 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200444 if (ok < 0)
445 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000446 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000447}
448
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000449static PyObject *
450filter_reduce(filterobject *lz)
451{
452 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
453}
454
455PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
456
457static PyMethodDef filter_methods[] = {
458 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
459 {NULL, NULL} /* sentinel */
460};
461
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000462PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000463"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000464\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000465Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000466is true. If function is None, return the items that are true.");
467
468PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000469 PyVarObject_HEAD_INIT(&PyType_Type, 0)
470 "filter", /* tp_name */
471 sizeof(filterobject), /* tp_basicsize */
472 0, /* tp_itemsize */
473 /* methods */
474 (destructor)filter_dealloc, /* tp_dealloc */
475 0, /* tp_print */
476 0, /* tp_getattr */
477 0, /* tp_setattr */
478 0, /* tp_reserved */
479 0, /* tp_repr */
480 0, /* tp_as_number */
481 0, /* tp_as_sequence */
482 0, /* tp_as_mapping */
483 0, /* tp_hash */
484 0, /* tp_call */
485 0, /* tp_str */
486 PyObject_GenericGetAttr, /* tp_getattro */
487 0, /* tp_setattro */
488 0, /* tp_as_buffer */
489 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
490 Py_TPFLAGS_BASETYPE, /* tp_flags */
491 filter_doc, /* tp_doc */
492 (traverseproc)filter_traverse, /* tp_traverse */
493 0, /* tp_clear */
494 0, /* tp_richcompare */
495 0, /* tp_weaklistoffset */
496 PyObject_SelfIter, /* tp_iter */
497 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000498 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000499 0, /* tp_members */
500 0, /* tp_getset */
501 0, /* tp_base */
502 0, /* tp_dict */
503 0, /* tp_descr_get */
504 0, /* tp_descr_set */
505 0, /* tp_dictoffset */
506 0, /* tp_init */
507 PyType_GenericAlloc, /* tp_alloc */
508 filter_new, /* tp_new */
509 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000510};
511
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000512
Eric Smith8c663262007-08-25 02:26:07 +0000513static PyObject *
514builtin_format(PyObject *self, PyObject *args)
515{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000516 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000517 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000518
Eric Smith8fd3eba2008-02-17 19:48:00 +0000519 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Benjamin Petersona12d5c62012-01-03 16:47:22 -0600520 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000521
Eric Smith8fd3eba2008-02-17 19:48:00 +0000522 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000523}
524
Eric Smith8c663262007-08-25 02:26:07 +0000525PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000526"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000527\n\
Eric Smith81936692007-08-31 01:14:01 +0000528Returns value.__format__(format_spec)\n\
529format_spec defaults to \"\"");
530
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000531static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000532builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000533{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 if (!PyArg_ParseTuple(args, "i:chr", &x))
537 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000540}
541
Victor Stinner63ab8752011-11-22 03:31:20 +0100542PyDoc_STRVAR(chr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000543"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000544\n\
Victor Stinner63ab8752011-11-22 03:31:20 +0100545Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Guido van Rossum09095f32000-03-10 23:00:52 +0000546
547
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000548static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000549source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000550{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000551 char *str;
552 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000554 if (PyUnicode_Check(cmd)) {
555 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200556 str = PyUnicode_AsUTF8AndSize(cmd, &size);
557 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 return NULL;
559 }
560 else if (!PyObject_CheckReadBuffer(cmd)) {
561 PyErr_Format(PyExc_TypeError,
562 "%s() arg 1 must be a %s object",
563 funcname, what);
564 return NULL;
565 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200566 else if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 return NULL;
568 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 if (strlen(str) != size) {
571 PyErr_SetString(PyExc_TypeError,
572 "source code string cannot contain null bytes");
573 return NULL;
574 }
575 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000576}
577
Guido van Rossum79f25d91997-04-29 20:08:16 +0000578static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000579builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000580{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 char *str;
Victor Stinner14e461d2013-08-26 22:28:21 +0200582 PyObject *filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000583 char *startstr;
584 int mode = -1;
585 int dont_inherit = 0;
586 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000587 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 int is_ast;
589 PyCompilerFlags cf;
590 PyObject *cmd;
591 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000592 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000594 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595
Georg Brandl8334fd92010-12-04 10:26:46 +0000596 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000597 &cmd,
Victor Stinner14e461d2013-08-26 22:28:21 +0200598 PyUnicode_FSDecoder, &filename,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000599 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000600 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000602
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000603 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 if (supplied_flags &
606 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
607 {
608 PyErr_SetString(PyExc_ValueError,
609 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000610 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 }
612 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000613
Georg Brandl8334fd92010-12-04 10:26:46 +0000614 if (optimize < -1 || optimize > 2) {
615 PyErr_SetString(PyExc_ValueError,
616 "compile(): invalid optimize value");
617 goto error;
618 }
619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 if (!dont_inherit) {
621 PyEval_MergeCompilerFlags(&cf);
622 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 if (strcmp(startstr, "exec") == 0)
625 mode = 0;
626 else if (strcmp(startstr, "eval") == 0)
627 mode = 1;
628 else if (strcmp(startstr, "single") == 0)
629 mode = 2;
630 else {
631 PyErr_SetString(PyExc_ValueError,
632 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000633 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000634 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 is_ast = PyAST_Check(cmd);
637 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000638 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 if (supplied_flags & PyCF_ONLY_AST) {
641 Py_INCREF(cmd);
642 result = cmd;
643 }
644 else {
645 PyArena *arena;
646 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000648 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200649 if (arena == NULL)
650 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 mod = PyAST_obj2mod(cmd, arena, mode);
652 if (mod == NULL) {
653 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000654 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000655 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500656 if (!PyAST_Validate(mod)) {
657 PyArena_Free(arena);
658 goto error;
659 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200660 result = (PyObject*)PyAST_CompileObject(mod, filename,
661 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000662 PyArena_Free(arena);
663 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000664 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000665 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000666
Philip Jenveyf76f0ee2012-12-13 15:44:18 -0800667 str = source_as_string(cmd, "compile", "string, bytes or AST", &cf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000668 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000669 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000670
Victor Stinner14e461d2013-08-26 22:28:21 +0200671 result = Py_CompileStringObject(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000672 goto finally;
673
674error:
675 result = NULL;
676finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200677 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000678 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000679}
680
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000681PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000682"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000683\n\
684Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000685into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000686The filename will be used for run-time error messages.\n\
687The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000688single (interactive) statement, or 'eval' to compile an expression.\n\
689The flags argument, if present, controls which future statements influence\n\
690the compilation of the code.\n\
691The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
692the effects of any future statements in effect in the code calling\n\
693compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000694in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000695
Guido van Rossum79f25d91997-04-29 20:08:16 +0000696static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000697builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000698{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000699 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000701 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
702 return NULL;
703 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000704}
705
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000706PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000707"dir([object]) -> list of strings\n"
708"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000709"If called without an argument, return the names in the current scope.\n"
710"Else, return an alphabetized list of names comprising (some of) the attributes\n"
711"of the given object, and of attributes reachable from it.\n"
712"If the object supplies a method named __dir__, it will be used; otherwise\n"
713"the default dir() logic is used and returns:\n"
714" for a module object: the module's attributes.\n"
715" for a class object: its attributes, and recursively the attributes\n"
716" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000717" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000718" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000719
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000721builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000722{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000723 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000724
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
726 return NULL;
727 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000728}
729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000731"divmod(x, y) -> (div, mod)\n\
732\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000733Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000734
735
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000737builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000738{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 PyObject *cmd, *result, *tmp = NULL;
740 PyObject *globals = Py_None, *locals = Py_None;
741 char *str;
742 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
745 return NULL;
746 if (locals != Py_None && !PyMapping_Check(locals)) {
747 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
748 return NULL;
749 }
750 if (globals != Py_None && !PyDict_Check(globals)) {
751 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
752 "globals must be a real dict; try eval(expr, {}, mapping)"
753 : "globals must be a dict");
754 return NULL;
755 }
756 if (globals == Py_None) {
757 globals = PyEval_GetGlobals();
758 if (locals == Py_None)
759 locals = PyEval_GetLocals();
760 }
761 else if (locals == Py_None)
762 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000763
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 if (globals == NULL || locals == NULL) {
765 PyErr_SetString(PyExc_TypeError,
766 "eval must be given globals and locals "
767 "when called without a frame");
768 return NULL;
769 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
772 if (PyDict_SetItemString(globals, "__builtins__",
773 PyEval_GetBuiltins()) != 0)
774 return NULL;
775 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000776
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 if (PyCode_Check(cmd)) {
778 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
779 PyErr_SetString(PyExc_TypeError,
780 "code object passed to eval() may not contain free variables");
781 return NULL;
782 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000783 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000785
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
787 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
788 if (str == NULL)
789 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000791 while (*str == ' ' || *str == '\t')
792 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 (void)PyEval_MergeCompilerFlags(&cf);
795 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
796 Py_XDECREF(tmp);
797 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000798}
799
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000800PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000801"eval(source[, globals[, locals]]) -> value\n\
802\n\
803Evaluate the source in the context of globals and locals.\n\
804The source may be a string representing a Python expression\n\
805or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000806The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000807defaulting to the current globals and locals.\n\
808If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000809
Georg Brandl7cae87c2006-09-06 06:51:57 +0000810static PyObject *
811builtin_exec(PyObject *self, PyObject *args)
812{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 PyObject *v;
814 PyObject *prog, *globals = Py_None, *locals = Py_None;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
817 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 if (globals == Py_None) {
820 globals = PyEval_GetGlobals();
821 if (locals == Py_None) {
822 locals = PyEval_GetLocals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 }
824 if (!globals || !locals) {
825 PyErr_SetString(PyExc_SystemError,
826 "globals and locals cannot be NULL");
827 return NULL;
828 }
829 }
830 else if (locals == Py_None)
831 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000832
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 if (!PyDict_Check(globals)) {
834 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
835 globals->ob_type->tp_name);
836 return NULL;
837 }
838 if (!PyMapping_Check(locals)) {
839 PyErr_Format(PyExc_TypeError,
840 "arg 3 must be a mapping or None, not %.100s",
841 locals->ob_type->tp_name);
842 return NULL;
843 }
844 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
845 if (PyDict_SetItemString(globals, "__builtins__",
846 PyEval_GetBuiltins()) != 0)
847 return NULL;
848 }
849
850 if (PyCode_Check(prog)) {
851 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
852 PyErr_SetString(PyExc_TypeError,
853 "code object passed to exec() may not "
854 "contain free variables");
855 return NULL;
856 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000857 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 }
859 else {
860 char *str;
861 PyCompilerFlags cf;
862 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
863 str = source_as_string(prog, "exec",
864 "string, bytes or code", &cf);
865 if (str == NULL)
866 return NULL;
867 if (PyEval_MergeCompilerFlags(&cf))
868 v = PyRun_StringFlags(str, Py_file_input, globals,
869 locals, &cf);
870 else
871 v = PyRun_String(str, Py_file_input, globals, locals);
872 }
873 if (v == NULL)
874 return NULL;
875 Py_DECREF(v);
876 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000877}
878
879PyDoc_STRVAR(exec_doc,
880"exec(object[, globals[, locals]])\n\
881\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000882Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000883object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000884The globals and locals are dictionaries, defaulting to the current\n\
885globals and locals. If only globals is given, locals defaults to it.");
886
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000887
Guido van Rossum79f25d91997-04-29 20:08:16 +0000888static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000889builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000890{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 PyObject *v, *result, *dflt = NULL;
892 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000894 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
895 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000897 if (!PyUnicode_Check(name)) {
898 PyErr_SetString(PyExc_TypeError,
899 "getattr(): attribute name must be string");
900 return NULL;
901 }
902 result = PyObject_GetAttr(v, name);
903 if (result == NULL && dflt != NULL &&
904 PyErr_ExceptionMatches(PyExc_AttributeError))
905 {
906 PyErr_Clear();
907 Py_INCREF(dflt);
908 result = dflt;
909 }
910 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000911}
912
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000913PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000914"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000915\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000916Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
917When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000918exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000919
920
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000922builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 d = PyEval_GetGlobals();
927 Py_XINCREF(d);
928 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000929}
930
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000931PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000932"globals() -> dictionary\n\
933\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000934Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000935
936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000938builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000939{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 PyObject *v;
941 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000942
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
944 return NULL;
945 if (!PyUnicode_Check(name)) {
946 PyErr_SetString(PyExc_TypeError,
947 "hasattr(): attribute name must be string");
948 return NULL;
949 }
950 v = PyObject_GetAttr(v, name);
951 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000952 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000953 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000954 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000956 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000957 }
958 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000959 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000960}
961
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000962PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000963"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000964\n\
965Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000966(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000967
968
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000970builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000971{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000973}
974
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000975PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000976"id(object) -> integer\n\
977\n\
978Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000979simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000980
981
Raymond Hettingera6c60372008-03-13 01:26:19 +0000982/* map object ************************************************************/
983
984typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 PyObject_HEAD
986 PyObject *iters;
987 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000988} mapobject;
989
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000991map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000992{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 PyObject *it, *iters, *func;
994 mapobject *lz;
995 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
998 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 numargs = PyTuple_Size(args);
1001 if (numargs < 2) {
1002 PyErr_SetString(PyExc_TypeError,
1003 "map() must have at least two arguments.");
1004 return NULL;
1005 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 iters = PyTuple_New(numargs-1);
1008 if (iters == NULL)
1009 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 for (i=1 ; i<numargs ; i++) {
1012 /* Get iterator. */
1013 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1014 if (it == NULL) {
1015 Py_DECREF(iters);
1016 return NULL;
1017 }
1018 PyTuple_SET_ITEM(iters, i-1, it);
1019 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001020
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001021 /* create mapobject structure */
1022 lz = (mapobject *)type->tp_alloc(type, 0);
1023 if (lz == NULL) {
1024 Py_DECREF(iters);
1025 return NULL;
1026 }
1027 lz->iters = iters;
1028 func = PyTuple_GET_ITEM(args, 0);
1029 Py_INCREF(func);
1030 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001033}
1034
1035static void
1036map_dealloc(mapobject *lz)
1037{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 PyObject_GC_UnTrack(lz);
1039 Py_XDECREF(lz->iters);
1040 Py_XDECREF(lz->func);
1041 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001042}
1043
1044static int
1045map_traverse(mapobject *lz, visitproc visit, void *arg)
1046{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 Py_VISIT(lz->iters);
1048 Py_VISIT(lz->func);
1049 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001050}
1051
1052static PyObject *
1053map_next(mapobject *lz)
1054{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 PyObject *val;
1056 PyObject *argtuple;
1057 PyObject *result;
1058 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 numargs = PyTuple_Size(lz->iters);
1061 argtuple = PyTuple_New(numargs);
1062 if (argtuple == NULL)
1063 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 for (i=0 ; i<numargs ; i++) {
1066 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1067 if (val == NULL) {
1068 Py_DECREF(argtuple);
1069 return NULL;
1070 }
1071 PyTuple_SET_ITEM(argtuple, i, val);
1072 }
1073 result = PyObject_Call(lz->func, argtuple, NULL);
1074 Py_DECREF(argtuple);
1075 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001076}
1077
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001078static PyObject *
1079map_reduce(mapobject *lz)
1080{
1081 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1082 PyObject *args = PyTuple_New(numargs+1);
1083 Py_ssize_t i;
1084 if (args == NULL)
1085 return NULL;
1086 Py_INCREF(lz->func);
1087 PyTuple_SET_ITEM(args, 0, lz->func);
1088 for (i = 0; i<numargs; i++){
1089 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1090 Py_INCREF(it);
1091 PyTuple_SET_ITEM(args, i+1, it);
1092 }
1093
1094 return Py_BuildValue("ON", Py_TYPE(lz), args);
1095}
1096
1097static PyMethodDef map_methods[] = {
1098 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1099 {NULL, NULL} /* sentinel */
1100};
1101
1102
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001103PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001104"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001105\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001106Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001108
Raymond Hettingera6c60372008-03-13 01:26:19 +00001109PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1111 "map", /* tp_name */
1112 sizeof(mapobject), /* tp_basicsize */
1113 0, /* tp_itemsize */
1114 /* methods */
1115 (destructor)map_dealloc, /* tp_dealloc */
1116 0, /* tp_print */
1117 0, /* tp_getattr */
1118 0, /* tp_setattr */
1119 0, /* tp_reserved */
1120 0, /* tp_repr */
1121 0, /* tp_as_number */
1122 0, /* tp_as_sequence */
1123 0, /* tp_as_mapping */
1124 0, /* tp_hash */
1125 0, /* tp_call */
1126 0, /* tp_str */
1127 PyObject_GenericGetAttr, /* tp_getattro */
1128 0, /* tp_setattro */
1129 0, /* tp_as_buffer */
1130 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1131 Py_TPFLAGS_BASETYPE, /* tp_flags */
1132 map_doc, /* tp_doc */
1133 (traverseproc)map_traverse, /* tp_traverse */
1134 0, /* tp_clear */
1135 0, /* tp_richcompare */
1136 0, /* tp_weaklistoffset */
1137 PyObject_SelfIter, /* tp_iter */
1138 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001139 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001140 0, /* tp_members */
1141 0, /* tp_getset */
1142 0, /* tp_base */
1143 0, /* tp_dict */
1144 0, /* tp_descr_get */
1145 0, /* tp_descr_set */
1146 0, /* tp_dictoffset */
1147 0, /* tp_init */
1148 PyType_GenericAlloc, /* tp_alloc */
1149 map_new, /* tp_new */
1150 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001151};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152
Guido van Rossum79f25d91997-04-29 20:08:16 +00001153static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001154builtin_next(PyObject *self, PyObject *args)
1155{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 PyObject *it, *res;
1157 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1160 return NULL;
1161 if (!PyIter_Check(it)) {
1162 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001163 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 it->ob_type->tp_name);
1165 return NULL;
1166 }
1167
1168 res = (*it->ob_type->tp_iternext)(it);
1169 if (res != NULL) {
1170 return res;
1171 } else if (def != NULL) {
1172 if (PyErr_Occurred()) {
1173 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1174 return NULL;
1175 PyErr_Clear();
1176 }
1177 Py_INCREF(def);
1178 return def;
1179 } else if (PyErr_Occurred()) {
1180 return NULL;
1181 } else {
1182 PyErr_SetNone(PyExc_StopIteration);
1183 return NULL;
1184 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001185}
1186
1187PyDoc_STRVAR(next_doc,
1188"next(iterator[, default])\n\
1189\n\
1190Return the next item from the iterator. If default is given and the iterator\n\
1191is exhausted, it is returned instead of raising StopIteration.");
1192
1193
1194static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001195builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001196{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 PyObject *v;
1198 PyObject *name;
1199 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1202 return NULL;
1203 if (PyObject_SetAttr(v, name, value) != 0)
1204 return NULL;
1205 Py_INCREF(Py_None);
1206 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001207}
1208
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001209PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001210"setattr(object, name, value)\n\
1211\n\
1212Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001213``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214
1215
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001217builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001218{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001219 PyObject *v;
1220 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1223 return NULL;
1224 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1225 return NULL;
1226 Py_INCREF(Py_None);
1227 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001228}
1229
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001230PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001231"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001232\n\
1233Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001234``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001235
1236
Guido van Rossum79f25d91997-04-29 20:08:16 +00001237static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001238builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001239{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001240 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001242 x = PyObject_Hash(v);
1243 if (x == -1)
1244 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001245 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001246}
1247
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001248PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001249"hash(object) -> integer\n\
1250\n\
1251Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001252the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253
1254
Guido van Rossum79f25d91997-04-29 20:08:16 +00001255static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001256builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001257{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001259}
1260
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001261PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001262"hex(number) -> string\n\
1263\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001264Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001265
1266
Guido van Rossum79f25d91997-04-29 20:08:16 +00001267static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001268builtin_iter(PyObject *self, PyObject *args)
1269{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1273 return NULL;
1274 if (w == NULL)
1275 return PyObject_GetIter(v);
1276 if (!PyCallable_Check(v)) {
1277 PyErr_SetString(PyExc_TypeError,
1278 "iter(v, w): v must be callable");
1279 return NULL;
1280 }
1281 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001282}
1283
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001284PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001285"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001286iter(callable, sentinel) -> iterator\n\
1287\n\
1288Get an iterator from an object. In the first form, the argument must\n\
1289supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001290In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001291
1292
1293static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001294builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001295{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001296 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001298 res = PyObject_Size(v);
1299 if (res < 0 && PyErr_Occurred())
1300 return NULL;
1301 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001302}
1303
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001304PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001305"len(object) -> integer\n\
1306\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001307Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001308
1309
Guido van Rossum79f25d91997-04-29 20:08:16 +00001310static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001311builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001312{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 d = PyEval_GetLocals();
1316 Py_XINCREF(d);
1317 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001318}
1319
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001320PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001321"locals() -> dictionary\n\
1322\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001323Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001324
1325
Guido van Rossum79f25d91997-04-29 20:08:16 +00001326static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001327min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001328{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001329 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001330 PyObject *emptytuple, *defaultval = NULL;
1331 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001332 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001333 const int positional = PyTuple_Size(args) > 1;
1334 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001335
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001336 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 v = args;
1338 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1339 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001340
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001341 emptytuple = PyTuple_New(0);
1342 if (emptytuple == NULL)
1343 return NULL;
1344 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
1345 &keyfunc, &defaultval);
1346 Py_DECREF(emptytuple);
1347 if (!ret)
1348 return NULL;
1349
1350 if (positional && defaultval != NULL) {
1351 PyErr_Format(PyExc_TypeError,
1352 "Cannot specify a default for %s() with multiple "
1353 "positional arguments", name);
1354 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001357 it = PyObject_GetIter(v);
1358 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001359 return NULL;
1360 }
Tim Petersc3074532001-05-03 07:00:32 +00001361
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 maxitem = NULL; /* the result */
1363 maxval = NULL; /* the value associated with the result */
1364 while (( item = PyIter_Next(it) )) {
1365 /* get the value from the key function */
1366 if (keyfunc != NULL) {
1367 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1368 if (val == NULL)
1369 goto Fail_it_item;
1370 }
1371 /* no key function; the value is the item */
1372 else {
1373 val = item;
1374 Py_INCREF(val);
1375 }
Tim Petersc3074532001-05-03 07:00:32 +00001376
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001377 /* maximum value and item are unset; set them */
1378 if (maxval == NULL) {
1379 maxitem = item;
1380 maxval = val;
1381 }
1382 /* maximum value and item are set; update them as necessary */
1383 else {
1384 int cmp = PyObject_RichCompareBool(val, maxval, op);
1385 if (cmp < 0)
1386 goto Fail_it_item_and_val;
1387 else if (cmp > 0) {
1388 Py_DECREF(maxval);
1389 Py_DECREF(maxitem);
1390 maxval = val;
1391 maxitem = item;
1392 }
1393 else {
1394 Py_DECREF(item);
1395 Py_DECREF(val);
1396 }
1397 }
1398 }
1399 if (PyErr_Occurred())
1400 goto Fail_it;
1401 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001402 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001403 if (defaultval != NULL) {
1404 Py_INCREF(defaultval);
1405 maxitem = defaultval;
1406 } else {
1407 PyErr_Format(PyExc_ValueError,
1408 "%s() arg is an empty sequence", name);
1409 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001410 }
1411 else
1412 Py_DECREF(maxval);
1413 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001415
1416Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001417 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001418Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001420Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001421 Py_XDECREF(maxval);
1422 Py_XDECREF(maxitem);
1423 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001424 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001425}
1426
Guido van Rossum79f25d91997-04-29 20:08:16 +00001427static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001428builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001429{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001430 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001431}
1432
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001433PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001434"min(iterable[, key=func]) -> value\n\
1435min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001436\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001437With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001438With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001439
1440
Guido van Rossum79f25d91997-04-29 20:08:16 +00001441static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001442builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001445}
1446
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001447PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001448"max(iterable[, key=func]) -> value\n\
1449max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001450\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001451With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001452With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001453
1454
Guido van Rossum79f25d91997-04-29 20:08:16 +00001455static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001456builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001458 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001459}
1460
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001461PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001462"oct(number) -> string\n\
1463\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001464Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001465
1466
Guido van Rossum79f25d91997-04-29 20:08:16 +00001467static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001468builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001469{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001470 long ord;
1471 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001472
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001473 if (PyBytes_Check(obj)) {
1474 size = PyBytes_GET_SIZE(obj);
1475 if (size == 1) {
1476 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1477 return PyLong_FromLong(ord);
1478 }
1479 }
1480 else if (PyUnicode_Check(obj)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001481 if (PyUnicode_READY(obj) == -1)
1482 return NULL;
1483 size = PyUnicode_GET_LENGTH(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 if (size == 1) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001485 ord = (long)PyUnicode_READ_CHAR(obj, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 return PyLong_FromLong(ord);
1487 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 }
1489 else if (PyByteArray_Check(obj)) {
1490 /* XXX Hopefully this is temporary */
1491 size = PyByteArray_GET_SIZE(obj);
1492 if (size == 1) {
1493 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1494 return PyLong_FromLong(ord);
1495 }
1496 }
1497 else {
1498 PyErr_Format(PyExc_TypeError,
1499 "ord() expected string of length 1, but " \
1500 "%.200s found", obj->ob_type->tp_name);
1501 return NULL;
1502 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001504 PyErr_Format(PyExc_TypeError,
1505 "ord() expected a character, "
1506 "but string of length %zd found",
1507 size);
1508 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001509}
1510
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001511PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001512"ord(c) -> integer\n\
1513\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001514Return the integer ordinal of a one-character string."
Antoine Pitrouedc60182012-06-23 14:19:58 +02001515);
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001516
1517
Guido van Rossum79f25d91997-04-29 20:08:16 +00001518static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001519builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001520{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001523 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1524 return NULL;
1525 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001526}
1527
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001528PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001529"pow(x, y[, z]) -> number\n\
1530\n\
1531With two arguments, equivalent to x**y. With three arguments,\n\
Serhiy Storchaka95949422013-08-27 19:40:23 +03001532equivalent to (x**y) % z, but may be more efficient (e.g. for ints).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001533
1534
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001535
Guido van Rossum34343512006-11-30 22:13:52 +00001536static PyObject *
1537builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1538{
Georg Brandlbc3b6822012-01-13 19:41:25 +01001539 static char *kwlist[] = {"sep", "end", "file", "flush", 0};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 static PyObject *dummy_args;
Georg Brandlbc3b6822012-01-13 19:41:25 +01001541 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001542 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001543
Benjamin Peterson00102562012-01-11 21:00:16 -05001544 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Georg Brandlbc3b6822012-01-13 19:41:25 +01001545 return NULL;
1546 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print",
1547 kwlist, &sep, &end, &file, &flush))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 return NULL;
1549 if (file == NULL || file == Py_None) {
1550 file = PySys_GetObject("stdout");
Victor Stinner1e53bba2013-07-16 22:26:05 +02001551 if (file == NULL) {
1552 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1553 return NULL;
1554 }
1555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001556 /* sys.stdout may be None when FILE* stdout isn't connected */
1557 if (file == Py_None)
1558 Py_RETURN_NONE;
1559 }
Guido van Rossum34343512006-11-30 22:13:52 +00001560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001561 if (sep == Py_None) {
1562 sep = NULL;
1563 }
1564 else if (sep && !PyUnicode_Check(sep)) {
1565 PyErr_Format(PyExc_TypeError,
1566 "sep must be None or a string, not %.200s",
1567 sep->ob_type->tp_name);
1568 return NULL;
1569 }
1570 if (end == Py_None) {
1571 end = NULL;
1572 }
1573 else if (end && !PyUnicode_Check(end)) {
1574 PyErr_Format(PyExc_TypeError,
1575 "end must be None or a string, not %.200s",
1576 end->ob_type->tp_name);
1577 return NULL;
1578 }
Guido van Rossum34343512006-11-30 22:13:52 +00001579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001580 for (i = 0; i < PyTuple_Size(args); i++) {
1581 if (i > 0) {
1582 if (sep == NULL)
1583 err = PyFile_WriteString(" ", file);
1584 else
1585 err = PyFile_WriteObject(sep, file,
1586 Py_PRINT_RAW);
1587 if (err)
1588 return NULL;
1589 }
1590 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1591 Py_PRINT_RAW);
1592 if (err)
1593 return NULL;
1594 }
Guido van Rossum34343512006-11-30 22:13:52 +00001595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 if (end == NULL)
1597 err = PyFile_WriteString("\n", file);
1598 else
1599 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1600 if (err)
1601 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001602
Georg Brandlbc3b6822012-01-13 19:41:25 +01001603 if (flush != NULL) {
1604 PyObject *tmp;
1605 int do_flush = PyObject_IsTrue(flush);
1606 if (do_flush == -1)
1607 return NULL;
1608 else if (do_flush) {
1609 tmp = PyObject_CallMethod(file, "flush", "");
1610 if (tmp == NULL)
1611 return NULL;
1612 else
1613 Py_DECREF(tmp);
1614 }
1615 }
1616
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001618}
1619
1620PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001621"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001622\n\
1623Prints the values to a stream, or to sys.stdout by default.\n\
1624Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001625file: a file-like object (stream); defaults to the current sys.stdout.\n\
1626sep: string inserted between values, default a space.\n\
1627end: string appended after the last value, default a newline.\n\
1628flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001629
1630
Guido van Rossuma88a0332007-02-26 16:59:55 +00001631static PyObject *
1632builtin_input(PyObject *self, PyObject *args)
1633{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001634 PyObject *promptarg = NULL;
1635 PyObject *fin = PySys_GetObject("stdin");
1636 PyObject *fout = PySys_GetObject("stdout");
1637 PyObject *ferr = PySys_GetObject("stderr");
1638 PyObject *tmp;
1639 long fd;
1640 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001641
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001642 /* Parse arguments */
1643 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1644 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001645
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001646 /* Check that stdin/out/err are intact */
1647 if (fin == NULL || fin == Py_None) {
1648 PyErr_SetString(PyExc_RuntimeError,
1649 "input(): lost sys.stdin");
1650 return NULL;
1651 }
1652 if (fout == NULL || fout == Py_None) {
1653 PyErr_SetString(PyExc_RuntimeError,
1654 "input(): lost sys.stdout");
1655 return NULL;
1656 }
1657 if (ferr == NULL || ferr == Py_None) {
1658 PyErr_SetString(PyExc_RuntimeError,
1659 "input(): lost sys.stderr");
1660 return NULL;
1661 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001664 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001665 if (tmp == NULL)
1666 PyErr_Clear();
1667 else
1668 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001669
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 /* We should only use (GNU) readline if Python's sys.stdin and
1671 sys.stdout are the same as C's stdin and stdout, because we
1672 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001673 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001674 if (tmp == NULL) {
1675 PyErr_Clear();
1676 tty = 0;
1677 }
1678 else {
1679 fd = PyLong_AsLong(tmp);
1680 Py_DECREF(tmp);
1681 if (fd < 0 && PyErr_Occurred())
1682 return NULL;
1683 tty = fd == fileno(stdin) && isatty(fd);
1684 }
1685 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001686 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 if (tmp == NULL)
1688 PyErr_Clear();
1689 else {
1690 fd = PyLong_AsLong(tmp);
1691 Py_DECREF(tmp);
1692 if (fd < 0 && PyErr_Occurred())
1693 return NULL;
1694 tty = fd == fileno(stdout) && isatty(fd);
1695 }
1696 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001697
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 /* If we're interactive, use (GNU) readline */
1699 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001700 PyObject *po = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 char *prompt;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001702 char *s = NULL;
1703 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1704 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1705 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001707 size_t len;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001708 _Py_IDENTIFIER(encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001709 _Py_IDENTIFIER(errors);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001710
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001711 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001712 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001713 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001714 /* stdin is a text stream, so it must have an
1715 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001716 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001717 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001718 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1719 if (!stdin_encoding_str || !stdin_errors_str)
1720 goto _readline_errors;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001721 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 if (tmp == NULL)
1723 PyErr_Clear();
1724 else
1725 Py_DECREF(tmp);
1726 if (promptarg != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001727 /* We have a prompt, encode it as stdout would */
1728 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001730 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001731 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001732 if (!stdout_encoding || !stdout_errors)
1733 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001734 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001735 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1736 if (!stdout_encoding_str || !stdout_errors_str)
1737 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001738 stringpo = PyObject_Str(promptarg);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001739 if (stringpo == NULL)
1740 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001741 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001742 stdout_encoding_str, stdout_errors_str);
1743 Py_CLEAR(stdout_encoding);
1744 Py_CLEAR(stdout_errors);
1745 Py_CLEAR(stringpo);
1746 if (po == NULL)
1747 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 prompt = PyBytes_AsString(po);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001749 if (prompt == NULL)
1750 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 }
1752 else {
1753 po = NULL;
1754 prompt = "";
1755 }
1756 s = PyOS_Readline(stdin, stdout, prompt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001758 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 if (!PyErr_Occurred())
1760 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001761 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001763
1764 len = strlen(s);
1765 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 PyErr_SetNone(PyExc_EOFError);
1767 result = NULL;
1768 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001769 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 if (len > PY_SSIZE_T_MAX) {
1771 PyErr_SetString(PyExc_OverflowError,
1772 "input: input too long");
1773 result = NULL;
1774 }
1775 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001776 len--; /* strip trailing '\n' */
1777 if (len != 0 && s[len-1] == '\r')
1778 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001779 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1780 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001781 }
1782 }
1783 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001784 Py_DECREF(stdin_errors);
1785 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 PyMem_FREE(s);
1787 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001788 _readline_errors:
1789 Py_XDECREF(stdin_encoding);
1790 Py_XDECREF(stdout_encoding);
1791 Py_XDECREF(stdin_errors);
1792 Py_XDECREF(stdout_errors);
1793 Py_XDECREF(po);
1794 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001795 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 /* Fallback if we're not interactive */
1798 if (promptarg != NULL) {
1799 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1800 return NULL;
1801 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001802 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 if (tmp == NULL)
1804 PyErr_Clear();
1805 else
1806 Py_DECREF(tmp);
1807 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001808}
1809
1810PyDoc_STRVAR(input_doc,
1811"input([prompt]) -> string\n\
1812\n\
1813Read a string from standard input. The trailing newline is stripped.\n\
1814If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1815On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1816is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001817
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001818
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001820builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001821{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001823}
1824
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001825PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001826"repr(object) -> string\n\
1827\n\
1828Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001829For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001830
1831
Guido van Rossum79f25d91997-04-29 20:08:16 +00001832static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001833builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001834{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001835 PyObject *ndigits = NULL;
1836 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001837 PyObject *number, *round, *result;
1838 _Py_IDENTIFIER(__round__);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1841 kwlist, &number, &ndigits))
1842 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001844 if (Py_TYPE(number)->tp_dict == NULL) {
1845 if (PyType_Ready(Py_TYPE(number)) < 0)
1846 return NULL;
1847 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001848
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001849 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001850 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001851 if (!PyErr_Occurred())
1852 PyErr_Format(PyExc_TypeError,
1853 "type %.100s doesn't define __round__ method",
1854 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001855 return NULL;
1856 }
Alex Martelliae211f92007-08-22 23:21:33 +00001857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 if (ndigits == NULL)
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001859 result = PyObject_CallFunctionObjArgs(round, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 else
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001861 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
1862 Py_DECREF(round);
1863 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001864}
1865
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001866PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001867"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001868\n\
1869Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001870This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001871same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001872
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001873
Raymond Hettinger64958a12003-12-17 20:43:33 +00001874static PyObject *
1875builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1876{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1878 PyObject *callable;
1879 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1880 int reverse;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001881 _Py_IDENTIFIER(sort);
Raymond Hettinger64958a12003-12-17 20:43:33 +00001882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001883 /* args 1-3 should match listsort in Objects/listobject.c */
1884 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1885 kwlist, &seq, &keyfunc, &reverse))
1886 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001887
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001888 newlist = PySequence_List(seq);
1889 if (newlist == NULL)
1890 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001891
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001892 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001893 if (callable == NULL) {
1894 Py_DECREF(newlist);
1895 return NULL;
1896 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 newargs = PyTuple_GetSlice(args, 1, 4);
1899 if (newargs == NULL) {
1900 Py_DECREF(newlist);
1901 Py_DECREF(callable);
1902 return NULL;
1903 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001904
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001905 v = PyObject_Call(callable, newargs, kwds);
1906 Py_DECREF(newargs);
1907 Py_DECREF(callable);
1908 if (v == NULL) {
1909 Py_DECREF(newlist);
1910 return NULL;
1911 }
1912 Py_DECREF(v);
1913 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001914}
1915
1916PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001917"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001918
Guido van Rossum79f25d91997-04-29 20:08:16 +00001919static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001920builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001921{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 PyObject *v = NULL;
1923 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001925 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1926 return NULL;
1927 if (v == NULL) {
1928 d = PyEval_GetLocals();
1929 if (d == NULL) {
1930 if (!PyErr_Occurred())
1931 PyErr_SetString(PyExc_SystemError,
1932 "vars(): no locals!?");
1933 }
1934 else
1935 Py_INCREF(d);
1936 }
1937 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001938 _Py_IDENTIFIER(__dict__);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001939 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001940 if (d == NULL) {
1941 PyErr_SetString(PyExc_TypeError,
1942 "vars() argument must have __dict__ attribute");
1943 return NULL;
1944 }
1945 }
1946 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001947}
1948
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001949PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001950"vars([object]) -> dictionary\n\
1951\n\
1952Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001953With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001954
Alex Martellia70b1912003-04-22 08:12:33 +00001955static PyObject*
1956builtin_sum(PyObject *self, PyObject *args)
1957{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001958 PyObject *seq;
1959 PyObject *result = NULL;
1960 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1963 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001964
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001965 iter = PyObject_GetIter(seq);
1966 if (iter == NULL)
1967 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 if (result == NULL) {
1970 result = PyLong_FromLong(0);
1971 if (result == NULL) {
1972 Py_DECREF(iter);
1973 return NULL;
1974 }
1975 } else {
1976 /* reject string values for 'start' parameter */
1977 if (PyUnicode_Check(result)) {
1978 PyErr_SetString(PyExc_TypeError,
1979 "sum() can't sum strings [use ''.join(seq) instead]");
1980 Py_DECREF(iter);
1981 return NULL;
1982 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001983 if (PyBytes_Check(result)) {
1984 PyErr_SetString(PyExc_TypeError,
1985 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05001986 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001987 return NULL;
1988 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 if (PyByteArray_Check(result)) {
1990 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001991 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001992 Py_DECREF(iter);
1993 return NULL;
1994 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001995
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 Py_INCREF(result);
1997 }
Alex Martellia70b1912003-04-22 08:12:33 +00001998
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001999#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2001 Assumes all inputs are the same type. If the assumption fails, default
2002 to the more general routine.
2003 */
2004 if (PyLong_CheckExact(result)) {
2005 int overflow;
2006 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2007 /* If this already overflowed, don't even enter the loop. */
2008 if (overflow == 0) {
2009 Py_DECREF(result);
2010 result = NULL;
2011 }
2012 while(result == NULL) {
2013 item = PyIter_Next(iter);
2014 if (item == NULL) {
2015 Py_DECREF(iter);
2016 if (PyErr_Occurred())
2017 return NULL;
2018 return PyLong_FromLong(i_result);
2019 }
2020 if (PyLong_CheckExact(item)) {
2021 long b = PyLong_AsLongAndOverflow(item, &overflow);
2022 long x = i_result + b;
2023 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2024 i_result = x;
2025 Py_DECREF(item);
2026 continue;
2027 }
2028 }
2029 /* Either overflowed or is not an int. Restore real objects and process normally */
2030 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002031 if (result == NULL) {
2032 Py_DECREF(item);
2033 Py_DECREF(iter);
2034 return NULL;
2035 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 temp = PyNumber_Add(result, item);
2037 Py_DECREF(result);
2038 Py_DECREF(item);
2039 result = temp;
2040 if (result == NULL) {
2041 Py_DECREF(iter);
2042 return NULL;
2043 }
2044 }
2045 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002046
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002047 if (PyFloat_CheckExact(result)) {
2048 double f_result = PyFloat_AS_DOUBLE(result);
2049 Py_DECREF(result);
2050 result = NULL;
2051 while(result == NULL) {
2052 item = PyIter_Next(iter);
2053 if (item == NULL) {
2054 Py_DECREF(iter);
2055 if (PyErr_Occurred())
2056 return NULL;
2057 return PyFloat_FromDouble(f_result);
2058 }
2059 if (PyFloat_CheckExact(item)) {
2060 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2061 f_result += PyFloat_AS_DOUBLE(item);
2062 PyFPE_END_PROTECT(f_result)
2063 Py_DECREF(item);
2064 continue;
2065 }
2066 if (PyLong_CheckExact(item)) {
2067 long value;
2068 int overflow;
2069 value = PyLong_AsLongAndOverflow(item, &overflow);
2070 if (!overflow) {
2071 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2072 f_result += (double)value;
2073 PyFPE_END_PROTECT(f_result)
2074 Py_DECREF(item);
2075 continue;
2076 }
2077 }
2078 result = PyFloat_FromDouble(f_result);
2079 temp = PyNumber_Add(result, item);
2080 Py_DECREF(result);
2081 Py_DECREF(item);
2082 result = temp;
2083 if (result == NULL) {
2084 Py_DECREF(iter);
2085 return NULL;
2086 }
2087 }
2088 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002089#endif
2090
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 for(;;) {
2092 item = PyIter_Next(iter);
2093 if (item == NULL) {
2094 /* error, or end-of-sequence */
2095 if (PyErr_Occurred()) {
2096 Py_DECREF(result);
2097 result = NULL;
2098 }
2099 break;
2100 }
2101 /* It's tempting to use PyNumber_InPlaceAdd instead of
2102 PyNumber_Add here, to avoid quadratic running time
2103 when doing 'sum(list_of_lists, [])'. However, this
2104 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002105
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002106 empty = []
2107 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002108
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002109 would change the value of empty. */
2110 temp = PyNumber_Add(result, item);
2111 Py_DECREF(result);
2112 Py_DECREF(item);
2113 result = temp;
2114 if (result == NULL)
2115 break;
2116 }
2117 Py_DECREF(iter);
2118 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002119}
2120
2121PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002122"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002123\n\
R David Murray87ead112013-07-10 16:22:14 -04002124Return the sum of an iterable of numbers (NOT strings) plus the value\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002125of parameter 'start' (which defaults to 0). When the iterable is\n\
R David Murray87ead112013-07-10 16:22:14 -04002126empty, return start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002127
2128
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002129static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002130builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002131{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 PyObject *inst;
2133 PyObject *cls;
2134 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002135
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2137 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002138
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 retval = PyObject_IsInstance(inst, cls);
2140 if (retval < 0)
2141 return NULL;
2142 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002143}
2144
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002145PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002146"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002147\n\
2148Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002149With a type as second argument, return whether that is the object's type.\n\
2150The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002151isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002152
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002153
2154static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002155builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002156{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 PyObject *derived;
2158 PyObject *cls;
2159 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2162 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 retval = PyObject_IsSubclass(derived, cls);
2165 if (retval < 0)
2166 return NULL;
2167 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002168}
2169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002170PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002171"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002172\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002173Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2174When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2175is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002176
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002177
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002178typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 PyObject_HEAD
2180 Py_ssize_t tuplesize;
2181 PyObject *ittuple; /* tuple of iterators */
2182 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002183} zipobject;
2184
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002185static PyObject *
2186zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002188 zipobject *lz;
2189 Py_ssize_t i;
2190 PyObject *ittuple; /* tuple of iterators */
2191 PyObject *result;
2192 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002193
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2195 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002196
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002197 /* args must be a tuple */
2198 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 /* obtain iterators */
2201 ittuple = PyTuple_New(tuplesize);
2202 if (ittuple == NULL)
2203 return NULL;
2204 for (i=0; i < tuplesize; ++i) {
2205 PyObject *item = PyTuple_GET_ITEM(args, i);
2206 PyObject *it = PyObject_GetIter(item);
2207 if (it == NULL) {
2208 if (PyErr_ExceptionMatches(PyExc_TypeError))
2209 PyErr_Format(PyExc_TypeError,
2210 "zip argument #%zd must support iteration",
2211 i+1);
2212 Py_DECREF(ittuple);
2213 return NULL;
2214 }
2215 PyTuple_SET_ITEM(ittuple, i, it);
2216 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002218 /* create a result holder */
2219 result = PyTuple_New(tuplesize);
2220 if (result == NULL) {
2221 Py_DECREF(ittuple);
2222 return NULL;
2223 }
2224 for (i=0 ; i < tuplesize ; i++) {
2225 Py_INCREF(Py_None);
2226 PyTuple_SET_ITEM(result, i, Py_None);
2227 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002228
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002229 /* create zipobject structure */
2230 lz = (zipobject *)type->tp_alloc(type, 0);
2231 if (lz == NULL) {
2232 Py_DECREF(ittuple);
2233 Py_DECREF(result);
2234 return NULL;
2235 }
2236 lz->ittuple = ittuple;
2237 lz->tuplesize = tuplesize;
2238 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002240 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002241}
2242
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002243static void
2244zip_dealloc(zipobject *lz)
2245{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002246 PyObject_GC_UnTrack(lz);
2247 Py_XDECREF(lz->ittuple);
2248 Py_XDECREF(lz->result);
2249 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002250}
2251
2252static int
2253zip_traverse(zipobject *lz, visitproc visit, void *arg)
2254{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 Py_VISIT(lz->ittuple);
2256 Py_VISIT(lz->result);
2257 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002258}
2259
2260static PyObject *
2261zip_next(zipobject *lz)
2262{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002263 Py_ssize_t i;
2264 Py_ssize_t tuplesize = lz->tuplesize;
2265 PyObject *result = lz->result;
2266 PyObject *it;
2267 PyObject *item;
2268 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002270 if (tuplesize == 0)
2271 return NULL;
2272 if (Py_REFCNT(result) == 1) {
2273 Py_INCREF(result);
2274 for (i=0 ; i < tuplesize ; i++) {
2275 it = PyTuple_GET_ITEM(lz->ittuple, i);
2276 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002277 if (item == NULL) {
2278 Py_DECREF(result);
2279 return NULL;
2280 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002281 olditem = PyTuple_GET_ITEM(result, i);
2282 PyTuple_SET_ITEM(result, i, item);
2283 Py_DECREF(olditem);
2284 }
2285 } else {
2286 result = PyTuple_New(tuplesize);
2287 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002288 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002289 for (i=0 ; i < tuplesize ; i++) {
2290 it = PyTuple_GET_ITEM(lz->ittuple, i);
2291 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002292 if (item == NULL) {
2293 Py_DECREF(result);
2294 return NULL;
2295 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 PyTuple_SET_ITEM(result, i, item);
2297 }
2298 }
2299 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002300}
Barry Warsawbd599b52000-08-03 15:45:29 +00002301
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002302static PyObject *
2303zip_reduce(zipobject *lz)
2304{
2305 /* Just recreate the zip with the internal iterator tuple */
2306 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2307}
2308
2309static PyMethodDef zip_methods[] = {
2310 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2311 {NULL, NULL} /* sentinel */
2312};
2313
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002314PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002315"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002316\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002317Return a zip object whose .__next__() method returns a tuple where\n\
2318the i-th element comes from the i-th iterable argument. The .__next__()\n\
2319method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002320is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002321
2322PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002323 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2324 "zip", /* tp_name */
2325 sizeof(zipobject), /* tp_basicsize */
2326 0, /* tp_itemsize */
2327 /* methods */
2328 (destructor)zip_dealloc, /* tp_dealloc */
2329 0, /* tp_print */
2330 0, /* tp_getattr */
2331 0, /* tp_setattr */
2332 0, /* tp_reserved */
2333 0, /* tp_repr */
2334 0, /* tp_as_number */
2335 0, /* tp_as_sequence */
2336 0, /* tp_as_mapping */
2337 0, /* tp_hash */
2338 0, /* tp_call */
2339 0, /* tp_str */
2340 PyObject_GenericGetAttr, /* tp_getattro */
2341 0, /* tp_setattro */
2342 0, /* tp_as_buffer */
2343 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2344 Py_TPFLAGS_BASETYPE, /* tp_flags */
2345 zip_doc, /* tp_doc */
2346 (traverseproc)zip_traverse, /* tp_traverse */
2347 0, /* tp_clear */
2348 0, /* tp_richcompare */
2349 0, /* tp_weaklistoffset */
2350 PyObject_SelfIter, /* tp_iter */
2351 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002352 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002353 0, /* tp_members */
2354 0, /* tp_getset */
2355 0, /* tp_base */
2356 0, /* tp_dict */
2357 0, /* tp_descr_get */
2358 0, /* tp_descr_set */
2359 0, /* tp_dictoffset */
2360 0, /* tp_init */
2361 PyType_GenericAlloc, /* tp_alloc */
2362 zip_new, /* tp_new */
2363 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002364};
Barry Warsawbd599b52000-08-03 15:45:29 +00002365
2366
Guido van Rossum79f25d91997-04-29 20:08:16 +00002367static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002368 {"__build_class__", (PyCFunction)builtin___build_class__,
2369 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2370 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2371 {"abs", builtin_abs, METH_O, abs_doc},
2372 {"all", builtin_all, METH_O, all_doc},
2373 {"any", builtin_any, METH_O, any_doc},
2374 {"ascii", builtin_ascii, METH_O, ascii_doc},
2375 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002376 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002377 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2378 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2379 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2380 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2381 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2382 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2383 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2384 {"format", builtin_format, METH_VARARGS, format_doc},
2385 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2386 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2387 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2388 {"hash", builtin_hash, METH_O, hash_doc},
2389 {"hex", builtin_hex, METH_O, hex_doc},
2390 {"id", builtin_id, METH_O, id_doc},
2391 {"input", builtin_input, METH_VARARGS, input_doc},
2392 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2393 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2394 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2395 {"len", builtin_len, METH_O, len_doc},
2396 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2397 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2398 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2399 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2400 {"oct", builtin_oct, METH_O, oct_doc},
2401 {"ord", builtin_ord, METH_O, ord_doc},
2402 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2403 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2404 {"repr", builtin_repr, METH_O, repr_doc},
2405 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2406 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2407 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2408 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2409 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2410 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002411};
2412
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002413PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002414"Built-in functions, exceptions, and other objects.\n\
2415\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002416Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002417
Martin v. Löwis1a214512008-06-11 05:26:20 +00002418static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002419 PyModuleDef_HEAD_INIT,
2420 "builtins",
2421 builtin_doc,
2422 -1, /* multiple "initialization" just copies the module dict. */
2423 builtin_methods,
2424 NULL,
2425 NULL,
2426 NULL,
2427 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002428};
2429
2430
Guido van Rossum25ce5661997-08-02 03:10:38 +00002431PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002432_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002433{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002434 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002435
2436 if (PyType_Ready(&PyFilter_Type) < 0 ||
2437 PyType_Ready(&PyMap_Type) < 0 ||
2438 PyType_Ready(&PyZip_Type) < 0)
2439 return NULL;
2440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002441 mod = PyModule_Create(&builtinsmodule);
2442 if (mod == NULL)
2443 return NULL;
2444 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002445
Tim Peters7571a0f2003-03-23 17:52:28 +00002446#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 /* "builtins" exposes a number of statically allocated objects
2448 * that, before this code was added in 2.3, never showed up in
2449 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2450 * result, programs leaking references to None and False (etc)
2451 * couldn't be diagnosed by examining sys.getobjects(0).
2452 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002453#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2454#else
2455#define ADD_TO_ALL(OBJECT) (void)0
2456#endif
2457
Tim Peters4b7625e2001-09-13 21:37:17 +00002458#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002459 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2460 return NULL; \
2461 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002463 SETBUILTIN("None", Py_None);
2464 SETBUILTIN("Ellipsis", Py_Ellipsis);
2465 SETBUILTIN("NotImplemented", Py_NotImplemented);
2466 SETBUILTIN("False", Py_False);
2467 SETBUILTIN("True", Py_True);
2468 SETBUILTIN("bool", &PyBool_Type);
2469 SETBUILTIN("memoryview", &PyMemoryView_Type);
2470 SETBUILTIN("bytearray", &PyByteArray_Type);
2471 SETBUILTIN("bytes", &PyBytes_Type);
2472 SETBUILTIN("classmethod", &PyClassMethod_Type);
2473 SETBUILTIN("complex", &PyComplex_Type);
2474 SETBUILTIN("dict", &PyDict_Type);
2475 SETBUILTIN("enumerate", &PyEnum_Type);
2476 SETBUILTIN("filter", &PyFilter_Type);
2477 SETBUILTIN("float", &PyFloat_Type);
2478 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2479 SETBUILTIN("property", &PyProperty_Type);
2480 SETBUILTIN("int", &PyLong_Type);
2481 SETBUILTIN("list", &PyList_Type);
2482 SETBUILTIN("map", &PyMap_Type);
2483 SETBUILTIN("object", &PyBaseObject_Type);
2484 SETBUILTIN("range", &PyRange_Type);
2485 SETBUILTIN("reversed", &PyReversed_Type);
2486 SETBUILTIN("set", &PySet_Type);
2487 SETBUILTIN("slice", &PySlice_Type);
2488 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2489 SETBUILTIN("str", &PyUnicode_Type);
2490 SETBUILTIN("super", &PySuper_Type);
2491 SETBUILTIN("tuple", &PyTuple_Type);
2492 SETBUILTIN("type", &PyType_Type);
2493 SETBUILTIN("zip", &PyZip_Type);
2494 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2495 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2496 Py_XDECREF(debug);
2497 return NULL;
2498 }
2499 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002501 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002502#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002503#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002504}