blob: f7690b17ff4934583803015e70d811038764b47e [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 *
Victor Stinner84b388b2017-01-17 03:52:27 +0100994builtin_getattr(PyObject *self, PyObject **args, Py_ssize_t nargs,
995 PyObject *kwnames)
Guido van Rossum33894be1992-01-27 16:53:09 +0000996{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 PyObject *v, *result, *dflt = NULL;
998 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000999
Victor Stinner84b388b2017-01-17 03:52:27 +01001000 if (!_PyArg_UnpackStack(args, nargs, "getattr", 2, 3, &v, &name, &dflt))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +00001002
Victor Stinner84b388b2017-01-17 03:52:27 +01001003 if (!_PyArg_NoStackKeywords("getattr", kwnames)) {
1004 return NULL;
1005 }
1006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 if (!PyUnicode_Check(name)) {
1008 PyErr_SetString(PyExc_TypeError,
1009 "getattr(): attribute name must be string");
1010 return NULL;
1011 }
1012 result = PyObject_GetAttr(v, name);
1013 if (result == NULL && dflt != NULL &&
1014 PyErr_ExceptionMatches(PyExc_AttributeError))
1015 {
1016 PyErr_Clear();
1017 Py_INCREF(dflt);
1018 result = dflt;
1019 }
1020 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001021}
1022
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001023PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001024"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001025\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001026Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1027When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001028exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001029
1030
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001031/*[clinic input]
1032globals as builtin_globals
1033
1034Return the dictionary containing the current scope's global variables.
1035
1036NOTE: Updates to this dictionary *will* affect name lookups in the current
1037global scope and vice-versa.
1038[clinic start generated code]*/
1039
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001040static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001041builtin_globals_impl(PyObject *module)
1042/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001043{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001044 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001045
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001046 d = PyEval_GetGlobals();
1047 Py_XINCREF(d);
1048 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001049}
1050
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001051
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001052/*[clinic input]
1053hasattr as builtin_hasattr
1054
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001055 obj: object
1056 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001057 /
1058
1059Return whether the object has an attribute with the given name.
1060
1061This is done by calling getattr(obj, name) and catching AttributeError.
1062[clinic start generated code]*/
1063
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001064static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001065builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1066/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001067{
1068 PyObject *v;
1069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 if (!PyUnicode_Check(name)) {
1071 PyErr_SetString(PyExc_TypeError,
1072 "hasattr(): attribute name must be string");
1073 return NULL;
1074 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001075 v = PyObject_GetAttr(obj, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001077 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +00001079 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 }
Benjamin Peterson17689992010-08-24 03:26:23 +00001081 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 }
1083 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001084 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001085}
1086
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001087
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001088/* AC: gdb's integration with CPython relies on builtin_id having
1089 * the *exact* parameter names of "self" and "v", so we ensure we
1090 * preserve those name rather than using the AC defaults.
1091 */
1092/*[clinic input]
1093id as builtin_id
1094
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001095 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001096 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001097 /
1098
1099Return the identity of an object.
1100
1101This is guaranteed to be unique among simultaneously existing objects.
1102(CPython uses the object's memory address.)
1103[clinic start generated code]*/
1104
Guido van Rossum79f25d91997-04-29 20:08:16 +00001105static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001106builtin_id(PyModuleDef *self, PyObject *v)
1107/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001110}
1111
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001112
Raymond Hettingera6c60372008-03-13 01:26:19 +00001113/* map object ************************************************************/
1114
1115typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 PyObject_HEAD
1117 PyObject *iters;
1118 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001119} mapobject;
1120
Guido van Rossum79f25d91997-04-29 20:08:16 +00001121static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001122map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001123{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 PyObject *it, *iters, *func;
1125 mapobject *lz;
1126 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001127
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001128 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 numargs = PyTuple_Size(args);
1132 if (numargs < 2) {
1133 PyErr_SetString(PyExc_TypeError,
1134 "map() must have at least two arguments.");
1135 return NULL;
1136 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 iters = PyTuple_New(numargs-1);
1139 if (iters == NULL)
1140 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 for (i=1 ; i<numargs ; i++) {
1143 /* Get iterator. */
1144 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1145 if (it == NULL) {
1146 Py_DECREF(iters);
1147 return NULL;
1148 }
1149 PyTuple_SET_ITEM(iters, i-1, it);
1150 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 /* create mapobject structure */
1153 lz = (mapobject *)type->tp_alloc(type, 0);
1154 if (lz == NULL) {
1155 Py_DECREF(iters);
1156 return NULL;
1157 }
1158 lz->iters = iters;
1159 func = PyTuple_GET_ITEM(args, 0);
1160 Py_INCREF(func);
1161 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001163 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001164}
1165
1166static void
1167map_dealloc(mapobject *lz)
1168{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 PyObject_GC_UnTrack(lz);
1170 Py_XDECREF(lz->iters);
1171 Py_XDECREF(lz->func);
1172 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001173}
1174
1175static int
1176map_traverse(mapobject *lz, visitproc visit, void *arg)
1177{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 Py_VISIT(lz->iters);
1179 Py_VISIT(lz->func);
1180 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001181}
1182
1183static PyObject *
1184map_next(mapobject *lz)
1185{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001186 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001187 PyObject **stack;
1188 Py_ssize_t niters, nargs, i;
1189 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001190
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001191 niters = PyTuple_GET_SIZE(lz->iters);
1192 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1193 stack = small_stack;
1194 }
1195 else {
1196 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1197 if (stack == NULL) {
1198 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 return NULL;
1200 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001202
1203 nargs = 0;
1204 for (i=0; i < niters; i++) {
1205 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1206 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1207 if (val == NULL) {
1208 goto exit;
1209 }
1210 stack[i] = val;
1211 nargs++;
1212 }
1213
1214 result = _PyObject_FastCall(lz->func, stack, nargs);
1215
1216exit:
1217 for (i=0; i < nargs; i++) {
1218 Py_DECREF(stack[i]);
1219 }
1220 if (stack != small_stack) {
1221 PyMem_Free(stack);
1222 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001224}
1225
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001226static PyObject *
1227map_reduce(mapobject *lz)
1228{
1229 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1230 PyObject *args = PyTuple_New(numargs+1);
1231 Py_ssize_t i;
1232 if (args == NULL)
1233 return NULL;
1234 Py_INCREF(lz->func);
1235 PyTuple_SET_ITEM(args, 0, lz->func);
1236 for (i = 0; i<numargs; i++){
1237 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1238 Py_INCREF(it);
1239 PyTuple_SET_ITEM(args, i+1, it);
1240 }
1241
1242 return Py_BuildValue("ON", Py_TYPE(lz), args);
1243}
1244
1245static PyMethodDef map_methods[] = {
1246 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1247 {NULL, NULL} /* sentinel */
1248};
1249
1250
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001251PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001252"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001254Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001256
Raymond Hettingera6c60372008-03-13 01:26:19 +00001257PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1259 "map", /* tp_name */
1260 sizeof(mapobject), /* tp_basicsize */
1261 0, /* tp_itemsize */
1262 /* methods */
1263 (destructor)map_dealloc, /* tp_dealloc */
1264 0, /* tp_print */
1265 0, /* tp_getattr */
1266 0, /* tp_setattr */
1267 0, /* tp_reserved */
1268 0, /* tp_repr */
1269 0, /* tp_as_number */
1270 0, /* tp_as_sequence */
1271 0, /* tp_as_mapping */
1272 0, /* tp_hash */
1273 0, /* tp_call */
1274 0, /* tp_str */
1275 PyObject_GenericGetAttr, /* tp_getattro */
1276 0, /* tp_setattro */
1277 0, /* tp_as_buffer */
1278 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1279 Py_TPFLAGS_BASETYPE, /* tp_flags */
1280 map_doc, /* tp_doc */
1281 (traverseproc)map_traverse, /* tp_traverse */
1282 0, /* tp_clear */
1283 0, /* tp_richcompare */
1284 0, /* tp_weaklistoffset */
1285 PyObject_SelfIter, /* tp_iter */
1286 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001287 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 0, /* tp_members */
1289 0, /* tp_getset */
1290 0, /* tp_base */
1291 0, /* tp_dict */
1292 0, /* tp_descr_get */
1293 0, /* tp_descr_set */
1294 0, /* tp_dictoffset */
1295 0, /* tp_init */
1296 PyType_GenericAlloc, /* tp_alloc */
1297 map_new, /* tp_new */
1298 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001299};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001300
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001301
1302/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001303static PyObject *
Victor Stinnerfda6d0a2017-01-17 04:09:14 +01001304builtin_next(PyObject *self, PyObject **args, Py_ssize_t nargs,
1305 PyObject *kwnames)
Georg Brandla18af4e2007-04-21 15:47:16 +00001306{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001307 PyObject *it, *res;
1308 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001309
Victor Stinnerfda6d0a2017-01-17 04:09:14 +01001310 if (!_PyArg_UnpackStack(args, nargs, "next", 1, 2, &it, &def))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 return NULL;
Victor Stinnerfda6d0a2017-01-17 04:09:14 +01001312
1313 if (!_PyArg_NoStackKeywords("next", kwnames)) {
1314 return NULL;
1315 }
1316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001317 if (!PyIter_Check(it)) {
1318 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001319 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 it->ob_type->tp_name);
1321 return NULL;
1322 }
1323
1324 res = (*it->ob_type->tp_iternext)(it);
1325 if (res != NULL) {
1326 return res;
1327 } else if (def != NULL) {
1328 if (PyErr_Occurred()) {
1329 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1330 return NULL;
1331 PyErr_Clear();
1332 }
1333 Py_INCREF(def);
1334 return def;
1335 } else if (PyErr_Occurred()) {
1336 return NULL;
1337 } else {
1338 PyErr_SetNone(PyExc_StopIteration);
1339 return NULL;
1340 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001341}
1342
1343PyDoc_STRVAR(next_doc,
1344"next(iterator[, default])\n\
1345\n\
1346Return the next item from the iterator. If default is given and the iterator\n\
1347is exhausted, it is returned instead of raising StopIteration.");
1348
1349
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001350/*[clinic input]
1351setattr as builtin_setattr
1352
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001353 obj: object
1354 name: object
1355 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001356 /
1357
1358Sets the named attribute on the given object to the specified value.
1359
1360setattr(x, 'y', v) is equivalent to ``x.y = v''
1361[clinic start generated code]*/
1362
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001363static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001364builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001365 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001366/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001367{
1368 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001370 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001371}
1372
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001373
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001374/*[clinic input]
1375delattr as builtin_delattr
1376
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001377 obj: object
1378 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001379 /
1380
1381Deletes the named attribute from the given object.
1382
1383delattr(x, 'y') is equivalent to ``del x.y''
1384[clinic start generated code]*/
1385
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001386static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001387builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1388/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001389{
1390 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001392 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001393}
1394
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001395
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001396/*[clinic input]
1397hash as builtin_hash
1398
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001399 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001400 /
1401
1402Return the hash value for the given object.
1403
1404Two objects that compare equal must also have the same hash value, but the
1405reverse is not necessarily true.
1406[clinic start generated code]*/
1407
Guido van Rossum79f25d91997-04-29 20:08:16 +00001408static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001409builtin_hash(PyObject *module, PyObject *obj)
1410/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001411{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001412 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001413
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001414 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001415 if (x == -1)
1416 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001417 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001418}
1419
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001420
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001421/*[clinic input]
1422hex as builtin_hex
1423
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001424 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001425 /
1426
1427Return the hexadecimal representation of an integer.
1428
1429 >>> hex(12648430)
1430 '0xc0ffee'
1431[clinic start generated code]*/
1432
Guido van Rossum79f25d91997-04-29 20:08:16 +00001433static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001434builtin_hex(PyObject *module, PyObject *number)
1435/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001436{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001437 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001438}
1439
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001440
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001441/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001442static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001443builtin_iter(PyObject *self, PyObject *args)
1444{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1448 return NULL;
1449 if (w == NULL)
1450 return PyObject_GetIter(v);
1451 if (!PyCallable_Check(v)) {
1452 PyErr_SetString(PyExc_TypeError,
1453 "iter(v, w): v must be callable");
1454 return NULL;
1455 }
1456 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001457}
1458
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001459PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001460"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001461iter(callable, sentinel) -> iterator\n\
1462\n\
1463Get an iterator from an object. In the first form, the argument must\n\
1464supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001465In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001466
1467
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001468/*[clinic input]
1469len as builtin_len
1470
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001471 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001472 /
1473
1474Return the number of items in a container.
1475[clinic start generated code]*/
1476
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001477static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001478builtin_len(PyObject *module, PyObject *obj)
1479/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001482
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001483 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001484 if (res < 0) {
1485 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001487 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001489}
1490
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001491
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001492/*[clinic input]
1493locals as builtin_locals
1494
1495Return a dictionary containing the current scope's local variables.
1496
1497NOTE: Whether or not updates to this dictionary will affect name lookups in
1498the local scope and vice-versa is *implementation dependent* and not
1499covered by any backwards compatibility guarantees.
1500[clinic start generated code]*/
1501
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001502static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001503builtin_locals_impl(PyObject *module)
1504/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001505{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001507
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001508 d = PyEval_GetLocals();
1509 Py_XINCREF(d);
1510 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001511}
1512
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001513
Guido van Rossum79f25d91997-04-29 20:08:16 +00001514static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001515min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001516{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001518 PyObject *emptytuple, *defaultval = NULL;
1519 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001520 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001521 const int positional = PyTuple_Size(args) > 1;
1522 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001523
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001524 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001525 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001526 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001527 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001528
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001529 emptytuple = PyTuple_New(0);
1530 if (emptytuple == NULL)
1531 return NULL;
1532 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
1533 &keyfunc, &defaultval);
1534 Py_DECREF(emptytuple);
1535 if (!ret)
1536 return NULL;
1537
1538 if (positional && defaultval != NULL) {
1539 PyErr_Format(PyExc_TypeError,
1540 "Cannot specify a default for %s() with multiple "
1541 "positional arguments", name);
1542 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001543 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001545 it = PyObject_GetIter(v);
1546 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001547 return NULL;
1548 }
Tim Petersc3074532001-05-03 07:00:32 +00001549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001550 maxitem = NULL; /* the result */
1551 maxval = NULL; /* the value associated with the result */
1552 while (( item = PyIter_Next(it) )) {
1553 /* get the value from the key function */
1554 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001555 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001556 if (val == NULL)
1557 goto Fail_it_item;
1558 }
1559 /* no key function; the value is the item */
1560 else {
1561 val = item;
1562 Py_INCREF(val);
1563 }
Tim Petersc3074532001-05-03 07:00:32 +00001564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001565 /* maximum value and item are unset; set them */
1566 if (maxval == NULL) {
1567 maxitem = item;
1568 maxval = val;
1569 }
1570 /* maximum value and item are set; update them as necessary */
1571 else {
1572 int cmp = PyObject_RichCompareBool(val, maxval, op);
1573 if (cmp < 0)
1574 goto Fail_it_item_and_val;
1575 else if (cmp > 0) {
1576 Py_DECREF(maxval);
1577 Py_DECREF(maxitem);
1578 maxval = val;
1579 maxitem = item;
1580 }
1581 else {
1582 Py_DECREF(item);
1583 Py_DECREF(val);
1584 }
1585 }
1586 }
1587 if (PyErr_Occurred())
1588 goto Fail_it;
1589 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001590 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001591 if (defaultval != NULL) {
1592 Py_INCREF(defaultval);
1593 maxitem = defaultval;
1594 } else {
1595 PyErr_Format(PyExc_ValueError,
1596 "%s() arg is an empty sequence", name);
1597 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001598 }
1599 else
1600 Py_DECREF(maxval);
1601 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001603
1604Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001606Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001608Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 Py_XDECREF(maxval);
1610 Py_XDECREF(maxitem);
1611 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001613}
1614
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001615/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001616static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001617builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001618{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001619 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001620}
1621
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001622PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001623"min(iterable, *[, default=obj, key=func]) -> value\n\
1624min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001625\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001626With a single iterable argument, return its smallest item. The\n\
1627default keyword-only argument specifies an object to return if\n\
1628the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001629With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001630
1631
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001632/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001633static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001634builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001635{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001637}
1638
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001639PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001640"max(iterable, *[, default=obj, key=func]) -> value\n\
1641max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001642\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001643With a single iterable argument, return its biggest item. The\n\
1644default keyword-only argument specifies an object to return if\n\
1645the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001646With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001647
1648
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001649/*[clinic input]
1650oct as builtin_oct
1651
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001652 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001653 /
1654
1655Return the octal representation of an integer.
1656
1657 >>> oct(342391)
1658 '0o1234567'
1659[clinic start generated code]*/
1660
Guido van Rossum79f25d91997-04-29 20:08:16 +00001661static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001662builtin_oct(PyObject *module, PyObject *number)
1663/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001664{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001665 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001666}
1667
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001668
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001669/*[clinic input]
1670ord as builtin_ord
1671
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001672 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001673 /
1674
1675Return the Unicode code point for a one-character string.
1676[clinic start generated code]*/
1677
Guido van Rossum79f25d91997-04-29 20:08:16 +00001678static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001679builtin_ord(PyObject *module, PyObject *c)
1680/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001681{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 long ord;
1683 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001684
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001685 if (PyBytes_Check(c)) {
1686 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001688 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 return PyLong_FromLong(ord);
1690 }
1691 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001692 else if (PyUnicode_Check(c)) {
1693 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001694 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001695 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001697 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 return PyLong_FromLong(ord);
1699 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001701 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001703 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001704 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001705 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 return PyLong_FromLong(ord);
1707 }
1708 }
1709 else {
1710 PyErr_Format(PyExc_TypeError,
1711 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001712 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001713 return NULL;
1714 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001715
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 PyErr_Format(PyExc_TypeError,
1717 "ord() expected a character, "
1718 "but string of length %zd found",
1719 size);
1720 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001721}
1722
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001723
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001724/*[clinic input]
1725pow as builtin_pow
1726
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001727 x: object
1728 y: object
1729 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001730 /
1731
1732Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1733
1734Some types, such as ints, are able to use a more efficient algorithm when
1735invoked using the three argument form.
1736[clinic start generated code]*/
1737
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001738static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001739builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1740/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001741{
1742 return PyNumber_Power(x, y, z);
1743}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001744
1745
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001746/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001747static PyObject *
INADA Naokibd584f12017-01-19 12:50:34 +01001748builtin_print(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001749{
INADA Naokibd584f12017-01-19 12:50:34 +01001750 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1751 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001752 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001754
INADA Naokibd584f12017-01-19 12:50:34 +01001755 if (kwnames != NULL &&
1756 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1757 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001758 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001759 }
1760
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001761 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001762 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001763 if (file == NULL) {
1764 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1765 return NULL;
1766 }
1767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001768 /* sys.stdout may be None when FILE* stdout isn't connected */
1769 if (file == Py_None)
1770 Py_RETURN_NONE;
1771 }
Guido van Rossum34343512006-11-30 22:13:52 +00001772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 if (sep == Py_None) {
1774 sep = NULL;
1775 }
1776 else if (sep && !PyUnicode_Check(sep)) {
1777 PyErr_Format(PyExc_TypeError,
1778 "sep must be None or a string, not %.200s",
1779 sep->ob_type->tp_name);
1780 return NULL;
1781 }
1782 if (end == Py_None) {
1783 end = NULL;
1784 }
1785 else if (end && !PyUnicode_Check(end)) {
1786 PyErr_Format(PyExc_TypeError,
1787 "end must be None or a string, not %.200s",
1788 end->ob_type->tp_name);
1789 return NULL;
1790 }
Guido van Rossum34343512006-11-30 22:13:52 +00001791
INADA Naokibd584f12017-01-19 12:50:34 +01001792 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 if (i > 0) {
1794 if (sep == NULL)
1795 err = PyFile_WriteString(" ", file);
1796 else
1797 err = PyFile_WriteObject(sep, file,
1798 Py_PRINT_RAW);
1799 if (err)
1800 return NULL;
1801 }
INADA Naokibd584f12017-01-19 12:50:34 +01001802 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 if (err)
1804 return NULL;
1805 }
Guido van Rossum34343512006-11-30 22:13:52 +00001806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001807 if (end == NULL)
1808 err = PyFile_WriteString("\n", file);
1809 else
1810 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1811 if (err)
1812 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001813
Georg Brandlbc3b6822012-01-13 19:41:25 +01001814 if (flush != NULL) {
1815 PyObject *tmp;
1816 int do_flush = PyObject_IsTrue(flush);
1817 if (do_flush == -1)
1818 return NULL;
1819 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001820 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001821 if (tmp == NULL)
1822 return NULL;
1823 else
1824 Py_DECREF(tmp);
1825 }
1826 }
1827
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001828 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001829}
1830
1831PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001832"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001833\n\
1834Prints the values to a stream, or to sys.stdout by default.\n\
1835Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001836file: a file-like object (stream); defaults to the current sys.stdout.\n\
1837sep: string inserted between values, default a space.\n\
1838end: string appended after the last value, default a newline.\n\
1839flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001840
1841
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001842/*[clinic input]
1843input as builtin_input
1844
1845 prompt: object(c_default="NULL") = None
1846 /
1847
1848Read a string from standard input. The trailing newline is stripped.
1849
1850The prompt string, if given, is printed to standard output without a
1851trailing newline before reading input.
1852
1853If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1854On *nix systems, readline is used if available.
1855[clinic start generated code]*/
1856
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001857static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001858builtin_input_impl(PyObject *module, PyObject *prompt)
1859/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001860{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001861 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1862 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1863 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001864 PyObject *tmp;
1865 long fd;
1866 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001868 /* Check that stdin/out/err are intact */
1869 if (fin == NULL || fin == Py_None) {
1870 PyErr_SetString(PyExc_RuntimeError,
1871 "input(): lost sys.stdin");
1872 return NULL;
1873 }
1874 if (fout == NULL || fout == Py_None) {
1875 PyErr_SetString(PyExc_RuntimeError,
1876 "input(): lost sys.stdout");
1877 return NULL;
1878 }
1879 if (ferr == NULL || ferr == Py_None) {
1880 PyErr_SetString(PyExc_RuntimeError,
1881 "input(): lost sys.stderr");
1882 return NULL;
1883 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001886 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001887 if (tmp == NULL)
1888 PyErr_Clear();
1889 else
1890 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001892 /* We should only use (GNU) readline if Python's sys.stdin and
1893 sys.stdout are the same as C's stdin and stdout, because we
1894 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001895 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001896 if (tmp == NULL) {
1897 PyErr_Clear();
1898 tty = 0;
1899 }
1900 else {
1901 fd = PyLong_AsLong(tmp);
1902 Py_DECREF(tmp);
1903 if (fd < 0 && PyErr_Occurred())
1904 return NULL;
1905 tty = fd == fileno(stdin) && isatty(fd);
1906 }
1907 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001908 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00001909 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001910 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001911 tty = 0;
1912 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 else {
1914 fd = PyLong_AsLong(tmp);
1915 Py_DECREF(tmp);
1916 if (fd < 0 && PyErr_Occurred())
1917 return NULL;
1918 tty = fd == fileno(stdout) && isatty(fd);
1919 }
1920 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 /* If we're interactive, use (GNU) readline */
1923 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001924 PyObject *po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001925 char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001926 char *s = NULL;
1927 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1928 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001929 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001930 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001931 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001932
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001933 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001934 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001935 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001936 if (!stdin_encoding || !stdin_errors ||
1937 !PyUnicode_Check(stdin_encoding) ||
1938 !PyUnicode_Check(stdin_errors)) {
1939 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001940 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001941 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02001942 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
1943 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001944 if (!stdin_encoding_str || !stdin_errors_str)
1945 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07001946 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001947 if (tmp == NULL)
1948 PyErr_Clear();
1949 else
1950 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001951 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001952 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001953 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001954 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001955 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001956 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001957 if (!stdout_encoding || !stdout_errors ||
1958 !PyUnicode_Check(stdout_encoding) ||
1959 !PyUnicode_Check(stdout_errors)) {
1960 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001961 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02001962 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02001963 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
1964 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001965 if (!stdout_encoding_str || !stdout_errors_str)
1966 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001967 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001968 if (stringpo == NULL)
1969 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001970 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001971 stdout_encoding_str, stdout_errors_str);
1972 Py_CLEAR(stdout_encoding);
1973 Py_CLEAR(stdout_errors);
1974 Py_CLEAR(stringpo);
1975 if (po == NULL)
1976 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03001977 assert(PyBytes_Check(po));
1978 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001979 }
1980 else {
1981 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001982 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001984 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001986 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001987 if (!PyErr_Occurred())
1988 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001989 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001990 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001991
1992 len = strlen(s);
1993 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 PyErr_SetNone(PyExc_EOFError);
1995 result = NULL;
1996 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001997 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 if (len > PY_SSIZE_T_MAX) {
1999 PyErr_SetString(PyExc_OverflowError,
2000 "input: input too long");
2001 result = NULL;
2002 }
2003 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002004 len--; /* strip trailing '\n' */
2005 if (len != 0 && s[len-1] == '\r')
2006 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002007 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2008 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002009 }
2010 }
2011 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002012 Py_DECREF(stdin_errors);
2013 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002014 PyMem_FREE(s);
2015 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002016
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002017 _readline_errors:
2018 Py_XDECREF(stdin_encoding);
2019 Py_XDECREF(stdout_encoding);
2020 Py_XDECREF(stdin_errors);
2021 Py_XDECREF(stdout_errors);
2022 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002023 if (tty)
2024 return NULL;
2025
2026 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002029 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002030 if (prompt != NULL) {
2031 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 return NULL;
2033 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002034 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 if (tmp == NULL)
2036 PyErr_Clear();
2037 else
2038 Py_DECREF(tmp);
2039 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002040}
2041
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002042
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002043/*[clinic input]
2044repr as builtin_repr
2045
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002046 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002047 /
2048
2049Return the canonical string representation of the object.
2050
2051For many object types, including most builtins, eval(repr(obj)) == obj.
2052[clinic start generated code]*/
2053
Guido van Rossum79f25d91997-04-29 20:08:16 +00002054static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002055builtin_repr(PyObject *module, PyObject *obj)
2056/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002057{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002058 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002059}
2060
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002061
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002062/* AC: cannot convert yet, as needs PEP 457 group support in inspect
2063 * or a semantic change to accept None for "ndigits"
2064 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002065static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002066builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002067{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002068 PyObject *ndigits = NULL;
2069 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002070 PyObject *number, *round, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002071
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002072 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
2073 kwlist, &number, &ndigits))
2074 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00002075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002076 if (Py_TYPE(number)->tp_dict == NULL) {
2077 if (PyType_Ready(Py_TYPE(number)) < 0)
2078 return NULL;
2079 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002080
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002081 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002083 if (!PyErr_Occurred())
2084 PyErr_Format(PyExc_TypeError,
2085 "type %.100s doesn't define __round__ method",
2086 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 return NULL;
2088 }
Alex Martelliae211f92007-08-22 23:21:33 +00002089
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002090 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002091 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002093 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002094 Py_DECREF(round);
2095 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002096}
2097
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002098PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00002099"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002100\n\
2101Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00002102This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00002103same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00002104
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002105
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002106/*AC: we need to keep the kwds dict intact to easily call into the
2107 * list.sort method, which isn't currently supported in AC. So we just use
2108 * the initially generated signature with a custom implementation.
2109 */
2110/* [disabled clinic input]
2111sorted as builtin_sorted
2112
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002113 iterable as seq: object
2114 key as keyfunc: object = None
2115 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002116
2117Return a new list containing all items from the iterable in ascending order.
2118
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002119A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002120reverse flag can be set to request the result in descending order.
2121[end disabled clinic input]*/
2122
2123PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002124"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002125"--\n"
2126"\n"
2127"Return a new list containing all items from the iterable in ascending order.\n"
2128"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002129"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002130"reverse flag can be set to request the result in descending order.");
2131
2132#define BUILTIN_SORTED_METHODDEF \
Victor Stinner5a60eca2017-01-17 15:17:49 +01002133 {"sorted", (PyCFunction)builtin_sorted, METH_FASTCALL, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002134
Raymond Hettinger64958a12003-12-17 20:43:33 +00002135static PyObject *
Victor Stinner5a60eca2017-01-17 15:17:49 +01002136builtin_sorted(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002137{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002138 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002139
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002140 /* Keyword arguments are passed through list.sort() which will check
2141 them. */
2142 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002144
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002145 newlist = PySequence_List(seq);
2146 if (newlist == NULL)
2147 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002148
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002149 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002150 if (callable == NULL) {
2151 Py_DECREF(newlist);
2152 return NULL;
2153 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002154
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002155 assert(nargs >= 1);
Victor Stinner5a60eca2017-01-17 15:17:49 +01002156 v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 Py_DECREF(callable);
2158 if (v == NULL) {
2159 Py_DECREF(newlist);
2160 return NULL;
2161 }
2162 Py_DECREF(v);
2163 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002164}
2165
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002166
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002167/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002168static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002169builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002170{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 PyObject *v = NULL;
2172 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2175 return NULL;
2176 if (v == NULL) {
2177 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002178 if (d == NULL)
2179 return NULL;
2180 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002181 }
2182 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002183 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 if (d == NULL) {
2185 PyErr_SetString(PyExc_TypeError,
2186 "vars() argument must have __dict__ attribute");
2187 return NULL;
2188 }
2189 }
2190 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002191}
2192
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002193PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002194"vars([object]) -> dictionary\n\
2195\n\
2196Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002197With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002198
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002199
2200/*[clinic input]
2201sum as builtin_sum
2202
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002203 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002204 start: object(c_default="NULL") = 0
2205 /
2206
2207Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2208
2209When the iterable is empty, return the start value.
2210This function is intended specifically for use with numeric values and may
2211reject non-numeric types.
2212[clinic start generated code]*/
2213
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002214static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002215builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
2216/*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002217{
2218 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002219 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002220
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002221 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002222 if (iter == NULL)
2223 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002224
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002225 if (result == NULL) {
2226 result = PyLong_FromLong(0);
2227 if (result == NULL) {
2228 Py_DECREF(iter);
2229 return NULL;
2230 }
2231 } else {
2232 /* reject string values for 'start' parameter */
2233 if (PyUnicode_Check(result)) {
2234 PyErr_SetString(PyExc_TypeError,
2235 "sum() can't sum strings [use ''.join(seq) instead]");
2236 Py_DECREF(iter);
2237 return NULL;
2238 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002239 if (PyBytes_Check(result)) {
2240 PyErr_SetString(PyExc_TypeError,
2241 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002242 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002243 return NULL;
2244 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 if (PyByteArray_Check(result)) {
2246 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002247 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 Py_DECREF(iter);
2249 return NULL;
2250 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002251 Py_INCREF(result);
2252 }
Alex Martellia70b1912003-04-22 08:12:33 +00002253
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002254#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2256 Assumes all inputs are the same type. If the assumption fails, default
2257 to the more general routine.
2258 */
2259 if (PyLong_CheckExact(result)) {
2260 int overflow;
2261 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2262 /* If this already overflowed, don't even enter the loop. */
2263 if (overflow == 0) {
2264 Py_DECREF(result);
2265 result = NULL;
2266 }
2267 while(result == NULL) {
2268 item = PyIter_Next(iter);
2269 if (item == NULL) {
2270 Py_DECREF(iter);
2271 if (PyErr_Occurred())
2272 return NULL;
2273 return PyLong_FromLong(i_result);
2274 }
2275 if (PyLong_CheckExact(item)) {
2276 long b = PyLong_AsLongAndOverflow(item, &overflow);
2277 long x = i_result + b;
2278 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2279 i_result = x;
2280 Py_DECREF(item);
2281 continue;
2282 }
2283 }
2284 /* Either overflowed or is not an int. Restore real objects and process normally */
2285 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002286 if (result == NULL) {
2287 Py_DECREF(item);
2288 Py_DECREF(iter);
2289 return NULL;
2290 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002291 temp = PyNumber_Add(result, item);
2292 Py_DECREF(result);
2293 Py_DECREF(item);
2294 result = temp;
2295 if (result == NULL) {
2296 Py_DECREF(iter);
2297 return NULL;
2298 }
2299 }
2300 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002301
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002302 if (PyFloat_CheckExact(result)) {
2303 double f_result = PyFloat_AS_DOUBLE(result);
2304 Py_DECREF(result);
2305 result = NULL;
2306 while(result == NULL) {
2307 item = PyIter_Next(iter);
2308 if (item == NULL) {
2309 Py_DECREF(iter);
2310 if (PyErr_Occurred())
2311 return NULL;
2312 return PyFloat_FromDouble(f_result);
2313 }
2314 if (PyFloat_CheckExact(item)) {
2315 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2316 f_result += PyFloat_AS_DOUBLE(item);
2317 PyFPE_END_PROTECT(f_result)
2318 Py_DECREF(item);
2319 continue;
2320 }
2321 if (PyLong_CheckExact(item)) {
2322 long value;
2323 int overflow;
2324 value = PyLong_AsLongAndOverflow(item, &overflow);
2325 if (!overflow) {
2326 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2327 f_result += (double)value;
2328 PyFPE_END_PROTECT(f_result)
2329 Py_DECREF(item);
2330 continue;
2331 }
2332 }
2333 result = PyFloat_FromDouble(f_result);
2334 temp = PyNumber_Add(result, item);
2335 Py_DECREF(result);
2336 Py_DECREF(item);
2337 result = temp;
2338 if (result == NULL) {
2339 Py_DECREF(iter);
2340 return NULL;
2341 }
2342 }
2343 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002344#endif
2345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002346 for(;;) {
2347 item = PyIter_Next(iter);
2348 if (item == NULL) {
2349 /* error, or end-of-sequence */
2350 if (PyErr_Occurred()) {
2351 Py_DECREF(result);
2352 result = NULL;
2353 }
2354 break;
2355 }
2356 /* It's tempting to use PyNumber_InPlaceAdd instead of
2357 PyNumber_Add here, to avoid quadratic running time
2358 when doing 'sum(list_of_lists, [])'. However, this
2359 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002360
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 empty = []
2362 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002364 would change the value of empty. */
2365 temp = PyNumber_Add(result, item);
2366 Py_DECREF(result);
2367 Py_DECREF(item);
2368 result = temp;
2369 if (result == NULL)
2370 break;
2371 }
2372 Py_DECREF(iter);
2373 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002374}
2375
Alex Martellia70b1912003-04-22 08:12:33 +00002376
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002377/*[clinic input]
2378isinstance as builtin_isinstance
2379
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002380 obj: object
2381 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002382 /
2383
2384Return whether an object is an instance of a class or of a subclass thereof.
2385
2386A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2387check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2388or ...`` etc.
2389[clinic start generated code]*/
2390
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002391static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002392builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002393 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002394/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002395{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002396 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002397
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002398 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002399 if (retval < 0)
2400 return NULL;
2401 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002402}
2403
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002404
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002405/*[clinic input]
2406issubclass as builtin_issubclass
2407
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002408 cls: object
2409 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002410 /
2411
2412Return whether 'cls' is a derived from another class or is the same class.
2413
2414A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2415check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2416or ...`` etc.
2417[clinic start generated code]*/
2418
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002419static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002420builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002421 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002422/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002423{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002425
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002426 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 if (retval < 0)
2428 return NULL;
2429 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002430}
2431
2432
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002433typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002434 PyObject_HEAD
2435 Py_ssize_t tuplesize;
2436 PyObject *ittuple; /* tuple of iterators */
2437 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002438} zipobject;
2439
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002440static PyObject *
2441zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002442{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002443 zipobject *lz;
2444 Py_ssize_t i;
2445 PyObject *ittuple; /* tuple of iterators */
2446 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002447 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002448
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002449 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002450 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002451
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002452 /* args must be a tuple */
2453 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002454 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002455
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002456 /* obtain iterators */
2457 ittuple = PyTuple_New(tuplesize);
2458 if (ittuple == NULL)
2459 return NULL;
2460 for (i=0; i < tuplesize; ++i) {
2461 PyObject *item = PyTuple_GET_ITEM(args, i);
2462 PyObject *it = PyObject_GetIter(item);
2463 if (it == NULL) {
2464 if (PyErr_ExceptionMatches(PyExc_TypeError))
2465 PyErr_Format(PyExc_TypeError,
2466 "zip argument #%zd must support iteration",
2467 i+1);
2468 Py_DECREF(ittuple);
2469 return NULL;
2470 }
2471 PyTuple_SET_ITEM(ittuple, i, it);
2472 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 /* create a result holder */
2475 result = PyTuple_New(tuplesize);
2476 if (result == NULL) {
2477 Py_DECREF(ittuple);
2478 return NULL;
2479 }
2480 for (i=0 ; i < tuplesize ; i++) {
2481 Py_INCREF(Py_None);
2482 PyTuple_SET_ITEM(result, i, Py_None);
2483 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002485 /* create zipobject structure */
2486 lz = (zipobject *)type->tp_alloc(type, 0);
2487 if (lz == NULL) {
2488 Py_DECREF(ittuple);
2489 Py_DECREF(result);
2490 return NULL;
2491 }
2492 lz->ittuple = ittuple;
2493 lz->tuplesize = tuplesize;
2494 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002495
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002496 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002497}
2498
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002499static void
2500zip_dealloc(zipobject *lz)
2501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 PyObject_GC_UnTrack(lz);
2503 Py_XDECREF(lz->ittuple);
2504 Py_XDECREF(lz->result);
2505 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002506}
2507
2508static int
2509zip_traverse(zipobject *lz, visitproc visit, void *arg)
2510{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 Py_VISIT(lz->ittuple);
2512 Py_VISIT(lz->result);
2513 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002514}
2515
2516static PyObject *
2517zip_next(zipobject *lz)
2518{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002519 Py_ssize_t i;
2520 Py_ssize_t tuplesize = lz->tuplesize;
2521 PyObject *result = lz->result;
2522 PyObject *it;
2523 PyObject *item;
2524 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 if (tuplesize == 0)
2527 return NULL;
2528 if (Py_REFCNT(result) == 1) {
2529 Py_INCREF(result);
2530 for (i=0 ; i < tuplesize ; i++) {
2531 it = PyTuple_GET_ITEM(lz->ittuple, i);
2532 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002533 if (item == NULL) {
2534 Py_DECREF(result);
2535 return NULL;
2536 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002537 olditem = PyTuple_GET_ITEM(result, i);
2538 PyTuple_SET_ITEM(result, i, item);
2539 Py_DECREF(olditem);
2540 }
2541 } else {
2542 result = PyTuple_New(tuplesize);
2543 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002544 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 for (i=0 ; i < tuplesize ; i++) {
2546 it = PyTuple_GET_ITEM(lz->ittuple, i);
2547 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002548 if (item == NULL) {
2549 Py_DECREF(result);
2550 return NULL;
2551 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002552 PyTuple_SET_ITEM(result, i, item);
2553 }
2554 }
2555 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002556}
Barry Warsawbd599b52000-08-03 15:45:29 +00002557
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002558static PyObject *
2559zip_reduce(zipobject *lz)
2560{
2561 /* Just recreate the zip with the internal iterator tuple */
2562 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2563}
2564
2565static PyMethodDef zip_methods[] = {
2566 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2567 {NULL, NULL} /* sentinel */
2568};
2569
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002570PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002571"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002572\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002573Return a zip object whose .__next__() method returns a tuple where\n\
2574the i-th element comes from the i-th iterable argument. The .__next__()\n\
2575method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002576is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002577
2578PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002579 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2580 "zip", /* tp_name */
2581 sizeof(zipobject), /* tp_basicsize */
2582 0, /* tp_itemsize */
2583 /* methods */
2584 (destructor)zip_dealloc, /* tp_dealloc */
2585 0, /* tp_print */
2586 0, /* tp_getattr */
2587 0, /* tp_setattr */
2588 0, /* tp_reserved */
2589 0, /* tp_repr */
2590 0, /* tp_as_number */
2591 0, /* tp_as_sequence */
2592 0, /* tp_as_mapping */
2593 0, /* tp_hash */
2594 0, /* tp_call */
2595 0, /* tp_str */
2596 PyObject_GenericGetAttr, /* tp_getattro */
2597 0, /* tp_setattro */
2598 0, /* tp_as_buffer */
2599 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2600 Py_TPFLAGS_BASETYPE, /* tp_flags */
2601 zip_doc, /* tp_doc */
2602 (traverseproc)zip_traverse, /* tp_traverse */
2603 0, /* tp_clear */
2604 0, /* tp_richcompare */
2605 0, /* tp_weaklistoffset */
2606 PyObject_SelfIter, /* tp_iter */
2607 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002608 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002609 0, /* tp_members */
2610 0, /* tp_getset */
2611 0, /* tp_base */
2612 0, /* tp_dict */
2613 0, /* tp_descr_get */
2614 0, /* tp_descr_set */
2615 0, /* tp_dictoffset */
2616 0, /* tp_init */
2617 PyType_GenericAlloc, /* tp_alloc */
2618 zip_new, /* tp_new */
2619 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002620};
Barry Warsawbd599b52000-08-03 15:45:29 +00002621
2622
Guido van Rossum79f25d91997-04-29 20:08:16 +00002623static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002624 {"__build_class__", (PyCFunction)builtin___build_class__,
Victor Stinner773dc6d2017-01-16 23:46:26 +01002625 METH_FASTCALL, build_class_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002627 BUILTIN_ABS_METHODDEF
2628 BUILTIN_ALL_METHODDEF
2629 BUILTIN_ANY_METHODDEF
2630 BUILTIN_ASCII_METHODDEF
2631 BUILTIN_BIN_METHODDEF
2632 BUILTIN_CALLABLE_METHODDEF
2633 BUILTIN_CHR_METHODDEF
2634 BUILTIN_COMPILE_METHODDEF
2635 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002636 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002637 BUILTIN_DIVMOD_METHODDEF
2638 BUILTIN_EVAL_METHODDEF
2639 BUILTIN_EXEC_METHODDEF
2640 BUILTIN_FORMAT_METHODDEF
Victor Stinner84b388b2017-01-17 03:52:27 +01002641 {"getattr", (PyCFunction)builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002642 BUILTIN_GLOBALS_METHODDEF
2643 BUILTIN_HASATTR_METHODDEF
2644 BUILTIN_HASH_METHODDEF
2645 BUILTIN_HEX_METHODDEF
2646 BUILTIN_ID_METHODDEF
2647 BUILTIN_INPUT_METHODDEF
2648 BUILTIN_ISINSTANCE_METHODDEF
2649 BUILTIN_ISSUBCLASS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002650 {"iter", builtin_iter, METH_VARARGS, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002651 BUILTIN_LEN_METHODDEF
2652 BUILTIN_LOCALS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002653 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2654 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Victor Stinnerfda6d0a2017-01-17 04:09:14 +01002655 {"next", (PyCFunction)builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002656 BUILTIN_OCT_METHODDEF
2657 BUILTIN_ORD_METHODDEF
2658 BUILTIN_POW_METHODDEF
INADA Naokibd584f12017-01-19 12:50:34 +01002659 {"print", (PyCFunction)builtin_print, METH_FASTCALL, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002660 BUILTIN_REPR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002661 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002662 BUILTIN_SETATTR_METHODDEF
2663 BUILTIN_SORTED_METHODDEF
2664 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002665 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2666 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002667};
2668
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002669PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002670"Built-in functions, exceptions, and other objects.\n\
2671\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002672Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002673
Martin v. Löwis1a214512008-06-11 05:26:20 +00002674static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002675 PyModuleDef_HEAD_INIT,
2676 "builtins",
2677 builtin_doc,
2678 -1, /* multiple "initialization" just copies the module dict. */
2679 builtin_methods,
2680 NULL,
2681 NULL,
2682 NULL,
2683 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002684};
2685
2686
Guido van Rossum25ce5661997-08-02 03:10:38 +00002687PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002688_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002689{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002690 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002691
2692 if (PyType_Ready(&PyFilter_Type) < 0 ||
2693 PyType_Ready(&PyMap_Type) < 0 ||
2694 PyType_Ready(&PyZip_Type) < 0)
2695 return NULL;
2696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 mod = PyModule_Create(&builtinsmodule);
2698 if (mod == NULL)
2699 return NULL;
2700 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002701
Tim Peters7571a0f2003-03-23 17:52:28 +00002702#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002703 /* "builtins" exposes a number of statically allocated objects
2704 * that, before this code was added in 2.3, never showed up in
2705 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2706 * result, programs leaking references to None and False (etc)
2707 * couldn't be diagnosed by examining sys.getobjects(0).
2708 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002709#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2710#else
2711#define ADD_TO_ALL(OBJECT) (void)0
2712#endif
2713
Tim Peters4b7625e2001-09-13 21:37:17 +00002714#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002715 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2716 return NULL; \
2717 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002719 SETBUILTIN("None", Py_None);
2720 SETBUILTIN("Ellipsis", Py_Ellipsis);
2721 SETBUILTIN("NotImplemented", Py_NotImplemented);
2722 SETBUILTIN("False", Py_False);
2723 SETBUILTIN("True", Py_True);
2724 SETBUILTIN("bool", &PyBool_Type);
2725 SETBUILTIN("memoryview", &PyMemoryView_Type);
2726 SETBUILTIN("bytearray", &PyByteArray_Type);
2727 SETBUILTIN("bytes", &PyBytes_Type);
2728 SETBUILTIN("classmethod", &PyClassMethod_Type);
2729 SETBUILTIN("complex", &PyComplex_Type);
2730 SETBUILTIN("dict", &PyDict_Type);
2731 SETBUILTIN("enumerate", &PyEnum_Type);
2732 SETBUILTIN("filter", &PyFilter_Type);
2733 SETBUILTIN("float", &PyFloat_Type);
2734 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2735 SETBUILTIN("property", &PyProperty_Type);
2736 SETBUILTIN("int", &PyLong_Type);
2737 SETBUILTIN("list", &PyList_Type);
2738 SETBUILTIN("map", &PyMap_Type);
2739 SETBUILTIN("object", &PyBaseObject_Type);
2740 SETBUILTIN("range", &PyRange_Type);
2741 SETBUILTIN("reversed", &PyReversed_Type);
2742 SETBUILTIN("set", &PySet_Type);
2743 SETBUILTIN("slice", &PySlice_Type);
2744 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2745 SETBUILTIN("str", &PyUnicode_Type);
2746 SETBUILTIN("super", &PySuper_Type);
2747 SETBUILTIN("tuple", &PyTuple_Type);
2748 SETBUILTIN("type", &PyType_Type);
2749 SETBUILTIN("zip", &PyZip_Type);
2750 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2751 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002752 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002753 return NULL;
2754 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002755 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002757 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002758#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002759#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002760}