blob: e453fdd665303446a7bfac66275c290ce49dc50b [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 Hammond26cffde2001-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 Hammond26cffde2001-05-14 12:17:34 +000023*/
Victor Stinner99b95382011-07-04 14:23:54 +020024#ifdef HAVE_MBCS
Mark Hammond26cffde2001-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 Hammond26cffde2001-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 */
60 name = PyTuple_GET_ITEM(args, 1);
61 if (!PyUnicode_Check(name)) {
62 PyErr_SetString(PyExc_TypeError,
63 "__build_class__: name is not a string");
64 return NULL;
65 }
66 bases = PyTuple_GetSlice(args, 2, nargs);
67 if (bases == NULL)
68 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000070 if (kwds == NULL) {
71 meta = NULL;
72 mkw = NULL;
73 }
74 else {
75 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
76 if (mkw == NULL) {
77 Py_DECREF(bases);
78 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000079 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000080 meta = PyDict_GetItemString(mkw, "metaclass");
81 if (meta != NULL) {
82 Py_INCREF(meta);
83 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
84 Py_DECREF(meta);
85 Py_DECREF(mkw);
86 Py_DECREF(bases);
87 return NULL;
88 }
Nick Coghlande31b192011-10-23 22:04:16 +100089 /* metaclass is explicitly given, check if it's indeed a class */
90 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000091 }
92 }
93 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +100094 /* if there are no bases, use type: */
95 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000096 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +100097 }
98 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 else {
100 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
101 meta = (PyObject *) (base0->ob_type);
102 }
103 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000104 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000105 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000106
Nick Coghlande31b192011-10-23 22:04:16 +1000107 if (isclass) {
108 /* meta is really a class, so check for a more derived
109 metaclass, or possible metaclass conflicts: */
110 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
111 bases);
112 if (winner == NULL) {
113 Py_DECREF(meta);
114 Py_XDECREF(mkw);
115 Py_DECREF(bases);
116 return NULL;
117 }
118 if (winner != meta) {
119 Py_DECREF(meta);
120 meta = winner;
121 Py_INCREF(meta);
122 }
123 }
124 /* else: meta is not a class, so we cannot do the metaclass
125 calculation, so we will use the explicitly given object as it is */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200126 prep = _PyObject_GetAttrId(meta, &PyId___prepare__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 if (prep == NULL) {
128 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
129 PyErr_Clear();
130 ns = PyDict_New();
131 }
132 else {
133 Py_DECREF(meta);
134 Py_XDECREF(mkw);
135 Py_DECREF(bases);
136 return NULL;
137 }
138 }
139 else {
140 PyObject *pargs = PyTuple_Pack(2, name, bases);
141 if (pargs == NULL) {
142 Py_DECREF(prep);
143 Py_DECREF(meta);
144 Py_XDECREF(mkw);
145 Py_DECREF(bases);
146 return NULL;
147 }
148 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
149 Py_DECREF(pargs);
150 Py_DECREF(prep);
151 }
152 if (ns == NULL) {
153 Py_DECREF(meta);
154 Py_XDECREF(mkw);
155 Py_DECREF(bases);
156 return NULL;
157 }
158 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
159 if (cell != NULL) {
160 PyObject *margs;
161 margs = PyTuple_Pack(3, name, bases, ns);
162 if (margs != NULL) {
163 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
164 Py_DECREF(margs);
165 }
Benjamin Peterson8e8fbea2012-06-01 23:57:36 -0700166 if (cls != NULL && PyCell_Check(cell))
167 PyCell_Set(cell, cls);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000168 Py_DECREF(cell);
169 }
170 Py_DECREF(ns);
171 Py_DECREF(meta);
172 Py_XDECREF(mkw);
173 Py_DECREF(bases);
174 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000175}
176
177PyDoc_STRVAR(build_class_doc,
178"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
179\n\
180Internal helper function used by the class statement.");
181
182static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000183builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
186 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400187 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400188 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000189
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400190 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 kwlist, &name, &globals, &locals, &fromlist, &level))
192 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400193 return PyImport_ImportModuleLevelObject(name, globals, locals,
194 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000195}
196
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000197PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000198"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000199\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000200Import a module. Because this function is meant for use by the Python\n\
201interpreter and not for general use it is better to use\n\
202importlib.import_module() to programmatically import a module.\n\
203\n\
204The globals argument is only used to determine the context;\n\
205they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000206should be a list of names to emulate ``from name import ...'', or an\n\
207empty list to emulate ``import name''.\n\
208When importing a module from a package, note that __import__('A.B', ...)\n\
209returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000210fromlist is not empty. Level is used to determine whether to perform \n\
211absolute or relative imports. -1 is the original strategy of attempting\n\
212both absolute and relative imports, 0 is absolute, a positive number\n\
213is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000214
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000215
Guido van Rossum79f25d91997-04-29 20:08:16 +0000216static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000217builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000218{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000219 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000220}
221
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000222PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000223"abs(number) -> number\n\
224\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000225Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000226
Raymond Hettinger96229b12005-03-11 06:49:40 +0000227static PyObject *
228builtin_all(PyObject *self, PyObject *v)
229{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000230 PyObject *it, *item;
231 PyObject *(*iternext)(PyObject *);
232 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000233
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000234 it = PyObject_GetIter(v);
235 if (it == NULL)
236 return NULL;
237 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 for (;;) {
240 item = iternext(it);
241 if (item == NULL)
242 break;
243 cmp = PyObject_IsTrue(item);
244 Py_DECREF(item);
245 if (cmp < 0) {
246 Py_DECREF(it);
247 return NULL;
248 }
249 if (cmp == 0) {
250 Py_DECREF(it);
251 Py_RETURN_FALSE;
252 }
253 }
254 Py_DECREF(it);
255 if (PyErr_Occurred()) {
256 if (PyErr_ExceptionMatches(PyExc_StopIteration))
257 PyErr_Clear();
258 else
259 return NULL;
260 }
261 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000262}
263
264PyDoc_STRVAR(all_doc,
265"all(iterable) -> bool\n\
266\n\
267Return True if bool(x) is True for all values x in the iterable.");
268
269static PyObject *
270builtin_any(PyObject *self, PyObject *v)
271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000272 PyObject *it, *item;
273 PyObject *(*iternext)(PyObject *);
274 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000275
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000276 it = PyObject_GetIter(v);
277 if (it == NULL)
278 return NULL;
279 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000280
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000281 for (;;) {
282 item = iternext(it);
283 if (item == NULL)
284 break;
285 cmp = PyObject_IsTrue(item);
286 Py_DECREF(item);
287 if (cmp < 0) {
288 Py_DECREF(it);
289 return NULL;
290 }
291 if (cmp == 1) {
292 Py_DECREF(it);
293 Py_RETURN_TRUE;
294 }
295 }
296 Py_DECREF(it);
297 if (PyErr_Occurred()) {
298 if (PyErr_ExceptionMatches(PyExc_StopIteration))
299 PyErr_Clear();
300 else
301 return NULL;
302 }
303 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000304}
305
306PyDoc_STRVAR(any_doc,
307"any(iterable) -> bool\n\
308\n\
309Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000310
Georg Brandl559e5d72008-06-11 18:37:52 +0000311static PyObject *
312builtin_ascii(PyObject *self, PyObject *v)
313{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000314 return PyObject_ASCII(v);
Georg Brandl559e5d72008-06-11 18:37:52 +0000315}
316
317PyDoc_STRVAR(ascii_doc,
318"ascii(object) -> string\n\
319\n\
320As repr(), return a string containing a printable representation of an\n\
321object, but escape the non-ASCII characters in the string returned by\n\
322repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
323to that returned by repr() in Python 2.");
324
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000325
Guido van Rossum79f25d91997-04-29 20:08:16 +0000326static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000327builtin_bin(PyObject *self, PyObject *v)
328{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000329 return PyNumber_ToBase(v, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000330}
331
332PyDoc_STRVAR(bin_doc,
333"bin(number) -> string\n\
334\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -0400335Return the binary representation of an integer.");
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000336
337
Antoine Pitroue71362d2010-11-27 22:00:11 +0000338static PyObject *
339builtin_callable(PyObject *self, PyObject *v)
340{
341 return PyBool_FromLong((long)PyCallable_Check(v));
342}
343
344PyDoc_STRVAR(callable_doc,
345"callable(object) -> bool\n\
346\n\
347Return whether the object is callable (i.e., some kind of function).\n\
348Note that classes are callable, as are instances of classes with a\n\
349__call__() method.");
350
351
Raymond Hettinger17301e92008-03-13 00:19:26 +0000352typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000353 PyObject_HEAD
354 PyObject *func;
355 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000356} filterobject;
357
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000358static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000359filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000360{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000361 PyObject *func, *seq;
362 PyObject *it;
363 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000364
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
366 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
369 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000370
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000371 /* Get iterator. */
372 it = PyObject_GetIter(seq);
373 if (it == NULL)
374 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 /* create filterobject structure */
377 lz = (filterobject *)type->tp_alloc(type, 0);
378 if (lz == NULL) {
379 Py_DECREF(it);
380 return NULL;
381 }
382 Py_INCREF(func);
383 lz->func = func;
384 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000387}
388
389static void
390filter_dealloc(filterobject *lz)
391{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 PyObject_GC_UnTrack(lz);
393 Py_XDECREF(lz->func);
394 Py_XDECREF(lz->it);
395 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000396}
397
398static int
399filter_traverse(filterobject *lz, visitproc visit, void *arg)
400{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 Py_VISIT(lz->it);
402 Py_VISIT(lz->func);
403 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000404}
405
406static PyObject *
407filter_next(filterobject *lz)
408{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 PyObject *item;
410 PyObject *it = lz->it;
411 long ok;
412 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000414 iternext = *Py_TYPE(it)->tp_iternext;
415 for (;;) {
416 item = iternext(it);
417 if (item == NULL)
418 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000419
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
421 ok = PyObject_IsTrue(item);
422 } else {
423 PyObject *good;
424 good = PyObject_CallFunctionObjArgs(lz->func,
425 item, NULL);
426 if (good == NULL) {
427 Py_DECREF(item);
428 return NULL;
429 }
430 ok = PyObject_IsTrue(good);
431 Py_DECREF(good);
432 }
433 if (ok)
434 return item;
435 Py_DECREF(item);
436 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000437}
438
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000439static PyObject *
440filter_reduce(filterobject *lz)
441{
442 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
443}
444
445PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
446
447static PyMethodDef filter_methods[] = {
448 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
449 {NULL, NULL} /* sentinel */
450};
451
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000452PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000453"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000454\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000455Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000456is true. If function is None, return the items that are true.");
457
458PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 PyVarObject_HEAD_INIT(&PyType_Type, 0)
460 "filter", /* tp_name */
461 sizeof(filterobject), /* tp_basicsize */
462 0, /* tp_itemsize */
463 /* methods */
464 (destructor)filter_dealloc, /* tp_dealloc */
465 0, /* tp_print */
466 0, /* tp_getattr */
467 0, /* tp_setattr */
468 0, /* tp_reserved */
469 0, /* tp_repr */
470 0, /* tp_as_number */
471 0, /* tp_as_sequence */
472 0, /* tp_as_mapping */
473 0, /* tp_hash */
474 0, /* tp_call */
475 0, /* tp_str */
476 PyObject_GenericGetAttr, /* tp_getattro */
477 0, /* tp_setattro */
478 0, /* tp_as_buffer */
479 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
480 Py_TPFLAGS_BASETYPE, /* tp_flags */
481 filter_doc, /* tp_doc */
482 (traverseproc)filter_traverse, /* tp_traverse */
483 0, /* tp_clear */
484 0, /* tp_richcompare */
485 0, /* tp_weaklistoffset */
486 PyObject_SelfIter, /* tp_iter */
487 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000488 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 0, /* tp_members */
490 0, /* tp_getset */
491 0, /* tp_base */
492 0, /* tp_dict */
493 0, /* tp_descr_get */
494 0, /* tp_descr_set */
495 0, /* tp_dictoffset */
496 0, /* tp_init */
497 PyType_GenericAlloc, /* tp_alloc */
498 filter_new, /* tp_new */
499 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000500};
501
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000502
Eric Smith8c663262007-08-25 02:26:07 +0000503static PyObject *
504builtin_format(PyObject *self, PyObject *args)
505{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000506 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000507 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000508
Eric Smith8fd3eba2008-02-17 19:48:00 +0000509 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Benjamin Petersona12d5c62012-01-03 16:47:22 -0600510 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000511
Eric Smith8fd3eba2008-02-17 19:48:00 +0000512 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000513}
514
Eric Smith8c663262007-08-25 02:26:07 +0000515PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000516"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000517\n\
Eric Smith81936692007-08-31 01:14:01 +0000518Returns value.__format__(format_spec)\n\
519format_spec defaults to \"\"");
520
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000521static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000522builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000524 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 if (!PyArg_ParseTuple(args, "i:chr", &x))
527 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000529 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000530}
531
Victor Stinner63ab8752011-11-22 03:31:20 +0100532PyDoc_STRVAR(chr_doc,
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000533"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000534\n\
Victor Stinner63ab8752011-11-22 03:31:20 +0100535Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
Guido van Rossum09095f32000-03-10 23:00:52 +0000536
537
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000538static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000539source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000540{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 char *str;
542 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000543
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 if (PyUnicode_Check(cmd)) {
545 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200546 str = PyUnicode_AsUTF8AndSize(cmd, &size);
547 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 return NULL;
549 }
550 else if (!PyObject_CheckReadBuffer(cmd)) {
551 PyErr_Format(PyExc_TypeError,
552 "%s() arg 1 must be a %s object",
553 funcname, what);
554 return NULL;
555 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200556 else if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 return NULL;
558 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 if (strlen(str) != size) {
561 PyErr_SetString(PyExc_TypeError,
562 "source code string cannot contain null bytes");
563 return NULL;
564 }
565 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000566}
567
Guido van Rossum79f25d91997-04-29 20:08:16 +0000568static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000569builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000571 char *str;
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000572 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 char *filename;
574 char *startstr;
575 int mode = -1;
576 int dont_inherit = 0;
577 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000578 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000579 int is_ast;
580 PyCompilerFlags cf;
581 PyObject *cmd;
582 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000583 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000585 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000586
Georg Brandl8334fd92010-12-04 10:26:46 +0000587 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000588 &cmd,
589 PyUnicode_FSConverter, &filename_obj,
590 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000591 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000592 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000593
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000594 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000595 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000596
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 if (supplied_flags &
598 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
599 {
600 PyErr_SetString(PyExc_ValueError,
601 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000602 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000603 }
604 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000605
Georg Brandl8334fd92010-12-04 10:26:46 +0000606 if (optimize < -1 || optimize > 2) {
607 PyErr_SetString(PyExc_ValueError,
608 "compile(): invalid optimize value");
609 goto error;
610 }
611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 if (!dont_inherit) {
613 PyEval_MergeCompilerFlags(&cf);
614 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000615
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000616 if (strcmp(startstr, "exec") == 0)
617 mode = 0;
618 else if (strcmp(startstr, "eval") == 0)
619 mode = 1;
620 else if (strcmp(startstr, "single") == 0)
621 mode = 2;
622 else {
623 PyErr_SetString(PyExc_ValueError,
624 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000625 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000626 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 is_ast = PyAST_Check(cmd);
629 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000630 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000632 if (supplied_flags & PyCF_ONLY_AST) {
633 Py_INCREF(cmd);
634 result = cmd;
635 }
636 else {
637 PyArena *arena;
638 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000639
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 arena = PyArena_New();
641 mod = PyAST_obj2mod(cmd, arena, mode);
642 if (mod == NULL) {
643 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000644 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000645 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500646 if (!PyAST_Validate(mod)) {
647 PyArena_Free(arena);
648 goto error;
649 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000650 result = (PyObject*)PyAST_CompileEx(mod, filename,
651 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000652 PyArena_Free(arena);
653 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000654 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000655 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
658 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000659 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000660
Georg Brandl8334fd92010-12-04 10:26:46 +0000661 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000662 goto finally;
663
664error:
665 result = NULL;
666finally:
667 Py_DECREF(filename_obj);
668 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000669}
670
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000671PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000672"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000673\n\
674Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000675into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000676The filename will be used for run-time error messages.\n\
677The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000678single (interactive) statement, or 'eval' to compile an expression.\n\
679The flags argument, if present, controls which future statements influence\n\
680the compilation of the code.\n\
681The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
682the effects of any future statements in effect in the code calling\n\
683compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000684in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000685
Guido van Rossum79f25d91997-04-29 20:08:16 +0000686static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000687builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000688{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000689 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
692 return NULL;
693 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000694}
695
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000696PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000697"dir([object]) -> list of strings\n"
698"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000699"If called without an argument, return the names in the current scope.\n"
700"Else, return an alphabetized list of names comprising (some of) the attributes\n"
701"of the given object, and of attributes reachable from it.\n"
702"If the object supplies a method named __dir__, it will be used; otherwise\n"
703"the default dir() logic is used and returns:\n"
704" for a module object: the module's attributes.\n"
705" for a class object: its attributes, and recursively the attributes\n"
706" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000707" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000708" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000709
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000711builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000712{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000714
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
716 return NULL;
717 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000718}
719
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000720PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000721"divmod(x, y) -> (div, mod)\n\
722\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000723Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000724
725
Guido van Rossum79f25d91997-04-29 20:08:16 +0000726static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000727builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000728{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000729 PyObject *cmd, *result, *tmp = NULL;
730 PyObject *globals = Py_None, *locals = Py_None;
731 char *str;
732 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
735 return NULL;
736 if (locals != Py_None && !PyMapping_Check(locals)) {
737 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
738 return NULL;
739 }
740 if (globals != Py_None && !PyDict_Check(globals)) {
741 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
742 "globals must be a real dict; try eval(expr, {}, mapping)"
743 : "globals must be a dict");
744 return NULL;
745 }
746 if (globals == Py_None) {
747 globals = PyEval_GetGlobals();
748 if (locals == Py_None)
749 locals = PyEval_GetLocals();
750 }
751 else if (locals == Py_None)
752 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000753
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 if (globals == NULL || locals == NULL) {
755 PyErr_SetString(PyExc_TypeError,
756 "eval must be given globals and locals "
757 "when called without a frame");
758 return NULL;
759 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000760
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
762 if (PyDict_SetItemString(globals, "__builtins__",
763 PyEval_GetBuiltins()) != 0)
764 return NULL;
765 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000766
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000767 if (PyCode_Check(cmd)) {
768 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
769 PyErr_SetString(PyExc_TypeError,
770 "code object passed to eval() may not contain free variables");
771 return NULL;
772 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000773 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000775
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000776 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
777 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
778 if (str == NULL)
779 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000780
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 while (*str == ' ' || *str == '\t')
782 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 (void)PyEval_MergeCompilerFlags(&cf);
785 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
786 Py_XDECREF(tmp);
787 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000788}
789
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000790PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000791"eval(source[, globals[, locals]]) -> value\n\
792\n\
793Evaluate the source in the context of globals and locals.\n\
794The source may be a string representing a Python expression\n\
795or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000796The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000797defaulting to the current globals and locals.\n\
798If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000799
Georg Brandl7cae87c2006-09-06 06:51:57 +0000800static PyObject *
801builtin_exec(PyObject *self, PyObject *args)
802{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000803 PyObject *v;
804 PyObject *prog, *globals = Py_None, *locals = Py_None;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000805
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000806 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
807 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 if (globals == Py_None) {
810 globals = PyEval_GetGlobals();
811 if (locals == Py_None) {
812 locals = PyEval_GetLocals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 }
814 if (!globals || !locals) {
815 PyErr_SetString(PyExc_SystemError,
816 "globals and locals cannot be NULL");
817 return NULL;
818 }
819 }
820 else if (locals == Py_None)
821 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000822
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 if (!PyDict_Check(globals)) {
824 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
825 globals->ob_type->tp_name);
826 return NULL;
827 }
828 if (!PyMapping_Check(locals)) {
829 PyErr_Format(PyExc_TypeError,
830 "arg 3 must be a mapping or None, not %.100s",
831 locals->ob_type->tp_name);
832 return NULL;
833 }
834 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
835 if (PyDict_SetItemString(globals, "__builtins__",
836 PyEval_GetBuiltins()) != 0)
837 return NULL;
838 }
839
840 if (PyCode_Check(prog)) {
841 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
842 PyErr_SetString(PyExc_TypeError,
843 "code object passed to exec() may not "
844 "contain free variables");
845 return NULL;
846 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000847 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000848 }
849 else {
850 char *str;
851 PyCompilerFlags cf;
852 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
853 str = source_as_string(prog, "exec",
854 "string, bytes or code", &cf);
855 if (str == NULL)
856 return NULL;
857 if (PyEval_MergeCompilerFlags(&cf))
858 v = PyRun_StringFlags(str, Py_file_input, globals,
859 locals, &cf);
860 else
861 v = PyRun_String(str, Py_file_input, globals, locals);
862 }
863 if (v == NULL)
864 return NULL;
865 Py_DECREF(v);
866 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000867}
868
869PyDoc_STRVAR(exec_doc,
870"exec(object[, globals[, locals]])\n\
871\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000872Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000873object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000874The globals and locals are dictionaries, defaulting to the current\n\
875globals and locals. If only globals is given, locals defaults to it.");
876
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000877
Guido van Rossum79f25d91997-04-29 20:08:16 +0000878static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000879builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000880{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 PyObject *v, *result, *dflt = NULL;
882 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
885 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000886
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000887 if (!PyUnicode_Check(name)) {
888 PyErr_SetString(PyExc_TypeError,
889 "getattr(): attribute name must be string");
890 return NULL;
891 }
892 result = PyObject_GetAttr(v, name);
893 if (result == NULL && dflt != NULL &&
894 PyErr_ExceptionMatches(PyExc_AttributeError))
895 {
896 PyErr_Clear();
897 Py_INCREF(dflt);
898 result = dflt;
899 }
900 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000901}
902
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000903PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000904"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000905\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000906Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
907When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000908exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000909
910
Guido van Rossum79f25d91997-04-29 20:08:16 +0000911static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000912builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000913{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000915
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000916 d = PyEval_GetGlobals();
917 Py_XINCREF(d);
918 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000919}
920
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000921PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922"globals() -> dictionary\n\
923\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000924Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000925
926
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000928builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000929{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000930 PyObject *v;
931 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
934 return NULL;
935 if (!PyUnicode_Check(name)) {
936 PyErr_SetString(PyExc_TypeError,
937 "hasattr(): attribute name must be string");
938 return NULL;
939 }
940 v = PyObject_GetAttr(v, name);
941 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000942 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000944 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000946 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 }
948 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000949 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000950}
951
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000952PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000953"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000954\n\
955Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000956(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000957
958
Guido van Rossum79f25d91997-04-29 20:08:16 +0000959static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000960builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000961{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000963}
964
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000965PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000966"id(object) -> integer\n\
967\n\
968Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000969simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000970
971
Raymond Hettingera6c60372008-03-13 01:26:19 +0000972/* map object ************************************************************/
973
974typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 PyObject_HEAD
976 PyObject *iters;
977 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000978} mapobject;
979
Guido van Rossum79f25d91997-04-29 20:08:16 +0000980static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000981map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000982{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000983 PyObject *it, *iters, *func;
984 mapobject *lz;
985 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
988 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 numargs = PyTuple_Size(args);
991 if (numargs < 2) {
992 PyErr_SetString(PyExc_TypeError,
993 "map() must have at least two arguments.");
994 return NULL;
995 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 iters = PyTuple_New(numargs-1);
998 if (iters == NULL)
999 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 for (i=1 ; i<numargs ; i++) {
1002 /* Get iterator. */
1003 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1004 if (it == NULL) {
1005 Py_DECREF(iters);
1006 return NULL;
1007 }
1008 PyTuple_SET_ITEM(iters, i-1, it);
1009 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 /* create mapobject structure */
1012 lz = (mapobject *)type->tp_alloc(type, 0);
1013 if (lz == NULL) {
1014 Py_DECREF(iters);
1015 return NULL;
1016 }
1017 lz->iters = iters;
1018 func = PyTuple_GET_ITEM(args, 0);
1019 Py_INCREF(func);
1020 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001023}
1024
1025static void
1026map_dealloc(mapobject *lz)
1027{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 PyObject_GC_UnTrack(lz);
1029 Py_XDECREF(lz->iters);
1030 Py_XDECREF(lz->func);
1031 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001032}
1033
1034static int
1035map_traverse(mapobject *lz, visitproc visit, void *arg)
1036{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001037 Py_VISIT(lz->iters);
1038 Py_VISIT(lz->func);
1039 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001040}
1041
1042static PyObject *
1043map_next(mapobject *lz)
1044{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 PyObject *val;
1046 PyObject *argtuple;
1047 PyObject *result;
1048 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001049
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001050 numargs = PyTuple_Size(lz->iters);
1051 argtuple = PyTuple_New(numargs);
1052 if (argtuple == NULL)
1053 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 for (i=0 ; i<numargs ; i++) {
1056 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1057 if (val == NULL) {
1058 Py_DECREF(argtuple);
1059 return NULL;
1060 }
1061 PyTuple_SET_ITEM(argtuple, i, val);
1062 }
1063 result = PyObject_Call(lz->func, argtuple, NULL);
1064 Py_DECREF(argtuple);
1065 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001066}
1067
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001068static PyObject *
1069map_reduce(mapobject *lz)
1070{
1071 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1072 PyObject *args = PyTuple_New(numargs+1);
1073 Py_ssize_t i;
1074 if (args == NULL)
1075 return NULL;
1076 Py_INCREF(lz->func);
1077 PyTuple_SET_ITEM(args, 0, lz->func);
1078 for (i = 0; i<numargs; i++){
1079 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1080 Py_INCREF(it);
1081 PyTuple_SET_ITEM(args, i+1, it);
1082 }
1083
1084 return Py_BuildValue("ON", Py_TYPE(lz), args);
1085}
1086
1087static PyMethodDef map_methods[] = {
1088 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1089 {NULL, NULL} /* sentinel */
1090};
1091
1092
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001093PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001094"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001095\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001096Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001098
Raymond Hettingera6c60372008-03-13 01:26:19 +00001099PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1101 "map", /* tp_name */
1102 sizeof(mapobject), /* tp_basicsize */
1103 0, /* tp_itemsize */
1104 /* methods */
1105 (destructor)map_dealloc, /* tp_dealloc */
1106 0, /* tp_print */
1107 0, /* tp_getattr */
1108 0, /* tp_setattr */
1109 0, /* tp_reserved */
1110 0, /* tp_repr */
1111 0, /* tp_as_number */
1112 0, /* tp_as_sequence */
1113 0, /* tp_as_mapping */
1114 0, /* tp_hash */
1115 0, /* tp_call */
1116 0, /* tp_str */
1117 PyObject_GenericGetAttr, /* tp_getattro */
1118 0, /* tp_setattro */
1119 0, /* tp_as_buffer */
1120 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1121 Py_TPFLAGS_BASETYPE, /* tp_flags */
1122 map_doc, /* tp_doc */
1123 (traverseproc)map_traverse, /* tp_traverse */
1124 0, /* tp_clear */
1125 0, /* tp_richcompare */
1126 0, /* tp_weaklistoffset */
1127 PyObject_SelfIter, /* tp_iter */
1128 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001129 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001130 0, /* tp_members */
1131 0, /* tp_getset */
1132 0, /* tp_base */
1133 0, /* tp_dict */
1134 0, /* tp_descr_get */
1135 0, /* tp_descr_set */
1136 0, /* tp_dictoffset */
1137 0, /* tp_init */
1138 PyType_GenericAlloc, /* tp_alloc */
1139 map_new, /* tp_new */
1140 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001141};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001142
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001144builtin_next(PyObject *self, PyObject *args)
1145{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001146 PyObject *it, *res;
1147 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1150 return NULL;
1151 if (!PyIter_Check(it)) {
1152 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001153 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 it->ob_type->tp_name);
1155 return NULL;
1156 }
1157
1158 res = (*it->ob_type->tp_iternext)(it);
1159 if (res != NULL) {
1160 return res;
1161 } else if (def != NULL) {
1162 if (PyErr_Occurred()) {
1163 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1164 return NULL;
1165 PyErr_Clear();
1166 }
1167 Py_INCREF(def);
1168 return def;
1169 } else if (PyErr_Occurred()) {
1170 return NULL;
1171 } else {
1172 PyErr_SetNone(PyExc_StopIteration);
1173 return NULL;
1174 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001175}
1176
1177PyDoc_STRVAR(next_doc,
1178"next(iterator[, default])\n\
1179\n\
1180Return the next item from the iterator. If default is given and the iterator\n\
1181is exhausted, it is returned instead of raising StopIteration.");
1182
1183
1184static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001185builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001186{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001187 PyObject *v;
1188 PyObject *name;
1189 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1192 return NULL;
1193 if (PyObject_SetAttr(v, name, value) != 0)
1194 return NULL;
1195 Py_INCREF(Py_None);
1196 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001197}
1198
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001199PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001200"setattr(object, name, value)\n\
1201\n\
1202Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001203``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001204
1205
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001207builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001208{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 PyObject *v;
1210 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1213 return NULL;
1214 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1215 return NULL;
1216 Py_INCREF(Py_None);
1217 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001218}
1219
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001220PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001221"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001222\n\
1223Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001224``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001225
1226
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001228builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001229{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001230 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 x = PyObject_Hash(v);
1233 if (x == -1)
1234 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001235 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001236}
1237
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001238PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001239"hash(object) -> integer\n\
1240\n\
1241Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001242the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001243
1244
Guido van Rossum79f25d91997-04-29 20:08:16 +00001245static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001246builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001247{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001249}
1250
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001251PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001252"hex(number) -> string\n\
1253\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001254Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001255
1256
Guido van Rossum79f25d91997-04-29 20:08:16 +00001257static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001258builtin_iter(PyObject *self, PyObject *args)
1259{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001260 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1263 return NULL;
1264 if (w == NULL)
1265 return PyObject_GetIter(v);
1266 if (!PyCallable_Check(v)) {
1267 PyErr_SetString(PyExc_TypeError,
1268 "iter(v, w): v must be callable");
1269 return NULL;
1270 }
1271 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001272}
1273
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001274PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001275"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001276iter(callable, sentinel) -> iterator\n\
1277\n\
1278Get an iterator from an object. In the first form, the argument must\n\
1279supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001280In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001281
1282
1283static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001284builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001285{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001286 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 res = PyObject_Size(v);
1289 if (res < 0 && PyErr_Occurred())
1290 return NULL;
1291 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001292}
1293
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001294PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001295"len(object) -> integer\n\
1296\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001297Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001298
1299
Guido van Rossum79f25d91997-04-29 20:08:16 +00001300static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001301builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001302{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001304
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 d = PyEval_GetLocals();
1306 Py_XINCREF(d);
1307 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001308}
1309
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001310PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001311"locals() -> dictionary\n\
1312\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001313Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001314
1315
Guido van Rossum79f25d91997-04-29 20:08:16 +00001316static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001317min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1320 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001322 if (PyTuple_Size(args) > 1)
1323 v = args;
1324 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1325 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001326
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001327 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1328 keyfunc = PyDict_GetItemString(kwds, "key");
1329 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1330 PyErr_Format(PyExc_TypeError,
1331 "%s() got an unexpected keyword argument", name);
1332 return NULL;
1333 }
1334 Py_INCREF(keyfunc);
1335 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001336
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 it = PyObject_GetIter(v);
1338 if (it == NULL) {
1339 Py_XDECREF(keyfunc);
1340 return NULL;
1341 }
Tim Petersc3074532001-05-03 07:00:32 +00001342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001343 maxitem = NULL; /* the result */
1344 maxval = NULL; /* the value associated with the result */
1345 while (( item = PyIter_Next(it) )) {
1346 /* get the value from the key function */
1347 if (keyfunc != NULL) {
1348 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1349 if (val == NULL)
1350 goto Fail_it_item;
1351 }
1352 /* no key function; the value is the item */
1353 else {
1354 val = item;
1355 Py_INCREF(val);
1356 }
Tim Petersc3074532001-05-03 07:00:32 +00001357
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001358 /* maximum value and item are unset; set them */
1359 if (maxval == NULL) {
1360 maxitem = item;
1361 maxval = val;
1362 }
1363 /* maximum value and item are set; update them as necessary */
1364 else {
1365 int cmp = PyObject_RichCompareBool(val, maxval, op);
1366 if (cmp < 0)
1367 goto Fail_it_item_and_val;
1368 else if (cmp > 0) {
1369 Py_DECREF(maxval);
1370 Py_DECREF(maxitem);
1371 maxval = val;
1372 maxitem = item;
1373 }
1374 else {
1375 Py_DECREF(item);
1376 Py_DECREF(val);
1377 }
1378 }
1379 }
1380 if (PyErr_Occurred())
1381 goto Fail_it;
1382 if (maxval == NULL) {
1383 PyErr_Format(PyExc_ValueError,
1384 "%s() arg is an empty sequence", name);
1385 assert(maxitem == NULL);
1386 }
1387 else
1388 Py_DECREF(maxval);
1389 Py_DECREF(it);
1390 Py_XDECREF(keyfunc);
1391 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001392
1393Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001395Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001396 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001397Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001398 Py_XDECREF(maxval);
1399 Py_XDECREF(maxitem);
1400 Py_DECREF(it);
1401 Py_XDECREF(keyfunc);
1402 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001403}
1404
Guido van Rossum79f25d91997-04-29 20:08:16 +00001405static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001406builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001407{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001408 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001409}
1410
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001411PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001412"min(iterable[, key=func]) -> value\n\
1413min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001414\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001415With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001416With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001417
1418
Guido van Rossum79f25d91997-04-29 20:08:16 +00001419static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001420builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001421{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001423}
1424
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001425PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001426"max(iterable[, key=func]) -> value\n\
1427max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001428\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001429With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001430With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001431
1432
Guido van Rossum79f25d91997-04-29 20:08:16 +00001433static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001434builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001435{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001437}
1438
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001439PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001440"oct(number) -> string\n\
1441\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001442Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001443
1444
Guido van Rossum79f25d91997-04-29 20:08:16 +00001445static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001446builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001447{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001448 long ord;
1449 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001450
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001451 if (PyBytes_Check(obj)) {
1452 size = PyBytes_GET_SIZE(obj);
1453 if (size == 1) {
1454 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1455 return PyLong_FromLong(ord);
1456 }
1457 }
1458 else if (PyUnicode_Check(obj)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001459 if (PyUnicode_READY(obj) == -1)
1460 return NULL;
1461 size = PyUnicode_GET_LENGTH(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001462 if (size == 1) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001463 ord = (long)PyUnicode_READ_CHAR(obj, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001464 return PyLong_FromLong(ord);
1465 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 }
1467 else if (PyByteArray_Check(obj)) {
1468 /* XXX Hopefully this is temporary */
1469 size = PyByteArray_GET_SIZE(obj);
1470 if (size == 1) {
1471 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1472 return PyLong_FromLong(ord);
1473 }
1474 }
1475 else {
1476 PyErr_Format(PyExc_TypeError,
1477 "ord() expected string of length 1, but " \
1478 "%.200s found", obj->ob_type->tp_name);
1479 return NULL;
1480 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001482 PyErr_Format(PyExc_TypeError,
1483 "ord() expected a character, "
1484 "but string of length %zd found",
1485 size);
1486 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001487}
1488
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001489PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001490"ord(c) -> integer\n\
1491\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001492Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001493)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001494#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001495PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001496"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001497)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001498#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001499;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001500
1501
Guido van Rossum79f25d91997-04-29 20:08:16 +00001502static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001503builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001504{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001507 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1508 return NULL;
1509 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001510}
1511
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001512PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001513"pow(x, y[, z]) -> number\n\
1514\n\
1515With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001516equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001517
1518
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001519
Guido van Rossum34343512006-11-30 22:13:52 +00001520static PyObject *
1521builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1522{
Georg Brandlbc3b6822012-01-13 19:41:25 +01001523 static char *kwlist[] = {"sep", "end", "file", "flush", 0};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 static PyObject *dummy_args;
Georg Brandlbc3b6822012-01-13 19:41:25 +01001525 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001526 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001527
Benjamin Peterson00102562012-01-11 21:00:16 -05001528 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Georg Brandlbc3b6822012-01-13 19:41:25 +01001529 return NULL;
1530 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print",
1531 kwlist, &sep, &end, &file, &flush))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001532 return NULL;
1533 if (file == NULL || file == Py_None) {
1534 file = PySys_GetObject("stdout");
1535 /* sys.stdout may be None when FILE* stdout isn't connected */
1536 if (file == Py_None)
1537 Py_RETURN_NONE;
1538 }
Guido van Rossum34343512006-11-30 22:13:52 +00001539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 if (sep == Py_None) {
1541 sep = NULL;
1542 }
1543 else if (sep && !PyUnicode_Check(sep)) {
1544 PyErr_Format(PyExc_TypeError,
1545 "sep must be None or a string, not %.200s",
1546 sep->ob_type->tp_name);
1547 return NULL;
1548 }
1549 if (end == Py_None) {
1550 end = NULL;
1551 }
1552 else if (end && !PyUnicode_Check(end)) {
1553 PyErr_Format(PyExc_TypeError,
1554 "end must be None or a string, not %.200s",
1555 end->ob_type->tp_name);
1556 return NULL;
1557 }
Guido van Rossum34343512006-11-30 22:13:52 +00001558
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 for (i = 0; i < PyTuple_Size(args); i++) {
1560 if (i > 0) {
1561 if (sep == NULL)
1562 err = PyFile_WriteString(" ", file);
1563 else
1564 err = PyFile_WriteObject(sep, file,
1565 Py_PRINT_RAW);
1566 if (err)
1567 return NULL;
1568 }
1569 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1570 Py_PRINT_RAW);
1571 if (err)
1572 return NULL;
1573 }
Guido van Rossum34343512006-11-30 22:13:52 +00001574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001575 if (end == NULL)
1576 err = PyFile_WriteString("\n", file);
1577 else
1578 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1579 if (err)
1580 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001581
Georg Brandlbc3b6822012-01-13 19:41:25 +01001582 if (flush != NULL) {
1583 PyObject *tmp;
1584 int do_flush = PyObject_IsTrue(flush);
1585 if (do_flush == -1)
1586 return NULL;
1587 else if (do_flush) {
1588 tmp = PyObject_CallMethod(file, "flush", "");
1589 if (tmp == NULL)
1590 return NULL;
1591 else
1592 Py_DECREF(tmp);
1593 }
1594 }
1595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001597}
1598
1599PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001600"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001601\n\
1602Prints the values to a stream, or to sys.stdout by default.\n\
1603Optional keyword arguments:\n\
1604file: a file-like object (stream); defaults to the current sys.stdout.\n\
1605sep: string inserted between values, default a space.\n\
1606end: string appended after the last value, default a newline.");
1607
1608
Guido van Rossuma88a0332007-02-26 16:59:55 +00001609static PyObject *
1610builtin_input(PyObject *self, PyObject *args)
1611{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 PyObject *promptarg = NULL;
1613 PyObject *fin = PySys_GetObject("stdin");
1614 PyObject *fout = PySys_GetObject("stdout");
1615 PyObject *ferr = PySys_GetObject("stderr");
1616 PyObject *tmp;
1617 long fd;
1618 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 /* Parse arguments */
1621 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1622 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 /* Check that stdin/out/err are intact */
1625 if (fin == NULL || fin == Py_None) {
1626 PyErr_SetString(PyExc_RuntimeError,
1627 "input(): lost sys.stdin");
1628 return NULL;
1629 }
1630 if (fout == NULL || fout == Py_None) {
1631 PyErr_SetString(PyExc_RuntimeError,
1632 "input(): lost sys.stdout");
1633 return NULL;
1634 }
1635 if (ferr == NULL || ferr == Py_None) {
1636 PyErr_SetString(PyExc_RuntimeError,
1637 "input(): lost sys.stderr");
1638 return NULL;
1639 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001640
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001641 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001642 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 if (tmp == NULL)
1644 PyErr_Clear();
1645 else
1646 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 /* We should only use (GNU) readline if Python's sys.stdin and
1649 sys.stdout are the same as C's stdin and stdout, because we
1650 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001651 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 if (tmp == NULL) {
1653 PyErr_Clear();
1654 tty = 0;
1655 }
1656 else {
1657 fd = PyLong_AsLong(tmp);
1658 Py_DECREF(tmp);
1659 if (fd < 0 && PyErr_Occurred())
1660 return NULL;
1661 tty = fd == fileno(stdin) && isatty(fd);
1662 }
1663 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001664 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001665 if (tmp == NULL)
1666 PyErr_Clear();
1667 else {
1668 fd = PyLong_AsLong(tmp);
1669 Py_DECREF(tmp);
1670 if (fd < 0 && PyErr_Occurred())
1671 return NULL;
1672 tty = fd == fileno(stdout) && isatty(fd);
1673 }
1674 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001675
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001676 /* If we're interactive, use (GNU) readline */
1677 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001678 PyObject *po = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 char *prompt;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001680 char *s = NULL;
1681 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1682 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1683 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001685 size_t len;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001686 _Py_IDENTIFIER(encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001687 _Py_IDENTIFIER(errors);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001688
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001689 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001690 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001691 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 /* stdin is a text stream, so it must have an
1693 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001694 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001695 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001696 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1697 if (!stdin_encoding_str || !stdin_errors_str)
1698 goto _readline_errors;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001699 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 if (tmp == NULL)
1701 PyErr_Clear();
1702 else
1703 Py_DECREF(tmp);
1704 if (promptarg != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001705 /* We have a prompt, encode it as stdout would */
1706 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001708 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001709 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001710 if (!stdout_encoding || !stdout_errors)
1711 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001712 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001713 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1714 if (!stdout_encoding_str || !stdout_errors_str)
1715 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 stringpo = PyObject_Str(promptarg);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001717 if (stringpo == NULL)
1718 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001719 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001720 stdout_encoding_str, stdout_errors_str);
1721 Py_CLEAR(stdout_encoding);
1722 Py_CLEAR(stdout_errors);
1723 Py_CLEAR(stringpo);
1724 if (po == NULL)
1725 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 prompt = PyBytes_AsString(po);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001727 if (prompt == NULL)
1728 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 }
1730 else {
1731 po = NULL;
1732 prompt = "";
1733 }
1734 s = PyOS_Readline(stdin, stdout, prompt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001735 if (s == NULL) {
1736 if (!PyErr_Occurred())
1737 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001738 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001739 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001740
1741 len = strlen(s);
1742 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001743 PyErr_SetNone(PyExc_EOFError);
1744 result = NULL;
1745 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001746 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001747 if (len > PY_SSIZE_T_MAX) {
1748 PyErr_SetString(PyExc_OverflowError,
1749 "input: input too long");
1750 result = NULL;
1751 }
1752 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001753 len--; /* strip trailing '\n' */
1754 if (len != 0 && s[len-1] == '\r')
1755 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001756 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1757 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 }
1759 }
1760 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001761 Py_DECREF(stdin_errors);
1762 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 PyMem_FREE(s);
1764 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001765 _readline_errors:
1766 Py_XDECREF(stdin_encoding);
1767 Py_XDECREF(stdout_encoding);
1768 Py_XDECREF(stdin_errors);
1769 Py_XDECREF(stdout_errors);
1770 Py_XDECREF(po);
1771 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 /* Fallback if we're not interactive */
1775 if (promptarg != NULL) {
1776 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1777 return NULL;
1778 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001779 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001780 if (tmp == NULL)
1781 PyErr_Clear();
1782 else
1783 Py_DECREF(tmp);
1784 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001785}
1786
1787PyDoc_STRVAR(input_doc,
1788"input([prompt]) -> string\n\
1789\n\
1790Read a string from standard input. The trailing newline is stripped.\n\
1791If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1792On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1793is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001794
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001795
Guido van Rossum79f25d91997-04-29 20:08:16 +00001796static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001797builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001798{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001800}
1801
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001802PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001803"repr(object) -> string\n\
1804\n\
1805Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001806For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807
1808
Guido van Rossum79f25d91997-04-29 20:08:16 +00001809static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001810builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001811{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001812 static PyObject *round_str = NULL;
1813 PyObject *ndigits = NULL;
1814 static char *kwlist[] = {"number", "ndigits", 0};
1815 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001816
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001817 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1818 kwlist, &number, &ndigits))
1819 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001821 if (Py_TYPE(number)->tp_dict == NULL) {
1822 if (PyType_Ready(Py_TYPE(number)) < 0)
1823 return NULL;
1824 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 if (round_str == NULL) {
1827 round_str = PyUnicode_InternFromString("__round__");
1828 if (round_str == NULL)
1829 return NULL;
1830 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 round = _PyType_Lookup(Py_TYPE(number), round_str);
1833 if (round == NULL) {
1834 PyErr_Format(PyExc_TypeError,
1835 "type %.100s doesn't define __round__ method",
1836 Py_TYPE(number)->tp_name);
1837 return NULL;
1838 }
Alex Martelliae211f92007-08-22 23:21:33 +00001839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 if (ndigits == NULL)
1841 return PyObject_CallFunction(round, "O", number);
1842 else
1843 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001844}
1845
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001846PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001847"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001848\n\
1849Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001850This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001851same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001852
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001853
Raymond Hettinger64958a12003-12-17 20:43:33 +00001854static PyObject *
1855builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1856{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1858 PyObject *callable;
1859 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1860 int reverse;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001861 _Py_IDENTIFIER(sort);
Raymond Hettinger64958a12003-12-17 20:43:33 +00001862
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 /* args 1-3 should match listsort in Objects/listobject.c */
1864 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1865 kwlist, &seq, &keyfunc, &reverse))
1866 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001868 newlist = PySequence_List(seq);
1869 if (newlist == NULL)
1870 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001871
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001872 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 if (callable == NULL) {
1874 Py_DECREF(newlist);
1875 return NULL;
1876 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 newargs = PyTuple_GetSlice(args, 1, 4);
1879 if (newargs == NULL) {
1880 Py_DECREF(newlist);
1881 Py_DECREF(callable);
1882 return NULL;
1883 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 v = PyObject_Call(callable, newargs, kwds);
1886 Py_DECREF(newargs);
1887 Py_DECREF(callable);
1888 if (v == NULL) {
1889 Py_DECREF(newlist);
1890 return NULL;
1891 }
1892 Py_DECREF(v);
1893 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001894}
1895
1896PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001897"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001898
Guido van Rossum79f25d91997-04-29 20:08:16 +00001899static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001900builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001901{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001902 PyObject *v = NULL;
1903 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001904
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001905 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1906 return NULL;
1907 if (v == NULL) {
1908 d = PyEval_GetLocals();
1909 if (d == NULL) {
1910 if (!PyErr_Occurred())
1911 PyErr_SetString(PyExc_SystemError,
1912 "vars(): no locals!?");
1913 }
1914 else
1915 Py_INCREF(d);
1916 }
1917 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001918 _Py_IDENTIFIER(__dict__);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001919 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 if (d == NULL) {
1921 PyErr_SetString(PyExc_TypeError,
1922 "vars() argument must have __dict__ attribute");
1923 return NULL;
1924 }
1925 }
1926 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001927}
1928
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001929PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001930"vars([object]) -> dictionary\n\
1931\n\
1932Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001933With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001934
Alex Martellia70b1912003-04-22 08:12:33 +00001935static PyObject*
1936builtin_sum(PyObject *self, PyObject *args)
1937{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001938 PyObject *seq;
1939 PyObject *result = NULL;
1940 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1943 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001945 iter = PyObject_GetIter(seq);
1946 if (iter == NULL)
1947 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001948
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 if (result == NULL) {
1950 result = PyLong_FromLong(0);
1951 if (result == NULL) {
1952 Py_DECREF(iter);
1953 return NULL;
1954 }
1955 } else {
1956 /* reject string values for 'start' parameter */
1957 if (PyUnicode_Check(result)) {
1958 PyErr_SetString(PyExc_TypeError,
1959 "sum() can't sum strings [use ''.join(seq) instead]");
1960 Py_DECREF(iter);
1961 return NULL;
1962 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001963 if (PyBytes_Check(result)) {
1964 PyErr_SetString(PyExc_TypeError,
1965 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05001966 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001967 return NULL;
1968 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 if (PyByteArray_Check(result)) {
1970 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001971 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 Py_DECREF(iter);
1973 return NULL;
1974 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001976 Py_INCREF(result);
1977 }
Alex Martellia70b1912003-04-22 08:12:33 +00001978
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001979#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001980 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1981 Assumes all inputs are the same type. If the assumption fails, default
1982 to the more general routine.
1983 */
1984 if (PyLong_CheckExact(result)) {
1985 int overflow;
1986 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1987 /* If this already overflowed, don't even enter the loop. */
1988 if (overflow == 0) {
1989 Py_DECREF(result);
1990 result = NULL;
1991 }
1992 while(result == NULL) {
1993 item = PyIter_Next(iter);
1994 if (item == NULL) {
1995 Py_DECREF(iter);
1996 if (PyErr_Occurred())
1997 return NULL;
1998 return PyLong_FromLong(i_result);
1999 }
2000 if (PyLong_CheckExact(item)) {
2001 long b = PyLong_AsLongAndOverflow(item, &overflow);
2002 long x = i_result + b;
2003 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2004 i_result = x;
2005 Py_DECREF(item);
2006 continue;
2007 }
2008 }
2009 /* Either overflowed or is not an int. Restore real objects and process normally */
2010 result = PyLong_FromLong(i_result);
2011 temp = PyNumber_Add(result, item);
2012 Py_DECREF(result);
2013 Py_DECREF(item);
2014 result = temp;
2015 if (result == NULL) {
2016 Py_DECREF(iter);
2017 return NULL;
2018 }
2019 }
2020 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 if (PyFloat_CheckExact(result)) {
2023 double f_result = PyFloat_AS_DOUBLE(result);
2024 Py_DECREF(result);
2025 result = NULL;
2026 while(result == NULL) {
2027 item = PyIter_Next(iter);
2028 if (item == NULL) {
2029 Py_DECREF(iter);
2030 if (PyErr_Occurred())
2031 return NULL;
2032 return PyFloat_FromDouble(f_result);
2033 }
2034 if (PyFloat_CheckExact(item)) {
2035 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2036 f_result += PyFloat_AS_DOUBLE(item);
2037 PyFPE_END_PROTECT(f_result)
2038 Py_DECREF(item);
2039 continue;
2040 }
2041 if (PyLong_CheckExact(item)) {
2042 long value;
2043 int overflow;
2044 value = PyLong_AsLongAndOverflow(item, &overflow);
2045 if (!overflow) {
2046 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2047 f_result += (double)value;
2048 PyFPE_END_PROTECT(f_result)
2049 Py_DECREF(item);
2050 continue;
2051 }
2052 }
2053 result = PyFloat_FromDouble(f_result);
2054 temp = PyNumber_Add(result, item);
2055 Py_DECREF(result);
2056 Py_DECREF(item);
2057 result = temp;
2058 if (result == NULL) {
2059 Py_DECREF(iter);
2060 return NULL;
2061 }
2062 }
2063 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002064#endif
2065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002066 for(;;) {
2067 item = PyIter_Next(iter);
2068 if (item == NULL) {
2069 /* error, or end-of-sequence */
2070 if (PyErr_Occurred()) {
2071 Py_DECREF(result);
2072 result = NULL;
2073 }
2074 break;
2075 }
2076 /* It's tempting to use PyNumber_InPlaceAdd instead of
2077 PyNumber_Add here, to avoid quadratic running time
2078 when doing 'sum(list_of_lists, [])'. However, this
2079 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002080
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002081 empty = []
2082 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002084 would change the value of empty. */
2085 temp = PyNumber_Add(result, item);
2086 Py_DECREF(result);
2087 Py_DECREF(item);
2088 result = temp;
2089 if (result == NULL)
2090 break;
2091 }
2092 Py_DECREF(iter);
2093 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002094}
2095
2096PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002097"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002098\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002099Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2100of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002101empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002102
2103
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002104static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002105builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002106{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002107 PyObject *inst;
2108 PyObject *cls;
2109 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2112 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002113
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002114 retval = PyObject_IsInstance(inst, cls);
2115 if (retval < 0)
2116 return NULL;
2117 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002118}
2119
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002120PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002121"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002122\n\
2123Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002124With a type as second argument, return whether that is the object's type.\n\
2125The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002126isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002127
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002128
2129static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002130builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002131{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 PyObject *derived;
2133 PyObject *cls;
2134 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002135
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2137 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002138
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 retval = PyObject_IsSubclass(derived, cls);
2140 if (retval < 0)
2141 return NULL;
2142 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002143}
2144
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002145PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002146"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002147\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002148Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2149When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2150is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002151
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002152
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002153typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002154 PyObject_HEAD
2155 Py_ssize_t tuplesize;
2156 PyObject *ittuple; /* tuple of iterators */
2157 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002158} zipobject;
2159
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002160static PyObject *
2161zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002162{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 zipobject *lz;
2164 Py_ssize_t i;
2165 PyObject *ittuple; /* tuple of iterators */
2166 PyObject *result;
2167 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002169 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2170 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 /* args must be a tuple */
2173 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002175 /* obtain iterators */
2176 ittuple = PyTuple_New(tuplesize);
2177 if (ittuple == NULL)
2178 return NULL;
2179 for (i=0; i < tuplesize; ++i) {
2180 PyObject *item = PyTuple_GET_ITEM(args, i);
2181 PyObject *it = PyObject_GetIter(item);
2182 if (it == NULL) {
2183 if (PyErr_ExceptionMatches(PyExc_TypeError))
2184 PyErr_Format(PyExc_TypeError,
2185 "zip argument #%zd must support iteration",
2186 i+1);
2187 Py_DECREF(ittuple);
2188 return NULL;
2189 }
2190 PyTuple_SET_ITEM(ittuple, i, it);
2191 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 /* create a result holder */
2194 result = PyTuple_New(tuplesize);
2195 if (result == NULL) {
2196 Py_DECREF(ittuple);
2197 return NULL;
2198 }
2199 for (i=0 ; i < tuplesize ; i++) {
2200 Py_INCREF(Py_None);
2201 PyTuple_SET_ITEM(result, i, Py_None);
2202 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002203
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 /* create zipobject structure */
2205 lz = (zipobject *)type->tp_alloc(type, 0);
2206 if (lz == NULL) {
2207 Py_DECREF(ittuple);
2208 Py_DECREF(result);
2209 return NULL;
2210 }
2211 lz->ittuple = ittuple;
2212 lz->tuplesize = tuplesize;
2213 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002216}
2217
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002218static void
2219zip_dealloc(zipobject *lz)
2220{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002221 PyObject_GC_UnTrack(lz);
2222 Py_XDECREF(lz->ittuple);
2223 Py_XDECREF(lz->result);
2224 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002225}
2226
2227static int
2228zip_traverse(zipobject *lz, visitproc visit, void *arg)
2229{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002230 Py_VISIT(lz->ittuple);
2231 Py_VISIT(lz->result);
2232 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002233}
2234
2235static PyObject *
2236zip_next(zipobject *lz)
2237{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002238 Py_ssize_t i;
2239 Py_ssize_t tuplesize = lz->tuplesize;
2240 PyObject *result = lz->result;
2241 PyObject *it;
2242 PyObject *item;
2243 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 if (tuplesize == 0)
2246 return NULL;
2247 if (Py_REFCNT(result) == 1) {
2248 Py_INCREF(result);
2249 for (i=0 ; i < tuplesize ; i++) {
2250 it = PyTuple_GET_ITEM(lz->ittuple, i);
2251 item = (*Py_TYPE(it)->tp_iternext)(it);
2252 if (item == NULL) {
2253 Py_DECREF(result);
2254 return NULL;
2255 }
2256 olditem = PyTuple_GET_ITEM(result, i);
2257 PyTuple_SET_ITEM(result, i, item);
2258 Py_DECREF(olditem);
2259 }
2260 } else {
2261 result = PyTuple_New(tuplesize);
2262 if (result == NULL)
2263 return NULL;
2264 for (i=0 ; i < tuplesize ; i++) {
2265 it = PyTuple_GET_ITEM(lz->ittuple, i);
2266 item = (*Py_TYPE(it)->tp_iternext)(it);
2267 if (item == NULL) {
2268 Py_DECREF(result);
2269 return NULL;
2270 }
2271 PyTuple_SET_ITEM(result, i, item);
2272 }
2273 }
2274 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002275}
Barry Warsawbd599b52000-08-03 15:45:29 +00002276
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002277static PyObject *
2278zip_reduce(zipobject *lz)
2279{
2280 /* Just recreate the zip with the internal iterator tuple */
2281 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2282}
2283
2284static PyMethodDef zip_methods[] = {
2285 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2286 {NULL, NULL} /* sentinel */
2287};
2288
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002289PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002290"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002291\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002292Return a zip object whose .__next__() method returns a tuple where\n\
2293the i-th element comes from the i-th iterable argument. The .__next__()\n\
2294method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002295is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002296
2297PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002298 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2299 "zip", /* tp_name */
2300 sizeof(zipobject), /* tp_basicsize */
2301 0, /* tp_itemsize */
2302 /* methods */
2303 (destructor)zip_dealloc, /* tp_dealloc */
2304 0, /* tp_print */
2305 0, /* tp_getattr */
2306 0, /* tp_setattr */
2307 0, /* tp_reserved */
2308 0, /* tp_repr */
2309 0, /* tp_as_number */
2310 0, /* tp_as_sequence */
2311 0, /* tp_as_mapping */
2312 0, /* tp_hash */
2313 0, /* tp_call */
2314 0, /* tp_str */
2315 PyObject_GenericGetAttr, /* tp_getattro */
2316 0, /* tp_setattro */
2317 0, /* tp_as_buffer */
2318 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2319 Py_TPFLAGS_BASETYPE, /* tp_flags */
2320 zip_doc, /* tp_doc */
2321 (traverseproc)zip_traverse, /* tp_traverse */
2322 0, /* tp_clear */
2323 0, /* tp_richcompare */
2324 0, /* tp_weaklistoffset */
2325 PyObject_SelfIter, /* tp_iter */
2326 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002327 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002328 0, /* tp_members */
2329 0, /* tp_getset */
2330 0, /* tp_base */
2331 0, /* tp_dict */
2332 0, /* tp_descr_get */
2333 0, /* tp_descr_set */
2334 0, /* tp_dictoffset */
2335 0, /* tp_init */
2336 PyType_GenericAlloc, /* tp_alloc */
2337 zip_new, /* tp_new */
2338 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002339};
Barry Warsawbd599b52000-08-03 15:45:29 +00002340
2341
Guido van Rossum79f25d91997-04-29 20:08:16 +00002342static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002343 {"__build_class__", (PyCFunction)builtin___build_class__,
2344 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2345 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2346 {"abs", builtin_abs, METH_O, abs_doc},
2347 {"all", builtin_all, METH_O, all_doc},
2348 {"any", builtin_any, METH_O, any_doc},
2349 {"ascii", builtin_ascii, METH_O, ascii_doc},
2350 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002351 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2353 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2354 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2355 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2356 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2357 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2358 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2359 {"format", builtin_format, METH_VARARGS, format_doc},
2360 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2361 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2362 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2363 {"hash", builtin_hash, METH_O, hash_doc},
2364 {"hex", builtin_hex, METH_O, hex_doc},
2365 {"id", builtin_id, METH_O, id_doc},
2366 {"input", builtin_input, METH_VARARGS, input_doc},
2367 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2368 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2369 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2370 {"len", builtin_len, METH_O, len_doc},
2371 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2372 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2373 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2374 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2375 {"oct", builtin_oct, METH_O, oct_doc},
2376 {"ord", builtin_ord, METH_O, ord_doc},
2377 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2378 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2379 {"repr", builtin_repr, METH_O, repr_doc},
2380 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2381 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2382 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2383 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2384 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2385 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002386};
2387
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002388PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002389"Built-in functions, exceptions, and other objects.\n\
2390\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002391Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002392
Martin v. Löwis1a214512008-06-11 05:26:20 +00002393static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 PyModuleDef_HEAD_INIT,
2395 "builtins",
2396 builtin_doc,
2397 -1, /* multiple "initialization" just copies the module dict. */
2398 builtin_methods,
2399 NULL,
2400 NULL,
2401 NULL,
2402 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002403};
2404
2405
Guido van Rossum25ce5661997-08-02 03:10:38 +00002406PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002407_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002408{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 PyObject *mod, *dict, *debug;
2410 mod = PyModule_Create(&builtinsmodule);
2411 if (mod == NULL)
2412 return NULL;
2413 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002414
Tim Peters7571a0f2003-03-23 17:52:28 +00002415#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002416 /* "builtins" exposes a number of statically allocated objects
2417 * that, before this code was added in 2.3, never showed up in
2418 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2419 * result, programs leaking references to None and False (etc)
2420 * couldn't be diagnosed by examining sys.getobjects(0).
2421 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002422#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2423#else
2424#define ADD_TO_ALL(OBJECT) (void)0
2425#endif
2426
Tim Peters4b7625e2001-09-13 21:37:17 +00002427#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2429 return NULL; \
2430 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002432 SETBUILTIN("None", Py_None);
2433 SETBUILTIN("Ellipsis", Py_Ellipsis);
2434 SETBUILTIN("NotImplemented", Py_NotImplemented);
2435 SETBUILTIN("False", Py_False);
2436 SETBUILTIN("True", Py_True);
2437 SETBUILTIN("bool", &PyBool_Type);
2438 SETBUILTIN("memoryview", &PyMemoryView_Type);
2439 SETBUILTIN("bytearray", &PyByteArray_Type);
2440 SETBUILTIN("bytes", &PyBytes_Type);
2441 SETBUILTIN("classmethod", &PyClassMethod_Type);
2442 SETBUILTIN("complex", &PyComplex_Type);
2443 SETBUILTIN("dict", &PyDict_Type);
2444 SETBUILTIN("enumerate", &PyEnum_Type);
2445 SETBUILTIN("filter", &PyFilter_Type);
2446 SETBUILTIN("float", &PyFloat_Type);
2447 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2448 SETBUILTIN("property", &PyProperty_Type);
2449 SETBUILTIN("int", &PyLong_Type);
2450 SETBUILTIN("list", &PyList_Type);
2451 SETBUILTIN("map", &PyMap_Type);
2452 SETBUILTIN("object", &PyBaseObject_Type);
2453 SETBUILTIN("range", &PyRange_Type);
2454 SETBUILTIN("reversed", &PyReversed_Type);
2455 SETBUILTIN("set", &PySet_Type);
2456 SETBUILTIN("slice", &PySlice_Type);
2457 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2458 SETBUILTIN("str", &PyUnicode_Type);
2459 SETBUILTIN("super", &PySuper_Type);
2460 SETBUILTIN("tuple", &PyTuple_Type);
2461 SETBUILTIN("type", &PyType_Type);
2462 SETBUILTIN("zip", &PyZip_Type);
2463 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2464 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2465 Py_XDECREF(debug);
2466 return NULL;
2467 }
2468 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002470 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002471#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002472#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002473}