blob: 85f207b68ee3590cfe964dfc0d9b13a2c534d604 [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
Mark Hammond26cffde42001-05-14 12:17:34 +000014/* The default encoding used by the platform file system APIs
15 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000016
17 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
18 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000019*/
Steve Dowercc16be82016-09-08 10:35:16 -070020#if defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000022int Py_HasFileSystemDefaultEncoding = 1;
Steve Dowercc16be82016-09-08 10:35:16 -070023#elif defined(MS_WINDOWS)
24/* may be changed by initfsencoding(), but should never be free()d */
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000025const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020027#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000028const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000030#endif
Steve Dowercc16be82016-09-08 10:35:16 -070031const char *Py_FileSystemDefaultEncodeErrors = "surrogateescape";
Mark Hammondef8b6542001-05-13 08:04:26 +000032
Victor Stinnerbd303c12013-11-07 23:07:29 +010033_Py_IDENTIFIER(__builtins__);
34_Py_IDENTIFIER(__dict__);
35_Py_IDENTIFIER(__prepare__);
36_Py_IDENTIFIER(__round__);
37_Py_IDENTIFIER(encoding);
38_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020039_Py_IDENTIFIER(fileno);
40_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010041_Py_IDENTIFIER(metaclass);
42_Py_IDENTIFIER(sort);
43_Py_IDENTIFIER(stdin);
44_Py_IDENTIFIER(stdout);
45_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020046
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030047#include "clinic/bltinmodule.c.h"
48
Nick Coghlanf9e227e2014-08-17 14:01:19 +100049/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +000050static PyObject *
Victor Stinner773dc6d2017-01-16 23:46:26 +010051builtin___build_class__(PyObject *self, PyObject **args, Py_ssize_t nargs,
52 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +000053{
Nick Coghlan19d24672016-12-05 16:47:55 +100054 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns;
55 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +010056 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +000057
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000058 if (nargs < 2) {
59 PyErr_SetString(PyExc_TypeError,
60 "__build_class__: not enough arguments");
61 return NULL;
62 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010063 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -050064 if (!PyFunction_Check(func)) {
65 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -050066 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -050067 return NULL;
68 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010069 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000070 if (!PyUnicode_Check(name)) {
71 PyErr_SetString(PyExc_TypeError,
72 "__build_class__: name is not a string");
73 return NULL;
74 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010075 bases = _PyStack_AsTupleSlice(args, nargs, 2, nargs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000076 if (bases == NULL)
77 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000078
Victor Stinner773dc6d2017-01-16 23:46:26 +010079 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000080 meta = NULL;
81 mkw = NULL;
82 }
83 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +010084 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000085 if (mkw == NULL) {
86 Py_DECREF(bases);
87 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000088 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010089
Victor Stinnerae9f1612013-11-06 22:46:51 +010090 meta = _PyDict_GetItemId(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000091 if (meta != NULL) {
92 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +010093 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000094 Py_DECREF(meta);
95 Py_DECREF(mkw);
96 Py_DECREF(bases);
97 return NULL;
98 }
Nick Coghlande31b192011-10-23 22:04:16 +100099 /* metaclass is explicitly given, check if it's indeed a class */
100 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 }
102 }
103 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000104 /* if there are no bases, use type: */
105 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000106 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000107 }
108 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000109 else {
110 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
111 meta = (PyObject *) (base0->ob_type);
112 }
113 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000114 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000115 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000116
Nick Coghlande31b192011-10-23 22:04:16 +1000117 if (isclass) {
118 /* meta is really a class, so check for a more derived
119 metaclass, or possible metaclass conflicts: */
120 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
121 bases);
122 if (winner == NULL) {
123 Py_DECREF(meta);
124 Py_XDECREF(mkw);
125 Py_DECREF(bases);
126 return NULL;
127 }
128 if (winner != meta) {
129 Py_DECREF(meta);
130 meta = winner;
131 Py_INCREF(meta);
132 }
133 }
134 /* else: meta is not a class, so we cannot do the metaclass
135 calculation, so we will use the explicitly given object as it is */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200136 prep = _PyObject_GetAttrId(meta, &PyId___prepare__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000137 if (prep == NULL) {
138 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
139 PyErr_Clear();
Eric Snow4f29e752016-09-08 15:11:11 -0700140 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 }
142 else {
143 Py_DECREF(meta);
144 Py_XDECREF(mkw);
145 Py_DECREF(bases);
146 return NULL;
147 }
148 }
149 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200150 PyObject *pargs[2] = {name, bases};
151 ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 Py_DECREF(prep);
153 }
154 if (ns == NULL) {
155 Py_DECREF(meta);
156 Py_XDECREF(mkw);
157 Py_DECREF(bases);
158 return NULL;
159 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000160 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
Benjamin Petersone8e14592013-05-16 14:37:25 -0500161 NULL, 0, NULL, 0, NULL, 0, NULL,
162 PyFunction_GET_CLOSURE(func));
Nick Coghlan19d24672016-12-05 16:47:55 +1000163 if (cell != NULL) {
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200164 PyObject *margs[3] = {name, bases, ns};
165 cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000166 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
167 PyObject *cell_cls = PyCell_GET(cell);
168 if (cell_cls != cls) {
169 /* TODO: In 3.7, DeprecationWarning will become RuntimeError.
170 * At that point, cell_error won't be needed.
171 */
172 int cell_error;
173 if (cell_cls == NULL) {
174 const char *msg =
175 "__class__ not set defining %.200R as %.200R. "
176 "Was __classcell__ propagated to type.__new__?";
177 cell_error = PyErr_WarnFormat(
178 PyExc_DeprecationWarning, 1, msg, name, cls);
179 } else {
180 const char *msg =
181 "__class__ set to %.200R defining %.200R as %.200R";
182 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
183 cell_error = 1;
184 }
185 if (cell_error) {
186 Py_DECREF(cls);
187 cls = NULL;
188 goto error;
189 } else {
190 /* Fill in the cell, since type.__new__ didn't do it */
191 PyCell_Set(cell, cls);
192 }
193 }
194 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000196error:
197 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000198 Py_DECREF(ns);
199 Py_DECREF(meta);
200 Py_XDECREF(mkw);
201 Py_DECREF(bases);
202 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000203}
204
205PyDoc_STRVAR(build_class_doc,
206"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
207\n\
208Internal helper function used by the class statement.");
209
210static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000211builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000212{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000213 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
214 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400215 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400216 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000217
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400218 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000219 kwlist, &name, &globals, &locals, &fromlist, &level))
220 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400221 return PyImport_ImportModuleLevelObject(name, globals, locals,
222 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000223}
224
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000225PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400226"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000227\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000228Import a module. Because this function is meant for use by the Python\n\
229interpreter and not for general use it is better to use\n\
230importlib.import_module() to programmatically import a module.\n\
231\n\
232The globals argument is only used to determine the context;\n\
233they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000234should be a list of names to emulate ``from name import ...'', or an\n\
235empty list to emulate ``import name''.\n\
236When importing a module from a package, note that __import__('A.B', ...)\n\
237returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000238fromlist is not empty. Level is used to determine whether to perform \n\
Brett Cannon722d3ae2012-07-30 17:45:54 -0400239absolute or relative imports. 0 is absolute while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000240is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000241
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000242
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000243/*[clinic input]
244abs as builtin_abs
245
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300246 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000247 /
248
249Return the absolute value of the argument.
250[clinic start generated code]*/
251
Guido van Rossum79f25d91997-04-29 20:08:16 +0000252static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300253builtin_abs(PyObject *module, PyObject *x)
254/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000255{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000256 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000257}
258
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000259/*[clinic input]
260all as builtin_all
261
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300262 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000263 /
264
265Return True if bool(x) is True for all values x in the iterable.
266
267If the iterable is empty, return True.
268[clinic start generated code]*/
269
Raymond Hettinger96229b12005-03-11 06:49:40 +0000270static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300271builtin_all(PyObject *module, PyObject *iterable)
272/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000273{
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
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000278 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 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 == 0) {
294 Py_DECREF(it);
295 Py_RETURN_FALSE;
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_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000306}
307
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000308/*[clinic input]
309any as builtin_any
310
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300311 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000312 /
313
314Return True if bool(x) is True for any x in the iterable.
315
316If the iterable is empty, return False.
317[clinic start generated code]*/
318
Raymond Hettinger96229b12005-03-11 06:49:40 +0000319static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300320builtin_any(PyObject *module, PyObject *iterable)
321/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000322{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000323 PyObject *it, *item;
324 PyObject *(*iternext)(PyObject *);
325 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000326
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000327 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000328 if (it == NULL)
329 return NULL;
330 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000331
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 for (;;) {
333 item = iternext(it);
334 if (item == NULL)
335 break;
336 cmp = PyObject_IsTrue(item);
337 Py_DECREF(item);
338 if (cmp < 0) {
339 Py_DECREF(it);
340 return NULL;
341 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400342 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 Py_DECREF(it);
344 Py_RETURN_TRUE;
345 }
346 }
347 Py_DECREF(it);
348 if (PyErr_Occurred()) {
349 if (PyErr_ExceptionMatches(PyExc_StopIteration))
350 PyErr_Clear();
351 else
352 return NULL;
353 }
354 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000355}
356
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000357/*[clinic input]
358ascii as builtin_ascii
359
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300360 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000361 /
362
363Return an ASCII-only representation of an object.
364
365As repr(), return a string containing a printable representation of an
366object, but escape the non-ASCII characters in the string returned by
367repr() using \\x, \\u or \\U escapes. This generates a string similar
368to that returned by repr() in Python 2.
369[clinic start generated code]*/
370
Georg Brandl559e5d72008-06-11 18:37:52 +0000371static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300372builtin_ascii(PyObject *module, PyObject *obj)
373/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000374{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000375 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000376}
377
Georg Brandl559e5d72008-06-11 18:37:52 +0000378
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000379/*[clinic input]
380bin as builtin_bin
381
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300382 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000383 /
384
385Return the binary representation of an integer.
386
387 >>> bin(2796202)
388 '0b1010101010101010101010'
389[clinic start generated code]*/
390
Guido van Rossum79f25d91997-04-29 20:08:16 +0000391static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300392builtin_bin(PyObject *module, PyObject *number)
393/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000394{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000395 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000396}
397
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000398
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000399/*[clinic input]
400callable as builtin_callable
401
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300402 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000403 /
404
405Return whether the object is callable (i.e., some kind of function).
406
407Note that classes are callable, as are instances of classes with a
408__call__() method.
409[clinic start generated code]*/
410
Antoine Pitroue71362d2010-11-27 22:00:11 +0000411static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300412builtin_callable(PyObject *module, PyObject *obj)
413/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000414{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000415 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000416}
417
Antoine Pitroue71362d2010-11-27 22:00:11 +0000418
Raymond Hettinger17301e92008-03-13 00:19:26 +0000419typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 PyObject_HEAD
421 PyObject *func;
422 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000423} filterobject;
424
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000425static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000426filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000427{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428 PyObject *func, *seq;
429 PyObject *it;
430 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000431
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300432 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000433 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
436 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000437
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000438 /* Get iterator. */
439 it = PyObject_GetIter(seq);
440 if (it == NULL)
441 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000442
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000443 /* create filterobject structure */
444 lz = (filterobject *)type->tp_alloc(type, 0);
445 if (lz == NULL) {
446 Py_DECREF(it);
447 return NULL;
448 }
449 Py_INCREF(func);
450 lz->func = func;
451 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000453 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000454}
455
456static void
457filter_dealloc(filterobject *lz)
458{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 PyObject_GC_UnTrack(lz);
460 Py_XDECREF(lz->func);
461 Py_XDECREF(lz->it);
462 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000463}
464
465static int
466filter_traverse(filterobject *lz, visitproc visit, void *arg)
467{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 Py_VISIT(lz->it);
469 Py_VISIT(lz->func);
470 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000471}
472
473static PyObject *
474filter_next(filterobject *lz)
475{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000476 PyObject *item;
477 PyObject *it = lz->it;
478 long ok;
479 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400480 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000482 iternext = *Py_TYPE(it)->tp_iternext;
483 for (;;) {
484 item = iternext(it);
485 if (item == NULL)
486 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000487
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400488 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 ok = PyObject_IsTrue(item);
490 } else {
491 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100492 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 if (good == NULL) {
494 Py_DECREF(item);
495 return NULL;
496 }
497 ok = PyObject_IsTrue(good);
498 Py_DECREF(good);
499 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200500 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 return item;
502 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200503 if (ok < 0)
504 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000505 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000506}
507
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000508static PyObject *
509filter_reduce(filterobject *lz)
510{
511 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
512}
513
514PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
515
516static PyMethodDef filter_methods[] = {
517 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
518 {NULL, NULL} /* sentinel */
519};
520
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000521PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000522"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000523\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000524Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000525is true. If function is None, return the items that are true.");
526
527PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 PyVarObject_HEAD_INIT(&PyType_Type, 0)
529 "filter", /* tp_name */
530 sizeof(filterobject), /* tp_basicsize */
531 0, /* tp_itemsize */
532 /* methods */
533 (destructor)filter_dealloc, /* tp_dealloc */
534 0, /* tp_print */
535 0, /* tp_getattr */
536 0, /* tp_setattr */
537 0, /* tp_reserved */
538 0, /* tp_repr */
539 0, /* tp_as_number */
540 0, /* tp_as_sequence */
541 0, /* tp_as_mapping */
542 0, /* tp_hash */
543 0, /* tp_call */
544 0, /* tp_str */
545 PyObject_GenericGetAttr, /* tp_getattro */
546 0, /* tp_setattro */
547 0, /* tp_as_buffer */
548 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
549 Py_TPFLAGS_BASETYPE, /* tp_flags */
550 filter_doc, /* tp_doc */
551 (traverseproc)filter_traverse, /* tp_traverse */
552 0, /* tp_clear */
553 0, /* tp_richcompare */
554 0, /* tp_weaklistoffset */
555 PyObject_SelfIter, /* tp_iter */
556 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000557 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 0, /* tp_members */
559 0, /* tp_getset */
560 0, /* tp_base */
561 0, /* tp_dict */
562 0, /* tp_descr_get */
563 0, /* tp_descr_set */
564 0, /* tp_dictoffset */
565 0, /* tp_init */
566 PyType_GenericAlloc, /* tp_alloc */
567 filter_new, /* tp_new */
568 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000569};
570
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000571
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000572/*[clinic input]
573format as builtin_format
574
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300575 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000576 format_spec: unicode(c_default="NULL") = ''
577 /
578
579Return value.__format__(format_spec)
580
Amit Kumar2e6bb442017-05-29 06:32:26 +0530581format_spec defaults to the empty string.
582See the Format Specification Mini-Language section of help('FORMATTING') for
583details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000584[clinic start generated code]*/
585
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000586static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300587builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530588/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000589{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000590 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000591}
592
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000593/*[clinic input]
594chr as builtin_chr
595
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300596 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000597 /
598
599Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
600[clinic start generated code]*/
601
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000602static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300603builtin_chr_impl(PyObject *module, int i)
604/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000605{
606 return PyUnicode_FromOrdinal(i);
607}
Guido van Rossum09095f32000-03-10 23:00:52 +0000608
609
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200610static const char *
Martin Pantereeb896c2015-11-07 02:32:21 +0000611source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000612{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200613 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 Py_ssize_t size;
Martin Pantereeb896c2015-11-07 02:32:21 +0000615 Py_buffer view;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000616
Martin Pantereeb896c2015-11-07 02:32:21 +0000617 *cmd_copy = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 if (PyUnicode_Check(cmd)) {
619 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200620 str = PyUnicode_AsUTF8AndSize(cmd, &size);
621 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 return NULL;
623 }
Martin Pantereeb896c2015-11-07 02:32:21 +0000624 else if (PyBytes_Check(cmd)) {
625 str = PyBytes_AS_STRING(cmd);
626 size = PyBytes_GET_SIZE(cmd);
627 }
628 else if (PyByteArray_Check(cmd)) {
629 str = PyByteArray_AS_STRING(cmd);
630 size = PyByteArray_GET_SIZE(cmd);
631 }
632 else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
633 /* Copy to NUL-terminated buffer. */
634 *cmd_copy = PyBytes_FromStringAndSize(
635 (const char *)view.buf, view.len);
636 PyBuffer_Release(&view);
637 if (*cmd_copy == NULL) {
638 return NULL;
639 }
640 str = PyBytes_AS_STRING(*cmd_copy);
641 size = PyBytes_GET_SIZE(*cmd_copy);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200642 }
643 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 PyErr_Format(PyExc_TypeError,
645 "%s() arg 1 must be a %s object",
646 funcname, what);
647 return NULL;
648 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200649
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200650 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300651 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000652 "source code string cannot contain null bytes");
Martin Pantereeb896c2015-11-07 02:32:21 +0000653 Py_CLEAR(*cmd_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 return NULL;
655 }
656 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000657}
658
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000659/*[clinic input]
660compile as builtin_compile
661
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300662 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000663 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300664 mode: str
665 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200666 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300667 optimize: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000668
669Compile source into a code object that can be executed by exec() or eval().
670
671The source code may represent a Python module, statement or expression.
672The filename will be used for run-time error messages.
673The mode must be 'exec' to compile a module, 'single' to compile a
674single (interactive) statement, or 'eval' to compile an expression.
675The flags argument, if present, controls which future statements influence
676the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300677The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000678the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300679compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000680in addition to any features explicitly specified.
681[clinic start generated code]*/
682
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000683static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300684builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
685 const char *mode, int flags, int dont_inherit,
686 int optimize)
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200687/*[clinic end generated code: output=1fa176e33452bb63 input=0ff726f595eb9fcd]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000688{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000689 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200690 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000691 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 int is_ast;
693 PyCompilerFlags cf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000695 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000697 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Tim Peters6cd6a822001-08-17 22:11:27 +0000698
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000699 if (flags &
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000700 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
701 {
702 PyErr_SetString(PyExc_ValueError,
703 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000704 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 }
706 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000707
Georg Brandl8334fd92010-12-04 10:26:46 +0000708 if (optimize < -1 || optimize > 2) {
709 PyErr_SetString(PyExc_ValueError,
710 "compile(): invalid optimize value");
711 goto error;
712 }
713
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000714 if (!dont_inherit) {
715 PyEval_MergeCompilerFlags(&cf);
716 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000717
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000718 if (strcmp(mode, "exec") == 0)
719 compile_mode = 0;
720 else if (strcmp(mode, "eval") == 0)
721 compile_mode = 1;
722 else if (strcmp(mode, "single") == 0)
723 compile_mode = 2;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 else {
725 PyErr_SetString(PyExc_ValueError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000726 "compile() mode must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000727 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000729
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000730 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000731 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000732 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000734 if (flags & PyCF_ONLY_AST) {
735 Py_INCREF(source);
736 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 }
738 else {
739 PyArena *arena;
740 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000741
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000742 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200743 if (arena == NULL)
744 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000745 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 if (mod == NULL) {
747 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000748 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500750 if (!PyAST_Validate(mod)) {
751 PyArena_Free(arena);
752 goto error;
753 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200754 result = (PyObject*)PyAST_CompileObject(mod, filename,
755 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 PyArena_Free(arena);
757 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000758 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000759 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000760
Martin Panter61d6e4a2015-11-07 02:56:11 +0000761 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000762 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000763 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000764
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000765 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000766 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000767 goto finally;
768
769error:
770 result = NULL;
771finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200772 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000773 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000774}
775
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000776/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000777static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000778builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000779{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
783 return NULL;
784 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000785}
786
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000787PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000788"dir([object]) -> list of strings\n"
789"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000790"If called without an argument, return the names in the current scope.\n"
791"Else, return an alphabetized list of names comprising (some of) the attributes\n"
792"of the given object, and of attributes reachable from it.\n"
793"If the object supplies a method named __dir__, it will be used; otherwise\n"
794"the default dir() logic is used and returns:\n"
795" for a module object: the module's attributes.\n"
796" for a class object: its attributes, and recursively the attributes\n"
797" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000798" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000799" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000800
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000801/*[clinic input]
802divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000803
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300804 x: object
805 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000806 /
807
Zachary Ware7f227d92016-04-28 14:39:50 -0500808Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000809[clinic start generated code]*/
810
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000811static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300812builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
813/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000814{
815 return PyNumber_Divmod(x, y);
816}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000817
818
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000819/*[clinic input]
820eval as builtin_eval
821
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300822 source: object
823 globals: object = None
824 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000825 /
826
827Evaluate the given source in the context of globals and locals.
828
829The source may be a string representing a Python expression
830or a code object as returned by compile().
831The globals must be a dictionary and locals can be any mapping,
832defaulting to the current globals and locals.
833If only globals is given, locals defaults to it.
834[clinic start generated code]*/
835
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000836static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300837builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400838 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300839/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000840{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000841 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200842 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000843 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000844
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000845 if (locals != Py_None && !PyMapping_Check(locals)) {
846 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
847 return NULL;
848 }
849 if (globals != Py_None && !PyDict_Check(globals)) {
850 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
851 "globals must be a real dict; try eval(expr, {}, mapping)"
852 : "globals must be a dict");
853 return NULL;
854 }
855 if (globals == Py_None) {
856 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100857 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100859 if (locals == NULL)
860 return NULL;
861 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 }
863 else if (locals == Py_None)
864 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000865
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 if (globals == NULL || locals == NULL) {
867 PyErr_SetString(PyExc_TypeError,
868 "eval must be given globals and locals "
869 "when called without a frame");
870 return NULL;
871 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000872
Victor Stinnerb44562b2013-11-06 19:03:11 +0100873 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
874 if (_PyDict_SetItemId(globals, &PyId___builtins__,
875 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 return NULL;
877 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000878
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000879 if (PyCode_Check(source)) {
880 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 PyErr_SetString(PyExc_TypeError,
882 "code object passed to eval() may not contain free variables");
883 return NULL;
884 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000885 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000887
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000888 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Martin Panter61d6e4a2015-11-07 02:56:11 +0000889 str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 if (str == NULL)
891 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 while (*str == ' ' || *str == '\t')
894 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 (void)PyEval_MergeCompilerFlags(&cf);
897 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000898 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000900}
901
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000902/*[clinic input]
903exec as builtin_exec
904
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300905 source: object
906 globals: object = None
907 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000908 /
909
910Execute the given source in the context of globals and locals.
911
912The source may be a string representing one or more Python statements
913or a code object as returned by compile().
914The globals must be a dictionary and locals can be any mapping,
915defaulting to the current globals and locals.
916If only globals is given, locals defaults to it.
917[clinic start generated code]*/
918
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000919static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300920builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400921 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300922/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +0000923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +0000925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 if (globals == Py_None) {
927 globals = PyEval_GetGlobals();
928 if (locals == Py_None) {
929 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100930 if (locals == NULL)
931 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 }
933 if (!globals || !locals) {
934 PyErr_SetString(PyExc_SystemError,
935 "globals and locals cannot be NULL");
936 return NULL;
937 }
938 }
939 else if (locals == Py_None)
940 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000943 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 globals->ob_type->tp_name);
945 return NULL;
946 }
947 if (!PyMapping_Check(locals)) {
948 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000949 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 locals->ob_type->tp_name);
951 return NULL;
952 }
Victor Stinnerb44562b2013-11-06 19:03:11 +0100953 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
954 if (_PyDict_SetItemId(globals, &PyId___builtins__,
955 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 return NULL;
957 }
958
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000959 if (PyCode_Check(source)) {
960 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961 PyErr_SetString(PyExc_TypeError,
962 "code object passed to exec() may not "
963 "contain free variables");
964 return NULL;
965 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000966 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 }
968 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +0000969 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200970 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 PyCompilerFlags cf;
972 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000973 str = source_as_string(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +0000974 "string, bytes or code", &cf,
975 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 if (str == NULL)
977 return NULL;
978 if (PyEval_MergeCompilerFlags(&cf))
979 v = PyRun_StringFlags(str, Py_file_input, globals,
980 locals, &cf);
981 else
982 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000983 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 }
985 if (v == NULL)
986 return NULL;
987 Py_DECREF(v);
988 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000989}
990
Georg Brandl7cae87c2006-09-06 06:51:57 +0000991
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000992/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000993static PyObject *
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +0300994builtin_getattr(PyObject *self, PyObject **args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +0000995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000996 PyObject *v, *result, *dflt = NULL;
997 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000998
Sylvain96c7c062017-06-15 17:05:23 +0200999 if (!_PyArg_UnpackStack(args, nargs, "getattr", 2, 3, &v, &name, &dflt))
1000 return NULL;
1001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 if (!PyUnicode_Check(name)) {
1003 PyErr_SetString(PyExc_TypeError,
1004 "getattr(): attribute name must be string");
1005 return NULL;
1006 }
1007 result = PyObject_GetAttr(v, name);
1008 if (result == NULL && dflt != NULL &&
1009 PyErr_ExceptionMatches(PyExc_AttributeError))
1010 {
1011 PyErr_Clear();
1012 Py_INCREF(dflt);
1013 result = dflt;
1014 }
1015 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001016}
1017
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001018PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001019"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001020\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001021Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1022When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001023exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001024
1025
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001026/*[clinic input]
1027globals as builtin_globals
1028
1029Return the dictionary containing the current scope's global variables.
1030
1031NOTE: Updates to this dictionary *will* affect name lookups in the current
1032global scope and vice-versa.
1033[clinic start generated code]*/
1034
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001035static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001036builtin_globals_impl(PyObject *module)
1037/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001038{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 d = PyEval_GetGlobals();
1042 Py_XINCREF(d);
1043 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001044}
1045
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001046
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001047/*[clinic input]
1048hasattr as builtin_hasattr
1049
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001050 obj: object
1051 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001052 /
1053
1054Return whether the object has an attribute with the given name.
1055
1056This is done by calling getattr(obj, name) and catching AttributeError.
1057[clinic start generated code]*/
1058
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001059static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001060builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1061/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001062{
1063 PyObject *v;
1064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 if (!PyUnicode_Check(name)) {
1066 PyErr_SetString(PyExc_TypeError,
1067 "hasattr(): attribute name must be string");
1068 return NULL;
1069 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001070 v = PyObject_GetAttr(obj, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001072 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +00001074 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 }
Benjamin Peterson17689992010-08-24 03:26:23 +00001076 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 }
1078 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001079 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001080}
1081
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001082
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001083/* AC: gdb's integration with CPython relies on builtin_id having
1084 * the *exact* parameter names of "self" and "v", so we ensure we
1085 * preserve those name rather than using the AC defaults.
1086 */
1087/*[clinic input]
1088id as builtin_id
1089
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001090 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001091 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001092 /
1093
1094Return the identity of an object.
1095
1096This is guaranteed to be unique among simultaneously existing objects.
1097(CPython uses the object's memory address.)
1098[clinic start generated code]*/
1099
Guido van Rossum79f25d91997-04-29 20:08:16 +00001100static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001101builtin_id(PyModuleDef *self, PyObject *v)
1102/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001103{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001104 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001105}
1106
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001107
Raymond Hettingera6c60372008-03-13 01:26:19 +00001108/* map object ************************************************************/
1109
1110typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 PyObject_HEAD
1112 PyObject *iters;
1113 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001114} mapobject;
1115
Guido van Rossum79f25d91997-04-29 20:08:16 +00001116static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001117map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001118{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 PyObject *it, *iters, *func;
1120 mapobject *lz;
1121 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001122
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001123 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 numargs = PyTuple_Size(args);
1127 if (numargs < 2) {
1128 PyErr_SetString(PyExc_TypeError,
1129 "map() must have at least two arguments.");
1130 return NULL;
1131 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001133 iters = PyTuple_New(numargs-1);
1134 if (iters == NULL)
1135 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 for (i=1 ; i<numargs ; i++) {
1138 /* Get iterator. */
1139 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1140 if (it == NULL) {
1141 Py_DECREF(iters);
1142 return NULL;
1143 }
1144 PyTuple_SET_ITEM(iters, i-1, it);
1145 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 /* create mapobject structure */
1148 lz = (mapobject *)type->tp_alloc(type, 0);
1149 if (lz == NULL) {
1150 Py_DECREF(iters);
1151 return NULL;
1152 }
1153 lz->iters = iters;
1154 func = PyTuple_GET_ITEM(args, 0);
1155 Py_INCREF(func);
1156 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001157
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001159}
1160
1161static void
1162map_dealloc(mapobject *lz)
1163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 PyObject_GC_UnTrack(lz);
1165 Py_XDECREF(lz->iters);
1166 Py_XDECREF(lz->func);
1167 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001168}
1169
1170static int
1171map_traverse(mapobject *lz, visitproc visit, void *arg)
1172{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 Py_VISIT(lz->iters);
1174 Py_VISIT(lz->func);
1175 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001176}
1177
1178static PyObject *
1179map_next(mapobject *lz)
1180{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001181 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001182 PyObject **stack;
1183 Py_ssize_t niters, nargs, i;
1184 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001185
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001186 niters = PyTuple_GET_SIZE(lz->iters);
1187 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1188 stack = small_stack;
1189 }
1190 else {
1191 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1192 if (stack == NULL) {
1193 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 return NULL;
1195 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001197
1198 nargs = 0;
1199 for (i=0; i < niters; i++) {
1200 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1201 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1202 if (val == NULL) {
1203 goto exit;
1204 }
1205 stack[i] = val;
1206 nargs++;
1207 }
1208
1209 result = _PyObject_FastCall(lz->func, stack, nargs);
1210
1211exit:
1212 for (i=0; i < nargs; i++) {
1213 Py_DECREF(stack[i]);
1214 }
1215 if (stack != small_stack) {
1216 PyMem_Free(stack);
1217 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001219}
1220
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001221static PyObject *
1222map_reduce(mapobject *lz)
1223{
1224 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1225 PyObject *args = PyTuple_New(numargs+1);
1226 Py_ssize_t i;
1227 if (args == NULL)
1228 return NULL;
1229 Py_INCREF(lz->func);
1230 PyTuple_SET_ITEM(args, 0, lz->func);
1231 for (i = 0; i<numargs; i++){
1232 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1233 Py_INCREF(it);
1234 PyTuple_SET_ITEM(args, i+1, it);
1235 }
1236
1237 return Py_BuildValue("ON", Py_TYPE(lz), args);
1238}
1239
1240static PyMethodDef map_methods[] = {
1241 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1242 {NULL, NULL} /* sentinel */
1243};
1244
1245
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001247"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001248\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001249Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001251
Raymond Hettingera6c60372008-03-13 01:26:19 +00001252PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1254 "map", /* tp_name */
1255 sizeof(mapobject), /* tp_basicsize */
1256 0, /* tp_itemsize */
1257 /* methods */
1258 (destructor)map_dealloc, /* tp_dealloc */
1259 0, /* tp_print */
1260 0, /* tp_getattr */
1261 0, /* tp_setattr */
1262 0, /* tp_reserved */
1263 0, /* tp_repr */
1264 0, /* tp_as_number */
1265 0, /* tp_as_sequence */
1266 0, /* tp_as_mapping */
1267 0, /* tp_hash */
1268 0, /* tp_call */
1269 0, /* tp_str */
1270 PyObject_GenericGetAttr, /* tp_getattro */
1271 0, /* tp_setattro */
1272 0, /* tp_as_buffer */
1273 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1274 Py_TPFLAGS_BASETYPE, /* tp_flags */
1275 map_doc, /* tp_doc */
1276 (traverseproc)map_traverse, /* tp_traverse */
1277 0, /* tp_clear */
1278 0, /* tp_richcompare */
1279 0, /* tp_weaklistoffset */
1280 PyObject_SelfIter, /* tp_iter */
1281 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001282 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 0, /* tp_members */
1284 0, /* tp_getset */
1285 0, /* tp_base */
1286 0, /* tp_dict */
1287 0, /* tp_descr_get */
1288 0, /* tp_descr_set */
1289 0, /* tp_dictoffset */
1290 0, /* tp_init */
1291 PyType_GenericAlloc, /* tp_alloc */
1292 map_new, /* tp_new */
1293 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001294};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001295
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001296
1297/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001298static PyObject *
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03001299builtin_next(PyObject *self, PyObject **args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001300{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 PyObject *it, *res;
1302 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001303
Sylvain96c7c062017-06-15 17:05:23 +02001304 if (!_PyArg_UnpackStack(args, nargs, "next", 1, 2, &it, &def))
1305 return NULL;
1306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001307 if (!PyIter_Check(it)) {
1308 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001309 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 it->ob_type->tp_name);
1311 return NULL;
1312 }
1313
1314 res = (*it->ob_type->tp_iternext)(it);
1315 if (res != NULL) {
1316 return res;
1317 } else if (def != NULL) {
1318 if (PyErr_Occurred()) {
1319 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1320 return NULL;
1321 PyErr_Clear();
1322 }
1323 Py_INCREF(def);
1324 return def;
1325 } else if (PyErr_Occurred()) {
1326 return NULL;
1327 } else {
1328 PyErr_SetNone(PyExc_StopIteration);
1329 return NULL;
1330 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001331}
1332
1333PyDoc_STRVAR(next_doc,
1334"next(iterator[, default])\n\
1335\n\
1336Return the next item from the iterator. If default is given and the iterator\n\
1337is exhausted, it is returned instead of raising StopIteration.");
1338
1339
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001340/*[clinic input]
1341setattr as builtin_setattr
1342
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001343 obj: object
1344 name: object
1345 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001346 /
1347
1348Sets the named attribute on the given object to the specified value.
1349
1350setattr(x, 'y', v) is equivalent to ``x.y = v''
1351[clinic start generated code]*/
1352
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001353static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001354builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001355 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001356/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001357{
1358 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001359 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001360 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001361}
1362
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001363
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001364/*[clinic input]
1365delattr as builtin_delattr
1366
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001367 obj: object
1368 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001369 /
1370
1371Deletes the named attribute from the given object.
1372
1373delattr(x, 'y') is equivalent to ``del x.y''
1374[clinic start generated code]*/
1375
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001376static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001377builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1378/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001379{
1380 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001381 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001382 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001383}
1384
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001385
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001386/*[clinic input]
1387hash as builtin_hash
1388
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001389 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001390 /
1391
1392Return the hash value for the given object.
1393
1394Two objects that compare equal must also have the same hash value, but the
1395reverse is not necessarily true.
1396[clinic start generated code]*/
1397
Guido van Rossum79f25d91997-04-29 20:08:16 +00001398static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001399builtin_hash(PyObject *module, PyObject *obj)
1400/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001401{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001402 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001403
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001404 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001405 if (x == -1)
1406 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001407 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001408}
1409
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001410
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001411/*[clinic input]
1412hex as builtin_hex
1413
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001414 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001415 /
1416
1417Return the hexadecimal representation of an integer.
1418
1419 >>> hex(12648430)
1420 '0xc0ffee'
1421[clinic start generated code]*/
1422
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001424builtin_hex(PyObject *module, PyObject *number)
1425/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001426{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001427 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001428}
1429
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001430
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001431/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001432static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001433builtin_iter(PyObject *self, PyObject *args)
1434{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001436
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001437 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1438 return NULL;
1439 if (w == NULL)
1440 return PyObject_GetIter(v);
1441 if (!PyCallable_Check(v)) {
1442 PyErr_SetString(PyExc_TypeError,
1443 "iter(v, w): v must be callable");
1444 return NULL;
1445 }
1446 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001447}
1448
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001449PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001450"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001451iter(callable, sentinel) -> iterator\n\
1452\n\
1453Get an iterator from an object. In the first form, the argument must\n\
1454supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001455In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001456
1457
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001458/*[clinic input]
1459len as builtin_len
1460
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001461 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001462 /
1463
1464Return the number of items in a container.
1465[clinic start generated code]*/
1466
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001467static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001468builtin_len(PyObject *module, PyObject *obj)
1469/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001470{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001471 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001472
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001473 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001474 if (res < 0) {
1475 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001476 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001477 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001479}
1480
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001481
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001482/*[clinic input]
1483locals as builtin_locals
1484
1485Return a dictionary containing the current scope's local variables.
1486
1487NOTE: Whether or not updates to this dictionary will affect name lookups in
1488the local scope and vice-versa is *implementation dependent* and not
1489covered by any backwards compatibility guarantees.
1490[clinic start generated code]*/
1491
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001492static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001493builtin_locals_impl(PyObject *module)
1494/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001495{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001496 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001498 d = PyEval_GetLocals();
1499 Py_XINCREF(d);
1500 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001501}
1502
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001503
Guido van Rossum79f25d91997-04-29 20:08:16 +00001504static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001505min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001506{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001507 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001508 PyObject *emptytuple, *defaultval = NULL;
1509 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001510 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001511 const int positional = PyTuple_Size(args) > 1;
1512 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001513
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001514 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001515 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001516 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001518
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001519 emptytuple = PyTuple_New(0);
1520 if (emptytuple == NULL)
1521 return NULL;
1522 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
1523 &keyfunc, &defaultval);
1524 Py_DECREF(emptytuple);
1525 if (!ret)
1526 return NULL;
1527
1528 if (positional && defaultval != NULL) {
1529 PyErr_Format(PyExc_TypeError,
1530 "Cannot specify a default for %s() with multiple "
1531 "positional arguments", name);
1532 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001533 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001535 it = PyObject_GetIter(v);
1536 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001537 return NULL;
1538 }
Tim Petersc3074532001-05-03 07:00:32 +00001539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 maxitem = NULL; /* the result */
1541 maxval = NULL; /* the value associated with the result */
1542 while (( item = PyIter_Next(it) )) {
1543 /* get the value from the key function */
1544 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001545 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 if (val == NULL)
1547 goto Fail_it_item;
1548 }
1549 /* no key function; the value is the item */
1550 else {
1551 val = item;
1552 Py_INCREF(val);
1553 }
Tim Petersc3074532001-05-03 07:00:32 +00001554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 /* maximum value and item are unset; set them */
1556 if (maxval == NULL) {
1557 maxitem = item;
1558 maxval = val;
1559 }
1560 /* maximum value and item are set; update them as necessary */
1561 else {
1562 int cmp = PyObject_RichCompareBool(val, maxval, op);
1563 if (cmp < 0)
1564 goto Fail_it_item_and_val;
1565 else if (cmp > 0) {
1566 Py_DECREF(maxval);
1567 Py_DECREF(maxitem);
1568 maxval = val;
1569 maxitem = item;
1570 }
1571 else {
1572 Py_DECREF(item);
1573 Py_DECREF(val);
1574 }
1575 }
1576 }
1577 if (PyErr_Occurred())
1578 goto Fail_it;
1579 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001580 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001581 if (defaultval != NULL) {
1582 Py_INCREF(defaultval);
1583 maxitem = defaultval;
1584 } else {
1585 PyErr_Format(PyExc_ValueError,
1586 "%s() arg is an empty sequence", name);
1587 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 }
1589 else
1590 Py_DECREF(maxval);
1591 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001592 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001593
1594Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001595 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001596Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001597 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001598Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 Py_XDECREF(maxval);
1600 Py_XDECREF(maxitem);
1601 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001603}
1604
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001605/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001606static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001607builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001608{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001610}
1611
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001612PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001613"min(iterable, *[, default=obj, key=func]) -> value\n\
1614min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001615\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001616With a single iterable argument, return its smallest item. The\n\
1617default keyword-only argument specifies an object to return if\n\
1618the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001619With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001620
1621
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001622/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001623static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001624builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001625{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001627}
1628
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001629PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001630"max(iterable, *[, default=obj, key=func]) -> value\n\
1631max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001632\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001633With a single iterable argument, return its biggest item. The\n\
1634default keyword-only argument specifies an object to return if\n\
1635the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001636With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001637
1638
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001639/*[clinic input]
1640oct as builtin_oct
1641
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001642 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001643 /
1644
1645Return the octal representation of an integer.
1646
1647 >>> oct(342391)
1648 '0o1234567'
1649[clinic start generated code]*/
1650
Guido van Rossum79f25d91997-04-29 20:08:16 +00001651static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001652builtin_oct(PyObject *module, PyObject *number)
1653/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001654{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001655 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001656}
1657
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001658
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001659/*[clinic input]
1660ord as builtin_ord
1661
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001662 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001663 /
1664
1665Return the Unicode code point for a one-character string.
1666[clinic start generated code]*/
1667
Guido van Rossum79f25d91997-04-29 20:08:16 +00001668static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001669builtin_ord(PyObject *module, PyObject *c)
1670/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001671{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 long ord;
1673 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001674
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001675 if (PyBytes_Check(c)) {
1676 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001677 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001678 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 return PyLong_FromLong(ord);
1680 }
1681 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001682 else if (PyUnicode_Check(c)) {
1683 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001684 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001685 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001686 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001687 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 return PyLong_FromLong(ord);
1689 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001690 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001691 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001693 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001695 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 return PyLong_FromLong(ord);
1697 }
1698 }
1699 else {
1700 PyErr_Format(PyExc_TypeError,
1701 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001702 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 return NULL;
1704 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 PyErr_Format(PyExc_TypeError,
1707 "ord() expected a character, "
1708 "but string of length %zd found",
1709 size);
1710 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001711}
1712
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001713
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001714/*[clinic input]
1715pow as builtin_pow
1716
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001717 x: object
1718 y: object
1719 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001720 /
1721
1722Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1723
1724Some types, such as ints, are able to use a more efficient algorithm when
1725invoked using the three argument form.
1726[clinic start generated code]*/
1727
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001728static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001729builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1730/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001731{
1732 return PyNumber_Power(x, y, z);
1733}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001734
1735
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001736/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001737static PyObject *
INADA Naokibd584f12017-01-19 12:50:34 +01001738builtin_print(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001739{
INADA Naokibd584f12017-01-19 12:50:34 +01001740 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1741 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001742 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001743 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001744
INADA Naokibd584f12017-01-19 12:50:34 +01001745 if (kwnames != NULL &&
1746 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1747 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001748 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001749 }
1750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001752 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001753 if (file == NULL) {
1754 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1755 return NULL;
1756 }
1757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 /* sys.stdout may be None when FILE* stdout isn't connected */
1759 if (file == Py_None)
1760 Py_RETURN_NONE;
1761 }
Guido van Rossum34343512006-11-30 22:13:52 +00001762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 if (sep == Py_None) {
1764 sep = NULL;
1765 }
1766 else if (sep && !PyUnicode_Check(sep)) {
1767 PyErr_Format(PyExc_TypeError,
1768 "sep must be None or a string, not %.200s",
1769 sep->ob_type->tp_name);
1770 return NULL;
1771 }
1772 if (end == Py_None) {
1773 end = NULL;
1774 }
1775 else if (end && !PyUnicode_Check(end)) {
1776 PyErr_Format(PyExc_TypeError,
1777 "end must be None or a string, not %.200s",
1778 end->ob_type->tp_name);
1779 return NULL;
1780 }
Guido van Rossum34343512006-11-30 22:13:52 +00001781
INADA Naokibd584f12017-01-19 12:50:34 +01001782 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001783 if (i > 0) {
1784 if (sep == NULL)
1785 err = PyFile_WriteString(" ", file);
1786 else
1787 err = PyFile_WriteObject(sep, file,
1788 Py_PRINT_RAW);
1789 if (err)
1790 return NULL;
1791 }
INADA Naokibd584f12017-01-19 12:50:34 +01001792 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 if (err)
1794 return NULL;
1795 }
Guido van Rossum34343512006-11-30 22:13:52 +00001796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 if (end == NULL)
1798 err = PyFile_WriteString("\n", file);
1799 else
1800 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1801 if (err)
1802 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001803
Georg Brandlbc3b6822012-01-13 19:41:25 +01001804 if (flush != NULL) {
1805 PyObject *tmp;
1806 int do_flush = PyObject_IsTrue(flush);
1807 if (do_flush == -1)
1808 return NULL;
1809 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001810 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001811 if (tmp == NULL)
1812 return NULL;
1813 else
1814 Py_DECREF(tmp);
1815 }
1816 }
1817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001818 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001819}
1820
1821PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001822"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001823\n\
1824Prints the values to a stream, or to sys.stdout by default.\n\
1825Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001826file: a file-like object (stream); defaults to the current sys.stdout.\n\
1827sep: string inserted between values, default a space.\n\
1828end: string appended after the last value, default a newline.\n\
1829flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001830
1831
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001832/*[clinic input]
1833input as builtin_input
1834
1835 prompt: object(c_default="NULL") = None
1836 /
1837
1838Read a string from standard input. The trailing newline is stripped.
1839
1840The prompt string, if given, is printed to standard output without a
1841trailing newline before reading input.
1842
1843If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1844On *nix systems, readline is used if available.
1845[clinic start generated code]*/
1846
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001847static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001848builtin_input_impl(PyObject *module, PyObject *prompt)
1849/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001850{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001851 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1852 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1853 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001854 PyObject *tmp;
1855 long fd;
1856 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 /* Check that stdin/out/err are intact */
1859 if (fin == NULL || fin == Py_None) {
1860 PyErr_SetString(PyExc_RuntimeError,
1861 "input(): lost sys.stdin");
1862 return NULL;
1863 }
1864 if (fout == NULL || fout == Py_None) {
1865 PyErr_SetString(PyExc_RuntimeError,
1866 "input(): lost sys.stdout");
1867 return NULL;
1868 }
1869 if (ferr == NULL || ferr == Py_None) {
1870 PyErr_SetString(PyExc_RuntimeError,
1871 "input(): lost sys.stderr");
1872 return NULL;
1873 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001875 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001876 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 if (tmp == NULL)
1878 PyErr_Clear();
1879 else
1880 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001881
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 /* We should only use (GNU) readline if Python's sys.stdin and
1883 sys.stdout are the same as C's stdin and stdout, because we
1884 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001885 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 if (tmp == NULL) {
1887 PyErr_Clear();
1888 tty = 0;
1889 }
1890 else {
1891 fd = PyLong_AsLong(tmp);
1892 Py_DECREF(tmp);
1893 if (fd < 0 && PyErr_Occurred())
1894 return NULL;
1895 tty = fd == fileno(stdin) && isatty(fd);
1896 }
1897 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001898 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00001899 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001901 tty = 0;
1902 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 else {
1904 fd = PyLong_AsLong(tmp);
1905 Py_DECREF(tmp);
1906 if (fd < 0 && PyErr_Occurred())
1907 return NULL;
1908 tty = fd == fileno(stdout) && isatty(fd);
1909 }
1910 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 /* If we're interactive, use (GNU) readline */
1913 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001914 PyObject *po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001915 char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001916 char *s = NULL;
1917 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1918 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001919 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001921 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001922
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001923 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001924 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001925 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001926 if (!stdin_encoding || !stdin_errors ||
1927 !PyUnicode_Check(stdin_encoding) ||
1928 !PyUnicode_Check(stdin_errors)) {
1929 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001930 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001931 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02001932 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
1933 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001934 if (!stdin_encoding_str || !stdin_errors_str)
1935 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07001936 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 if (tmp == NULL)
1938 PyErr_Clear();
1939 else
1940 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001941 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001942 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001943 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001944 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001945 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001946 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001947 if (!stdout_encoding || !stdout_errors ||
1948 !PyUnicode_Check(stdout_encoding) ||
1949 !PyUnicode_Check(stdout_errors)) {
1950 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001951 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001952 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02001953 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
1954 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001955 if (!stdout_encoding_str || !stdout_errors_str)
1956 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001957 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001958 if (stringpo == NULL)
1959 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001960 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001961 stdout_encoding_str, stdout_errors_str);
1962 Py_CLEAR(stdout_encoding);
1963 Py_CLEAR(stdout_errors);
1964 Py_CLEAR(stringpo);
1965 if (po == NULL)
1966 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03001967 assert(PyBytes_Check(po));
1968 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 }
1970 else {
1971 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001972 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001973 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001974 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001975 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001976 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 if (!PyErr_Occurred())
1978 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001979 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001980 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001981
1982 len = strlen(s);
1983 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001984 PyErr_SetNone(PyExc_EOFError);
1985 result = NULL;
1986 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001987 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001988 if (len > PY_SSIZE_T_MAX) {
1989 PyErr_SetString(PyExc_OverflowError,
1990 "input: input too long");
1991 result = NULL;
1992 }
1993 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001994 len--; /* strip trailing '\n' */
1995 if (len != 0 && s[len-1] == '\r')
1996 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001997 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1998 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001999 }
2000 }
2001 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002002 Py_DECREF(stdin_errors);
2003 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002004 PyMem_FREE(s);
2005 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002006
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002007 _readline_errors:
2008 Py_XDECREF(stdin_encoding);
2009 Py_XDECREF(stdout_encoding);
2010 Py_XDECREF(stdin_errors);
2011 Py_XDECREF(stdout_errors);
2012 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002013 if (tty)
2014 return NULL;
2015
2016 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002017 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002018
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002019 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002020 if (prompt != NULL) {
2021 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 return NULL;
2023 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002024 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002025 if (tmp == NULL)
2026 PyErr_Clear();
2027 else
2028 Py_DECREF(tmp);
2029 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002030}
2031
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002032
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002033/*[clinic input]
2034repr as builtin_repr
2035
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002036 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002037 /
2038
2039Return the canonical string representation of the object.
2040
2041For many object types, including most builtins, eval(repr(obj)) == obj.
2042[clinic start generated code]*/
2043
Guido van Rossum79f25d91997-04-29 20:08:16 +00002044static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002045builtin_repr(PyObject *module, PyObject *obj)
2046/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002047{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002048 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002049}
2050
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002051
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002052/* AC: cannot convert yet, as needs PEP 457 group support in inspect
2053 * or a semantic change to accept None for "ndigits"
2054 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002055static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002056builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002057{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 PyObject *ndigits = NULL;
2059 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002060 PyObject *number, *round, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
2063 kwlist, &number, &ndigits))
2064 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00002065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002066 if (Py_TYPE(number)->tp_dict == NULL) {
2067 if (PyType_Ready(Py_TYPE(number)) < 0)
2068 return NULL;
2069 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002070
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002071 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002072 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002073 if (!PyErr_Occurred())
2074 PyErr_Format(PyExc_TypeError,
2075 "type %.100s doesn't define __round__ method",
2076 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002077 return NULL;
2078 }
Alex Martelliae211f92007-08-22 23:21:33 +00002079
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002080 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002081 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002083 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002084 Py_DECREF(round);
2085 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002086}
2087
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002088PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00002089"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002090\n\
2091Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00002092This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00002093same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00002094
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002095
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002096/*AC: we need to keep the kwds dict intact to easily call into the
2097 * list.sort method, which isn't currently supported in AC. So we just use
2098 * the initially generated signature with a custom implementation.
2099 */
2100/* [disabled clinic input]
2101sorted as builtin_sorted
2102
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002103 iterable as seq: object
2104 key as keyfunc: object = None
2105 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002106
2107Return a new list containing all items from the iterable in ascending order.
2108
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002109A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002110reverse flag can be set to request the result in descending order.
2111[end disabled clinic input]*/
2112
2113PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002114"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002115"--\n"
2116"\n"
2117"Return a new list containing all items from the iterable in ascending order.\n"
2118"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002119"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002120"reverse flag can be set to request the result in descending order.");
2121
2122#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002123 {"sorted", (PyCFunction)builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002124
Raymond Hettinger64958a12003-12-17 20:43:33 +00002125static PyObject *
Victor Stinner5a60eca2017-01-17 15:17:49 +01002126builtin_sorted(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002127{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002128 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002129
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002130 /* Keyword arguments are passed through list.sort() which will check
2131 them. */
2132 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002133 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 newlist = PySequence_List(seq);
2136 if (newlist == NULL)
2137 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002138
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002139 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002140 if (callable == NULL) {
2141 Py_DECREF(newlist);
2142 return NULL;
2143 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002144
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002145 assert(nargs >= 1);
Victor Stinner5a60eca2017-01-17 15:17:49 +01002146 v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002147 Py_DECREF(callable);
2148 if (v == NULL) {
2149 Py_DECREF(newlist);
2150 return NULL;
2151 }
2152 Py_DECREF(v);
2153 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002154}
2155
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002156
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002157/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002158static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002159builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002160{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 PyObject *v = NULL;
2162 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2165 return NULL;
2166 if (v == NULL) {
2167 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002168 if (d == NULL)
2169 return NULL;
2170 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 }
2172 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002173 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 if (d == NULL) {
2175 PyErr_SetString(PyExc_TypeError,
2176 "vars() argument must have __dict__ attribute");
2177 return NULL;
2178 }
2179 }
2180 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002181}
2182
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002183PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002184"vars([object]) -> dictionary\n\
2185\n\
2186Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002187With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002188
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002189
2190/*[clinic input]
2191sum as builtin_sum
2192
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002193 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002194 start: object(c_default="NULL") = 0
2195 /
2196
2197Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2198
2199When the iterable is empty, return the start value.
2200This function is intended specifically for use with numeric values and may
2201reject non-numeric types.
2202[clinic start generated code]*/
2203
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002204static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002205builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
2206/*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002207{
2208 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002209 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002210
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002211 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002212 if (iter == NULL)
2213 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 if (result == NULL) {
2216 result = PyLong_FromLong(0);
2217 if (result == NULL) {
2218 Py_DECREF(iter);
2219 return NULL;
2220 }
2221 } else {
2222 /* reject string values for 'start' parameter */
2223 if (PyUnicode_Check(result)) {
2224 PyErr_SetString(PyExc_TypeError,
2225 "sum() can't sum strings [use ''.join(seq) instead]");
2226 Py_DECREF(iter);
2227 return NULL;
2228 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002229 if (PyBytes_Check(result)) {
2230 PyErr_SetString(PyExc_TypeError,
2231 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002232 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002233 return NULL;
2234 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002235 if (PyByteArray_Check(result)) {
2236 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002237 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002238 Py_DECREF(iter);
2239 return NULL;
2240 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 Py_INCREF(result);
2242 }
Alex Martellia70b1912003-04-22 08:12:33 +00002243
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002244#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2246 Assumes all inputs are the same type. If the assumption fails, default
2247 to the more general routine.
2248 */
2249 if (PyLong_CheckExact(result)) {
2250 int overflow;
2251 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2252 /* If this already overflowed, don't even enter the loop. */
2253 if (overflow == 0) {
2254 Py_DECREF(result);
2255 result = NULL;
2256 }
2257 while(result == NULL) {
2258 item = PyIter_Next(iter);
2259 if (item == NULL) {
2260 Py_DECREF(iter);
2261 if (PyErr_Occurred())
2262 return NULL;
2263 return PyLong_FromLong(i_result);
2264 }
2265 if (PyLong_CheckExact(item)) {
2266 long b = PyLong_AsLongAndOverflow(item, &overflow);
2267 long x = i_result + b;
2268 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2269 i_result = x;
2270 Py_DECREF(item);
2271 continue;
2272 }
2273 }
2274 /* Either overflowed or is not an int. Restore real objects and process normally */
2275 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002276 if (result == NULL) {
2277 Py_DECREF(item);
2278 Py_DECREF(iter);
2279 return NULL;
2280 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002281 temp = PyNumber_Add(result, item);
2282 Py_DECREF(result);
2283 Py_DECREF(item);
2284 result = temp;
2285 if (result == NULL) {
2286 Py_DECREF(iter);
2287 return NULL;
2288 }
2289 }
2290 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002292 if (PyFloat_CheckExact(result)) {
2293 double f_result = PyFloat_AS_DOUBLE(result);
2294 Py_DECREF(result);
2295 result = NULL;
2296 while(result == NULL) {
2297 item = PyIter_Next(iter);
2298 if (item == NULL) {
2299 Py_DECREF(iter);
2300 if (PyErr_Occurred())
2301 return NULL;
2302 return PyFloat_FromDouble(f_result);
2303 }
2304 if (PyFloat_CheckExact(item)) {
2305 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2306 f_result += PyFloat_AS_DOUBLE(item);
2307 PyFPE_END_PROTECT(f_result)
2308 Py_DECREF(item);
2309 continue;
2310 }
2311 if (PyLong_CheckExact(item)) {
2312 long value;
2313 int overflow;
2314 value = PyLong_AsLongAndOverflow(item, &overflow);
2315 if (!overflow) {
2316 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2317 f_result += (double)value;
2318 PyFPE_END_PROTECT(f_result)
2319 Py_DECREF(item);
2320 continue;
2321 }
2322 }
2323 result = PyFloat_FromDouble(f_result);
2324 temp = PyNumber_Add(result, item);
2325 Py_DECREF(result);
2326 Py_DECREF(item);
2327 result = temp;
2328 if (result == NULL) {
2329 Py_DECREF(iter);
2330 return NULL;
2331 }
2332 }
2333 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002334#endif
2335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002336 for(;;) {
2337 item = PyIter_Next(iter);
2338 if (item == NULL) {
2339 /* error, or end-of-sequence */
2340 if (PyErr_Occurred()) {
2341 Py_DECREF(result);
2342 result = NULL;
2343 }
2344 break;
2345 }
2346 /* It's tempting to use PyNumber_InPlaceAdd instead of
2347 PyNumber_Add here, to avoid quadratic running time
2348 when doing 'sum(list_of_lists, [])'. However, this
2349 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002351 empty = []
2352 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002354 would change the value of empty. */
2355 temp = PyNumber_Add(result, item);
2356 Py_DECREF(result);
2357 Py_DECREF(item);
2358 result = temp;
2359 if (result == NULL)
2360 break;
2361 }
2362 Py_DECREF(iter);
2363 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002364}
2365
Alex Martellia70b1912003-04-22 08:12:33 +00002366
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002367/*[clinic input]
2368isinstance as builtin_isinstance
2369
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002370 obj: object
2371 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002372 /
2373
2374Return whether an object is an instance of a class or of a subclass thereof.
2375
2376A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2377check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2378or ...`` etc.
2379[clinic start generated code]*/
2380
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002381static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002382builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002383 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002384/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002385{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002387
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002388 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 if (retval < 0)
2390 return NULL;
2391 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002392}
2393
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002394
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002395/*[clinic input]
2396issubclass as builtin_issubclass
2397
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002398 cls: object
2399 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002400 /
2401
2402Return whether 'cls' is a derived from another class or is the same class.
2403
2404A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2405check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2406or ...`` etc.
2407[clinic start generated code]*/
2408
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002409static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002410builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002411 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002412/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002413{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002414 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002415
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002416 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 if (retval < 0)
2418 return NULL;
2419 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002420}
2421
2422
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002423typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 PyObject_HEAD
2425 Py_ssize_t tuplesize;
2426 PyObject *ittuple; /* tuple of iterators */
2427 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002428} zipobject;
2429
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002430static PyObject *
2431zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002432{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 zipobject *lz;
2434 Py_ssize_t i;
2435 PyObject *ittuple; /* tuple of iterators */
2436 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002437 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002438
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002439 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002440 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002441
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002442 /* args must be a tuple */
2443 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002444 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002445
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 /* obtain iterators */
2447 ittuple = PyTuple_New(tuplesize);
2448 if (ittuple == NULL)
2449 return NULL;
2450 for (i=0; i < tuplesize; ++i) {
2451 PyObject *item = PyTuple_GET_ITEM(args, i);
2452 PyObject *it = PyObject_GetIter(item);
2453 if (it == NULL) {
2454 if (PyErr_ExceptionMatches(PyExc_TypeError))
2455 PyErr_Format(PyExc_TypeError,
2456 "zip argument #%zd must support iteration",
2457 i+1);
2458 Py_DECREF(ittuple);
2459 return NULL;
2460 }
2461 PyTuple_SET_ITEM(ittuple, i, it);
2462 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 /* create a result holder */
2465 result = PyTuple_New(tuplesize);
2466 if (result == NULL) {
2467 Py_DECREF(ittuple);
2468 return NULL;
2469 }
2470 for (i=0 ; i < tuplesize ; i++) {
2471 Py_INCREF(Py_None);
2472 PyTuple_SET_ITEM(result, i, Py_None);
2473 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002474
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002475 /* create zipobject structure */
2476 lz = (zipobject *)type->tp_alloc(type, 0);
2477 if (lz == NULL) {
2478 Py_DECREF(ittuple);
2479 Py_DECREF(result);
2480 return NULL;
2481 }
2482 lz->ittuple = ittuple;
2483 lz->tuplesize = tuplesize;
2484 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002487}
2488
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002489static void
2490zip_dealloc(zipobject *lz)
2491{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002492 PyObject_GC_UnTrack(lz);
2493 Py_XDECREF(lz->ittuple);
2494 Py_XDECREF(lz->result);
2495 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002496}
2497
2498static int
2499zip_traverse(zipobject *lz, visitproc visit, void *arg)
2500{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002501 Py_VISIT(lz->ittuple);
2502 Py_VISIT(lz->result);
2503 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002504}
2505
2506static PyObject *
2507zip_next(zipobject *lz)
2508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 Py_ssize_t i;
2510 Py_ssize_t tuplesize = lz->tuplesize;
2511 PyObject *result = lz->result;
2512 PyObject *it;
2513 PyObject *item;
2514 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002516 if (tuplesize == 0)
2517 return NULL;
2518 if (Py_REFCNT(result) == 1) {
2519 Py_INCREF(result);
2520 for (i=0 ; i < tuplesize ; i++) {
2521 it = PyTuple_GET_ITEM(lz->ittuple, i);
2522 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002523 if (item == NULL) {
2524 Py_DECREF(result);
2525 return NULL;
2526 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 olditem = PyTuple_GET_ITEM(result, i);
2528 PyTuple_SET_ITEM(result, i, item);
2529 Py_DECREF(olditem);
2530 }
2531 } else {
2532 result = PyTuple_New(tuplesize);
2533 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002534 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 for (i=0 ; i < tuplesize ; i++) {
2536 it = PyTuple_GET_ITEM(lz->ittuple, i);
2537 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002538 if (item == NULL) {
2539 Py_DECREF(result);
2540 return NULL;
2541 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 PyTuple_SET_ITEM(result, i, item);
2543 }
2544 }
2545 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002546}
Barry Warsawbd599b52000-08-03 15:45:29 +00002547
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002548static PyObject *
2549zip_reduce(zipobject *lz)
2550{
2551 /* Just recreate the zip with the internal iterator tuple */
2552 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2553}
2554
2555static PyMethodDef zip_methods[] = {
2556 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2557 {NULL, NULL} /* sentinel */
2558};
2559
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002560PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002561"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002562\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002563Return a zip object whose .__next__() method returns a tuple where\n\
2564the i-th element comes from the i-th iterable argument. The .__next__()\n\
2565method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002566is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002567
2568PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002569 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2570 "zip", /* tp_name */
2571 sizeof(zipobject), /* tp_basicsize */
2572 0, /* tp_itemsize */
2573 /* methods */
2574 (destructor)zip_dealloc, /* tp_dealloc */
2575 0, /* tp_print */
2576 0, /* tp_getattr */
2577 0, /* tp_setattr */
2578 0, /* tp_reserved */
2579 0, /* tp_repr */
2580 0, /* tp_as_number */
2581 0, /* tp_as_sequence */
2582 0, /* tp_as_mapping */
2583 0, /* tp_hash */
2584 0, /* tp_call */
2585 0, /* tp_str */
2586 PyObject_GenericGetAttr, /* tp_getattro */
2587 0, /* tp_setattro */
2588 0, /* tp_as_buffer */
2589 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2590 Py_TPFLAGS_BASETYPE, /* tp_flags */
2591 zip_doc, /* tp_doc */
2592 (traverseproc)zip_traverse, /* tp_traverse */
2593 0, /* tp_clear */
2594 0, /* tp_richcompare */
2595 0, /* tp_weaklistoffset */
2596 PyObject_SelfIter, /* tp_iter */
2597 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002598 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002599 0, /* tp_members */
2600 0, /* tp_getset */
2601 0, /* tp_base */
2602 0, /* tp_dict */
2603 0, /* tp_descr_get */
2604 0, /* tp_descr_set */
2605 0, /* tp_dictoffset */
2606 0, /* tp_init */
2607 PyType_GenericAlloc, /* tp_alloc */
2608 zip_new, /* tp_new */
2609 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002610};
Barry Warsawbd599b52000-08-03 15:45:29 +00002611
2612
Guido van Rossum79f25d91997-04-29 20:08:16 +00002613static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002614 {"__build_class__", (PyCFunction)builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002615 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002616 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002617 BUILTIN_ABS_METHODDEF
2618 BUILTIN_ALL_METHODDEF
2619 BUILTIN_ANY_METHODDEF
2620 BUILTIN_ASCII_METHODDEF
2621 BUILTIN_BIN_METHODDEF
2622 BUILTIN_CALLABLE_METHODDEF
2623 BUILTIN_CHR_METHODDEF
2624 BUILTIN_COMPILE_METHODDEF
2625 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002627 BUILTIN_DIVMOD_METHODDEF
2628 BUILTIN_EVAL_METHODDEF
2629 BUILTIN_EXEC_METHODDEF
2630 BUILTIN_FORMAT_METHODDEF
Victor Stinner84b388b2017-01-17 03:52:27 +01002631 {"getattr", (PyCFunction)builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002632 BUILTIN_GLOBALS_METHODDEF
2633 BUILTIN_HASATTR_METHODDEF
2634 BUILTIN_HASH_METHODDEF
2635 BUILTIN_HEX_METHODDEF
2636 BUILTIN_ID_METHODDEF
2637 BUILTIN_INPUT_METHODDEF
2638 BUILTIN_ISINSTANCE_METHODDEF
2639 BUILTIN_ISSUBCLASS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002640 {"iter", builtin_iter, METH_VARARGS, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002641 BUILTIN_LEN_METHODDEF
2642 BUILTIN_LOCALS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002643 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2644 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Victor Stinnerfda6d0a2017-01-17 04:09:14 +01002645 {"next", (PyCFunction)builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002646 BUILTIN_OCT_METHODDEF
2647 BUILTIN_ORD_METHODDEF
2648 BUILTIN_POW_METHODDEF
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002649 {"print", (PyCFunction)builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002650 BUILTIN_REPR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002652 BUILTIN_SETATTR_METHODDEF
2653 BUILTIN_SORTED_METHODDEF
2654 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2656 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002657};
2658
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002659PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002660"Built-in functions, exceptions, and other objects.\n\
2661\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002662Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002663
Martin v. Löwis1a214512008-06-11 05:26:20 +00002664static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002665 PyModuleDef_HEAD_INIT,
2666 "builtins",
2667 builtin_doc,
2668 -1, /* multiple "initialization" just copies the module dict. */
2669 builtin_methods,
2670 NULL,
2671 NULL,
2672 NULL,
2673 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002674};
2675
2676
Guido van Rossum25ce5661997-08-02 03:10:38 +00002677PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002678_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002679{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002680 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002681
2682 if (PyType_Ready(&PyFilter_Type) < 0 ||
2683 PyType_Ready(&PyMap_Type) < 0 ||
2684 PyType_Ready(&PyZip_Type) < 0)
2685 return NULL;
2686
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002687 mod = PyModule_Create(&builtinsmodule);
2688 if (mod == NULL)
2689 return NULL;
2690 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002691
Tim Peters7571a0f2003-03-23 17:52:28 +00002692#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002693 /* "builtins" exposes a number of statically allocated objects
2694 * that, before this code was added in 2.3, never showed up in
2695 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2696 * result, programs leaking references to None and False (etc)
2697 * couldn't be diagnosed by examining sys.getobjects(0).
2698 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002699#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2700#else
2701#define ADD_TO_ALL(OBJECT) (void)0
2702#endif
2703
Tim Peters4b7625e2001-09-13 21:37:17 +00002704#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002705 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2706 return NULL; \
2707 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002709 SETBUILTIN("None", Py_None);
2710 SETBUILTIN("Ellipsis", Py_Ellipsis);
2711 SETBUILTIN("NotImplemented", Py_NotImplemented);
2712 SETBUILTIN("False", Py_False);
2713 SETBUILTIN("True", Py_True);
2714 SETBUILTIN("bool", &PyBool_Type);
2715 SETBUILTIN("memoryview", &PyMemoryView_Type);
2716 SETBUILTIN("bytearray", &PyByteArray_Type);
2717 SETBUILTIN("bytes", &PyBytes_Type);
2718 SETBUILTIN("classmethod", &PyClassMethod_Type);
2719 SETBUILTIN("complex", &PyComplex_Type);
2720 SETBUILTIN("dict", &PyDict_Type);
2721 SETBUILTIN("enumerate", &PyEnum_Type);
2722 SETBUILTIN("filter", &PyFilter_Type);
2723 SETBUILTIN("float", &PyFloat_Type);
2724 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2725 SETBUILTIN("property", &PyProperty_Type);
2726 SETBUILTIN("int", &PyLong_Type);
2727 SETBUILTIN("list", &PyList_Type);
2728 SETBUILTIN("map", &PyMap_Type);
2729 SETBUILTIN("object", &PyBaseObject_Type);
2730 SETBUILTIN("range", &PyRange_Type);
2731 SETBUILTIN("reversed", &PyReversed_Type);
2732 SETBUILTIN("set", &PySet_Type);
2733 SETBUILTIN("slice", &PySlice_Type);
2734 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2735 SETBUILTIN("str", &PyUnicode_Type);
2736 SETBUILTIN("super", &PySuper_Type);
2737 SETBUILTIN("tuple", &PyTuple_Type);
2738 SETBUILTIN("type", &PyType_Type);
2739 SETBUILTIN("zip", &PyZip_Type);
2740 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2741 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002742 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002743 return NULL;
2744 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002745 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002746
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002747 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002748#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002749#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002750}