blob: 871eaa3497817fe5c1567940a501a05bdd8e0df3 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Benjamin Petersonea281a52011-08-12 23:10:50 -05009#include "asdl.h"
10#include "ast.h"
11
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012#include <ctype.h>
13
Victor Stinnerb744ba12010-05-15 12:27:16 +000014#ifdef HAVE_LANGINFO_H
15#include <langinfo.h> /* CODESET */
16#endif
17
Mark Hammond26cffde42001-05-14 12:17:34 +000018/* The default encoding used by the platform file system APIs
19 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000020
21 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
22 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000023*/
Victor Stinner99b95382011-07-04 14:23:54 +020024#ifdef HAVE_MBCS
Mark Hammond26cffde42001-05-14 12:17:34 +000025const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000027#elif defined(__APPLE__)
28const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020030#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000031const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000032int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000033#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000034
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020035_Py_IDENTIFIER(fileno);
36_Py_IDENTIFIER(flush);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020037
Guido van Rossum79f25d91997-04-29 20:08:16 +000038static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000039builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
40{
Nick Coghlande31b192011-10-23 22:04:16 +100041 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *cell;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000042 PyObject *cls = NULL;
Florent Xicluna4d46c2a2011-10-28 15:00:50 +020043 Py_ssize_t nargs;
Nick Coghlande31b192011-10-23 22:04:16 +100044 int isclass;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020045 _Py_IDENTIFIER(__prepare__);
Guido van Rossum52cc1d82007-03-18 15:41:51 +000046
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000047 assert(args != NULL);
48 if (!PyTuple_Check(args)) {
49 PyErr_SetString(PyExc_TypeError,
50 "__build_class__: args is not a tuple");
51 return NULL;
52 }
53 nargs = PyTuple_GET_SIZE(args);
54 if (nargs < 2) {
55 PyErr_SetString(PyExc_TypeError,
56 "__build_class__: not enough arguments");
57 return NULL;
58 }
59 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
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 }
166 if (cls != NULL && PyCell_Check(cell)) {
167 Py_INCREF(cls);
168 PyCell_SET(cell, cls);
169 }
170 Py_DECREF(cell);
171 }
172 Py_DECREF(ns);
173 Py_DECREF(meta);
174 Py_XDECREF(mkw);
175 Py_DECREF(bases);
176 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000177}
178
179PyDoc_STRVAR(build_class_doc,
180"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
181\n\
182Internal helper function used by the class statement.");
183
184static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000185builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000186{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
188 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400189 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000190 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000191
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400192 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 kwlist, &name, &globals, &locals, &fromlist, &level))
194 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400195 return PyImport_ImportModuleLevelObject(name, globals, locals,
196 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000197}
198
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000199PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000200"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000201\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000202Import a module. Because this function is meant for use by the Python\n\
203interpreter and not for general use it is better to use\n\
204importlib.import_module() to programmatically import a module.\n\
205\n\
206The globals argument is only used to determine the context;\n\
207they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000208should be a list of names to emulate ``from name import ...'', or an\n\
209empty list to emulate ``import name''.\n\
210When importing a module from a package, note that __import__('A.B', ...)\n\
211returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000212fromlist is not empty. Level is used to determine whether to perform \n\
213absolute or relative imports. -1 is the original strategy of attempting\n\
214both absolute and relative imports, 0 is absolute, a positive number\n\
215is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000216
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000217
Guido van Rossum79f25d91997-04-29 20:08:16 +0000218static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000219builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000220{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000221 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000222}
223
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000224PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000225"abs(number) -> number\n\
226\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000227Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000228
Raymond Hettinger96229b12005-03-11 06:49:40 +0000229static PyObject *
230builtin_all(PyObject *self, PyObject *v)
231{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 PyObject *it, *item;
233 PyObject *(*iternext)(PyObject *);
234 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000235
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000236 it = PyObject_GetIter(v);
237 if (it == NULL)
238 return NULL;
239 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 for (;;) {
242 item = iternext(it);
243 if (item == NULL)
244 break;
245 cmp = PyObject_IsTrue(item);
246 Py_DECREF(item);
247 if (cmp < 0) {
248 Py_DECREF(it);
249 return NULL;
250 }
251 if (cmp == 0) {
252 Py_DECREF(it);
253 Py_RETURN_FALSE;
254 }
255 }
256 Py_DECREF(it);
257 if (PyErr_Occurred()) {
258 if (PyErr_ExceptionMatches(PyExc_StopIteration))
259 PyErr_Clear();
260 else
261 return NULL;
262 }
263 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000264}
265
266PyDoc_STRVAR(all_doc,
267"all(iterable) -> bool\n\
268\n\
269Return True if bool(x) is True for all values x in the iterable.");
270
271static PyObject *
272builtin_any(PyObject *self, PyObject *v)
273{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000274 PyObject *it, *item;
275 PyObject *(*iternext)(PyObject *);
276 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000278 it = PyObject_GetIter(v);
279 if (it == NULL)
280 return NULL;
281 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000283 for (;;) {
284 item = iternext(it);
285 if (item == NULL)
286 break;
287 cmp = PyObject_IsTrue(item);
288 Py_DECREF(item);
289 if (cmp < 0) {
290 Py_DECREF(it);
291 return NULL;
292 }
293 if (cmp == 1) {
294 Py_DECREF(it);
295 Py_RETURN_TRUE;
296 }
297 }
298 Py_DECREF(it);
299 if (PyErr_Occurred()) {
300 if (PyErr_ExceptionMatches(PyExc_StopIteration))
301 PyErr_Clear();
302 else
303 return NULL;
304 }
305 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000306}
307
308PyDoc_STRVAR(any_doc,
309"any(iterable) -> bool\n\
310\n\
311Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000312
Georg Brandl559e5d72008-06-11 18:37:52 +0000313static PyObject *
314builtin_ascii(PyObject *self, PyObject *v)
315{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000316 return PyObject_ASCII(v);
Georg Brandl559e5d72008-06-11 18:37:52 +0000317}
318
319PyDoc_STRVAR(ascii_doc,
320"ascii(object) -> string\n\
321\n\
322As repr(), return a string containing a printable representation of an\n\
323object, but escape the non-ASCII characters in the string returned by\n\
324repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
325to that returned by repr() in Python 2.");
326
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000327
Guido van Rossum79f25d91997-04-29 20:08:16 +0000328static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000329builtin_bin(PyObject *self, PyObject *v)
330{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 return PyNumber_ToBase(v, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000332}
333
334PyDoc_STRVAR(bin_doc,
335"bin(number) -> string\n\
336\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -0400337Return the binary representation of an integer.");
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000338
339
Antoine Pitroue71362d2010-11-27 22:00:11 +0000340static PyObject *
341builtin_callable(PyObject *self, PyObject *v)
342{
343 return PyBool_FromLong((long)PyCallable_Check(v));
344}
345
346PyDoc_STRVAR(callable_doc,
347"callable(object) -> bool\n\
348\n\
349Return whether the object is callable (i.e., some kind of function).\n\
350Note that classes are callable, as are instances of classes with a\n\
351__call__() method.");
352
353
Raymond Hettinger17301e92008-03-13 00:19:26 +0000354typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000355 PyObject_HEAD
356 PyObject *func;
357 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000358} filterobject;
359
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000360static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000361filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000362{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 PyObject *func, *seq;
364 PyObject *it;
365 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000366
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000367 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
368 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000369
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
371 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000372
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000373 /* Get iterator. */
374 it = PyObject_GetIter(seq);
375 if (it == NULL)
376 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 /* create filterobject structure */
379 lz = (filterobject *)type->tp_alloc(type, 0);
380 if (lz == NULL) {
381 Py_DECREF(it);
382 return NULL;
383 }
384 Py_INCREF(func);
385 lz->func = func;
386 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000387
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000389}
390
391static void
392filter_dealloc(filterobject *lz)
393{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 PyObject_GC_UnTrack(lz);
395 Py_XDECREF(lz->func);
396 Py_XDECREF(lz->it);
397 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000398}
399
400static int
401filter_traverse(filterobject *lz, visitproc visit, void *arg)
402{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 Py_VISIT(lz->it);
404 Py_VISIT(lz->func);
405 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000406}
407
408static PyObject *
409filter_next(filterobject *lz)
410{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000411 PyObject *item;
412 PyObject *it = lz->it;
413 long ok;
414 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000416 iternext = *Py_TYPE(it)->tp_iternext;
417 for (;;) {
418 item = iternext(it);
419 if (item == NULL)
420 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
423 ok = PyObject_IsTrue(item);
424 } else {
425 PyObject *good;
426 good = PyObject_CallFunctionObjArgs(lz->func,
427 item, NULL);
428 if (good == NULL) {
429 Py_DECREF(item);
430 return NULL;
431 }
432 ok = PyObject_IsTrue(good);
433 Py_DECREF(good);
434 }
435 if (ok)
436 return item;
437 Py_DECREF(item);
438 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000439}
440
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000441PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000442"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000443\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000444Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000445is true. If function is None, return the items that are true.");
446
447PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 PyVarObject_HEAD_INIT(&PyType_Type, 0)
449 "filter", /* tp_name */
450 sizeof(filterobject), /* tp_basicsize */
451 0, /* tp_itemsize */
452 /* methods */
453 (destructor)filter_dealloc, /* tp_dealloc */
454 0, /* tp_print */
455 0, /* tp_getattr */
456 0, /* tp_setattr */
457 0, /* tp_reserved */
458 0, /* tp_repr */
459 0, /* tp_as_number */
460 0, /* tp_as_sequence */
461 0, /* tp_as_mapping */
462 0, /* tp_hash */
463 0, /* tp_call */
464 0, /* tp_str */
465 PyObject_GenericGetAttr, /* tp_getattro */
466 0, /* tp_setattro */
467 0, /* tp_as_buffer */
468 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
469 Py_TPFLAGS_BASETYPE, /* tp_flags */
470 filter_doc, /* tp_doc */
471 (traverseproc)filter_traverse, /* tp_traverse */
472 0, /* tp_clear */
473 0, /* tp_richcompare */
474 0, /* tp_weaklistoffset */
475 PyObject_SelfIter, /* tp_iter */
476 (iternextfunc)filter_next, /* tp_iternext */
477 0, /* tp_methods */
478 0, /* tp_members */
479 0, /* tp_getset */
480 0, /* tp_base */
481 0, /* tp_dict */
482 0, /* tp_descr_get */
483 0, /* tp_descr_set */
484 0, /* tp_dictoffset */
485 0, /* tp_init */
486 PyType_GenericAlloc, /* tp_alloc */
487 filter_new, /* tp_new */
488 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000489};
490
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000491
Eric Smith8c663262007-08-25 02:26:07 +0000492static PyObject *
493builtin_format(PyObject *self, PyObject *args)
494{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000495 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000496 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000497
Eric Smith8fd3eba2008-02-17 19:48:00 +0000498 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000499 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000500
Eric Smith8fd3eba2008-02-17 19:48:00 +0000501 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000502}
503
Eric Smith8c663262007-08-25 02:26:07 +0000504PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000505"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000506\n\
Eric Smith81936692007-08-31 01:14:01 +0000507Returns value.__format__(format_spec)\n\
508format_spec defaults to \"\"");
509
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000510static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000511builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000512{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 if (!PyArg_ParseTuple(args, "i:chr", &x))
516 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000519}
520
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000521PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000522"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000523\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000524Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000525)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000526#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000527PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000528"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000529)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000530#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000531;
Guido van Rossum09095f32000-03-10 23:00:52 +0000532
533
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000534static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000535source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000536{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000537 char *str;
538 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000540 if (PyUnicode_Check(cmd)) {
541 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200542 str = PyUnicode_AsUTF8AndSize(cmd, &size);
543 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 return NULL;
545 }
546 else if (!PyObject_CheckReadBuffer(cmd)) {
547 PyErr_Format(PyExc_TypeError,
548 "%s() arg 1 must be a %s object",
549 funcname, what);
550 return NULL;
551 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200552 else if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000553 return NULL;
554 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 if (strlen(str) != size) {
557 PyErr_SetString(PyExc_TypeError,
558 "source code string cannot contain null bytes");
559 return NULL;
560 }
561 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000562}
563
Guido van Rossum79f25d91997-04-29 20:08:16 +0000564static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000565builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000566{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 char *str;
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000568 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569 char *filename;
570 char *startstr;
571 int mode = -1;
572 int dont_inherit = 0;
573 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000574 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 int is_ast;
576 PyCompilerFlags cf;
577 PyObject *cmd;
578 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000579 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000581 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000582
Georg Brandl8334fd92010-12-04 10:26:46 +0000583 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000584 &cmd,
585 PyUnicode_FSConverter, &filename_obj,
586 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000587 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000589
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000590 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 if (supplied_flags &
594 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
595 {
596 PyErr_SetString(PyExc_ValueError,
597 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000598 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000599 }
600 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000601
Georg Brandl8334fd92010-12-04 10:26:46 +0000602 if (optimize < -1 || optimize > 2) {
603 PyErr_SetString(PyExc_ValueError,
604 "compile(): invalid optimize value");
605 goto error;
606 }
607
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 if (!dont_inherit) {
609 PyEval_MergeCompilerFlags(&cf);
610 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 if (strcmp(startstr, "exec") == 0)
613 mode = 0;
614 else if (strcmp(startstr, "eval") == 0)
615 mode = 1;
616 else if (strcmp(startstr, "single") == 0)
617 mode = 2;
618 else {
619 PyErr_SetString(PyExc_ValueError,
620 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000621 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 is_ast = PyAST_Check(cmd);
625 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000626 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 if (supplied_flags & PyCF_ONLY_AST) {
629 Py_INCREF(cmd);
630 result = cmd;
631 }
632 else {
633 PyArena *arena;
634 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 arena = PyArena_New();
637 mod = PyAST_obj2mod(cmd, arena, mode);
638 if (mod == NULL) {
639 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000640 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000641 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500642 if (!PyAST_Validate(mod)) {
643 PyArena_Free(arena);
644 goto error;
645 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000646 result = (PyObject*)PyAST_CompileEx(mod, filename,
647 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000648 PyArena_Free(arena);
649 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000650 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000652
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000653 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
654 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000655 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000656
Georg Brandl8334fd92010-12-04 10:26:46 +0000657 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000658 goto finally;
659
660error:
661 result = NULL;
662finally:
663 Py_DECREF(filename_obj);
664 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000665}
666
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000667PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000668"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000669\n\
670Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000671into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000672The filename will be used for run-time error messages.\n\
673The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000674single (interactive) statement, or 'eval' to compile an expression.\n\
675The flags argument, if present, controls which future statements influence\n\
676the compilation of the code.\n\
677The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
678the effects of any future statements in effect in the code calling\n\
679compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000680in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000681
Guido van Rossum79f25d91997-04-29 20:08:16 +0000682static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000683builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000684{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000685 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000686
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
688 return NULL;
689 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000690}
691
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000692PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000693"dir([object]) -> list of strings\n"
694"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000695"If called without an argument, return the names in the current scope.\n"
696"Else, return an alphabetized list of names comprising (some of) the attributes\n"
697"of the given object, and of attributes reachable from it.\n"
698"If the object supplies a method named __dir__, it will be used; otherwise\n"
699"the default dir() logic is used and returns:\n"
700" for a module object: the module's attributes.\n"
701" for a class object: its attributes, and recursively the attributes\n"
702" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000703" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000704" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000705
Guido van Rossum79f25d91997-04-29 20:08:16 +0000706static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000707builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000708{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
712 return NULL;
713 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000714}
715
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000716PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000717"divmod(x, y) -> (div, mod)\n\
718\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000719Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000720
721
Guido van Rossum79f25d91997-04-29 20:08:16 +0000722static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000723builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000724{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 PyObject *cmd, *result, *tmp = NULL;
726 PyObject *globals = Py_None, *locals = Py_None;
727 char *str;
728 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000729
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
731 return NULL;
732 if (locals != Py_None && !PyMapping_Check(locals)) {
733 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
734 return NULL;
735 }
736 if (globals != Py_None && !PyDict_Check(globals)) {
737 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
738 "globals must be a real dict; try eval(expr, {}, mapping)"
739 : "globals must be a dict");
740 return NULL;
741 }
742 if (globals == Py_None) {
743 globals = PyEval_GetGlobals();
744 if (locals == Py_None)
745 locals = PyEval_GetLocals();
746 }
747 else if (locals == Py_None)
748 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000749
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000750 if (globals == NULL || locals == NULL) {
751 PyErr_SetString(PyExc_TypeError,
752 "eval must be given globals and locals "
753 "when called without a frame");
754 return NULL;
755 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
758 if (PyDict_SetItemString(globals, "__builtins__",
759 PyEval_GetBuiltins()) != 0)
760 return NULL;
761 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 if (PyCode_Check(cmd)) {
764 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
765 PyErr_SetString(PyExc_TypeError,
766 "code object passed to eval() may not contain free variables");
767 return NULL;
768 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000769 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000770 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000772 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
773 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
774 if (str == NULL)
775 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000776
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 while (*str == ' ' || *str == '\t')
778 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 (void)PyEval_MergeCompilerFlags(&cf);
781 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
782 Py_XDECREF(tmp);
783 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000784}
785
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000786PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000787"eval(source[, globals[, locals]]) -> value\n\
788\n\
789Evaluate the source in the context of globals and locals.\n\
790The source may be a string representing a Python expression\n\
791or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000792The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000793defaulting to the current globals and locals.\n\
794If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000795
Georg Brandl7cae87c2006-09-06 06:51:57 +0000796static PyObject *
797builtin_exec(PyObject *self, PyObject *args)
798{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 PyObject *v;
800 PyObject *prog, *globals = Py_None, *locals = Py_None;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000801
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
803 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000805 if (globals == Py_None) {
806 globals = PyEval_GetGlobals();
807 if (locals == Py_None) {
808 locals = PyEval_GetLocals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 }
810 if (!globals || !locals) {
811 PyErr_SetString(PyExc_SystemError,
812 "globals and locals cannot be NULL");
813 return NULL;
814 }
815 }
816 else if (locals == Py_None)
817 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 if (!PyDict_Check(globals)) {
820 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
821 globals->ob_type->tp_name);
822 return NULL;
823 }
824 if (!PyMapping_Check(locals)) {
825 PyErr_Format(PyExc_TypeError,
826 "arg 3 must be a mapping or None, not %.100s",
827 locals->ob_type->tp_name);
828 return NULL;
829 }
830 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
831 if (PyDict_SetItemString(globals, "__builtins__",
832 PyEval_GetBuiltins()) != 0)
833 return NULL;
834 }
835
836 if (PyCode_Check(prog)) {
837 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
838 PyErr_SetString(PyExc_TypeError,
839 "code object passed to exec() may not "
840 "contain free variables");
841 return NULL;
842 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000843 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 }
845 else {
846 char *str;
847 PyCompilerFlags cf;
848 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
849 str = source_as_string(prog, "exec",
850 "string, bytes or code", &cf);
851 if (str == NULL)
852 return NULL;
853 if (PyEval_MergeCompilerFlags(&cf))
854 v = PyRun_StringFlags(str, Py_file_input, globals,
855 locals, &cf);
856 else
857 v = PyRun_String(str, Py_file_input, globals, locals);
858 }
859 if (v == NULL)
860 return NULL;
861 Py_DECREF(v);
862 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000863}
864
865PyDoc_STRVAR(exec_doc,
866"exec(object[, globals[, locals]])\n\
867\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000868Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000869object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000870The globals and locals are dictionaries, defaulting to the current\n\
871globals and locals. If only globals is given, locals defaults to it.");
872
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000873
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000875builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000876{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 PyObject *v, *result, *dflt = NULL;
878 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000880 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
881 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 if (!PyUnicode_Check(name)) {
884 PyErr_SetString(PyExc_TypeError,
885 "getattr(): attribute name must be string");
886 return NULL;
887 }
888 result = PyObject_GetAttr(v, name);
889 if (result == NULL && dflt != NULL &&
890 PyErr_ExceptionMatches(PyExc_AttributeError))
891 {
892 PyErr_Clear();
893 Py_INCREF(dflt);
894 result = dflt;
895 }
896 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000897}
898
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000899PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000900"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000901\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000902Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
903When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000904exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000905
906
Guido van Rossum79f25d91997-04-29 20:08:16 +0000907static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000908builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000909{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000912 d = PyEval_GetGlobals();
913 Py_XINCREF(d);
914 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000915}
916
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918"globals() -> dictionary\n\
919\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000921
922
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000924builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000925{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 PyObject *v;
927 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
930 return NULL;
931 if (!PyUnicode_Check(name)) {
932 PyErr_SetString(PyExc_TypeError,
933 "hasattr(): attribute name must be string");
934 return NULL;
935 }
936 v = PyObject_GetAttr(v, name);
937 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000938 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000939 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000940 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000942 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 }
944 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000945 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000946}
947
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000948PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000949"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000950\n\
951Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000952(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000953
954
Guido van Rossum79f25d91997-04-29 20:08:16 +0000955static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000956builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000957{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000959}
960
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000961PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000962"id(object) -> integer\n\
963\n\
964Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000965simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000966
967
Raymond Hettingera6c60372008-03-13 01:26:19 +0000968/* map object ************************************************************/
969
970typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 PyObject_HEAD
972 PyObject *iters;
973 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000974} mapobject;
975
Guido van Rossum79f25d91997-04-29 20:08:16 +0000976static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000977map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000978{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 PyObject *it, *iters, *func;
980 mapobject *lz;
981 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000983 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
984 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000985
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 numargs = PyTuple_Size(args);
987 if (numargs < 2) {
988 PyErr_SetString(PyExc_TypeError,
989 "map() must have at least two arguments.");
990 return NULL;
991 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 iters = PyTuple_New(numargs-1);
994 if (iters == NULL)
995 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 for (i=1 ; i<numargs ; i++) {
998 /* Get iterator. */
999 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1000 if (it == NULL) {
1001 Py_DECREF(iters);
1002 return NULL;
1003 }
1004 PyTuple_SET_ITEM(iters, i-1, it);
1005 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 /* create mapobject structure */
1008 lz = (mapobject *)type->tp_alloc(type, 0);
1009 if (lz == NULL) {
1010 Py_DECREF(iters);
1011 return NULL;
1012 }
1013 lz->iters = iters;
1014 func = PyTuple_GET_ITEM(args, 0);
1015 Py_INCREF(func);
1016 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001019}
1020
1021static void
1022map_dealloc(mapobject *lz)
1023{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 PyObject_GC_UnTrack(lz);
1025 Py_XDECREF(lz->iters);
1026 Py_XDECREF(lz->func);
1027 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001028}
1029
1030static int
1031map_traverse(mapobject *lz, visitproc visit, void *arg)
1032{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001033 Py_VISIT(lz->iters);
1034 Py_VISIT(lz->func);
1035 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001036}
1037
1038static PyObject *
1039map_next(mapobject *lz)
1040{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 PyObject *val;
1042 PyObject *argtuple;
1043 PyObject *result;
1044 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001045
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001046 numargs = PyTuple_Size(lz->iters);
1047 argtuple = PyTuple_New(numargs);
1048 if (argtuple == NULL)
1049 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001050
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 for (i=0 ; i<numargs ; i++) {
1052 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1053 if (val == NULL) {
1054 Py_DECREF(argtuple);
1055 return NULL;
1056 }
1057 PyTuple_SET_ITEM(argtuple, i, val);
1058 }
1059 result = PyObject_Call(lz->func, argtuple, NULL);
1060 Py_DECREF(argtuple);
1061 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001062}
1063
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001064PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001065"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001066\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001067Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001069
Raymond Hettingera6c60372008-03-13 01:26:19 +00001070PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1072 "map", /* tp_name */
1073 sizeof(mapobject), /* tp_basicsize */
1074 0, /* tp_itemsize */
1075 /* methods */
1076 (destructor)map_dealloc, /* tp_dealloc */
1077 0, /* tp_print */
1078 0, /* tp_getattr */
1079 0, /* tp_setattr */
1080 0, /* tp_reserved */
1081 0, /* tp_repr */
1082 0, /* tp_as_number */
1083 0, /* tp_as_sequence */
1084 0, /* tp_as_mapping */
1085 0, /* tp_hash */
1086 0, /* tp_call */
1087 0, /* tp_str */
1088 PyObject_GenericGetAttr, /* tp_getattro */
1089 0, /* tp_setattro */
1090 0, /* tp_as_buffer */
1091 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1092 Py_TPFLAGS_BASETYPE, /* tp_flags */
1093 map_doc, /* tp_doc */
1094 (traverseproc)map_traverse, /* tp_traverse */
1095 0, /* tp_clear */
1096 0, /* tp_richcompare */
1097 0, /* tp_weaklistoffset */
1098 PyObject_SelfIter, /* tp_iter */
1099 (iternextfunc)map_next, /* tp_iternext */
1100 0, /* tp_methods */
1101 0, /* tp_members */
1102 0, /* tp_getset */
1103 0, /* tp_base */
1104 0, /* tp_dict */
1105 0, /* tp_descr_get */
1106 0, /* tp_descr_set */
1107 0, /* tp_dictoffset */
1108 0, /* tp_init */
1109 PyType_GenericAlloc, /* tp_alloc */
1110 map_new, /* tp_new */
1111 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001112};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001113
Guido van Rossum79f25d91997-04-29 20:08:16 +00001114static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001115builtin_next(PyObject *self, PyObject *args)
1116{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 PyObject *it, *res;
1118 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1121 return NULL;
1122 if (!PyIter_Check(it)) {
1123 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001124 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 it->ob_type->tp_name);
1126 return NULL;
1127 }
1128
1129 res = (*it->ob_type->tp_iternext)(it);
1130 if (res != NULL) {
1131 return res;
1132 } else if (def != NULL) {
1133 if (PyErr_Occurred()) {
1134 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1135 return NULL;
1136 PyErr_Clear();
1137 }
1138 Py_INCREF(def);
1139 return def;
1140 } else if (PyErr_Occurred()) {
1141 return NULL;
1142 } else {
1143 PyErr_SetNone(PyExc_StopIteration);
1144 return NULL;
1145 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001146}
1147
1148PyDoc_STRVAR(next_doc,
1149"next(iterator[, default])\n\
1150\n\
1151Return the next item from the iterator. If default is given and the iterator\n\
1152is exhausted, it is returned instead of raising StopIteration.");
1153
1154
1155static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001156builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001157{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 PyObject *v;
1159 PyObject *name;
1160 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001161
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001162 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1163 return NULL;
1164 if (PyObject_SetAttr(v, name, value) != 0)
1165 return NULL;
1166 Py_INCREF(Py_None);
1167 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001168}
1169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001170PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001171"setattr(object, name, value)\n\
1172\n\
1173Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001174``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001175
1176
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001178builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 PyObject *v;
1181 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1184 return NULL;
1185 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1186 return NULL;
1187 Py_INCREF(Py_None);
1188 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001189}
1190
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001191PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001192"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193\n\
1194Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001195``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001196
1197
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001199builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001200{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001201 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 x = PyObject_Hash(v);
1204 if (x == -1)
1205 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001206 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001207}
1208
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001209PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001210"hash(object) -> integer\n\
1211\n\
1212Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001213the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214
1215
Guido van Rossum79f25d91997-04-29 20:08:16 +00001216static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001217builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001218{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001219 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001220}
1221
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001222PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001223"hex(number) -> string\n\
1224\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001225Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226
1227
Guido van Rossum79f25d91997-04-29 20:08:16 +00001228static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001229builtin_iter(PyObject *self, PyObject *args)
1230{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001232
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001233 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1234 return NULL;
1235 if (w == NULL)
1236 return PyObject_GetIter(v);
1237 if (!PyCallable_Check(v)) {
1238 PyErr_SetString(PyExc_TypeError,
1239 "iter(v, w): v must be callable");
1240 return NULL;
1241 }
1242 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001243}
1244
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001245PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001246"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001247iter(callable, sentinel) -> iterator\n\
1248\n\
1249Get an iterator from an object. In the first form, the argument must\n\
1250supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001251In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001252
1253
1254static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001255builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001256{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001257 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 res = PyObject_Size(v);
1260 if (res < 0 && PyErr_Occurred())
1261 return NULL;
1262 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001263}
1264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001265PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001266"len(object) -> integer\n\
1267\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001268Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001269
1270
Guido van Rossum79f25d91997-04-29 20:08:16 +00001271static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001272builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001273{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001274 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001275
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001276 d = PyEval_GetLocals();
1277 Py_XINCREF(d);
1278 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001279}
1280
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001281PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001282"locals() -> dictionary\n\
1283\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001284Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001285
1286
Guido van Rossum79f25d91997-04-29 20:08:16 +00001287static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001288min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001289{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1291 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001292
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 if (PyTuple_Size(args) > 1)
1294 v = args;
1295 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1296 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001298 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1299 keyfunc = PyDict_GetItemString(kwds, "key");
1300 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1301 PyErr_Format(PyExc_TypeError,
1302 "%s() got an unexpected keyword argument", name);
1303 return NULL;
1304 }
1305 Py_INCREF(keyfunc);
1306 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001307
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001308 it = PyObject_GetIter(v);
1309 if (it == NULL) {
1310 Py_XDECREF(keyfunc);
1311 return NULL;
1312 }
Tim Petersc3074532001-05-03 07:00:32 +00001313
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001314 maxitem = NULL; /* the result */
1315 maxval = NULL; /* the value associated with the result */
1316 while (( item = PyIter_Next(it) )) {
1317 /* get the value from the key function */
1318 if (keyfunc != NULL) {
1319 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1320 if (val == NULL)
1321 goto Fail_it_item;
1322 }
1323 /* no key function; the value is the item */
1324 else {
1325 val = item;
1326 Py_INCREF(val);
1327 }
Tim Petersc3074532001-05-03 07:00:32 +00001328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001329 /* maximum value and item are unset; set them */
1330 if (maxval == NULL) {
1331 maxitem = item;
1332 maxval = val;
1333 }
1334 /* maximum value and item are set; update them as necessary */
1335 else {
1336 int cmp = PyObject_RichCompareBool(val, maxval, op);
1337 if (cmp < 0)
1338 goto Fail_it_item_and_val;
1339 else if (cmp > 0) {
1340 Py_DECREF(maxval);
1341 Py_DECREF(maxitem);
1342 maxval = val;
1343 maxitem = item;
1344 }
1345 else {
1346 Py_DECREF(item);
1347 Py_DECREF(val);
1348 }
1349 }
1350 }
1351 if (PyErr_Occurred())
1352 goto Fail_it;
1353 if (maxval == NULL) {
1354 PyErr_Format(PyExc_ValueError,
1355 "%s() arg is an empty sequence", name);
1356 assert(maxitem == NULL);
1357 }
1358 else
1359 Py_DECREF(maxval);
1360 Py_DECREF(it);
1361 Py_XDECREF(keyfunc);
1362 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001363
1364Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001365 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001366Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001367 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001368Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 Py_XDECREF(maxval);
1370 Py_XDECREF(maxitem);
1371 Py_DECREF(it);
1372 Py_XDECREF(keyfunc);
1373 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001374}
1375
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001377builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001378{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001380}
1381
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001382PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001383"min(iterable[, key=func]) -> value\n\
1384min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001385\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001386With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001387With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001388
1389
Guido van Rossum79f25d91997-04-29 20:08:16 +00001390static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001391builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001392{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001393 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001394}
1395
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001396PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001397"max(iterable[, key=func]) -> value\n\
1398max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001399\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001400With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001401With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001402
1403
Guido van Rossum79f25d91997-04-29 20:08:16 +00001404static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001405builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001407 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001408}
1409
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001410PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001411"oct(number) -> string\n\
1412\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001413Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001414
1415
Guido van Rossum79f25d91997-04-29 20:08:16 +00001416static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001417builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001418{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 long ord;
1420 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 if (PyBytes_Check(obj)) {
1423 size = PyBytes_GET_SIZE(obj);
1424 if (size == 1) {
1425 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1426 return PyLong_FromLong(ord);
1427 }
1428 }
1429 else if (PyUnicode_Check(obj)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001430 if (PyUnicode_READY(obj) == -1)
1431 return NULL;
1432 size = PyUnicode_GET_LENGTH(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001433 if (size == 1) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001434 ord = (long)PyUnicode_READ_CHAR(obj, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 return PyLong_FromLong(ord);
1436 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001437 }
1438 else if (PyByteArray_Check(obj)) {
1439 /* XXX Hopefully this is temporary */
1440 size = PyByteArray_GET_SIZE(obj);
1441 if (size == 1) {
1442 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1443 return PyLong_FromLong(ord);
1444 }
1445 }
1446 else {
1447 PyErr_Format(PyExc_TypeError,
1448 "ord() expected string of length 1, but " \
1449 "%.200s found", obj->ob_type->tp_name);
1450 return NULL;
1451 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001453 PyErr_Format(PyExc_TypeError,
1454 "ord() expected a character, "
1455 "but string of length %zd found",
1456 size);
1457 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001458}
1459
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001460PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001461"ord(c) -> integer\n\
1462\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001463Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001464)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001465#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001466PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001467"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001468)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001469#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001470;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001471
1472
Guido van Rossum79f25d91997-04-29 20:08:16 +00001473static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001474builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001475{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001476 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1479 return NULL;
1480 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001481}
1482
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001483PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001484"pow(x, y[, z]) -> number\n\
1485\n\
1486With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001487equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001488
1489
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001490
Guido van Rossum34343512006-11-30 22:13:52 +00001491static PyObject *
1492builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1493{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001494 static char *kwlist[] = {"sep", "end", "file", 0};
1495 static PyObject *dummy_args;
1496 PyObject *sep = NULL, *end = NULL, *file = NULL;
1497 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001498
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001499 if (dummy_args == NULL) {
1500 if (!(dummy_args = PyTuple_New(0)))
1501 return NULL;
1502 }
1503 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1504 kwlist, &sep, &end, &file))
1505 return NULL;
1506 if (file == NULL || file == Py_None) {
1507 file = PySys_GetObject("stdout");
1508 /* sys.stdout may be None when FILE* stdout isn't connected */
1509 if (file == Py_None)
1510 Py_RETURN_NONE;
1511 }
Guido van Rossum34343512006-11-30 22:13:52 +00001512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001513 if (sep == Py_None) {
1514 sep = NULL;
1515 }
1516 else if (sep && !PyUnicode_Check(sep)) {
1517 PyErr_Format(PyExc_TypeError,
1518 "sep must be None or a string, not %.200s",
1519 sep->ob_type->tp_name);
1520 return NULL;
1521 }
1522 if (end == Py_None) {
1523 end = NULL;
1524 }
1525 else if (end && !PyUnicode_Check(end)) {
1526 PyErr_Format(PyExc_TypeError,
1527 "end must be None or a string, not %.200s",
1528 end->ob_type->tp_name);
1529 return NULL;
1530 }
Guido van Rossum34343512006-11-30 22:13:52 +00001531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001532 for (i = 0; i < PyTuple_Size(args); i++) {
1533 if (i > 0) {
1534 if (sep == NULL)
1535 err = PyFile_WriteString(" ", file);
1536 else
1537 err = PyFile_WriteObject(sep, file,
1538 Py_PRINT_RAW);
1539 if (err)
1540 return NULL;
1541 }
1542 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1543 Py_PRINT_RAW);
1544 if (err)
1545 return NULL;
1546 }
Guido van Rossum34343512006-11-30 22:13:52 +00001547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 if (end == NULL)
1549 err = PyFile_WriteString("\n", file);
1550 else
1551 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1552 if (err)
1553 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001556}
1557
1558PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001559"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001560\n\
1561Prints the values to a stream, or to sys.stdout by default.\n\
1562Optional keyword arguments:\n\
1563file: a file-like object (stream); defaults to the current sys.stdout.\n\
1564sep: string inserted between values, default a space.\n\
1565end: string appended after the last value, default a newline.");
1566
1567
Guido van Rossuma88a0332007-02-26 16:59:55 +00001568static PyObject *
1569builtin_input(PyObject *self, PyObject *args)
1570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 PyObject *promptarg = NULL;
1572 PyObject *fin = PySys_GetObject("stdin");
1573 PyObject *fout = PySys_GetObject("stdout");
1574 PyObject *ferr = PySys_GetObject("stderr");
1575 PyObject *tmp;
1576 long fd;
1577 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 /* Parse arguments */
1580 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1581 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 /* Check that stdin/out/err are intact */
1584 if (fin == NULL || fin == Py_None) {
1585 PyErr_SetString(PyExc_RuntimeError,
1586 "input(): lost sys.stdin");
1587 return NULL;
1588 }
1589 if (fout == NULL || fout == Py_None) {
1590 PyErr_SetString(PyExc_RuntimeError,
1591 "input(): lost sys.stdout");
1592 return NULL;
1593 }
1594 if (ferr == NULL || ferr == Py_None) {
1595 PyErr_SetString(PyExc_RuntimeError,
1596 "input(): lost sys.stderr");
1597 return NULL;
1598 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001599
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001601 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 if (tmp == NULL)
1603 PyErr_Clear();
1604 else
1605 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 /* We should only use (GNU) readline if Python's sys.stdin and
1608 sys.stdout are the same as C's stdin and stdout, because we
1609 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001610 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001611 if (tmp == NULL) {
1612 PyErr_Clear();
1613 tty = 0;
1614 }
1615 else {
1616 fd = PyLong_AsLong(tmp);
1617 Py_DECREF(tmp);
1618 if (fd < 0 && PyErr_Occurred())
1619 return NULL;
1620 tty = fd == fileno(stdin) && isatty(fd);
1621 }
1622 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001623 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 if (tmp == NULL)
1625 PyErr_Clear();
1626 else {
1627 fd = PyLong_AsLong(tmp);
1628 Py_DECREF(tmp);
1629 if (fd < 0 && PyErr_Occurred())
1630 return NULL;
1631 tty = fd == fileno(stdout) && isatty(fd);
1632 }
1633 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 /* If we're interactive, use (GNU) readline */
1636 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001637 PyObject *po = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001638 char *prompt;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001639 char *s = NULL;
1640 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1641 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1642 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001644 size_t len;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001645 _Py_IDENTIFIER(encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001646 _Py_IDENTIFIER(errors);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001647
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001648 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001649 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001650 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001651 /* stdin is a text stream, so it must have an
1652 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001653 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001654 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001655 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1656 if (!stdin_encoding_str || !stdin_errors_str)
1657 goto _readline_errors;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001658 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001659 if (tmp == NULL)
1660 PyErr_Clear();
1661 else
1662 Py_DECREF(tmp);
1663 if (promptarg != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001664 /* We have a prompt, encode it as stdout would */
1665 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001667 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001668 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001669 if (!stdout_encoding || !stdout_errors)
1670 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001671 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001672 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1673 if (!stdout_encoding_str || !stdout_errors_str)
1674 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 stringpo = PyObject_Str(promptarg);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001676 if (stringpo == NULL)
1677 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001679 stdout_encoding_str, stdout_errors_str);
1680 Py_CLEAR(stdout_encoding);
1681 Py_CLEAR(stdout_errors);
1682 Py_CLEAR(stringpo);
1683 if (po == NULL)
1684 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 prompt = PyBytes_AsString(po);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001686 if (prompt == NULL)
1687 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 }
1689 else {
1690 po = NULL;
1691 prompt = "";
1692 }
1693 s = PyOS_Readline(stdin, stdout, prompt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 if (s == NULL) {
1695 if (!PyErr_Occurred())
1696 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001697 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001699
1700 len = strlen(s);
1701 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 PyErr_SetNone(PyExc_EOFError);
1703 result = NULL;
1704 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001705 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 if (len > PY_SSIZE_T_MAX) {
1707 PyErr_SetString(PyExc_OverflowError,
1708 "input: input too long");
1709 result = NULL;
1710 }
1711 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001712 len--; /* strip trailing '\n' */
1713 if (len != 0 && s[len-1] == '\r')
1714 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001715 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1716 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001717 }
1718 }
1719 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001720 Py_DECREF(stdin_errors);
1721 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 PyMem_FREE(s);
1723 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001724 _readline_errors:
1725 Py_XDECREF(stdin_encoding);
1726 Py_XDECREF(stdout_encoding);
1727 Py_XDECREF(stdin_errors);
1728 Py_XDECREF(stdout_errors);
1729 Py_XDECREF(po);
1730 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 /* Fallback if we're not interactive */
1734 if (promptarg != NULL) {
1735 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1736 return NULL;
1737 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001738 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001739 if (tmp == NULL)
1740 PyErr_Clear();
1741 else
1742 Py_DECREF(tmp);
1743 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001744}
1745
1746PyDoc_STRVAR(input_doc,
1747"input([prompt]) -> string\n\
1748\n\
1749Read a string from standard input. The trailing newline is stripped.\n\
1750If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1751On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1752is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001753
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001754
Guido van Rossum79f25d91997-04-29 20:08:16 +00001755static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001756builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001757{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001759}
1760
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001761PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001762"repr(object) -> string\n\
1763\n\
1764Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001765For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001766
1767
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001769builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001771 static PyObject *round_str = NULL;
1772 PyObject *ndigits = NULL;
1773 static char *kwlist[] = {"number", "ndigits", 0};
1774 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001776 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1777 kwlist, &number, &ndigits))
1778 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001780 if (Py_TYPE(number)->tp_dict == NULL) {
1781 if (PyType_Ready(Py_TYPE(number)) < 0)
1782 return NULL;
1783 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001784
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001785 if (round_str == NULL) {
1786 round_str = PyUnicode_InternFromString("__round__");
1787 if (round_str == NULL)
1788 return NULL;
1789 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001791 round = _PyType_Lookup(Py_TYPE(number), round_str);
1792 if (round == NULL) {
1793 PyErr_Format(PyExc_TypeError,
1794 "type %.100s doesn't define __round__ method",
1795 Py_TYPE(number)->tp_name);
1796 return NULL;
1797 }
Alex Martelliae211f92007-08-22 23:21:33 +00001798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 if (ndigits == NULL)
1800 return PyObject_CallFunction(round, "O", number);
1801 else
1802 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001803}
1804
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001805PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001806"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807\n\
1808Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001809This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001810same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001811
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001812
Raymond Hettinger64958a12003-12-17 20:43:33 +00001813static PyObject *
1814builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1817 PyObject *callable;
1818 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1819 int reverse;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001820 _Py_IDENTIFIER(sort);
Raymond Hettinger64958a12003-12-17 20:43:33 +00001821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 /* args 1-3 should match listsort in Objects/listobject.c */
1823 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1824 kwlist, &seq, &keyfunc, &reverse))
1825 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001826
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001827 newlist = PySequence_List(seq);
1828 if (newlist == NULL)
1829 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001830
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001831 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 if (callable == NULL) {
1833 Py_DECREF(newlist);
1834 return NULL;
1835 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 newargs = PyTuple_GetSlice(args, 1, 4);
1838 if (newargs == NULL) {
1839 Py_DECREF(newlist);
1840 Py_DECREF(callable);
1841 return NULL;
1842 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001844 v = PyObject_Call(callable, newargs, kwds);
1845 Py_DECREF(newargs);
1846 Py_DECREF(callable);
1847 if (v == NULL) {
1848 Py_DECREF(newlist);
1849 return NULL;
1850 }
1851 Py_DECREF(v);
1852 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001853}
1854
1855PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001856"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001857
Guido van Rossum79f25d91997-04-29 20:08:16 +00001858static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001859builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001860{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 PyObject *v = NULL;
1862 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001863
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001864 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1865 return NULL;
1866 if (v == NULL) {
1867 d = PyEval_GetLocals();
1868 if (d == NULL) {
1869 if (!PyErr_Occurred())
1870 PyErr_SetString(PyExc_SystemError,
1871 "vars(): no locals!?");
1872 }
1873 else
1874 Py_INCREF(d);
1875 }
1876 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001877 _Py_IDENTIFIER(__dict__);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001878 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 if (d == NULL) {
1880 PyErr_SetString(PyExc_TypeError,
1881 "vars() argument must have __dict__ attribute");
1882 return NULL;
1883 }
1884 }
1885 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001886}
1887
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001888PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001889"vars([object]) -> dictionary\n\
1890\n\
1891Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001892With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001893
Alex Martellia70b1912003-04-22 08:12:33 +00001894static PyObject*
1895builtin_sum(PyObject *self, PyObject *args)
1896{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 PyObject *seq;
1898 PyObject *result = NULL;
1899 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1902 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 iter = PyObject_GetIter(seq);
1905 if (iter == NULL)
1906 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 if (result == NULL) {
1909 result = PyLong_FromLong(0);
1910 if (result == NULL) {
1911 Py_DECREF(iter);
1912 return NULL;
1913 }
1914 } else {
1915 /* reject string values for 'start' parameter */
1916 if (PyUnicode_Check(result)) {
1917 PyErr_SetString(PyExc_TypeError,
1918 "sum() can't sum strings [use ''.join(seq) instead]");
1919 Py_DECREF(iter);
1920 return NULL;
1921 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001922 if (PyBytes_Check(result)) {
1923 PyErr_SetString(PyExc_TypeError,
1924 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05001925 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001926 return NULL;
1927 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001928 if (PyByteArray_Check(result)) {
1929 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001930 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 Py_DECREF(iter);
1932 return NULL;
1933 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001934
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001935 Py_INCREF(result);
1936 }
Alex Martellia70b1912003-04-22 08:12:33 +00001937
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001938#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1940 Assumes all inputs are the same type. If the assumption fails, default
1941 to the more general routine.
1942 */
1943 if (PyLong_CheckExact(result)) {
1944 int overflow;
1945 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1946 /* If this already overflowed, don't even enter the loop. */
1947 if (overflow == 0) {
1948 Py_DECREF(result);
1949 result = NULL;
1950 }
1951 while(result == NULL) {
1952 item = PyIter_Next(iter);
1953 if (item == NULL) {
1954 Py_DECREF(iter);
1955 if (PyErr_Occurred())
1956 return NULL;
1957 return PyLong_FromLong(i_result);
1958 }
1959 if (PyLong_CheckExact(item)) {
1960 long b = PyLong_AsLongAndOverflow(item, &overflow);
1961 long x = i_result + b;
1962 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
1963 i_result = x;
1964 Py_DECREF(item);
1965 continue;
1966 }
1967 }
1968 /* Either overflowed or is not an int. Restore real objects and process normally */
1969 result = PyLong_FromLong(i_result);
1970 temp = PyNumber_Add(result, item);
1971 Py_DECREF(result);
1972 Py_DECREF(item);
1973 result = temp;
1974 if (result == NULL) {
1975 Py_DECREF(iter);
1976 return NULL;
1977 }
1978 }
1979 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001980
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001981 if (PyFloat_CheckExact(result)) {
1982 double f_result = PyFloat_AS_DOUBLE(result);
1983 Py_DECREF(result);
1984 result = NULL;
1985 while(result == NULL) {
1986 item = PyIter_Next(iter);
1987 if (item == NULL) {
1988 Py_DECREF(iter);
1989 if (PyErr_Occurred())
1990 return NULL;
1991 return PyFloat_FromDouble(f_result);
1992 }
1993 if (PyFloat_CheckExact(item)) {
1994 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1995 f_result += PyFloat_AS_DOUBLE(item);
1996 PyFPE_END_PROTECT(f_result)
1997 Py_DECREF(item);
1998 continue;
1999 }
2000 if (PyLong_CheckExact(item)) {
2001 long value;
2002 int overflow;
2003 value = PyLong_AsLongAndOverflow(item, &overflow);
2004 if (!overflow) {
2005 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2006 f_result += (double)value;
2007 PyFPE_END_PROTECT(f_result)
2008 Py_DECREF(item);
2009 continue;
2010 }
2011 }
2012 result = PyFloat_FromDouble(f_result);
2013 temp = PyNumber_Add(result, item);
2014 Py_DECREF(result);
2015 Py_DECREF(item);
2016 result = temp;
2017 if (result == NULL) {
2018 Py_DECREF(iter);
2019 return NULL;
2020 }
2021 }
2022 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002023#endif
2024
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002025 for(;;) {
2026 item = PyIter_Next(iter);
2027 if (item == NULL) {
2028 /* error, or end-of-sequence */
2029 if (PyErr_Occurred()) {
2030 Py_DECREF(result);
2031 result = NULL;
2032 }
2033 break;
2034 }
2035 /* It's tempting to use PyNumber_InPlaceAdd instead of
2036 PyNumber_Add here, to avoid quadratic running time
2037 when doing 'sum(list_of_lists, [])'. However, this
2038 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002039
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002040 empty = []
2041 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002042
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002043 would change the value of empty. */
2044 temp = PyNumber_Add(result, item);
2045 Py_DECREF(result);
2046 Py_DECREF(item);
2047 result = temp;
2048 if (result == NULL)
2049 break;
2050 }
2051 Py_DECREF(iter);
2052 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002053}
2054
2055PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002056"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002057\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002058Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2059of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002060empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002061
2062
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002063static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002064builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002065{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002066 PyObject *inst;
2067 PyObject *cls;
2068 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002070 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2071 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002073 retval = PyObject_IsInstance(inst, cls);
2074 if (retval < 0)
2075 return NULL;
2076 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002077}
2078
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002079PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002080"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002081\n\
2082Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002083With a type as second argument, return whether that is the object's type.\n\
2084The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002085isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002086
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002087
2088static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002089builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002090{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 PyObject *derived;
2092 PyObject *cls;
2093 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002094
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002095 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2096 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002097
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 retval = PyObject_IsSubclass(derived, cls);
2099 if (retval < 0)
2100 return NULL;
2101 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002102}
2103
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002104PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002105"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002106\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002107Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2108When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2109is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002110
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002111
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002112typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 PyObject_HEAD
2114 Py_ssize_t tuplesize;
2115 PyObject *ittuple; /* tuple of iterators */
2116 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002117} zipobject;
2118
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002119static PyObject *
2120zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002121{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002122 zipobject *lz;
2123 Py_ssize_t i;
2124 PyObject *ittuple; /* tuple of iterators */
2125 PyObject *result;
2126 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002127
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002128 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2129 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002131 /* args must be a tuple */
2132 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002133
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002134 /* obtain iterators */
2135 ittuple = PyTuple_New(tuplesize);
2136 if (ittuple == NULL)
2137 return NULL;
2138 for (i=0; i < tuplesize; ++i) {
2139 PyObject *item = PyTuple_GET_ITEM(args, i);
2140 PyObject *it = PyObject_GetIter(item);
2141 if (it == NULL) {
2142 if (PyErr_ExceptionMatches(PyExc_TypeError))
2143 PyErr_Format(PyExc_TypeError,
2144 "zip argument #%zd must support iteration",
2145 i+1);
2146 Py_DECREF(ittuple);
2147 return NULL;
2148 }
2149 PyTuple_SET_ITEM(ittuple, i, it);
2150 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 /* create a result holder */
2153 result = PyTuple_New(tuplesize);
2154 if (result == NULL) {
2155 Py_DECREF(ittuple);
2156 return NULL;
2157 }
2158 for (i=0 ; i < tuplesize ; i++) {
2159 Py_INCREF(Py_None);
2160 PyTuple_SET_ITEM(result, i, Py_None);
2161 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 /* create zipobject structure */
2164 lz = (zipobject *)type->tp_alloc(type, 0);
2165 if (lz == NULL) {
2166 Py_DECREF(ittuple);
2167 Py_DECREF(result);
2168 return NULL;
2169 }
2170 lz->ittuple = ittuple;
2171 lz->tuplesize = tuplesize;
2172 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002175}
2176
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002177static void
2178zip_dealloc(zipobject *lz)
2179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 PyObject_GC_UnTrack(lz);
2181 Py_XDECREF(lz->ittuple);
2182 Py_XDECREF(lz->result);
2183 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002184}
2185
2186static int
2187zip_traverse(zipobject *lz, visitproc visit, void *arg)
2188{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 Py_VISIT(lz->ittuple);
2190 Py_VISIT(lz->result);
2191 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002192}
2193
2194static PyObject *
2195zip_next(zipobject *lz)
2196{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002197 Py_ssize_t i;
2198 Py_ssize_t tuplesize = lz->tuplesize;
2199 PyObject *result = lz->result;
2200 PyObject *it;
2201 PyObject *item;
2202 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002203
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 if (tuplesize == 0)
2205 return NULL;
2206 if (Py_REFCNT(result) == 1) {
2207 Py_INCREF(result);
2208 for (i=0 ; i < tuplesize ; i++) {
2209 it = PyTuple_GET_ITEM(lz->ittuple, i);
2210 item = (*Py_TYPE(it)->tp_iternext)(it);
2211 if (item == NULL) {
2212 Py_DECREF(result);
2213 return NULL;
2214 }
2215 olditem = PyTuple_GET_ITEM(result, i);
2216 PyTuple_SET_ITEM(result, i, item);
2217 Py_DECREF(olditem);
2218 }
2219 } else {
2220 result = PyTuple_New(tuplesize);
2221 if (result == NULL)
2222 return NULL;
2223 for (i=0 ; i < tuplesize ; i++) {
2224 it = PyTuple_GET_ITEM(lz->ittuple, i);
2225 item = (*Py_TYPE(it)->tp_iternext)(it);
2226 if (item == NULL) {
2227 Py_DECREF(result);
2228 return NULL;
2229 }
2230 PyTuple_SET_ITEM(result, i, item);
2231 }
2232 }
2233 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002234}
Barry Warsawbd599b52000-08-03 15:45:29 +00002235
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002236PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002237"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002238\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002239Return a zip object whose .__next__() method returns a tuple where\n\
2240the i-th element comes from the i-th iterable argument. The .__next__()\n\
2241method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002242is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002243
2244PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2246 "zip", /* tp_name */
2247 sizeof(zipobject), /* tp_basicsize */
2248 0, /* tp_itemsize */
2249 /* methods */
2250 (destructor)zip_dealloc, /* tp_dealloc */
2251 0, /* tp_print */
2252 0, /* tp_getattr */
2253 0, /* tp_setattr */
2254 0, /* tp_reserved */
2255 0, /* tp_repr */
2256 0, /* tp_as_number */
2257 0, /* tp_as_sequence */
2258 0, /* tp_as_mapping */
2259 0, /* tp_hash */
2260 0, /* tp_call */
2261 0, /* tp_str */
2262 PyObject_GenericGetAttr, /* tp_getattro */
2263 0, /* tp_setattro */
2264 0, /* tp_as_buffer */
2265 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2266 Py_TPFLAGS_BASETYPE, /* tp_flags */
2267 zip_doc, /* tp_doc */
2268 (traverseproc)zip_traverse, /* tp_traverse */
2269 0, /* tp_clear */
2270 0, /* tp_richcompare */
2271 0, /* tp_weaklistoffset */
2272 PyObject_SelfIter, /* tp_iter */
2273 (iternextfunc)zip_next, /* tp_iternext */
2274 0, /* tp_methods */
2275 0, /* tp_members */
2276 0, /* tp_getset */
2277 0, /* tp_base */
2278 0, /* tp_dict */
2279 0, /* tp_descr_get */
2280 0, /* tp_descr_set */
2281 0, /* tp_dictoffset */
2282 0, /* tp_init */
2283 PyType_GenericAlloc, /* tp_alloc */
2284 zip_new, /* tp_new */
2285 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002286};
Barry Warsawbd599b52000-08-03 15:45:29 +00002287
2288
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002290 {"__build_class__", (PyCFunction)builtin___build_class__,
2291 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2292 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2293 {"abs", builtin_abs, METH_O, abs_doc},
2294 {"all", builtin_all, METH_O, all_doc},
2295 {"any", builtin_any, METH_O, any_doc},
2296 {"ascii", builtin_ascii, METH_O, ascii_doc},
2297 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002298 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002299 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2300 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2301 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2302 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2303 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2304 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2305 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2306 {"format", builtin_format, METH_VARARGS, format_doc},
2307 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2308 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2309 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2310 {"hash", builtin_hash, METH_O, hash_doc},
2311 {"hex", builtin_hex, METH_O, hex_doc},
2312 {"id", builtin_id, METH_O, id_doc},
2313 {"input", builtin_input, METH_VARARGS, input_doc},
2314 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2315 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2316 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2317 {"len", builtin_len, METH_O, len_doc},
2318 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2319 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2320 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2321 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2322 {"oct", builtin_oct, METH_O, oct_doc},
2323 {"ord", builtin_ord, METH_O, ord_doc},
2324 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2325 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2326 {"repr", builtin_repr, METH_O, repr_doc},
2327 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2328 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2329 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2330 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2331 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2332 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002333};
2334
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002335PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002336"Built-in functions, exceptions, and other objects.\n\
2337\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002338Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002339
Martin v. Löwis1a214512008-06-11 05:26:20 +00002340static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002341 PyModuleDef_HEAD_INIT,
2342 "builtins",
2343 builtin_doc,
2344 -1, /* multiple "initialization" just copies the module dict. */
2345 builtin_methods,
2346 NULL,
2347 NULL,
2348 NULL,
2349 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002350};
2351
2352
Guido van Rossum25ce5661997-08-02 03:10:38 +00002353PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002354_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002355{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002356 PyObject *mod, *dict, *debug;
2357 mod = PyModule_Create(&builtinsmodule);
2358 if (mod == NULL)
2359 return NULL;
2360 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002361
Tim Peters7571a0f2003-03-23 17:52:28 +00002362#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 /* "builtins" exposes a number of statically allocated objects
2364 * that, before this code was added in 2.3, never showed up in
2365 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2366 * result, programs leaking references to None and False (etc)
2367 * couldn't be diagnosed by examining sys.getobjects(0).
2368 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002369#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2370#else
2371#define ADD_TO_ALL(OBJECT) (void)0
2372#endif
2373
Tim Peters4b7625e2001-09-13 21:37:17 +00002374#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2376 return NULL; \
2377 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002379 SETBUILTIN("None", Py_None);
2380 SETBUILTIN("Ellipsis", Py_Ellipsis);
2381 SETBUILTIN("NotImplemented", Py_NotImplemented);
2382 SETBUILTIN("False", Py_False);
2383 SETBUILTIN("True", Py_True);
2384 SETBUILTIN("bool", &PyBool_Type);
2385 SETBUILTIN("memoryview", &PyMemoryView_Type);
2386 SETBUILTIN("bytearray", &PyByteArray_Type);
2387 SETBUILTIN("bytes", &PyBytes_Type);
2388 SETBUILTIN("classmethod", &PyClassMethod_Type);
2389 SETBUILTIN("complex", &PyComplex_Type);
2390 SETBUILTIN("dict", &PyDict_Type);
2391 SETBUILTIN("enumerate", &PyEnum_Type);
2392 SETBUILTIN("filter", &PyFilter_Type);
2393 SETBUILTIN("float", &PyFloat_Type);
2394 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2395 SETBUILTIN("property", &PyProperty_Type);
2396 SETBUILTIN("int", &PyLong_Type);
2397 SETBUILTIN("list", &PyList_Type);
2398 SETBUILTIN("map", &PyMap_Type);
2399 SETBUILTIN("object", &PyBaseObject_Type);
2400 SETBUILTIN("range", &PyRange_Type);
2401 SETBUILTIN("reversed", &PyReversed_Type);
2402 SETBUILTIN("set", &PySet_Type);
2403 SETBUILTIN("slice", &PySlice_Type);
2404 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2405 SETBUILTIN("str", &PyUnicode_Type);
2406 SETBUILTIN("super", &PySuper_Type);
2407 SETBUILTIN("tuple", &PyTuple_Type);
2408 SETBUILTIN("type", &PyType_Type);
2409 SETBUILTIN("zip", &PyZip_Type);
2410 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2411 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2412 Py_XDECREF(debug);
2413 return NULL;
2414 }
2415 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002418#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002419#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002420}