blob: fb3abae9627d09e0de044814a667e9f48a3adff9 [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");
Victor Stinner1e53bba2013-07-16 22:26:05 +02001553 if (file == NULL) {
1554 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1555 return NULL;
1556 }
1557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001558 /* sys.stdout may be None when FILE* stdout isn't connected */
1559 if (file == Py_None)
1560 Py_RETURN_NONE;
1561 }
Guido van Rossum34343512006-11-30 22:13:52 +00001562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 if (sep == Py_None) {
1564 sep = NULL;
1565 }
1566 else if (sep && !PyUnicode_Check(sep)) {
1567 PyErr_Format(PyExc_TypeError,
1568 "sep must be None or a string, not %.200s",
1569 sep->ob_type->tp_name);
1570 return NULL;
1571 }
1572 if (end == Py_None) {
1573 end = NULL;
1574 }
1575 else if (end && !PyUnicode_Check(end)) {
1576 PyErr_Format(PyExc_TypeError,
1577 "end must be None or a string, not %.200s",
1578 end->ob_type->tp_name);
1579 return NULL;
1580 }
Guido van Rossum34343512006-11-30 22:13:52 +00001581
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001582 for (i = 0; i < PyTuple_Size(args); i++) {
1583 if (i > 0) {
1584 if (sep == NULL)
1585 err = PyFile_WriteString(" ", file);
1586 else
1587 err = PyFile_WriteObject(sep, file,
1588 Py_PRINT_RAW);
1589 if (err)
1590 return NULL;
1591 }
1592 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1593 Py_PRINT_RAW);
1594 if (err)
1595 return NULL;
1596 }
Guido van Rossum34343512006-11-30 22:13:52 +00001597
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001598 if (end == NULL)
1599 err = PyFile_WriteString("\n", file);
1600 else
1601 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1602 if (err)
1603 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001604
Georg Brandlbc3b6822012-01-13 19:41:25 +01001605 if (flush != NULL) {
1606 PyObject *tmp;
1607 int do_flush = PyObject_IsTrue(flush);
1608 if (do_flush == -1)
1609 return NULL;
1610 else if (do_flush) {
1611 tmp = PyObject_CallMethod(file, "flush", "");
1612 if (tmp == NULL)
1613 return NULL;
1614 else
1615 Py_DECREF(tmp);
1616 }
1617 }
1618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001619 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001620}
1621
1622PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001623"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001624\n\
1625Prints the values to a stream, or to sys.stdout by default.\n\
1626Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001627file: a file-like object (stream); defaults to the current sys.stdout.\n\
1628sep: string inserted between values, default a space.\n\
1629end: string appended after the last value, default a newline.\n\
1630flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001631
1632
Guido van Rossuma88a0332007-02-26 16:59:55 +00001633static PyObject *
1634builtin_input(PyObject *self, PyObject *args)
1635{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 PyObject *promptarg = NULL;
1637 PyObject *fin = PySys_GetObject("stdin");
1638 PyObject *fout = PySys_GetObject("stdout");
1639 PyObject *ferr = PySys_GetObject("stderr");
1640 PyObject *tmp;
1641 long fd;
1642 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 /* Parse arguments */
1645 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1646 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 /* Check that stdin/out/err are intact */
1649 if (fin == NULL || fin == Py_None) {
1650 PyErr_SetString(PyExc_RuntimeError,
1651 "input(): lost sys.stdin");
1652 return NULL;
1653 }
1654 if (fout == NULL || fout == Py_None) {
1655 PyErr_SetString(PyExc_RuntimeError,
1656 "input(): lost sys.stdout");
1657 return NULL;
1658 }
1659 if (ferr == NULL || ferr == Py_None) {
1660 PyErr_SetString(PyExc_RuntimeError,
1661 "input(): lost sys.stderr");
1662 return NULL;
1663 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001664
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001665 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001666 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 if (tmp == NULL)
1668 PyErr_Clear();
1669 else
1670 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001671
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 /* We should only use (GNU) readline if Python's sys.stdin and
1673 sys.stdout are the same as C's stdin and stdout, because we
1674 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001675 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001676 if (tmp == NULL) {
1677 PyErr_Clear();
1678 tty = 0;
1679 }
1680 else {
1681 fd = PyLong_AsLong(tmp);
1682 Py_DECREF(tmp);
1683 if (fd < 0 && PyErr_Occurred())
1684 return NULL;
1685 tty = fd == fileno(stdin) && isatty(fd);
1686 }
1687 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001688 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 if (tmp == NULL)
1690 PyErr_Clear();
1691 else {
1692 fd = PyLong_AsLong(tmp);
1693 Py_DECREF(tmp);
1694 if (fd < 0 && PyErr_Occurred())
1695 return NULL;
1696 tty = fd == fileno(stdout) && isatty(fd);
1697 }
1698 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001699
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 /* If we're interactive, use (GNU) readline */
1701 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001702 PyObject *po = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 char *prompt;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001704 char *s = NULL;
1705 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1706 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1707 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001708 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001709 size_t len;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001710 _Py_IDENTIFIER(encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001711 _Py_IDENTIFIER(errors);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001712
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001713 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001714 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001715 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 /* stdin is a text stream, so it must have an
1717 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001718 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001719 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001720 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1721 if (!stdin_encoding_str || !stdin_errors_str)
1722 goto _readline_errors;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001723 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001724 if (tmp == NULL)
1725 PyErr_Clear();
1726 else
1727 Py_DECREF(tmp);
1728 if (promptarg != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001729 /* We have a prompt, encode it as stdout would */
1730 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001732 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001733 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001734 if (!stdout_encoding || !stdout_errors)
1735 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001736 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001737 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1738 if (!stdout_encoding_str || !stdout_errors_str)
1739 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001740 stringpo = PyObject_Str(promptarg);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001741 if (stringpo == NULL)
1742 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001743 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001744 stdout_encoding_str, stdout_errors_str);
1745 Py_CLEAR(stdout_encoding);
1746 Py_CLEAR(stdout_errors);
1747 Py_CLEAR(stringpo);
1748 if (po == NULL)
1749 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 prompt = PyBytes_AsString(po);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001751 if (prompt == NULL)
1752 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 }
1754 else {
1755 po = NULL;
1756 prompt = "";
1757 }
1758 s = PyOS_Readline(stdin, stdout, prompt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001760 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001761 if (!PyErr_Occurred())
1762 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001763 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001764 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001765
1766 len = strlen(s);
1767 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001768 PyErr_SetNone(PyExc_EOFError);
1769 result = NULL;
1770 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001771 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 if (len > PY_SSIZE_T_MAX) {
1773 PyErr_SetString(PyExc_OverflowError,
1774 "input: input too long");
1775 result = NULL;
1776 }
1777 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001778 len--; /* strip trailing '\n' */
1779 if (len != 0 && s[len-1] == '\r')
1780 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001781 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1782 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001783 }
1784 }
1785 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001786 Py_DECREF(stdin_errors);
1787 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001788 PyMem_FREE(s);
1789 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001790 _readline_errors:
1791 Py_XDECREF(stdin_encoding);
1792 Py_XDECREF(stdout_encoding);
1793 Py_XDECREF(stdin_errors);
1794 Py_XDECREF(stdout_errors);
1795 Py_XDECREF(po);
1796 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 /* Fallback if we're not interactive */
1800 if (promptarg != NULL) {
1801 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1802 return NULL;
1803 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001804 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 if (tmp == NULL)
1806 PyErr_Clear();
1807 else
1808 Py_DECREF(tmp);
1809 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001810}
1811
1812PyDoc_STRVAR(input_doc,
1813"input([prompt]) -> string\n\
1814\n\
1815Read a string from standard input. The trailing newline is stripped.\n\
1816If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1817On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1818is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001819
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001820
Guido van Rossum79f25d91997-04-29 20:08:16 +00001821static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001822builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001823{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001824 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001825}
1826
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001827PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001828"repr(object) -> string\n\
1829\n\
1830Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001831For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001832
1833
Guido van Rossum79f25d91997-04-29 20:08:16 +00001834static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001835builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001836{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 PyObject *ndigits = NULL;
1838 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001839 PyObject *number, *round, *result;
1840 _Py_IDENTIFIER(__round__);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001842 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1843 kwlist, &number, &ndigits))
1844 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001845
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 if (Py_TYPE(number)->tp_dict == NULL) {
1847 if (PyType_Ready(Py_TYPE(number)) < 0)
1848 return NULL;
1849 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001850
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001851 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001853 if (!PyErr_Occurred())
1854 PyErr_Format(PyExc_TypeError,
1855 "type %.100s doesn't define __round__ method",
1856 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 return NULL;
1858 }
Alex Martelliae211f92007-08-22 23:21:33 +00001859
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 if (ndigits == NULL)
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001861 result = PyObject_CallFunctionObjArgs(round, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001862 else
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001863 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
1864 Py_DECREF(round);
1865 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001866}
1867
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001868PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001869"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001870\n\
1871Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001872This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001873same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001874
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001875
Raymond Hettinger64958a12003-12-17 20:43:33 +00001876static PyObject *
1877builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1878{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1880 PyObject *callable;
1881 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1882 int reverse;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001883 _Py_IDENTIFIER(sort);
Raymond Hettinger64958a12003-12-17 20:43:33 +00001884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 /* args 1-3 should match listsort in Objects/listobject.c */
1886 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1887 kwlist, &seq, &keyfunc, &reverse))
1888 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 newlist = PySequence_List(seq);
1891 if (newlist == NULL)
1892 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001893
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001894 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 if (callable == NULL) {
1896 Py_DECREF(newlist);
1897 return NULL;
1898 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 newargs = PyTuple_GetSlice(args, 1, 4);
1901 if (newargs == NULL) {
1902 Py_DECREF(newlist);
1903 Py_DECREF(callable);
1904 return NULL;
1905 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001906
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 v = PyObject_Call(callable, newargs, kwds);
1908 Py_DECREF(newargs);
1909 Py_DECREF(callable);
1910 if (v == NULL) {
1911 Py_DECREF(newlist);
1912 return NULL;
1913 }
1914 Py_DECREF(v);
1915 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001916}
1917
1918PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001919"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001920
Guido van Rossum79f25d91997-04-29 20:08:16 +00001921static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001922builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 PyObject *v = NULL;
1925 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1928 return NULL;
1929 if (v == NULL) {
1930 d = PyEval_GetLocals();
1931 if (d == NULL) {
1932 if (!PyErr_Occurred())
1933 PyErr_SetString(PyExc_SystemError,
1934 "vars(): no locals!?");
1935 }
1936 else
1937 Py_INCREF(d);
1938 }
1939 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001940 _Py_IDENTIFIER(__dict__);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001941 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 if (d == NULL) {
1943 PyErr_SetString(PyExc_TypeError,
1944 "vars() argument must have __dict__ attribute");
1945 return NULL;
1946 }
1947 }
1948 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001949}
1950
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001951PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001952"vars([object]) -> dictionary\n\
1953\n\
1954Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001955With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001956
Alex Martellia70b1912003-04-22 08:12:33 +00001957static PyObject*
1958builtin_sum(PyObject *self, PyObject *args)
1959{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001960 PyObject *seq;
1961 PyObject *result = NULL;
1962 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001963
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001964 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1965 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 iter = PyObject_GetIter(seq);
1968 if (iter == NULL)
1969 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 if (result == NULL) {
1972 result = PyLong_FromLong(0);
1973 if (result == NULL) {
1974 Py_DECREF(iter);
1975 return NULL;
1976 }
1977 } else {
1978 /* reject string values for 'start' parameter */
1979 if (PyUnicode_Check(result)) {
1980 PyErr_SetString(PyExc_TypeError,
1981 "sum() can't sum strings [use ''.join(seq) instead]");
1982 Py_DECREF(iter);
1983 return NULL;
1984 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001985 if (PyBytes_Check(result)) {
1986 PyErr_SetString(PyExc_TypeError,
1987 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05001988 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001989 return NULL;
1990 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991 if (PyByteArray_Check(result)) {
1992 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001993 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 Py_DECREF(iter);
1995 return NULL;
1996 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 Py_INCREF(result);
1999 }
Alex Martellia70b1912003-04-22 08:12:33 +00002000
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002001#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002002 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2003 Assumes all inputs are the same type. If the assumption fails, default
2004 to the more general routine.
2005 */
2006 if (PyLong_CheckExact(result)) {
2007 int overflow;
2008 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2009 /* If this already overflowed, don't even enter the loop. */
2010 if (overflow == 0) {
2011 Py_DECREF(result);
2012 result = NULL;
2013 }
2014 while(result == NULL) {
2015 item = PyIter_Next(iter);
2016 if (item == NULL) {
2017 Py_DECREF(iter);
2018 if (PyErr_Occurred())
2019 return NULL;
2020 return PyLong_FromLong(i_result);
2021 }
2022 if (PyLong_CheckExact(item)) {
2023 long b = PyLong_AsLongAndOverflow(item, &overflow);
2024 long x = i_result + b;
2025 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2026 i_result = x;
2027 Py_DECREF(item);
2028 continue;
2029 }
2030 }
2031 /* Either overflowed or is not an int. Restore real objects and process normally */
2032 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002033 if (result == NULL) {
2034 Py_DECREF(item);
2035 Py_DECREF(iter);
2036 return NULL;
2037 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 temp = PyNumber_Add(result, item);
2039 Py_DECREF(result);
2040 Py_DECREF(item);
2041 result = temp;
2042 if (result == NULL) {
2043 Py_DECREF(iter);
2044 return NULL;
2045 }
2046 }
2047 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002049 if (PyFloat_CheckExact(result)) {
2050 double f_result = PyFloat_AS_DOUBLE(result);
2051 Py_DECREF(result);
2052 result = NULL;
2053 while(result == NULL) {
2054 item = PyIter_Next(iter);
2055 if (item == NULL) {
2056 Py_DECREF(iter);
2057 if (PyErr_Occurred())
2058 return NULL;
2059 return PyFloat_FromDouble(f_result);
2060 }
2061 if (PyFloat_CheckExact(item)) {
2062 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2063 f_result += PyFloat_AS_DOUBLE(item);
2064 PyFPE_END_PROTECT(f_result)
2065 Py_DECREF(item);
2066 continue;
2067 }
2068 if (PyLong_CheckExact(item)) {
2069 long value;
2070 int overflow;
2071 value = PyLong_AsLongAndOverflow(item, &overflow);
2072 if (!overflow) {
2073 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2074 f_result += (double)value;
2075 PyFPE_END_PROTECT(f_result)
2076 Py_DECREF(item);
2077 continue;
2078 }
2079 }
2080 result = PyFloat_FromDouble(f_result);
2081 temp = PyNumber_Add(result, item);
2082 Py_DECREF(result);
2083 Py_DECREF(item);
2084 result = temp;
2085 if (result == NULL) {
2086 Py_DECREF(iter);
2087 return NULL;
2088 }
2089 }
2090 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002091#endif
2092
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002093 for(;;) {
2094 item = PyIter_Next(iter);
2095 if (item == NULL) {
2096 /* error, or end-of-sequence */
2097 if (PyErr_Occurred()) {
2098 Py_DECREF(result);
2099 result = NULL;
2100 }
2101 break;
2102 }
2103 /* It's tempting to use PyNumber_InPlaceAdd instead of
2104 PyNumber_Add here, to avoid quadratic running time
2105 when doing 'sum(list_of_lists, [])'. However, this
2106 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 empty = []
2109 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 would change the value of empty. */
2112 temp = PyNumber_Add(result, item);
2113 Py_DECREF(result);
2114 Py_DECREF(item);
2115 result = temp;
2116 if (result == NULL)
2117 break;
2118 }
2119 Py_DECREF(iter);
2120 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002121}
2122
2123PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002124"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002125\n\
R David Murray87ead112013-07-10 16:22:14 -04002126Return the sum of an iterable of numbers (NOT strings) plus the value\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002127of parameter 'start' (which defaults to 0). When the iterable is\n\
R David Murray87ead112013-07-10 16:22:14 -04002128empty, return start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002129
2130
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002131static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002132builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002134 PyObject *inst;
2135 PyObject *cls;
2136 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002138 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2139 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002140
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002141 retval = PyObject_IsInstance(inst, cls);
2142 if (retval < 0)
2143 return NULL;
2144 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002145}
2146
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002147PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002148"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002149\n\
2150Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002151With a type as second argument, return whether that is the object's type.\n\
2152The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002153isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002154
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002155
2156static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002157builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002158{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002159 PyObject *derived;
2160 PyObject *cls;
2161 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2164 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 retval = PyObject_IsSubclass(derived, cls);
2167 if (retval < 0)
2168 return NULL;
2169 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002170}
2171
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002172PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002173"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002174\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002175Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2176When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2177is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002178
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002179
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002180typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002181 PyObject_HEAD
2182 Py_ssize_t tuplesize;
2183 PyObject *ittuple; /* tuple of iterators */
2184 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002185} zipobject;
2186
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002187static PyObject *
2188zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002189{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 zipobject *lz;
2191 Py_ssize_t i;
2192 PyObject *ittuple; /* tuple of iterators */
2193 PyObject *result;
2194 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2197 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002198
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 /* args must be a tuple */
2200 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002202 /* obtain iterators */
2203 ittuple = PyTuple_New(tuplesize);
2204 if (ittuple == NULL)
2205 return NULL;
2206 for (i=0; i < tuplesize; ++i) {
2207 PyObject *item = PyTuple_GET_ITEM(args, i);
2208 PyObject *it = PyObject_GetIter(item);
2209 if (it == NULL) {
2210 if (PyErr_ExceptionMatches(PyExc_TypeError))
2211 PyErr_Format(PyExc_TypeError,
2212 "zip argument #%zd must support iteration",
2213 i+1);
2214 Py_DECREF(ittuple);
2215 return NULL;
2216 }
2217 PyTuple_SET_ITEM(ittuple, i, it);
2218 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002220 /* create a result holder */
2221 result = PyTuple_New(tuplesize);
2222 if (result == NULL) {
2223 Py_DECREF(ittuple);
2224 return NULL;
2225 }
2226 for (i=0 ; i < tuplesize ; i++) {
2227 Py_INCREF(Py_None);
2228 PyTuple_SET_ITEM(result, i, Py_None);
2229 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002230
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002231 /* create zipobject structure */
2232 lz = (zipobject *)type->tp_alloc(type, 0);
2233 if (lz == NULL) {
2234 Py_DECREF(ittuple);
2235 Py_DECREF(result);
2236 return NULL;
2237 }
2238 lz->ittuple = ittuple;
2239 lz->tuplesize = tuplesize;
2240 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002242 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002243}
2244
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002245static void
2246zip_dealloc(zipobject *lz)
2247{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 PyObject_GC_UnTrack(lz);
2249 Py_XDECREF(lz->ittuple);
2250 Py_XDECREF(lz->result);
2251 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002252}
2253
2254static int
2255zip_traverse(zipobject *lz, visitproc visit, void *arg)
2256{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002257 Py_VISIT(lz->ittuple);
2258 Py_VISIT(lz->result);
2259 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002260}
2261
2262static PyObject *
2263zip_next(zipobject *lz)
2264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 Py_ssize_t i;
2266 Py_ssize_t tuplesize = lz->tuplesize;
2267 PyObject *result = lz->result;
2268 PyObject *it;
2269 PyObject *item;
2270 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002272 if (tuplesize == 0)
2273 return NULL;
2274 if (Py_REFCNT(result) == 1) {
2275 Py_INCREF(result);
2276 for (i=0 ; i < tuplesize ; i++) {
2277 it = PyTuple_GET_ITEM(lz->ittuple, i);
2278 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002279 if (item == NULL) {
2280 Py_DECREF(result);
2281 return NULL;
2282 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002283 olditem = PyTuple_GET_ITEM(result, i);
2284 PyTuple_SET_ITEM(result, i, item);
2285 Py_DECREF(olditem);
2286 }
2287 } else {
2288 result = PyTuple_New(tuplesize);
2289 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002290 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002291 for (i=0 ; i < tuplesize ; i++) {
2292 it = PyTuple_GET_ITEM(lz->ittuple, i);
2293 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002294 if (item == NULL) {
2295 Py_DECREF(result);
2296 return NULL;
2297 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002298 PyTuple_SET_ITEM(result, i, item);
2299 }
2300 }
2301 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002302}
Barry Warsawbd599b52000-08-03 15:45:29 +00002303
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002304static PyObject *
2305zip_reduce(zipobject *lz)
2306{
2307 /* Just recreate the zip with the internal iterator tuple */
2308 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2309}
2310
2311static PyMethodDef zip_methods[] = {
2312 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2313 {NULL, NULL} /* sentinel */
2314};
2315
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002316PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002317"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002318\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002319Return a zip object whose .__next__() method returns a tuple where\n\
2320the i-th element comes from the i-th iterable argument. The .__next__()\n\
2321method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002322is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002323
2324PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002325 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2326 "zip", /* tp_name */
2327 sizeof(zipobject), /* tp_basicsize */
2328 0, /* tp_itemsize */
2329 /* methods */
2330 (destructor)zip_dealloc, /* tp_dealloc */
2331 0, /* tp_print */
2332 0, /* tp_getattr */
2333 0, /* tp_setattr */
2334 0, /* tp_reserved */
2335 0, /* tp_repr */
2336 0, /* tp_as_number */
2337 0, /* tp_as_sequence */
2338 0, /* tp_as_mapping */
2339 0, /* tp_hash */
2340 0, /* tp_call */
2341 0, /* tp_str */
2342 PyObject_GenericGetAttr, /* tp_getattro */
2343 0, /* tp_setattro */
2344 0, /* tp_as_buffer */
2345 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2346 Py_TPFLAGS_BASETYPE, /* tp_flags */
2347 zip_doc, /* tp_doc */
2348 (traverseproc)zip_traverse, /* tp_traverse */
2349 0, /* tp_clear */
2350 0, /* tp_richcompare */
2351 0, /* tp_weaklistoffset */
2352 PyObject_SelfIter, /* tp_iter */
2353 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002354 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002355 0, /* tp_members */
2356 0, /* tp_getset */
2357 0, /* tp_base */
2358 0, /* tp_dict */
2359 0, /* tp_descr_get */
2360 0, /* tp_descr_set */
2361 0, /* tp_dictoffset */
2362 0, /* tp_init */
2363 PyType_GenericAlloc, /* tp_alloc */
2364 zip_new, /* tp_new */
2365 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002366};
Barry Warsawbd599b52000-08-03 15:45:29 +00002367
2368
Guido van Rossum79f25d91997-04-29 20:08:16 +00002369static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 {"__build_class__", (PyCFunction)builtin___build_class__,
2371 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2372 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2373 {"abs", builtin_abs, METH_O, abs_doc},
2374 {"all", builtin_all, METH_O, all_doc},
2375 {"any", builtin_any, METH_O, any_doc},
2376 {"ascii", builtin_ascii, METH_O, ascii_doc},
2377 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002378 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002379 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2380 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2381 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2382 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2383 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2384 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2385 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2386 {"format", builtin_format, METH_VARARGS, format_doc},
2387 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2388 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2389 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2390 {"hash", builtin_hash, METH_O, hash_doc},
2391 {"hex", builtin_hex, METH_O, hex_doc},
2392 {"id", builtin_id, METH_O, id_doc},
2393 {"input", builtin_input, METH_VARARGS, input_doc},
2394 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2395 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2396 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2397 {"len", builtin_len, METH_O, len_doc},
2398 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2399 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2400 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2401 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2402 {"oct", builtin_oct, METH_O, oct_doc},
2403 {"ord", builtin_ord, METH_O, ord_doc},
2404 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2405 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2406 {"repr", builtin_repr, METH_O, repr_doc},
2407 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2408 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2409 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2410 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2411 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2412 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002413};
2414
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002415PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002416"Built-in functions, exceptions, and other objects.\n\
2417\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002418Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002419
Martin v. Löwis1a214512008-06-11 05:26:20 +00002420static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002421 PyModuleDef_HEAD_INIT,
2422 "builtins",
2423 builtin_doc,
2424 -1, /* multiple "initialization" just copies the module dict. */
2425 builtin_methods,
2426 NULL,
2427 NULL,
2428 NULL,
2429 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002430};
2431
2432
Guido van Rossum25ce5661997-08-02 03:10:38 +00002433PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002434_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002435{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002437
2438 if (PyType_Ready(&PyFilter_Type) < 0 ||
2439 PyType_Ready(&PyMap_Type) < 0 ||
2440 PyType_Ready(&PyZip_Type) < 0)
2441 return NULL;
2442
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002443 mod = PyModule_Create(&builtinsmodule);
2444 if (mod == NULL)
2445 return NULL;
2446 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002447
Tim Peters7571a0f2003-03-23 17:52:28 +00002448#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 /* "builtins" exposes a number of statically allocated objects
2450 * that, before this code was added in 2.3, never showed up in
2451 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2452 * result, programs leaking references to None and False (etc)
2453 * couldn't be diagnosed by examining sys.getobjects(0).
2454 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002455#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2456#else
2457#define ADD_TO_ALL(OBJECT) (void)0
2458#endif
2459
Tim Peters4b7625e2001-09-13 21:37:17 +00002460#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2462 return NULL; \
2463 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002464
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 SETBUILTIN("None", Py_None);
2466 SETBUILTIN("Ellipsis", Py_Ellipsis);
2467 SETBUILTIN("NotImplemented", Py_NotImplemented);
2468 SETBUILTIN("False", Py_False);
2469 SETBUILTIN("True", Py_True);
2470 SETBUILTIN("bool", &PyBool_Type);
2471 SETBUILTIN("memoryview", &PyMemoryView_Type);
2472 SETBUILTIN("bytearray", &PyByteArray_Type);
2473 SETBUILTIN("bytes", &PyBytes_Type);
2474 SETBUILTIN("classmethod", &PyClassMethod_Type);
2475 SETBUILTIN("complex", &PyComplex_Type);
2476 SETBUILTIN("dict", &PyDict_Type);
2477 SETBUILTIN("enumerate", &PyEnum_Type);
2478 SETBUILTIN("filter", &PyFilter_Type);
2479 SETBUILTIN("float", &PyFloat_Type);
2480 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2481 SETBUILTIN("property", &PyProperty_Type);
2482 SETBUILTIN("int", &PyLong_Type);
2483 SETBUILTIN("list", &PyList_Type);
2484 SETBUILTIN("map", &PyMap_Type);
2485 SETBUILTIN("object", &PyBaseObject_Type);
2486 SETBUILTIN("range", &PyRange_Type);
2487 SETBUILTIN("reversed", &PyReversed_Type);
2488 SETBUILTIN("set", &PySet_Type);
2489 SETBUILTIN("slice", &PySlice_Type);
2490 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2491 SETBUILTIN("str", &PyUnicode_Type);
2492 SETBUILTIN("super", &PySuper_Type);
2493 SETBUILTIN("tuple", &PyTuple_Type);
2494 SETBUILTIN("type", &PyType_Type);
2495 SETBUILTIN("zip", &PyZip_Type);
2496 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2497 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2498 Py_XDECREF(debug);
2499 return NULL;
2500 }
2501 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002503 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002504#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002505#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002506}