blob: 86e0805de25f68b2d2cfca6f0d274e90fbc93a28 [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 Stinner4c7c8c32010-10-16 13:14:10 +0000582 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000583 char *filename;
584 char *startstr;
585 int mode = -1;
586 int dont_inherit = 0;
587 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000588 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 int is_ast;
590 PyCompilerFlags cf;
591 PyObject *cmd;
592 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000593 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000595 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000596
Georg Brandl8334fd92010-12-04 10:26:46 +0000597 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000598 &cmd,
599 PyUnicode_FSConverter, &filename_obj,
600 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000601 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000602 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000603
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000604 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000607 if (supplied_flags &
608 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
609 {
610 PyErr_SetString(PyExc_ValueError,
611 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000612 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 }
614 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000615
Georg Brandl8334fd92010-12-04 10:26:46 +0000616 if (optimize < -1 || optimize > 2) {
617 PyErr_SetString(PyExc_ValueError,
618 "compile(): invalid optimize value");
619 goto error;
620 }
621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 if (!dont_inherit) {
623 PyEval_MergeCompilerFlags(&cf);
624 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000625
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000626 if (strcmp(startstr, "exec") == 0)
627 mode = 0;
628 else if (strcmp(startstr, "eval") == 0)
629 mode = 1;
630 else if (strcmp(startstr, "single") == 0)
631 mode = 2;
632 else {
633 PyErr_SetString(PyExc_ValueError,
634 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000635 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 is_ast = PyAST_Check(cmd);
639 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000640 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000641 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 if (supplied_flags & PyCF_ONLY_AST) {
643 Py_INCREF(cmd);
644 result = cmd;
645 }
646 else {
647 PyArena *arena;
648 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200651 if (arena == NULL)
652 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000653 mod = PyAST_obj2mod(cmd, arena, mode);
654 if (mod == NULL) {
655 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000656 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500658 if (!PyAST_Validate(mod)) {
659 PyArena_Free(arena);
660 goto error;
661 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000662 result = (PyObject*)PyAST_CompileEx(mod, filename,
663 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 PyArena_Free(arena);
665 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000666 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000667 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000668
Philip Jenveyf76f0ee2012-12-13 15:44:18 -0800669 str = source_as_string(cmd, "compile", "string, bytes or AST", &cf);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000671 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000672
Georg Brandl8334fd92010-12-04 10:26:46 +0000673 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000674 goto finally;
675
676error:
677 result = NULL;
678finally:
679 Py_DECREF(filename_obj);
680 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000681}
682
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000683PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000684"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000685\n\
686Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000687into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000688The filename will be used for run-time error messages.\n\
689The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000690single (interactive) statement, or 'eval' to compile an expression.\n\
691The flags argument, if present, controls which future statements influence\n\
692the compilation of the code.\n\
693The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
694the effects of any future statements in effect in the code calling\n\
695compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000696in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000697
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000699builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000700{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000701 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000703 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
704 return NULL;
705 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000706}
707
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000708PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000709"dir([object]) -> list of strings\n"
710"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000711"If called without an argument, return the names in the current scope.\n"
712"Else, return an alphabetized list of names comprising (some of) the attributes\n"
713"of the given object, and of attributes reachable from it.\n"
714"If the object supplies a method named __dir__, it will be used; otherwise\n"
715"the default dir() logic is used and returns:\n"
716" for a module object: the module's attributes.\n"
717" for a class object: its attributes, and recursively the attributes\n"
718" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000719" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000720" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000721
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000723builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000724{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000726
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
728 return NULL;
729 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000730}
731
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000732PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000733"divmod(x, y) -> (div, mod)\n\
734\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000735Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000736
737
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000739builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000740{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 PyObject *cmd, *result, *tmp = NULL;
742 PyObject *globals = Py_None, *locals = Py_None;
743 char *str;
744 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
747 return NULL;
748 if (locals != Py_None && !PyMapping_Check(locals)) {
749 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
750 return NULL;
751 }
752 if (globals != Py_None && !PyDict_Check(globals)) {
753 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
754 "globals must be a real dict; try eval(expr, {}, mapping)"
755 : "globals must be a dict");
756 return NULL;
757 }
758 if (globals == Py_None) {
759 globals = PyEval_GetGlobals();
760 if (locals == Py_None)
761 locals = PyEval_GetLocals();
762 }
763 else if (locals == Py_None)
764 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 if (globals == NULL || locals == NULL) {
767 PyErr_SetString(PyExc_TypeError,
768 "eval must be given globals and locals "
769 "when called without a frame");
770 return NULL;
771 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
774 if (PyDict_SetItemString(globals, "__builtins__",
775 PyEval_GetBuiltins()) != 0)
776 return NULL;
777 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000778
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000779 if (PyCode_Check(cmd)) {
780 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
781 PyErr_SetString(PyExc_TypeError,
782 "code object passed to eval() may not contain free variables");
783 return NULL;
784 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000785 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
789 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
790 if (str == NULL)
791 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000792
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 while (*str == ' ' || *str == '\t')
794 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 (void)PyEval_MergeCompilerFlags(&cf);
797 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
798 Py_XDECREF(tmp);
799 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000800}
801
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000802PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000803"eval(source[, globals[, locals]]) -> value\n\
804\n\
805Evaluate the source in the context of globals and locals.\n\
806The source may be a string representing a Python expression\n\
807or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000808The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000809defaulting to the current globals and locals.\n\
810If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000811
Georg Brandl7cae87c2006-09-06 06:51:57 +0000812static PyObject *
813builtin_exec(PyObject *self, PyObject *args)
814{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 PyObject *v;
816 PyObject *prog, *globals = Py_None, *locals = Py_None;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
819 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 if (globals == Py_None) {
822 globals = PyEval_GetGlobals();
823 if (locals == Py_None) {
824 locals = PyEval_GetLocals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000825 }
826 if (!globals || !locals) {
827 PyErr_SetString(PyExc_SystemError,
828 "globals and locals cannot be NULL");
829 return NULL;
830 }
831 }
832 else if (locals == Py_None)
833 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 if (!PyDict_Check(globals)) {
836 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
837 globals->ob_type->tp_name);
838 return NULL;
839 }
840 if (!PyMapping_Check(locals)) {
841 PyErr_Format(PyExc_TypeError,
842 "arg 3 must be a mapping or None, not %.100s",
843 locals->ob_type->tp_name);
844 return NULL;
845 }
846 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
847 if (PyDict_SetItemString(globals, "__builtins__",
848 PyEval_GetBuiltins()) != 0)
849 return NULL;
850 }
851
852 if (PyCode_Check(prog)) {
853 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
854 PyErr_SetString(PyExc_TypeError,
855 "code object passed to exec() may not "
856 "contain free variables");
857 return NULL;
858 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000859 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000860 }
861 else {
862 char *str;
863 PyCompilerFlags cf;
864 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
865 str = source_as_string(prog, "exec",
866 "string, bytes or code", &cf);
867 if (str == NULL)
868 return NULL;
869 if (PyEval_MergeCompilerFlags(&cf))
870 v = PyRun_StringFlags(str, Py_file_input, globals,
871 locals, &cf);
872 else
873 v = PyRun_String(str, Py_file_input, globals, locals);
874 }
875 if (v == NULL)
876 return NULL;
877 Py_DECREF(v);
878 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000879}
880
881PyDoc_STRVAR(exec_doc,
882"exec(object[, globals[, locals]])\n\
883\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000884Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000885object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000886The globals and locals are dictionaries, defaulting to the current\n\
887globals and locals. If only globals is given, locals defaults to it.");
888
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000889
Guido van Rossum79f25d91997-04-29 20:08:16 +0000890static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000891builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000892{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 PyObject *v, *result, *dflt = NULL;
894 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
897 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000898
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 if (!PyUnicode_Check(name)) {
900 PyErr_SetString(PyExc_TypeError,
901 "getattr(): attribute name must be string");
902 return NULL;
903 }
904 result = PyObject_GetAttr(v, name);
905 if (result == NULL && dflt != NULL &&
906 PyErr_ExceptionMatches(PyExc_AttributeError))
907 {
908 PyErr_Clear();
909 Py_INCREF(dflt);
910 result = dflt;
911 }
912 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000913}
914
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000915PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000916"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000917\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000918Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
919When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000924builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000925{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 d = PyEval_GetGlobals();
929 Py_XINCREF(d);
930 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000931}
932
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000933PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000934"globals() -> dictionary\n\
935\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000936Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000937
938
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000940builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000941{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 PyObject *v;
943 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
946 return NULL;
947 if (!PyUnicode_Check(name)) {
948 PyErr_SetString(PyExc_TypeError,
949 "hasattr(): attribute name must be string");
950 return NULL;
951 }
952 v = PyObject_GetAttr(v, name);
953 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000954 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000956 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000957 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000958 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 }
960 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000961 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000962}
963
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000964PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000965"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000966\n\
967Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000968(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000969
970
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000972builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000973{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000975}
976
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000977PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000978"id(object) -> integer\n\
979\n\
980Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000981simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000982
983
Raymond Hettingera6c60372008-03-13 01:26:19 +0000984/* map object ************************************************************/
985
986typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 PyObject_HEAD
988 PyObject *iters;
989 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000990} mapobject;
991
Guido van Rossum79f25d91997-04-29 20:08:16 +0000992static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000993map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000994{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000995 PyObject *it, *iters, *func;
996 mapobject *lz;
997 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
1000 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 numargs = PyTuple_Size(args);
1003 if (numargs < 2) {
1004 PyErr_SetString(PyExc_TypeError,
1005 "map() must have at least two arguments.");
1006 return NULL;
1007 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 iters = PyTuple_New(numargs-1);
1010 if (iters == NULL)
1011 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 for (i=1 ; i<numargs ; i++) {
1014 /* Get iterator. */
1015 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1016 if (it == NULL) {
1017 Py_DECREF(iters);
1018 return NULL;
1019 }
1020 PyTuple_SET_ITEM(iters, i-1, it);
1021 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 /* create mapobject structure */
1024 lz = (mapobject *)type->tp_alloc(type, 0);
1025 if (lz == NULL) {
1026 Py_DECREF(iters);
1027 return NULL;
1028 }
1029 lz->iters = iters;
1030 func = PyTuple_GET_ITEM(args, 0);
1031 Py_INCREF(func);
1032 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001035}
1036
1037static void
1038map_dealloc(mapobject *lz)
1039{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 PyObject_GC_UnTrack(lz);
1041 Py_XDECREF(lz->iters);
1042 Py_XDECREF(lz->func);
1043 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001044}
1045
1046static int
1047map_traverse(mapobject *lz, visitproc visit, void *arg)
1048{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 Py_VISIT(lz->iters);
1050 Py_VISIT(lz->func);
1051 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001052}
1053
1054static PyObject *
1055map_next(mapobject *lz)
1056{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 PyObject *val;
1058 PyObject *argtuple;
1059 PyObject *result;
1060 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 numargs = PyTuple_Size(lz->iters);
1063 argtuple = PyTuple_New(numargs);
1064 if (argtuple == NULL)
1065 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001066
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 for (i=0 ; i<numargs ; i++) {
1068 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1069 if (val == NULL) {
1070 Py_DECREF(argtuple);
1071 return NULL;
1072 }
1073 PyTuple_SET_ITEM(argtuple, i, val);
1074 }
1075 result = PyObject_Call(lz->func, argtuple, NULL);
1076 Py_DECREF(argtuple);
1077 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001078}
1079
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001080static PyObject *
1081map_reduce(mapobject *lz)
1082{
1083 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1084 PyObject *args = PyTuple_New(numargs+1);
1085 Py_ssize_t i;
1086 if (args == NULL)
1087 return NULL;
1088 Py_INCREF(lz->func);
1089 PyTuple_SET_ITEM(args, 0, lz->func);
1090 for (i = 0; i<numargs; i++){
1091 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1092 Py_INCREF(it);
1093 PyTuple_SET_ITEM(args, i+1, it);
1094 }
1095
1096 return Py_BuildValue("ON", Py_TYPE(lz), args);
1097}
1098
1099static PyMethodDef map_methods[] = {
1100 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1101 {NULL, NULL} /* sentinel */
1102};
1103
1104
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001105PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001106"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001107\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001108Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001110
Raymond Hettingera6c60372008-03-13 01:26:19 +00001111PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1113 "map", /* tp_name */
1114 sizeof(mapobject), /* tp_basicsize */
1115 0, /* tp_itemsize */
1116 /* methods */
1117 (destructor)map_dealloc, /* tp_dealloc */
1118 0, /* tp_print */
1119 0, /* tp_getattr */
1120 0, /* tp_setattr */
1121 0, /* tp_reserved */
1122 0, /* tp_repr */
1123 0, /* tp_as_number */
1124 0, /* tp_as_sequence */
1125 0, /* tp_as_mapping */
1126 0, /* tp_hash */
1127 0, /* tp_call */
1128 0, /* tp_str */
1129 PyObject_GenericGetAttr, /* tp_getattro */
1130 0, /* tp_setattro */
1131 0, /* tp_as_buffer */
1132 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1133 Py_TPFLAGS_BASETYPE, /* tp_flags */
1134 map_doc, /* tp_doc */
1135 (traverseproc)map_traverse, /* tp_traverse */
1136 0, /* tp_clear */
1137 0, /* tp_richcompare */
1138 0, /* tp_weaklistoffset */
1139 PyObject_SelfIter, /* tp_iter */
1140 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001141 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 0, /* tp_members */
1143 0, /* tp_getset */
1144 0, /* tp_base */
1145 0, /* tp_dict */
1146 0, /* tp_descr_get */
1147 0, /* tp_descr_set */
1148 0, /* tp_dictoffset */
1149 0, /* tp_init */
1150 PyType_GenericAlloc, /* tp_alloc */
1151 map_new, /* tp_new */
1152 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001153};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001156builtin_next(PyObject *self, PyObject *args)
1157{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 PyObject *it, *res;
1159 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1162 return NULL;
1163 if (!PyIter_Check(it)) {
1164 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001165 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 it->ob_type->tp_name);
1167 return NULL;
1168 }
1169
1170 res = (*it->ob_type->tp_iternext)(it);
1171 if (res != NULL) {
1172 return res;
1173 } else if (def != NULL) {
1174 if (PyErr_Occurred()) {
1175 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1176 return NULL;
1177 PyErr_Clear();
1178 }
1179 Py_INCREF(def);
1180 return def;
1181 } else if (PyErr_Occurred()) {
1182 return NULL;
1183 } else {
1184 PyErr_SetNone(PyExc_StopIteration);
1185 return NULL;
1186 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001187}
1188
1189PyDoc_STRVAR(next_doc,
1190"next(iterator[, default])\n\
1191\n\
1192Return the next item from the iterator. If default is given and the iterator\n\
1193is exhausted, it is returned instead of raising StopIteration.");
1194
1195
1196static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001197builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001198{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 PyObject *v;
1200 PyObject *name;
1201 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1204 return NULL;
1205 if (PyObject_SetAttr(v, name, value) != 0)
1206 return NULL;
1207 Py_INCREF(Py_None);
1208 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001209}
1210
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001212"setattr(object, name, value)\n\
1213\n\
1214Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001215``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001216
1217
Guido van Rossum79f25d91997-04-29 20:08:16 +00001218static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001219builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001220{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 PyObject *v;
1222 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001223
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1225 return NULL;
1226 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1227 return NULL;
1228 Py_INCREF(Py_None);
1229 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001230}
1231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001232PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001233"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001234\n\
1235Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001236``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001237
1238
Guido van Rossum79f25d91997-04-29 20:08:16 +00001239static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001240builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001241{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001242 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001244 x = PyObject_Hash(v);
1245 if (x == -1)
1246 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001247 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001248}
1249
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001250PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001251"hash(object) -> integer\n\
1252\n\
1253Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001254the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001255
1256
Guido van Rossum79f25d91997-04-29 20:08:16 +00001257static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001258builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001259{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001260 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001261}
1262
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001263PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001264"hex(number) -> string\n\
1265\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001266Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001267
1268
Guido van Rossum79f25d91997-04-29 20:08:16 +00001269static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001270builtin_iter(PyObject *self, PyObject *args)
1271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001274 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1275 return NULL;
1276 if (w == NULL)
1277 return PyObject_GetIter(v);
1278 if (!PyCallable_Check(v)) {
1279 PyErr_SetString(PyExc_TypeError,
1280 "iter(v, w): v must be callable");
1281 return NULL;
1282 }
1283 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001284}
1285
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001286PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001287"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001288iter(callable, sentinel) -> iterator\n\
1289\n\
1290Get an iterator from an object. In the first form, the argument must\n\
1291supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001292In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001293
1294
1295static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001296builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001297{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001298 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001300 res = PyObject_Size(v);
1301 if (res < 0 && PyErr_Occurred())
1302 return NULL;
1303 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001304}
1305
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001306PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001307"len(object) -> integer\n\
1308\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001309Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001310
1311
Guido van Rossum79f25d91997-04-29 20:08:16 +00001312static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001313builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001314{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001317 d = PyEval_GetLocals();
1318 Py_XINCREF(d);
1319 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001320}
1321
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001322PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001323"locals() -> dictionary\n\
1324\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001325Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326
1327
Guido van Rossum79f25d91997-04-29 20:08:16 +00001328static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001329min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001330{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001331 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001332 PyObject *emptytuple, *defaultval = NULL;
1333 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001334 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001335 const int positional = PyTuple_Size(args) > 1;
1336 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001337
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001338 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001339 v = args;
1340 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1341 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001342
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001343 emptytuple = PyTuple_New(0);
1344 if (emptytuple == NULL)
1345 return NULL;
1346 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
1347 &keyfunc, &defaultval);
1348 Py_DECREF(emptytuple);
1349 if (!ret)
1350 return NULL;
1351
1352 if (positional && defaultval != NULL) {
1353 PyErr_Format(PyExc_TypeError,
1354 "Cannot specify a default for %s() with multiple "
1355 "positional arguments", name);
1356 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001357 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001358
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001359 it = PyObject_GetIter(v);
1360 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001361 return NULL;
1362 }
Tim Petersc3074532001-05-03 07:00:32 +00001363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001364 maxitem = NULL; /* the result */
1365 maxval = NULL; /* the value associated with the result */
1366 while (( item = PyIter_Next(it) )) {
1367 /* get the value from the key function */
1368 if (keyfunc != NULL) {
1369 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1370 if (val == NULL)
1371 goto Fail_it_item;
1372 }
1373 /* no key function; the value is the item */
1374 else {
1375 val = item;
1376 Py_INCREF(val);
1377 }
Tim Petersc3074532001-05-03 07:00:32 +00001378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 /* maximum value and item are unset; set them */
1380 if (maxval == NULL) {
1381 maxitem = item;
1382 maxval = val;
1383 }
1384 /* maximum value and item are set; update them as necessary */
1385 else {
1386 int cmp = PyObject_RichCompareBool(val, maxval, op);
1387 if (cmp < 0)
1388 goto Fail_it_item_and_val;
1389 else if (cmp > 0) {
1390 Py_DECREF(maxval);
1391 Py_DECREF(maxitem);
1392 maxval = val;
1393 maxitem = item;
1394 }
1395 else {
1396 Py_DECREF(item);
1397 Py_DECREF(val);
1398 }
1399 }
1400 }
1401 if (PyErr_Occurred())
1402 goto Fail_it;
1403 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001405 if (defaultval != NULL) {
1406 Py_INCREF(defaultval);
1407 maxitem = defaultval;
1408 } else {
1409 PyErr_Format(PyExc_ValueError,
1410 "%s() arg is an empty sequence", name);
1411 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 }
1413 else
1414 Py_DECREF(maxval);
1415 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001417
1418Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001420Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001421 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001422Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001423 Py_XDECREF(maxval);
1424 Py_XDECREF(maxitem);
1425 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001427}
1428
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001430builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001431{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001432 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001433}
1434
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001435PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001436"min(iterable[, key=func]) -> value\n\
1437min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001438\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001439With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001440With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001441
1442
Guido van Rossum79f25d91997-04-29 20:08:16 +00001443static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001444builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001445{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001446 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001447}
1448
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001449PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001450"max(iterable[, key=func]) -> value\n\
1451max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001452\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001453With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001454With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001455
1456
Guido van Rossum79f25d91997-04-29 20:08:16 +00001457static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001458builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001459{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001460 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001461}
1462
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001463PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001464"oct(number) -> string\n\
1465\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001466Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001467
1468
Guido van Rossum79f25d91997-04-29 20:08:16 +00001469static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001470builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001471{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001472 long ord;
1473 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001474
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001475 if (PyBytes_Check(obj)) {
1476 size = PyBytes_GET_SIZE(obj);
1477 if (size == 1) {
1478 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1479 return PyLong_FromLong(ord);
1480 }
1481 }
1482 else if (PyUnicode_Check(obj)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001483 if (PyUnicode_READY(obj) == -1)
1484 return NULL;
1485 size = PyUnicode_GET_LENGTH(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 if (size == 1) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001487 ord = (long)PyUnicode_READ_CHAR(obj, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 return PyLong_FromLong(ord);
1489 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001490 }
1491 else if (PyByteArray_Check(obj)) {
1492 /* XXX Hopefully this is temporary */
1493 size = PyByteArray_GET_SIZE(obj);
1494 if (size == 1) {
1495 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1496 return PyLong_FromLong(ord);
1497 }
1498 }
1499 else {
1500 PyErr_Format(PyExc_TypeError,
1501 "ord() expected string of length 1, but " \
1502 "%.200s found", obj->ob_type->tp_name);
1503 return NULL;
1504 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 PyErr_Format(PyExc_TypeError,
1507 "ord() expected a character, "
1508 "but string of length %zd found",
1509 size);
1510 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001511}
1512
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001513PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001514"ord(c) -> integer\n\
1515\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001516Return the integer ordinal of a one-character string."
Antoine Pitrouedc60182012-06-23 14:19:58 +02001517);
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001518
1519
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001521builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001522{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001523 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001525 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1526 return NULL;
1527 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001528}
1529
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001530PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001531"pow(x, y[, z]) -> number\n\
1532\n\
1533With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001534equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001535
1536
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001537
Guido van Rossum34343512006-11-30 22:13:52 +00001538static PyObject *
1539builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1540{
Georg Brandlbc3b6822012-01-13 19:41:25 +01001541 static char *kwlist[] = {"sep", "end", "file", "flush", 0};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001542 static PyObject *dummy_args;
Georg Brandlbc3b6822012-01-13 19:41:25 +01001543 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001544 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001545
Benjamin Peterson00102562012-01-11 21:00:16 -05001546 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Georg Brandlbc3b6822012-01-13 19:41:25 +01001547 return NULL;
1548 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print",
1549 kwlist, &sep, &end, &file, &flush))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001550 return NULL;
1551 if (file == NULL || file == Py_None) {
1552 file = PySys_GetObject("stdout");
1553 /* sys.stdout may be None when FILE* stdout isn't connected */
1554 if (file == Py_None)
1555 Py_RETURN_NONE;
1556 }
Guido van Rossum34343512006-11-30 22:13:52 +00001557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001558 if (sep == Py_None) {
1559 sep = NULL;
1560 }
1561 else if (sep && !PyUnicode_Check(sep)) {
1562 PyErr_Format(PyExc_TypeError,
1563 "sep must be None or a string, not %.200s",
1564 sep->ob_type->tp_name);
1565 return NULL;
1566 }
1567 if (end == Py_None) {
1568 end = NULL;
1569 }
1570 else if (end && !PyUnicode_Check(end)) {
1571 PyErr_Format(PyExc_TypeError,
1572 "end must be None or a string, not %.200s",
1573 end->ob_type->tp_name);
1574 return NULL;
1575 }
Guido van Rossum34343512006-11-30 22:13:52 +00001576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001577 for (i = 0; i < PyTuple_Size(args); i++) {
1578 if (i > 0) {
1579 if (sep == NULL)
1580 err = PyFile_WriteString(" ", file);
1581 else
1582 err = PyFile_WriteObject(sep, file,
1583 Py_PRINT_RAW);
1584 if (err)
1585 return NULL;
1586 }
1587 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1588 Py_PRINT_RAW);
1589 if (err)
1590 return NULL;
1591 }
Guido van Rossum34343512006-11-30 22:13:52 +00001592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 if (end == NULL)
1594 err = PyFile_WriteString("\n", file);
1595 else
1596 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1597 if (err)
1598 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001599
Georg Brandlbc3b6822012-01-13 19:41:25 +01001600 if (flush != NULL) {
1601 PyObject *tmp;
1602 int do_flush = PyObject_IsTrue(flush);
1603 if (do_flush == -1)
1604 return NULL;
1605 else if (do_flush) {
1606 tmp = PyObject_CallMethod(file, "flush", "");
1607 if (tmp == NULL)
1608 return NULL;
1609 else
1610 Py_DECREF(tmp);
1611 }
1612 }
1613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001615}
1616
1617PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001618"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001619\n\
1620Prints the values to a stream, or to sys.stdout by default.\n\
1621Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001622file: a file-like object (stream); defaults to the current sys.stdout.\n\
1623sep: string inserted between values, default a space.\n\
1624end: string appended after the last value, default a newline.\n\
1625flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001626
1627
Guido van Rossuma88a0332007-02-26 16:59:55 +00001628static PyObject *
1629builtin_input(PyObject *self, PyObject *args)
1630{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001631 PyObject *promptarg = NULL;
1632 PyObject *fin = PySys_GetObject("stdin");
1633 PyObject *fout = PySys_GetObject("stdout");
1634 PyObject *ferr = PySys_GetObject("stderr");
1635 PyObject *tmp;
1636 long fd;
1637 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 /* Parse arguments */
1640 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1641 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 /* Check that stdin/out/err are intact */
1644 if (fin == NULL || fin == Py_None) {
1645 PyErr_SetString(PyExc_RuntimeError,
1646 "input(): lost sys.stdin");
1647 return NULL;
1648 }
1649 if (fout == NULL || fout == Py_None) {
1650 PyErr_SetString(PyExc_RuntimeError,
1651 "input(): lost sys.stdout");
1652 return NULL;
1653 }
1654 if (ferr == NULL || ferr == Py_None) {
1655 PyErr_SetString(PyExc_RuntimeError,
1656 "input(): lost sys.stderr");
1657 return NULL;
1658 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001659
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001660 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001661 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 if (tmp == NULL)
1663 PyErr_Clear();
1664 else
1665 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001666
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 /* We should only use (GNU) readline if Python's sys.stdin and
1668 sys.stdout are the same as C's stdin and stdout, because we
1669 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001670 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 if (tmp == NULL) {
1672 PyErr_Clear();
1673 tty = 0;
1674 }
1675 else {
1676 fd = PyLong_AsLong(tmp);
1677 Py_DECREF(tmp);
1678 if (fd < 0 && PyErr_Occurred())
1679 return NULL;
1680 tty = fd == fileno(stdin) && isatty(fd);
1681 }
1682 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001683 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 if (tmp == NULL)
1685 PyErr_Clear();
1686 else {
1687 fd = PyLong_AsLong(tmp);
1688 Py_DECREF(tmp);
1689 if (fd < 0 && PyErr_Occurred())
1690 return NULL;
1691 tty = fd == fileno(stdout) && isatty(fd);
1692 }
1693 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001695 /* If we're interactive, use (GNU) readline */
1696 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001697 PyObject *po = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 char *prompt;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001699 char *s = NULL;
1700 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1701 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1702 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001704 size_t len;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001705 _Py_IDENTIFIER(encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001706 _Py_IDENTIFIER(errors);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001707
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001708 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001709 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001710 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 /* stdin is a text stream, so it must have an
1712 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001713 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001714 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001715 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1716 if (!stdin_encoding_str || !stdin_errors_str)
1717 goto _readline_errors;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001718 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001719 if (tmp == NULL)
1720 PyErr_Clear();
1721 else
1722 Py_DECREF(tmp);
1723 if (promptarg != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001724 /* We have a prompt, encode it as stdout would */
1725 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001727 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001728 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001729 if (!stdout_encoding || !stdout_errors)
1730 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001731 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001732 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1733 if (!stdout_encoding_str || !stdout_errors_str)
1734 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001735 stringpo = PyObject_Str(promptarg);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001736 if (stringpo == NULL)
1737 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001738 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001739 stdout_encoding_str, stdout_errors_str);
1740 Py_CLEAR(stdout_encoding);
1741 Py_CLEAR(stdout_errors);
1742 Py_CLEAR(stringpo);
1743 if (po == NULL)
1744 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001745 prompt = PyBytes_AsString(po);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001746 if (prompt == NULL)
1747 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 }
1749 else {
1750 po = NULL;
1751 prompt = "";
1752 }
1753 s = PyOS_Readline(stdin, stdout, prompt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001754 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001755 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001756 if (!PyErr_Occurred())
1757 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001758 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001760
1761 len = strlen(s);
1762 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 PyErr_SetNone(PyExc_EOFError);
1764 result = NULL;
1765 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001766 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 if (len > PY_SSIZE_T_MAX) {
1768 PyErr_SetString(PyExc_OverflowError,
1769 "input: input too long");
1770 result = NULL;
1771 }
1772 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001773 len--; /* strip trailing '\n' */
1774 if (len != 0 && s[len-1] == '\r')
1775 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001776 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1777 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001778 }
1779 }
1780 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001781 Py_DECREF(stdin_errors);
1782 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001783 PyMem_FREE(s);
1784 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001785 _readline_errors:
1786 Py_XDECREF(stdin_encoding);
1787 Py_XDECREF(stdout_encoding);
1788 Py_XDECREF(stdin_errors);
1789 Py_XDECREF(stdout_errors);
1790 Py_XDECREF(po);
1791 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001792 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001794 /* Fallback if we're not interactive */
1795 if (promptarg != NULL) {
1796 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1797 return NULL;
1798 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001799 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001800 if (tmp == NULL)
1801 PyErr_Clear();
1802 else
1803 Py_DECREF(tmp);
1804 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001805}
1806
1807PyDoc_STRVAR(input_doc,
1808"input([prompt]) -> string\n\
1809\n\
1810Read a string from standard input. The trailing newline is stripped.\n\
1811If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1812On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1813is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001814
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001815
Guido van Rossum79f25d91997-04-29 20:08:16 +00001816static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001817builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001818{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001819 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001820}
1821
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001822PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001823"repr(object) -> string\n\
1824\n\
1825Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001826For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001827
1828
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001830builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001831{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 PyObject *ndigits = NULL;
1833 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001834 PyObject *number, *round, *result;
1835 _Py_IDENTIFIER(__round__);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1838 kwlist, &number, &ndigits))
1839 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001841 if (Py_TYPE(number)->tp_dict == NULL) {
1842 if (PyType_Ready(Py_TYPE(number)) < 0)
1843 return NULL;
1844 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001845
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001846 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001847 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001848 if (!PyErr_Occurred())
1849 PyErr_Format(PyExc_TypeError,
1850 "type %.100s doesn't define __round__ method",
1851 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 return NULL;
1853 }
Alex Martelliae211f92007-08-22 23:21:33 +00001854
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001855 if (ndigits == NULL)
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001856 result = PyObject_CallFunctionObjArgs(round, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 else
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001858 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
1859 Py_DECREF(round);
1860 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001861}
1862
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001863PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001864"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001865\n\
1866Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001867This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001868same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001869
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001870
Raymond Hettinger64958a12003-12-17 20:43:33 +00001871static PyObject *
1872builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1873{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001874 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1875 PyObject *callable;
1876 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1877 int reverse;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001878 _Py_IDENTIFIER(sort);
Raymond Hettinger64958a12003-12-17 20:43:33 +00001879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001880 /* args 1-3 should match listsort in Objects/listobject.c */
1881 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1882 kwlist, &seq, &keyfunc, &reverse))
1883 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 newlist = PySequence_List(seq);
1886 if (newlist == NULL)
1887 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001888
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001889 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 if (callable == NULL) {
1891 Py_DECREF(newlist);
1892 return NULL;
1893 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001894
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 newargs = PyTuple_GetSlice(args, 1, 4);
1896 if (newargs == NULL) {
1897 Py_DECREF(newlist);
1898 Py_DECREF(callable);
1899 return NULL;
1900 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001902 v = PyObject_Call(callable, newargs, kwds);
1903 Py_DECREF(newargs);
1904 Py_DECREF(callable);
1905 if (v == NULL) {
1906 Py_DECREF(newlist);
1907 return NULL;
1908 }
1909 Py_DECREF(v);
1910 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001911}
1912
1913PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001914"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001915
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001917builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001919 PyObject *v = NULL;
1920 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1923 return NULL;
1924 if (v == NULL) {
1925 d = PyEval_GetLocals();
1926 if (d == NULL) {
1927 if (!PyErr_Occurred())
1928 PyErr_SetString(PyExc_SystemError,
1929 "vars(): no locals!?");
1930 }
1931 else
1932 Py_INCREF(d);
1933 }
1934 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001935 _Py_IDENTIFIER(__dict__);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001936 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 if (d == NULL) {
1938 PyErr_SetString(PyExc_TypeError,
1939 "vars() argument must have __dict__ attribute");
1940 return NULL;
1941 }
1942 }
1943 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001944}
1945
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001946PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001947"vars([object]) -> dictionary\n\
1948\n\
1949Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001950With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001951
Alex Martellia70b1912003-04-22 08:12:33 +00001952static PyObject*
1953builtin_sum(PyObject *self, PyObject *args)
1954{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001955 PyObject *seq;
1956 PyObject *result = NULL;
1957 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001958
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001959 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1960 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 iter = PyObject_GetIter(seq);
1963 if (iter == NULL)
1964 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001966 if (result == NULL) {
1967 result = PyLong_FromLong(0);
1968 if (result == NULL) {
1969 Py_DECREF(iter);
1970 return NULL;
1971 }
1972 } else {
1973 /* reject string values for 'start' parameter */
1974 if (PyUnicode_Check(result)) {
1975 PyErr_SetString(PyExc_TypeError,
1976 "sum() can't sum strings [use ''.join(seq) instead]");
1977 Py_DECREF(iter);
1978 return NULL;
1979 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001980 if (PyBytes_Check(result)) {
1981 PyErr_SetString(PyExc_TypeError,
1982 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05001983 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001984 return NULL;
1985 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001986 if (PyByteArray_Check(result)) {
1987 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001988 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 Py_DECREF(iter);
1990 return NULL;
1991 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 Py_INCREF(result);
1994 }
Alex Martellia70b1912003-04-22 08:12:33 +00001995
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001996#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1998 Assumes all inputs are the same type. If the assumption fails, default
1999 to the more general routine.
2000 */
2001 if (PyLong_CheckExact(result)) {
2002 int overflow;
2003 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2004 /* If this already overflowed, don't even enter the loop. */
2005 if (overflow == 0) {
2006 Py_DECREF(result);
2007 result = NULL;
2008 }
2009 while(result == NULL) {
2010 item = PyIter_Next(iter);
2011 if (item == NULL) {
2012 Py_DECREF(iter);
2013 if (PyErr_Occurred())
2014 return NULL;
2015 return PyLong_FromLong(i_result);
2016 }
2017 if (PyLong_CheckExact(item)) {
2018 long b = PyLong_AsLongAndOverflow(item, &overflow);
2019 long x = i_result + b;
2020 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2021 i_result = x;
2022 Py_DECREF(item);
2023 continue;
2024 }
2025 }
2026 /* Either overflowed or is not an int. Restore real objects and process normally */
2027 result = PyLong_FromLong(i_result);
2028 temp = PyNumber_Add(result, item);
2029 Py_DECREF(result);
2030 Py_DECREF(item);
2031 result = temp;
2032 if (result == NULL) {
2033 Py_DECREF(iter);
2034 return NULL;
2035 }
2036 }
2037 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 if (PyFloat_CheckExact(result)) {
2040 double f_result = PyFloat_AS_DOUBLE(result);
2041 Py_DECREF(result);
2042 result = NULL;
2043 while(result == NULL) {
2044 item = PyIter_Next(iter);
2045 if (item == NULL) {
2046 Py_DECREF(iter);
2047 if (PyErr_Occurred())
2048 return NULL;
2049 return PyFloat_FromDouble(f_result);
2050 }
2051 if (PyFloat_CheckExact(item)) {
2052 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2053 f_result += PyFloat_AS_DOUBLE(item);
2054 PyFPE_END_PROTECT(f_result)
2055 Py_DECREF(item);
2056 continue;
2057 }
2058 if (PyLong_CheckExact(item)) {
2059 long value;
2060 int overflow;
2061 value = PyLong_AsLongAndOverflow(item, &overflow);
2062 if (!overflow) {
2063 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2064 f_result += (double)value;
2065 PyFPE_END_PROTECT(f_result)
2066 Py_DECREF(item);
2067 continue;
2068 }
2069 }
2070 result = PyFloat_FromDouble(f_result);
2071 temp = PyNumber_Add(result, item);
2072 Py_DECREF(result);
2073 Py_DECREF(item);
2074 result = temp;
2075 if (result == NULL) {
2076 Py_DECREF(iter);
2077 return NULL;
2078 }
2079 }
2080 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002081#endif
2082
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002083 for(;;) {
2084 item = PyIter_Next(iter);
2085 if (item == NULL) {
2086 /* error, or end-of-sequence */
2087 if (PyErr_Occurred()) {
2088 Py_DECREF(result);
2089 result = NULL;
2090 }
2091 break;
2092 }
2093 /* It's tempting to use PyNumber_InPlaceAdd instead of
2094 PyNumber_Add here, to avoid quadratic running time
2095 when doing 'sum(list_of_lists, [])'. However, this
2096 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002097
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 empty = []
2099 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002101 would change the value of empty. */
2102 temp = PyNumber_Add(result, item);
2103 Py_DECREF(result);
2104 Py_DECREF(item);
2105 result = temp;
2106 if (result == NULL)
2107 break;
2108 }
2109 Py_DECREF(iter);
2110 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002111}
2112
2113PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002114"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002115\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002116Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2117of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002118empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002119
2120
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002121static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002122builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002123{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002124 PyObject *inst;
2125 PyObject *cls;
2126 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002127
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002128 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2129 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002131 retval = PyObject_IsInstance(inst, cls);
2132 if (retval < 0)
2133 return NULL;
2134 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002135}
2136
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002137PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002138"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002139\n\
2140Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002141With a type as second argument, return whether that is the object's type.\n\
2142The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002143isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002144
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002145
2146static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002147builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002148{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 PyObject *derived;
2150 PyObject *cls;
2151 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002152
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002153 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2154 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002155
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 retval = PyObject_IsSubclass(derived, cls);
2157 if (retval < 0)
2158 return NULL;
2159 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002160}
2161
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002162PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002163"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002164\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002165Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2166When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2167is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002168
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002169
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002170typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 PyObject_HEAD
2172 Py_ssize_t tuplesize;
2173 PyObject *ittuple; /* tuple of iterators */
2174 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002175} zipobject;
2176
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002177static PyObject *
2178zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 zipobject *lz;
2181 Py_ssize_t i;
2182 PyObject *ittuple; /* tuple of iterators */
2183 PyObject *result;
2184 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2187 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 /* args must be a tuple */
2190 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 /* obtain iterators */
2193 ittuple = PyTuple_New(tuplesize);
2194 if (ittuple == NULL)
2195 return NULL;
2196 for (i=0; i < tuplesize; ++i) {
2197 PyObject *item = PyTuple_GET_ITEM(args, i);
2198 PyObject *it = PyObject_GetIter(item);
2199 if (it == NULL) {
2200 if (PyErr_ExceptionMatches(PyExc_TypeError))
2201 PyErr_Format(PyExc_TypeError,
2202 "zip argument #%zd must support iteration",
2203 i+1);
2204 Py_DECREF(ittuple);
2205 return NULL;
2206 }
2207 PyTuple_SET_ITEM(ittuple, i, it);
2208 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002210 /* create a result holder */
2211 result = PyTuple_New(tuplesize);
2212 if (result == NULL) {
2213 Py_DECREF(ittuple);
2214 return NULL;
2215 }
2216 for (i=0 ; i < tuplesize ; i++) {
2217 Py_INCREF(Py_None);
2218 PyTuple_SET_ITEM(result, i, Py_None);
2219 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002220
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002221 /* create zipobject structure */
2222 lz = (zipobject *)type->tp_alloc(type, 0);
2223 if (lz == NULL) {
2224 Py_DECREF(ittuple);
2225 Py_DECREF(result);
2226 return NULL;
2227 }
2228 lz->ittuple = ittuple;
2229 lz->tuplesize = tuplesize;
2230 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002232 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002233}
2234
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002235static void
2236zip_dealloc(zipobject *lz)
2237{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002238 PyObject_GC_UnTrack(lz);
2239 Py_XDECREF(lz->ittuple);
2240 Py_XDECREF(lz->result);
2241 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002242}
2243
2244static int
2245zip_traverse(zipobject *lz, visitproc visit, void *arg)
2246{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002247 Py_VISIT(lz->ittuple);
2248 Py_VISIT(lz->result);
2249 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002250}
2251
2252static PyObject *
2253zip_next(zipobject *lz)
2254{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 Py_ssize_t i;
2256 Py_ssize_t tuplesize = lz->tuplesize;
2257 PyObject *result = lz->result;
2258 PyObject *it;
2259 PyObject *item;
2260 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002262 if (tuplesize == 0)
2263 return NULL;
2264 if (Py_REFCNT(result) == 1) {
2265 Py_INCREF(result);
2266 for (i=0 ; i < tuplesize ; i++) {
2267 it = PyTuple_GET_ITEM(lz->ittuple, i);
2268 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002269 if (item == NULL) {
2270 Py_DECREF(result);
2271 return NULL;
2272 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002273 olditem = PyTuple_GET_ITEM(result, i);
2274 PyTuple_SET_ITEM(result, i, item);
2275 Py_DECREF(olditem);
2276 }
2277 } else {
2278 result = PyTuple_New(tuplesize);
2279 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002280 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002281 for (i=0 ; i < tuplesize ; i++) {
2282 it = PyTuple_GET_ITEM(lz->ittuple, i);
2283 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002284 if (item == NULL) {
2285 Py_DECREF(result);
2286 return NULL;
2287 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002288 PyTuple_SET_ITEM(result, i, item);
2289 }
2290 }
2291 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002292}
Barry Warsawbd599b52000-08-03 15:45:29 +00002293
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002294static PyObject *
2295zip_reduce(zipobject *lz)
2296{
2297 /* Just recreate the zip with the internal iterator tuple */
2298 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2299}
2300
2301static PyMethodDef zip_methods[] = {
2302 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2303 {NULL, NULL} /* sentinel */
2304};
2305
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002306PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002307"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002308\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002309Return a zip object whose .__next__() method returns a tuple where\n\
2310the i-th element comes from the i-th iterable argument. The .__next__()\n\
2311method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002312is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002313
2314PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002315 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2316 "zip", /* tp_name */
2317 sizeof(zipobject), /* tp_basicsize */
2318 0, /* tp_itemsize */
2319 /* methods */
2320 (destructor)zip_dealloc, /* tp_dealloc */
2321 0, /* tp_print */
2322 0, /* tp_getattr */
2323 0, /* tp_setattr */
2324 0, /* tp_reserved */
2325 0, /* tp_repr */
2326 0, /* tp_as_number */
2327 0, /* tp_as_sequence */
2328 0, /* tp_as_mapping */
2329 0, /* tp_hash */
2330 0, /* tp_call */
2331 0, /* tp_str */
2332 PyObject_GenericGetAttr, /* tp_getattro */
2333 0, /* tp_setattro */
2334 0, /* tp_as_buffer */
2335 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2336 Py_TPFLAGS_BASETYPE, /* tp_flags */
2337 zip_doc, /* tp_doc */
2338 (traverseproc)zip_traverse, /* tp_traverse */
2339 0, /* tp_clear */
2340 0, /* tp_richcompare */
2341 0, /* tp_weaklistoffset */
2342 PyObject_SelfIter, /* tp_iter */
2343 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002344 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 0, /* tp_members */
2346 0, /* tp_getset */
2347 0, /* tp_base */
2348 0, /* tp_dict */
2349 0, /* tp_descr_get */
2350 0, /* tp_descr_set */
2351 0, /* tp_dictoffset */
2352 0, /* tp_init */
2353 PyType_GenericAlloc, /* tp_alloc */
2354 zip_new, /* tp_new */
2355 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002356};
Barry Warsawbd599b52000-08-03 15:45:29 +00002357
2358
Guido van Rossum79f25d91997-04-29 20:08:16 +00002359static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002360 {"__build_class__", (PyCFunction)builtin___build_class__,
2361 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2362 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2363 {"abs", builtin_abs, METH_O, abs_doc},
2364 {"all", builtin_all, METH_O, all_doc},
2365 {"any", builtin_any, METH_O, any_doc},
2366 {"ascii", builtin_ascii, METH_O, ascii_doc},
2367 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002368 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002369 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2370 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2371 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2372 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2373 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2374 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2375 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2376 {"format", builtin_format, METH_VARARGS, format_doc},
2377 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2378 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2379 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2380 {"hash", builtin_hash, METH_O, hash_doc},
2381 {"hex", builtin_hex, METH_O, hex_doc},
2382 {"id", builtin_id, METH_O, id_doc},
2383 {"input", builtin_input, METH_VARARGS, input_doc},
2384 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2385 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2386 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2387 {"len", builtin_len, METH_O, len_doc},
2388 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2389 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2390 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2391 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2392 {"oct", builtin_oct, METH_O, oct_doc},
2393 {"ord", builtin_ord, METH_O, ord_doc},
2394 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2395 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2396 {"repr", builtin_repr, METH_O, repr_doc},
2397 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2398 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2399 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2400 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2401 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2402 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002403};
2404
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002405PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002406"Built-in functions, exceptions, and other objects.\n\
2407\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002408Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002409
Martin v. Löwis1a214512008-06-11 05:26:20 +00002410static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 PyModuleDef_HEAD_INIT,
2412 "builtins",
2413 builtin_doc,
2414 -1, /* multiple "initialization" just copies the module dict. */
2415 builtin_methods,
2416 NULL,
2417 NULL,
2418 NULL,
2419 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002420};
2421
2422
Guido van Rossum25ce5661997-08-02 03:10:38 +00002423PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002424_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002425{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002426 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002427
2428 if (PyType_Ready(&PyFilter_Type) < 0 ||
2429 PyType_Ready(&PyMap_Type) < 0 ||
2430 PyType_Ready(&PyZip_Type) < 0)
2431 return NULL;
2432
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 mod = PyModule_Create(&builtinsmodule);
2434 if (mod == NULL)
2435 return NULL;
2436 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002437
Tim Peters7571a0f2003-03-23 17:52:28 +00002438#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 /* "builtins" exposes a number of statically allocated objects
2440 * that, before this code was added in 2.3, never showed up in
2441 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2442 * result, programs leaking references to None and False (etc)
2443 * couldn't be diagnosed by examining sys.getobjects(0).
2444 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002445#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2446#else
2447#define ADD_TO_ALL(OBJECT) (void)0
2448#endif
2449
Tim Peters4b7625e2001-09-13 21:37:17 +00002450#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2452 return NULL; \
2453 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002454
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 SETBUILTIN("None", Py_None);
2456 SETBUILTIN("Ellipsis", Py_Ellipsis);
2457 SETBUILTIN("NotImplemented", Py_NotImplemented);
2458 SETBUILTIN("False", Py_False);
2459 SETBUILTIN("True", Py_True);
2460 SETBUILTIN("bool", &PyBool_Type);
2461 SETBUILTIN("memoryview", &PyMemoryView_Type);
2462 SETBUILTIN("bytearray", &PyByteArray_Type);
2463 SETBUILTIN("bytes", &PyBytes_Type);
2464 SETBUILTIN("classmethod", &PyClassMethod_Type);
2465 SETBUILTIN("complex", &PyComplex_Type);
2466 SETBUILTIN("dict", &PyDict_Type);
2467 SETBUILTIN("enumerate", &PyEnum_Type);
2468 SETBUILTIN("filter", &PyFilter_Type);
2469 SETBUILTIN("float", &PyFloat_Type);
2470 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2471 SETBUILTIN("property", &PyProperty_Type);
2472 SETBUILTIN("int", &PyLong_Type);
2473 SETBUILTIN("list", &PyList_Type);
2474 SETBUILTIN("map", &PyMap_Type);
2475 SETBUILTIN("object", &PyBaseObject_Type);
2476 SETBUILTIN("range", &PyRange_Type);
2477 SETBUILTIN("reversed", &PyReversed_Type);
2478 SETBUILTIN("set", &PySet_Type);
2479 SETBUILTIN("slice", &PySlice_Type);
2480 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2481 SETBUILTIN("str", &PyUnicode_Type);
2482 SETBUILTIN("super", &PySuper_Type);
2483 SETBUILTIN("tuple", &PyTuple_Type);
2484 SETBUILTIN("type", &PyType_Type);
2485 SETBUILTIN("zip", &PyZip_Type);
2486 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2487 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2488 Py_XDECREF(debug);
2489 return NULL;
2490 }
2491 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002493 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002494#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002495#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002496}