blob: 66a74cbdef610498025a04bf21d4b794b345975a [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"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00004#include <ctype.h>
Victor Stinnereec8e612021-03-18 14:57:49 +01005#include "pycore_ast.h" // _PyAST_Validate()
Victor Stinnera81fca62021-03-24 00:51:50 +01006#include "pycore_compile.h" // _PyAST_Compile()
Victor Stinnerc96d00e2020-06-22 18:02:49 +02007#include "pycore_object.h" // _Py_AddToAllObjects()
Victor Stinner384621c2020-06-22 17:27:35 +02008#include "pycore_pyerrors.h" // _PyErr_NoMemory()
9#include "pycore_pystate.h" // _PyThreadState_GET()
10#include "pycore_tuple.h" // _PyTuple_FromArray()
Mark Shannon0332e562021-02-01 10:42:03 +000011#include "pycore_ceval.h" // _PyEval_Vector()
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012
Victor Stinnerbd303c12013-11-07 23:07:29 +010013_Py_IDENTIFIER(__builtins__);
14_Py_IDENTIFIER(__dict__);
15_Py_IDENTIFIER(__prepare__);
16_Py_IDENTIFIER(__round__);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010017_Py_IDENTIFIER(__mro_entries__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010018_Py_IDENTIFIER(encoding);
19_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020020_Py_IDENTIFIER(fileno);
21_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010022_Py_IDENTIFIER(metaclass);
23_Py_IDENTIFIER(sort);
24_Py_IDENTIFIER(stdin);
25_Py_IDENTIFIER(stdout);
26_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020027
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030028#include "clinic/bltinmodule.c.h"
29
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010030static PyObject*
Victor Stinner05d68a82018-01-18 11:15:25 +010031update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010032{
Victor Stinner05d68a82018-01-18 11:15:25 +010033 Py_ssize_t i, j;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010034 PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010035 assert(PyTuple_Check(bases));
36
37 for (i = 0; i < nargs; i++) {
38 base = args[i];
39 if (PyType_Check(base)) {
40 if (new_bases) {
41 /* If we already have made a replacement, then we append every normal base,
42 otherwise just skip it. */
43 if (PyList_Append(new_bases, base) < 0) {
44 goto error;
45 }
46 }
47 continue;
48 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020049 if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, &meth) < 0) {
50 goto error;
51 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010052 if (!meth) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010053 if (new_bases) {
54 if (PyList_Append(new_bases, base) < 0) {
55 goto error;
56 }
57 }
58 continue;
59 }
Petr Viktorinffd97532020-02-11 17:46:57 +010060 new_base = PyObject_CallOneArg(meth, bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010061 Py_DECREF(meth);
62 if (!new_base) {
63 goto error;
64 }
65 if (!PyTuple_Check(new_base)) {
66 PyErr_SetString(PyExc_TypeError,
67 "__mro_entries__ must return a tuple");
68 Py_DECREF(new_base);
69 goto error;
70 }
71 if (!new_bases) {
72 /* If this is a first successful replacement, create new_bases list and
73 copy previously encountered bases. */
74 if (!(new_bases = PyList_New(i))) {
75 goto error;
76 }
77 for (j = 0; j < i; j++) {
78 base = args[j];
79 PyList_SET_ITEM(new_bases, j, base);
80 Py_INCREF(base);
81 }
82 }
83 j = PyList_GET_SIZE(new_bases);
84 if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
85 goto error;
86 }
87 Py_DECREF(new_base);
88 }
89 if (!new_bases) {
90 return bases;
91 }
92 result = PyList_AsTuple(new_bases);
93 Py_DECREF(new_bases);
94 return result;
95
96error:
97 Py_XDECREF(new_bases);
98 return NULL;
99}
100
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000101/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000102static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200103builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
Victor Stinner773dc6d2017-01-16 23:46:26 +0100104 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000105{
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100106 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *orig_bases;
Nick Coghlan19d24672016-12-05 16:47:55 +1000107 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +0100108 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000110 if (nargs < 2) {
111 PyErr_SetString(PyExc_TypeError,
112 "__build_class__: not enough arguments");
113 return NULL;
114 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100115 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -0500116 if (!PyFunction_Check(func)) {
117 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -0500118 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -0500119 return NULL;
120 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100121 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000122 if (!PyUnicode_Check(name)) {
123 PyErr_SetString(PyExc_TypeError,
124 "__build_class__: name is not a string");
125 return NULL;
126 }
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +0500127 orig_bases = _PyTuple_FromArray(args + 2, nargs - 2);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100128 if (orig_bases == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000129 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000130
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100131 bases = update_bases(orig_bases, args + 2, nargs - 2);
132 if (bases == NULL) {
133 Py_DECREF(orig_bases);
134 return NULL;
135 }
136
Victor Stinner773dc6d2017-01-16 23:46:26 +0100137 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000138 meta = NULL;
139 mkw = NULL;
140 }
141 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +0100142 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 if (mkw == NULL) {
144 Py_DECREF(bases);
145 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000146 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100147
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200148 meta = _PyDict_GetItemIdWithError(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 if (meta != NULL) {
150 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100151 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 Py_DECREF(meta);
153 Py_DECREF(mkw);
154 Py_DECREF(bases);
155 return NULL;
156 }
Nick Coghlande31b192011-10-23 22:04:16 +1000157 /* metaclass is explicitly given, check if it's indeed a class */
158 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000159 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200160 else if (PyErr_Occurred()) {
161 Py_DECREF(mkw);
162 Py_DECREF(bases);
163 return NULL;
164 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 }
166 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000167 /* if there are no bases, use type: */
168 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000169 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000170 }
171 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000172 else {
173 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
Victor Stinnera102ed72020-02-07 02:24:48 +0100174 meta = (PyObject *)Py_TYPE(base0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000175 }
176 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000177 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000179
Nick Coghlande31b192011-10-23 22:04:16 +1000180 if (isclass) {
181 /* meta is really a class, so check for a more derived
182 metaclass, or possible metaclass conflicts: */
183 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
184 bases);
185 if (winner == NULL) {
186 Py_DECREF(meta);
187 Py_XDECREF(mkw);
188 Py_DECREF(bases);
189 return NULL;
190 }
191 if (winner != meta) {
192 Py_DECREF(meta);
193 meta = winner;
194 Py_INCREF(meta);
195 }
196 }
197 /* else: meta is not a class, so we cannot do the metaclass
198 calculation, so we will use the explicitly given object as it is */
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200199 if (_PyObject_LookupAttrId(meta, &PyId___prepare__, &prep) < 0) {
200 ns = NULL;
201 }
202 else if (prep == NULL) {
203 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000204 }
205 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200206 PyObject *pargs[2] = {name, bases};
Petr Viktorinffd97532020-02-11 17:46:57 +0100207 ns = PyObject_VectorcallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 Py_DECREF(prep);
209 }
210 if (ns == NULL) {
211 Py_DECREF(meta);
212 Py_XDECREF(mkw);
213 Py_DECREF(bases);
214 return NULL;
215 }
Oren Milman5837d042017-09-27 17:04:37 +0300216 if (!PyMapping_Check(ns)) {
217 PyErr_Format(PyExc_TypeError,
218 "%.200s.__prepare__() must return a mapping, not %.200s",
219 isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
220 Py_TYPE(ns)->tp_name);
221 goto error;
222 }
Mark Shannon0332e562021-02-01 10:42:03 +0000223 PyFrameConstructor *f = PyFunction_AS_FRAME_CONSTRUCTOR(func);
224 PyThreadState *tstate = PyThreadState_GET();
225 cell = _PyEval_Vector(tstate, f, ns, NULL, 0, NULL);
Nick Coghlan19d24672016-12-05 16:47:55 +1000226 if (cell != NULL) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100227 if (bases != orig_bases) {
228 if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
229 goto error;
230 }
231 }
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200232 PyObject *margs[3] = {name, bases, ns};
Petr Viktorinffd97532020-02-11 17:46:57 +0100233 cls = PyObject_VectorcallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000234 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
235 PyObject *cell_cls = PyCell_GET(cell);
236 if (cell_cls != cls) {
Nick Coghlan19d24672016-12-05 16:47:55 +1000237 if (cell_cls == NULL) {
238 const char *msg =
239 "__class__ not set defining %.200R as %.200R. "
240 "Was __classcell__ propagated to type.__new__?";
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300241 PyErr_Format(PyExc_RuntimeError, msg, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000242 } else {
243 const char *msg =
244 "__class__ set to %.200R defining %.200R as %.200R";
245 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000246 }
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300247 Py_DECREF(cls);
248 cls = NULL;
249 goto error;
Nick Coghlan19d24672016-12-05 16:47:55 +1000250 }
251 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000253error:
254 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 Py_DECREF(ns);
256 Py_DECREF(meta);
257 Py_XDECREF(mkw);
258 Py_DECREF(bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100259 if (bases != orig_bases) {
260 Py_DECREF(orig_bases);
261 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000263}
264
265PyDoc_STRVAR(build_class_doc,
Pablo Galindoe3babbd2019-10-13 16:35:41 +0100266"__build_class__(func, name, /, *bases, [metaclass], **kwds) -> class\n\
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000267\n\
268Internal helper function used by the class statement.");
269
270static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000271builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000272{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000273 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
274 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400275 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400276 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000277
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400278 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 kwlist, &name, &globals, &locals, &fromlist, &level))
280 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400281 return PyImport_ImportModuleLevelObject(name, globals, locals,
282 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000283}
284
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000285PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400286"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000287\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000288Import a module. Because this function is meant for use by the Python\n\
oldk461d2252018-02-02 12:20:00 +0800289interpreter and not for general use, it is better to use\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000290importlib.import_module() to programmatically import a module.\n\
291\n\
292The globals argument is only used to determine the context;\n\
293they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000294should be a list of names to emulate ``from name import ...'', or an\n\
295empty list to emulate ``import name''.\n\
296When importing a module from a package, note that __import__('A.B', ...)\n\
297returns package A when fromlist is empty, but its submodule B when\n\
oldk461d2252018-02-02 12:20:00 +0800298fromlist is not empty. The level argument is used to determine whether to\n\
299perform absolute or relative imports: 0 is absolute, while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000300is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000301
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000302
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000303/*[clinic input]
304abs as builtin_abs
305
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300306 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000307 /
308
309Return the absolute value of the argument.
310[clinic start generated code]*/
311
Guido van Rossum79f25d91997-04-29 20:08:16 +0000312static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300313builtin_abs(PyObject *module, PyObject *x)
314/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000315{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000316 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000317}
318
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000319/*[clinic input]
320all as builtin_all
321
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300322 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000323 /
324
325Return True if bool(x) is True for all values x in the iterable.
326
327If the iterable is empty, return True.
328[clinic start generated code]*/
329
Raymond Hettinger96229b12005-03-11 06:49:40 +0000330static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300331builtin_all(PyObject *module, PyObject *iterable)
332/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 PyObject *it, *item;
335 PyObject *(*iternext)(PyObject *);
336 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000337
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000338 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 if (it == NULL)
340 return NULL;
341 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 for (;;) {
344 item = iternext(it);
345 if (item == NULL)
346 break;
347 cmp = PyObject_IsTrue(item);
348 Py_DECREF(item);
349 if (cmp < 0) {
350 Py_DECREF(it);
351 return NULL;
352 }
353 if (cmp == 0) {
354 Py_DECREF(it);
355 Py_RETURN_FALSE;
356 }
357 }
358 Py_DECREF(it);
359 if (PyErr_Occurred()) {
360 if (PyErr_ExceptionMatches(PyExc_StopIteration))
361 PyErr_Clear();
362 else
363 return NULL;
364 }
365 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000366}
367
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000368/*[clinic input]
369any as builtin_any
370
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300371 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000372 /
373
374Return True if bool(x) is True for any x in the iterable.
375
376If the iterable is empty, return False.
377[clinic start generated code]*/
378
Raymond Hettinger96229b12005-03-11 06:49:40 +0000379static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300380builtin_any(PyObject *module, PyObject *iterable)
381/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000382{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 PyObject *it, *item;
384 PyObject *(*iternext)(PyObject *);
385 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000386
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000387 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 if (it == NULL)
389 return NULL;
390 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 for (;;) {
393 item = iternext(it);
394 if (item == NULL)
395 break;
396 cmp = PyObject_IsTrue(item);
397 Py_DECREF(item);
398 if (cmp < 0) {
399 Py_DECREF(it);
400 return NULL;
401 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400402 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 Py_DECREF(it);
404 Py_RETURN_TRUE;
405 }
406 }
407 Py_DECREF(it);
408 if (PyErr_Occurred()) {
409 if (PyErr_ExceptionMatches(PyExc_StopIteration))
410 PyErr_Clear();
411 else
412 return NULL;
413 }
414 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000415}
416
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000417/*[clinic input]
418ascii as builtin_ascii
419
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300420 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000421 /
422
423Return an ASCII-only representation of an object.
424
425As repr(), return a string containing a printable representation of an
426object, but escape the non-ASCII characters in the string returned by
427repr() using \\x, \\u or \\U escapes. This generates a string similar
428to that returned by repr() in Python 2.
429[clinic start generated code]*/
430
Georg Brandl559e5d72008-06-11 18:37:52 +0000431static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300432builtin_ascii(PyObject *module, PyObject *obj)
433/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000434{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000435 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000436}
437
Georg Brandl559e5d72008-06-11 18:37:52 +0000438
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000439/*[clinic input]
440bin as builtin_bin
441
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300442 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000443 /
444
445Return the binary representation of an integer.
446
447 >>> bin(2796202)
448 '0b1010101010101010101010'
449[clinic start generated code]*/
450
Guido van Rossum79f25d91997-04-29 20:08:16 +0000451static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300452builtin_bin(PyObject *module, PyObject *number)
453/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000454{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000455 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000456}
457
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000458
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000459/*[clinic input]
460callable as builtin_callable
461
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300462 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000463 /
464
465Return whether the object is callable (i.e., some kind of function).
466
467Note that classes are callable, as are instances of classes with a
468__call__() method.
469[clinic start generated code]*/
470
Antoine Pitroue71362d2010-11-27 22:00:11 +0000471static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300472builtin_callable(PyObject *module, PyObject *obj)
473/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000474{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000475 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000476}
477
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400478static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200479builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400480{
481 PyObject *hook = PySys_GetObject("breakpointhook");
482
483 if (hook == NULL) {
484 PyErr_SetString(PyExc_RuntimeError, "lost sys.breakpointhook");
485 return NULL;
486 }
Steve Dower60419a72019-06-24 08:42:54 -0700487
488 if (PySys_Audit("builtins.breakpoint", "O", hook) < 0) {
489 return NULL;
490 }
491
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400492 Py_INCREF(hook);
Petr Viktorinffd97532020-02-11 17:46:57 +0100493 PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400494 Py_DECREF(hook);
495 return retval;
496}
497
498PyDoc_STRVAR(breakpoint_doc,
499"breakpoint(*args, **kws)\n\
500\n\
501Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
502whatever arguments are passed.\n\
503\n\
504By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000505
Raymond Hettinger17301e92008-03-13 00:19:26 +0000506typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 PyObject_HEAD
508 PyObject *func;
509 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000510} filterobject;
511
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000512static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000513filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000514{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 PyObject *func, *seq;
516 PyObject *it;
517 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000518
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300519 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000521
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
523 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 /* Get iterator. */
526 it = PyObject_GetIter(seq);
527 if (it == NULL)
528 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 /* create filterobject structure */
531 lz = (filterobject *)type->tp_alloc(type, 0);
532 if (lz == NULL) {
533 Py_DECREF(it);
534 return NULL;
535 }
Dong-hee Na9a9c11a2021-03-11 01:39:52 +0900536
537 lz->func = Py_NewRef(func);
538 lz->it = it;
539
540 return (PyObject *)lz;
541}
542
543static PyObject *
544filter_vectorcall(PyObject *type, PyObject * const*args,
545 size_t nargsf, PyObject *kwnames)
546{
547 PyTypeObject *tp = (PyTypeObject *)type;
548 if (tp == &PyFilter_Type && !_PyArg_NoKwnames("filter", kwnames)) {
549 return NULL;
550 }
551
552 Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
553 if (!_PyArg_CheckPositional("filter", nargs, 2, 2)) {
554 return NULL;
555 }
556
557 PyObject *it = PyObject_GetIter(args[1]);
558 if (it == NULL) {
559 return NULL;
560 }
561
562 filterobject *lz = (filterobject *)tp->tp_alloc(tp, 0);
563
564 if (lz == NULL) {
565 Py_DECREF(it);
566 return NULL;
567 }
568
569 lz->func = Py_NewRef(args[0]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000573}
574
575static void
576filter_dealloc(filterobject *lz)
577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 PyObject_GC_UnTrack(lz);
579 Py_XDECREF(lz->func);
580 Py_XDECREF(lz->it);
581 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000582}
583
584static int
585filter_traverse(filterobject *lz, visitproc visit, void *arg)
586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 Py_VISIT(lz->it);
588 Py_VISIT(lz->func);
589 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000590}
591
592static PyObject *
593filter_next(filterobject *lz)
594{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000595 PyObject *item;
596 PyObject *it = lz->it;
597 long ok;
598 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400599 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 iternext = *Py_TYPE(it)->tp_iternext;
602 for (;;) {
603 item = iternext(it);
604 if (item == NULL)
605 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000606
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400607 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 ok = PyObject_IsTrue(item);
609 } else {
610 PyObject *good;
Petr Viktorinffd97532020-02-11 17:46:57 +0100611 good = PyObject_CallOneArg(lz->func, item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 if (good == NULL) {
613 Py_DECREF(item);
614 return NULL;
615 }
616 ok = PyObject_IsTrue(good);
617 Py_DECREF(good);
618 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200619 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 return item;
621 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200622 if (ok < 0)
623 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000625}
626
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000627static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530628filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000629{
630 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
631}
632
633PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
634
635static PyMethodDef filter_methods[] = {
636 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
637 {NULL, NULL} /* sentinel */
638};
639
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000640PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000641"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000642\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000643Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000644is true. If function is None, return the items that are true.");
645
646PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000647 PyVarObject_HEAD_INIT(&PyType_Type, 0)
648 "filter", /* tp_name */
649 sizeof(filterobject), /* tp_basicsize */
650 0, /* tp_itemsize */
651 /* methods */
652 (destructor)filter_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200653 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 0, /* tp_getattr */
655 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200656 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 0, /* tp_repr */
658 0, /* tp_as_number */
659 0, /* tp_as_sequence */
660 0, /* tp_as_mapping */
661 0, /* tp_hash */
662 0, /* tp_call */
663 0, /* tp_str */
664 PyObject_GenericGetAttr, /* tp_getattro */
665 0, /* tp_setattro */
666 0, /* tp_as_buffer */
667 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
668 Py_TPFLAGS_BASETYPE, /* tp_flags */
669 filter_doc, /* tp_doc */
670 (traverseproc)filter_traverse, /* tp_traverse */
671 0, /* tp_clear */
672 0, /* tp_richcompare */
673 0, /* tp_weaklistoffset */
674 PyObject_SelfIter, /* tp_iter */
675 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000676 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 0, /* tp_members */
678 0, /* tp_getset */
679 0, /* tp_base */
680 0, /* tp_dict */
681 0, /* tp_descr_get */
682 0, /* tp_descr_set */
683 0, /* tp_dictoffset */
684 0, /* tp_init */
685 PyType_GenericAlloc, /* tp_alloc */
686 filter_new, /* tp_new */
687 PyObject_GC_Del, /* tp_free */
Dong-hee Na9a9c11a2021-03-11 01:39:52 +0900688 .tp_vectorcall = (vectorcallfunc)filter_vectorcall
Raymond Hettinger17301e92008-03-13 00:19:26 +0000689};
690
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000691
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000692/*[clinic input]
693format as builtin_format
694
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300695 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000696 format_spec: unicode(c_default="NULL") = ''
697 /
698
699Return value.__format__(format_spec)
700
Amit Kumar2e6bb442017-05-29 06:32:26 +0530701format_spec defaults to the empty string.
702See the Format Specification Mini-Language section of help('FORMATTING') for
703details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000704[clinic start generated code]*/
705
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000706static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300707builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530708/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000709{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000710 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000711}
712
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000713/*[clinic input]
714chr as builtin_chr
715
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300716 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000717 /
718
719Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
720[clinic start generated code]*/
721
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000722static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300723builtin_chr_impl(PyObject *module, int i)
724/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000725{
726 return PyUnicode_FromOrdinal(i);
727}
Guido van Rossum09095f32000-03-10 23:00:52 +0000728
729
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000730/*[clinic input]
731compile as builtin_compile
732
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300733 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000734 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300735 mode: str
736 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200737 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300738 optimize: int = -1
Victor Stinnerefdf6ca2019-06-12 02:52:16 +0200739 *
740 _feature_version as feature_version: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000741
742Compile source into a code object that can be executed by exec() or eval().
743
744The source code may represent a Python module, statement or expression.
745The filename will be used for run-time error messages.
746The mode must be 'exec' to compile a module, 'single' to compile a
747single (interactive) statement, or 'eval' to compile an expression.
748The flags argument, if present, controls which future statements influence
749the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300750The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000751the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300752compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000753in addition to any features explicitly specified.
754[clinic start generated code]*/
755
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000756static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300757builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
758 const char *mode, int flags, int dont_inherit,
Guido van Rossum495da292019-03-07 12:38:08 -0800759 int optimize, int feature_version)
Victor Stinnerefdf6ca2019-06-12 02:52:16 +0200760/*[clinic end generated code: output=b0c09c84f116d3d7 input=40171fb92c1d580d]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000761{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000762 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200763 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000764 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 int is_ast;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800766 int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000767 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000768
Victor Stinner37d66d72019-06-13 02:16:41 +0200769 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000770 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -0800771 if (feature_version >= 0 && (flags & PyCF_ONLY_AST)) {
772 cf.cf_feature_version = feature_version;
773 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000774
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000775 if (flags &
Batuhan Taşkaya44540572020-04-22 19:09:03 +0300776 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_COMPILE_MASK))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 {
778 PyErr_SetString(PyExc_ValueError,
779 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000780 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 }
782 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000783
Georg Brandl8334fd92010-12-04 10:26:46 +0000784 if (optimize < -1 || optimize > 2) {
785 PyErr_SetString(PyExc_ValueError,
786 "compile(): invalid optimize value");
787 goto error;
788 }
789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 if (!dont_inherit) {
791 PyEval_MergeCompilerFlags(&cf);
792 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000793
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000794 if (strcmp(mode, "exec") == 0)
795 compile_mode = 0;
796 else if (strcmp(mode, "eval") == 0)
797 compile_mode = 1;
798 else if (strcmp(mode, "single") == 0)
799 compile_mode = 2;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800800 else if (strcmp(mode, "func_type") == 0) {
801 if (!(flags & PyCF_ONLY_AST)) {
802 PyErr_SetString(PyExc_ValueError,
803 "compile() mode 'func_type' requires flag PyCF_ONLY_AST");
804 goto error;
805 }
806 compile_mode = 3;
807 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 else {
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800809 const char *msg;
810 if (flags & PyCF_ONLY_AST)
811 msg = "compile() mode must be 'exec', 'eval', 'single' or 'func_type'";
812 else
813 msg = "compile() mode must be 'exec', 'eval' or 'single'";
814 PyErr_SetString(PyExc_ValueError, msg);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000815 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000817
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000818 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000820 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000822 if (flags & PyCF_ONLY_AST) {
823 Py_INCREF(source);
824 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000825 }
826 else {
827 PyArena *arena;
828 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000829
Victor Stinner8370e072021-03-24 02:23:01 +0100830 arena = _PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200831 if (arena == NULL)
832 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000833 mod = PyAST_obj2mod(source, arena, compile_mode);
Nick Coghlan1e7b8582021-04-29 15:58:44 +1000834 if (mod == NULL || !_PyAST_Validate(mod)) {
Victor Stinner8370e072021-03-24 02:23:01 +0100835 _PyArena_Free(arena);
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500836 goto error;
837 }
Victor Stinnera81fca62021-03-24 00:51:50 +0100838 result = (PyObject*)_PyAST_Compile(mod, filename,
839 &cf, optimize, arena);
Victor Stinner8370e072021-03-24 02:23:01 +0100840 _PyArena_Free(arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000842 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000843 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000844
Dino Viehland41540692019-05-28 16:21:17 -0700845 str = _Py_SourceAsString(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000846 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000847 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000848
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000849 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Guido van Rossumc001c092020-04-30 12:12:19 -0700850
Martin Panter61d6e4a2015-11-07 02:56:11 +0000851 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000852 goto finally;
853
854error:
855 result = NULL;
856finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200857 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000858 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000859}
860
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000861/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000863builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000864{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000866
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000867 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
868 return NULL;
869 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000870}
871
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000872PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000873"dir([object]) -> list of strings\n"
874"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000875"If called without an argument, return the names in the current scope.\n"
876"Else, return an alphabetized list of names comprising (some of) the attributes\n"
877"of the given object, and of attributes reachable from it.\n"
878"If the object supplies a method named __dir__, it will be used; otherwise\n"
879"the default dir() logic is used and returns:\n"
880" for a module object: the module's attributes.\n"
881" for a class object: its attributes, and recursively the attributes\n"
882" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000883" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000884" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000885
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000886/*[clinic input]
887divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000888
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300889 x: object
890 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000891 /
892
Zachary Ware7f227d92016-04-28 14:39:50 -0500893Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000894[clinic start generated code]*/
895
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000896static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300897builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
898/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000899{
900 return PyNumber_Divmod(x, y);
901}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902
903
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000904/*[clinic input]
905eval as builtin_eval
906
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300907 source: object
908 globals: object = None
909 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000910 /
911
912Evaluate the given source in the context of globals and locals.
913
914The source may be a string representing a Python expression
915or a code object as returned by compile().
916The globals must be a dictionary and locals can be any mapping,
917defaulting to the current globals and locals.
918If only globals is given, locals defaults to it.
919[clinic start generated code]*/
920
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000921static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300922builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400923 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300924/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000925{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000926 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200927 const char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 if (locals != Py_None && !PyMapping_Check(locals)) {
930 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
931 return NULL;
932 }
933 if (globals != Py_None && !PyDict_Check(globals)) {
934 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
935 "globals must be a real dict; try eval(expr, {}, mapping)"
936 : "globals must be a dict");
937 return NULL;
938 }
939 if (globals == Py_None) {
940 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100941 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100943 if (locals == NULL)
944 return NULL;
945 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 }
947 else if (locals == Py_None)
948 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 if (globals == NULL || locals == NULL) {
951 PyErr_SetString(PyExc_TypeError,
952 "eval must be given globals and locals "
953 "when called without a frame");
954 return NULL;
955 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000956
Serhiy Storchakab510e102020-10-26 12:47:57 +0200957 int r = _PyDict_ContainsId(globals, &PyId___builtins__);
958 if (r == 0) {
959 r = _PyDict_SetItemId(globals, &PyId___builtins__,
960 PyEval_GetBuiltins());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961 }
Serhiy Storchakab510e102020-10-26 12:47:57 +0200962 if (r < 0) {
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200963 return NULL;
964 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000965
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000966 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -0700967 if (PySys_Audit("exec", "O", source) < 0) {
968 return NULL;
969 }
970
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000971 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 PyErr_SetString(PyExc_TypeError,
Steve Dowerb82e17e2019-05-23 08:45:22 -0700973 "code object passed to eval() may not contain free variables");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 return NULL;
975 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000976 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000978
Victor Stinner37d66d72019-06-13 02:16:41 +0200979 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Dino Viehland41540692019-05-28 16:21:17 -0700981 str = _Py_SourceAsString(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 if (str == NULL)
983 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 while (*str == ' ' || *str == '\t')
986 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000988 (void)PyEval_MergeCompilerFlags(&cf);
989 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000990 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000992}
993
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000994/*[clinic input]
995exec as builtin_exec
996
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300997 source: object
998 globals: object = None
999 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001000 /
1001
1002Execute the given source in the context of globals and locals.
1003
1004The source may be a string representing one or more Python statements
1005or a code object as returned by compile().
1006The globals must be a dictionary and locals can be any mapping,
1007defaulting to the current globals and locals.
1008If only globals is given, locals defaults to it.
1009[clinic start generated code]*/
1010
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001011static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001012builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -04001013 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001014/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +00001015{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001016 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +00001017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 if (globals == Py_None) {
1019 globals = PyEval_GetGlobals();
1020 if (locals == Py_None) {
1021 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01001022 if (locals == NULL)
1023 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 }
1025 if (!globals || !locals) {
1026 PyErr_SetString(PyExc_SystemError,
1027 "globals and locals cannot be NULL");
1028 return NULL;
1029 }
1030 }
1031 else if (locals == Py_None)
1032 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001035 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001036 Py_TYPE(globals)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001037 return NULL;
1038 }
1039 if (!PyMapping_Check(locals)) {
1040 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001041 "locals must be a mapping or None, not %.100s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001042 Py_TYPE(locals)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 return NULL;
1044 }
Serhiy Storchakab510e102020-10-26 12:47:57 +02001045 int r = _PyDict_ContainsId(globals, &PyId___builtins__);
1046 if (r == 0) {
1047 r = _PyDict_SetItemId(globals, &PyId___builtins__,
1048 PyEval_GetBuiltins());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 }
Serhiy Storchakab510e102020-10-26 12:47:57 +02001050 if (r < 0) {
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001051 return NULL;
1052 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001054 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -07001055 if (PySys_Audit("exec", "O", source) < 0) {
1056 return NULL;
1057 }
1058
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001059 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 PyErr_SetString(PyExc_TypeError,
1061 "code object passed to exec() may not "
1062 "contain free variables");
1063 return NULL;
1064 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001065 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001066 }
1067 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001068 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001069 const char *str;
Victor Stinner37d66d72019-06-13 02:16:41 +02001070 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Dino Viehland41540692019-05-28 16:21:17 -07001072 str = _Py_SourceAsString(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001073 "string, bytes or code", &cf,
1074 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 if (str == NULL)
1076 return NULL;
1077 if (PyEval_MergeCompilerFlags(&cf))
1078 v = PyRun_StringFlags(str, Py_file_input, globals,
1079 locals, &cf);
1080 else
1081 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001082 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 }
1084 if (v == NULL)
1085 return NULL;
1086 Py_DECREF(v);
1087 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001088}
1089
Georg Brandl7cae87c2006-09-06 06:51:57 +00001090
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001091/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001093builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001094{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001095 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001096
Serhiy Storchaka79342662019-01-12 08:25:41 +02001097 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001098 return NULL;
1099
Serhiy Storchaka79342662019-01-12 08:25:41 +02001100 v = args[0];
1101 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 if (!PyUnicode_Check(name)) {
1103 PyErr_SetString(PyExc_TypeError,
1104 "getattr(): attribute name must be string");
1105 return NULL;
1106 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001107 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001108 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001109 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001110 Py_INCREF(dflt);
1111 return dflt;
1112 }
1113 }
1114 else {
1115 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 }
1117 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001118}
1119
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001120PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001121"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001122\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001123Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1124When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001125exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001126
1127
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001128/*[clinic input]
1129globals as builtin_globals
1130
1131Return the dictionary containing the current scope's global variables.
1132
1133NOTE: Updates to this dictionary *will* affect name lookups in the current
1134global scope and vice-versa.
1135[clinic start generated code]*/
1136
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001137static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001138builtin_globals_impl(PyObject *module)
1139/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001140{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001141 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001142
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001143 d = PyEval_GetGlobals();
1144 Py_XINCREF(d);
1145 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001146}
1147
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001148
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001149/*[clinic input]
1150hasattr as builtin_hasattr
1151
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001152 obj: object
1153 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001154 /
1155
1156Return whether the object has an attribute with the given name.
1157
1158This is done by calling getattr(obj, name) and catching AttributeError.
1159[clinic start generated code]*/
1160
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001161static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001162builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1163/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001164{
1165 PyObject *v;
1166
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 if (!PyUnicode_Check(name)) {
1168 PyErr_SetString(PyExc_TypeError,
1169 "hasattr(): attribute name must be string");
1170 return NULL;
1171 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001172 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001173 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001175 if (v == NULL) {
1176 Py_RETURN_FALSE;
1177 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001179 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001180}
1181
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001183/* AC: gdb's integration with CPython relies on builtin_id having
1184 * the *exact* parameter names of "self" and "v", so we ensure we
1185 * preserve those name rather than using the AC defaults.
1186 */
1187/*[clinic input]
1188id as builtin_id
1189
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001190 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001191 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001192 /
1193
1194Return the identity of an object.
1195
1196This is guaranteed to be unique among simultaneously existing objects.
1197(CPython uses the object's memory address.)
1198[clinic start generated code]*/
1199
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001201builtin_id(PyModuleDef *self, PyObject *v)
1202/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001203{
Steve Dowerb82e17e2019-05-23 08:45:22 -07001204 PyObject *id = PyLong_FromVoidPtr(v);
1205
1206 if (id && PySys_Audit("builtins.id", "O", id) < 0) {
1207 Py_DECREF(id);
1208 return NULL;
1209 }
1210
1211 return id;
Guido van Rossum5b722181993-03-30 17:46:03 +00001212}
1213
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001214
Raymond Hettingera6c60372008-03-13 01:26:19 +00001215/* map object ************************************************************/
1216
1217typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 PyObject_HEAD
1219 PyObject *iters;
1220 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001221} mapobject;
1222
Guido van Rossum79f25d91997-04-29 20:08:16 +00001223static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001224map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001225{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001226 PyObject *it, *iters, *func;
1227 mapobject *lz;
1228 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001229
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001230 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001232
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001233 numargs = PyTuple_Size(args);
1234 if (numargs < 2) {
1235 PyErr_SetString(PyExc_TypeError,
1236 "map() must have at least two arguments.");
1237 return NULL;
1238 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001240 iters = PyTuple_New(numargs-1);
1241 if (iters == NULL)
1242 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001244 for (i=1 ; i<numargs ; i++) {
1245 /* Get iterator. */
1246 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1247 if (it == NULL) {
1248 Py_DECREF(iters);
1249 return NULL;
1250 }
1251 PyTuple_SET_ITEM(iters, i-1, it);
1252 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001253
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 /* create mapobject structure */
1255 lz = (mapobject *)type->tp_alloc(type, 0);
1256 if (lz == NULL) {
1257 Py_DECREF(iters);
1258 return NULL;
1259 }
1260 lz->iters = iters;
1261 func = PyTuple_GET_ITEM(args, 0);
Dong-hee Na86883d42021-03-22 19:01:14 +09001262 lz->func = Py_NewRef(func);
1263
1264 return (PyObject *)lz;
1265}
1266
1267static PyObject *
1268map_vectorcall(PyObject *type, PyObject * const*args,
1269 size_t nargsf, PyObject *kwnames)
1270{
1271 PyTypeObject *tp = (PyTypeObject *)type;
1272 if (tp == &PyMap_Type && !_PyArg_NoKwnames("map", kwnames)) {
1273 return NULL;
1274 }
1275
1276 Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
1277 if (nargs < 2) {
1278 PyErr_SetString(PyExc_TypeError,
1279 "map() must have at least two arguments.");
1280 return NULL;
1281 }
1282
1283 PyObject *iters = PyTuple_New(nargs-1);
1284 if (iters == NULL) {
1285 return NULL;
1286 }
1287
1288 for (int i=1; i<nargs; i++) {
1289 PyObject *it = PyObject_GetIter(args[i]);
1290 if (it == NULL) {
1291 Py_DECREF(iters);
1292 return NULL;
1293 }
1294 PyTuple_SET_ITEM(iters, i-1, it);
1295 }
1296
1297 mapobject *lz = (mapobject *)tp->tp_alloc(tp, 0);
1298 if (lz == NULL) {
1299 Py_DECREF(iters);
1300 return NULL;
1301 }
1302 lz->iters = iters;
1303 lz->func = Py_NewRef(args[0]);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001304
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001306}
1307
1308static void
1309map_dealloc(mapobject *lz)
1310{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 PyObject_GC_UnTrack(lz);
1312 Py_XDECREF(lz->iters);
1313 Py_XDECREF(lz->func);
1314 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001315}
1316
1317static int
1318map_traverse(mapobject *lz, visitproc visit, void *arg)
1319{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 Py_VISIT(lz->iters);
1321 Py_VISIT(lz->func);
1322 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001323}
1324
1325static PyObject *
1326map_next(mapobject *lz)
1327{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001328 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001329 PyObject **stack;
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001330 PyObject *result = NULL;
Victor Stinner4d231bc2019-11-14 13:36:21 +01001331 PyThreadState *tstate = _PyThreadState_GET();
Raymond Hettingera6c60372008-03-13 01:26:19 +00001332
Victor Stinner4d231bc2019-11-14 13:36:21 +01001333 const Py_ssize_t niters = PyTuple_GET_SIZE(lz->iters);
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001334 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1335 stack = small_stack;
1336 }
1337 else {
1338 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1339 if (stack == NULL) {
Victor Stinner4d231bc2019-11-14 13:36:21 +01001340 _PyErr_NoMemory(tstate);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001341 return NULL;
1342 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001343 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001344
Victor Stinner4d231bc2019-11-14 13:36:21 +01001345 Py_ssize_t nargs = 0;
1346 for (Py_ssize_t i=0; i < niters; i++) {
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001347 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1348 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1349 if (val == NULL) {
1350 goto exit;
1351 }
1352 stack[i] = val;
1353 nargs++;
1354 }
1355
Victor Stinner4d231bc2019-11-14 13:36:21 +01001356 result = _PyObject_VectorcallTstate(tstate, lz->func, stack, nargs, NULL);
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001357
1358exit:
Victor Stinner4d231bc2019-11-14 13:36:21 +01001359 for (Py_ssize_t i=0; i < nargs; i++) {
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001360 Py_DECREF(stack[i]);
1361 }
1362 if (stack != small_stack) {
1363 PyMem_Free(stack);
1364 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001365 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001366}
1367
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001368static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301369map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001370{
1371 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1372 PyObject *args = PyTuple_New(numargs+1);
1373 Py_ssize_t i;
1374 if (args == NULL)
1375 return NULL;
1376 Py_INCREF(lz->func);
1377 PyTuple_SET_ITEM(args, 0, lz->func);
1378 for (i = 0; i<numargs; i++){
1379 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1380 Py_INCREF(it);
1381 PyTuple_SET_ITEM(args, i+1, it);
1382 }
1383
1384 return Py_BuildValue("ON", Py_TYPE(lz), args);
1385}
1386
1387static PyMethodDef map_methods[] = {
1388 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1389 {NULL, NULL} /* sentinel */
1390};
1391
1392
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001393PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001394"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001395\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001396Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001397each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001398
Raymond Hettingera6c60372008-03-13 01:26:19 +00001399PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001400 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1401 "map", /* tp_name */
1402 sizeof(mapobject), /* tp_basicsize */
1403 0, /* tp_itemsize */
1404 /* methods */
1405 (destructor)map_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001406 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001407 0, /* tp_getattr */
1408 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001409 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001410 0, /* tp_repr */
1411 0, /* tp_as_number */
1412 0, /* tp_as_sequence */
1413 0, /* tp_as_mapping */
1414 0, /* tp_hash */
1415 0, /* tp_call */
1416 0, /* tp_str */
1417 PyObject_GenericGetAttr, /* tp_getattro */
1418 0, /* tp_setattro */
1419 0, /* tp_as_buffer */
1420 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1421 Py_TPFLAGS_BASETYPE, /* tp_flags */
1422 map_doc, /* tp_doc */
1423 (traverseproc)map_traverse, /* tp_traverse */
1424 0, /* tp_clear */
1425 0, /* tp_richcompare */
1426 0, /* tp_weaklistoffset */
1427 PyObject_SelfIter, /* tp_iter */
1428 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001429 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001430 0, /* tp_members */
1431 0, /* tp_getset */
1432 0, /* tp_base */
1433 0, /* tp_dict */
1434 0, /* tp_descr_get */
1435 0, /* tp_descr_set */
1436 0, /* tp_dictoffset */
1437 0, /* tp_init */
1438 PyType_GenericAlloc, /* tp_alloc */
1439 map_new, /* tp_new */
1440 PyObject_GC_Del, /* tp_free */
Dong-hee Na86883d42021-03-22 19:01:14 +09001441 .tp_vectorcall = (vectorcallfunc)map_vectorcall
Raymond Hettingera6c60372008-03-13 01:26:19 +00001442};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001443
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001444
1445/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001446static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001447builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001448{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001450
Serhiy Storchaka79342662019-01-12 08:25:41 +02001451 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001452 return NULL;
1453
Serhiy Storchaka79342662019-01-12 08:25:41 +02001454 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001455 if (!PyIter_Check(it)) {
1456 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001457 "'%.200s' object is not an iterator",
Victor Stinnera102ed72020-02-07 02:24:48 +01001458 Py_TYPE(it)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 return NULL;
1460 }
1461
Victor Stinnera102ed72020-02-07 02:24:48 +01001462 res = (*Py_TYPE(it)->tp_iternext)(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001463 if (res != NULL) {
1464 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001465 } else if (nargs > 1) {
1466 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001467 if (PyErr_Occurred()) {
1468 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1469 return NULL;
1470 PyErr_Clear();
1471 }
1472 Py_INCREF(def);
1473 return def;
1474 } else if (PyErr_Occurred()) {
1475 return NULL;
1476 } else {
1477 PyErr_SetNone(PyExc_StopIteration);
1478 return NULL;
1479 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001480}
1481
1482PyDoc_STRVAR(next_doc,
1483"next(iterator[, default])\n\
1484\n\
1485Return the next item from the iterator. If default is given and the iterator\n\
1486is exhausted, it is returned instead of raising StopIteration.");
1487
1488
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001489/*[clinic input]
1490setattr as builtin_setattr
1491
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001492 obj: object
1493 name: object
1494 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001495 /
1496
1497Sets the named attribute on the given object to the specified value.
1498
1499setattr(x, 'y', v) is equivalent to ``x.y = v''
1500[clinic start generated code]*/
1501
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001502static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001503builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001504 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001505/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001506{
1507 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001508 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001509 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001510}
1511
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001512
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001513/*[clinic input]
1514delattr as builtin_delattr
1515
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001516 obj: object
1517 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001518 /
1519
1520Deletes the named attribute from the given object.
1521
1522delattr(x, 'y') is equivalent to ``del x.y''
1523[clinic start generated code]*/
1524
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001525static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001526builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1527/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001528{
1529 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001530 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001531 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001532}
1533
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001534
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001535/*[clinic input]
1536hash as builtin_hash
1537
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001538 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001539 /
1540
1541Return the hash value for the given object.
1542
1543Two objects that compare equal must also have the same hash value, but the
1544reverse is not necessarily true.
1545[clinic start generated code]*/
1546
Guido van Rossum79f25d91997-04-29 20:08:16 +00001547static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001548builtin_hash(PyObject *module, PyObject *obj)
1549/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001550{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001551 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001552
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001553 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 if (x == -1)
1555 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001556 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001557}
1558
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001559
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001560/*[clinic input]
1561hex as builtin_hex
1562
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001563 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001564 /
1565
1566Return the hexadecimal representation of an integer.
1567
1568 >>> hex(12648430)
1569 '0xc0ffee'
1570[clinic start generated code]*/
1571
Guido van Rossum79f25d91997-04-29 20:08:16 +00001572static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001573builtin_hex(PyObject *module, PyObject *number)
1574/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001575{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001576 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001577}
1578
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001579
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001580/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001581static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001582builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001583{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001584 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001585
Serhiy Storchaka79342662019-01-12 08:25:41 +02001586 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001587 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001588 v = args[0];
1589 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001590 return PyObject_GetIter(v);
1591 if (!PyCallable_Check(v)) {
1592 PyErr_SetString(PyExc_TypeError,
1593 "iter(v, w): v must be callable");
1594 return NULL;
1595 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001596 PyObject *sentinel = args[1];
1597 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001598}
1599
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001600PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001601"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001602iter(callable, sentinel) -> iterator\n\
1603\n\
1604Get an iterator from an object. In the first form, the argument must\n\
1605supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001606In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001607
1608
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001609/*[clinic input]
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04001610aiter as builtin_aiter
1611
1612 async_iterable: object
1613 /
1614
1615Return an AsyncIterator for an AsyncIterable object.
1616[clinic start generated code]*/
1617
1618static PyObject *
1619builtin_aiter(PyObject *module, PyObject *async_iterable)
1620/*[clinic end generated code: output=1bae108d86f7960e input=473993d0cacc7d23]*/
1621{
1622 return PyObject_GetAiter(async_iterable);
1623}
1624
1625PyObject *PyAnextAwaitable_New(PyObject *, PyObject *);
1626
1627/*[clinic input]
1628anext as builtin_anext
1629
1630 aiterator: object
1631 default: object = NULL
1632 /
1633
1634Return the next item from the async iterator.
1635[clinic start generated code]*/
1636
1637static PyObject *
1638builtin_anext_impl(PyObject *module, PyObject *aiterator,
1639 PyObject *default_value)
1640/*[clinic end generated code: output=f02c060c163a81fa input=699d11f4e38eca24]*/
1641{
1642 PyTypeObject *t;
1643 PyObject *awaitable;
1644
1645 t = Py_TYPE(aiterator);
1646 if (t->tp_as_async == NULL || t->tp_as_async->am_anext == NULL) {
1647 PyErr_Format(PyExc_TypeError,
1648 "'%.200s' object is not an async iterator",
1649 t->tp_name);
1650 return NULL;
1651 }
1652
1653 awaitable = (*t->tp_as_async->am_anext)(aiterator);
1654 if (default_value == NULL) {
1655 return awaitable;
1656 }
1657
Pablo Galindoa02683a2021-03-24 01:42:13 +00001658 PyObject* new_awaitable = PyAnextAwaitable_New(
1659 awaitable, default_value);
1660 Py_DECREF(awaitable);
1661 return new_awaitable;
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04001662}
1663
1664
1665/*[clinic input]
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001666len as builtin_len
1667
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001668 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001669 /
1670
1671Return the number of items in a container.
1672[clinic start generated code]*/
1673
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001674static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001675builtin_len(PyObject *module, PyObject *obj)
1676/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001677{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001679
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001680 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001681 if (res < 0) {
1682 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001684 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686}
1687
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001688
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001689/*[clinic input]
1690locals as builtin_locals
1691
1692Return a dictionary containing the current scope's local variables.
1693
1694NOTE: Whether or not updates to this dictionary will affect name lookups in
1695the local scope and vice-versa is *implementation dependent* and not
1696covered by any backwards compatibility guarantees.
1697[clinic start generated code]*/
1698
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001699static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001700builtin_locals_impl(PyObject *module)
1701/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001702{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001705 d = PyEval_GetLocals();
1706 Py_XINCREF(d);
1707 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001708}
1709
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001710
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001712min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001713{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001714 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001715 PyObject *emptytuple, *defaultval = NULL;
1716 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001717 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001718 const int positional = PyTuple_Size(args) > 1;
1719 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001720
Dong-hee Naabdc6342020-01-11 01:31:43 +09001721 if (positional) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 v = args;
Dong-hee Naabdc6342020-01-11 01:31:43 +09001723 }
1724 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) {
1725 if (PyExceptionClass_Check(PyExc_TypeError)) {
1726 PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name);
1727 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001728 return NULL;
Dong-hee Naabdc6342020-01-11 01:31:43 +09001729 }
Tim Peters67d687a2002-04-29 21:27:32 +00001730
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001731 emptytuple = PyTuple_New(0);
1732 if (emptytuple == NULL)
1733 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001734 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1735 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1736 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001737 Py_DECREF(emptytuple);
1738 if (!ret)
1739 return NULL;
1740
1741 if (positional && defaultval != NULL) {
1742 PyErr_Format(PyExc_TypeError,
1743 "Cannot specify a default for %s() with multiple "
1744 "positional arguments", name);
1745 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001746 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 it = PyObject_GetIter(v);
1749 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 return NULL;
1751 }
Tim Petersc3074532001-05-03 07:00:32 +00001752
Alexander Marshalove22072f2018-07-24 10:58:21 +07001753 if (keyfunc == Py_None) {
1754 keyfunc = NULL;
1755 }
1756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 maxitem = NULL; /* the result */
1758 maxval = NULL; /* the value associated with the result */
1759 while (( item = PyIter_Next(it) )) {
1760 /* get the value from the key function */
1761 if (keyfunc != NULL) {
Petr Viktorinffd97532020-02-11 17:46:57 +01001762 val = PyObject_CallOneArg(keyfunc, item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 if (val == NULL)
1764 goto Fail_it_item;
1765 }
1766 /* no key function; the value is the item */
1767 else {
1768 val = item;
1769 Py_INCREF(val);
1770 }
Tim Petersc3074532001-05-03 07:00:32 +00001771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 /* maximum value and item are unset; set them */
1773 if (maxval == NULL) {
1774 maxitem = item;
1775 maxval = val;
1776 }
1777 /* maximum value and item are set; update them as necessary */
1778 else {
1779 int cmp = PyObject_RichCompareBool(val, maxval, op);
1780 if (cmp < 0)
1781 goto Fail_it_item_and_val;
1782 else if (cmp > 0) {
1783 Py_DECREF(maxval);
1784 Py_DECREF(maxitem);
1785 maxval = val;
1786 maxitem = item;
1787 }
1788 else {
1789 Py_DECREF(item);
1790 Py_DECREF(val);
1791 }
1792 }
1793 }
1794 if (PyErr_Occurred())
1795 goto Fail_it;
1796 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001798 if (defaultval != NULL) {
1799 Py_INCREF(defaultval);
1800 maxitem = defaultval;
1801 } else {
1802 PyErr_Format(PyExc_ValueError,
1803 "%s() arg is an empty sequence", name);
1804 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 }
1806 else
1807 Py_DECREF(maxval);
1808 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001809 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001810
1811Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001812 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001813Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001815Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 Py_XDECREF(maxval);
1817 Py_XDECREF(maxitem);
1818 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001819 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001820}
1821
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001822/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001823static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001824builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001827}
1828
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001829PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001830"min(iterable, *[, default=obj, key=func]) -> value\n\
1831min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001832\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001833With a single iterable argument, return its smallest item. The\n\
1834default keyword-only argument specifies an object to return if\n\
1835the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001836With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001837
1838
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001839/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001840static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001841builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001842{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001844}
1845
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001846PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001847"max(iterable, *[, default=obj, key=func]) -> value\n\
1848max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001849\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001850With a single iterable argument, return its biggest item. The\n\
1851default keyword-only argument specifies an object to return if\n\
1852the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001853With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001854
1855
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001856/*[clinic input]
1857oct as builtin_oct
1858
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001859 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001860 /
1861
1862Return the octal representation of an integer.
1863
1864 >>> oct(342391)
1865 '0o1234567'
1866[clinic start generated code]*/
1867
Guido van Rossum79f25d91997-04-29 20:08:16 +00001868static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001869builtin_oct(PyObject *module, PyObject *number)
1870/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001871{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001872 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001873}
1874
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001875
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001876/*[clinic input]
1877ord as builtin_ord
1878
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001879 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001880 /
1881
1882Return the Unicode code point for a one-character string.
1883[clinic start generated code]*/
1884
Guido van Rossum79f25d91997-04-29 20:08:16 +00001885static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001886builtin_ord(PyObject *module, PyObject *c)
1887/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001888{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001889 long ord;
1890 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001891
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001892 if (PyBytes_Check(c)) {
1893 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001895 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001896 return PyLong_FromLong(ord);
1897 }
1898 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001899 else if (PyUnicode_Check(c)) {
1900 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001901 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001902 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001904 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001905 return PyLong_FromLong(ord);
1906 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001908 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001909 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001910 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001912 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 return PyLong_FromLong(ord);
1914 }
1915 }
1916 else {
1917 PyErr_Format(PyExc_TypeError,
1918 "ord() expected string of length 1, but " \
Victor Stinnera102ed72020-02-07 02:24:48 +01001919 "%.200s found", Py_TYPE(c)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 return NULL;
1921 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001923 PyErr_Format(PyExc_TypeError,
1924 "ord() expected a character, "
1925 "but string of length %zd found",
1926 size);
1927 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001928}
1929
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001930
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001931/*[clinic input]
1932pow as builtin_pow
1933
Ammar Askar87d6cd32019-09-21 00:28:49 -04001934 base: object
1935 exp: object
1936 mod: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001937
Raymond Hettingerb104ecb2019-09-21 12:57:44 -07001938Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001939
1940Some types, such as ints, are able to use a more efficient algorithm when
1941invoked using the three argument form.
1942[clinic start generated code]*/
1943
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001944static PyObject *
Ammar Askar87d6cd32019-09-21 00:28:49 -04001945builtin_pow_impl(PyObject *module, PyObject *base, PyObject *exp,
1946 PyObject *mod)
Raymond Hettingerb104ecb2019-09-21 12:57:44 -07001947/*[clinic end generated code: output=3ca1538221bbf15f input=435dbd48a12efb23]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001948{
Ammar Askar87d6cd32019-09-21 00:28:49 -04001949 return PyNumber_Power(base, exp, mod);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001950}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001951
1952
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001953/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001954static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001955builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001956{
INADA Naokibd584f12017-01-19 12:50:34 +01001957 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001958 static struct _PyArg_Parser _parser = {"|OOOp:print", _keywords, 0};
1959 PyObject *sep = NULL, *end = NULL, *file = NULL;
1960 int flush = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001962
INADA Naokibd584f12017-01-19 12:50:34 +01001963 if (kwnames != NULL &&
1964 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1965 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001966 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001967 }
1968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001970 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001971 if (file == NULL) {
1972 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1973 return NULL;
1974 }
1975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001976 /* sys.stdout may be None when FILE* stdout isn't connected */
1977 if (file == Py_None)
1978 Py_RETURN_NONE;
1979 }
Guido van Rossum34343512006-11-30 22:13:52 +00001980
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001981 if (sep == Py_None) {
1982 sep = NULL;
1983 }
1984 else if (sep && !PyUnicode_Check(sep)) {
1985 PyErr_Format(PyExc_TypeError,
1986 "sep must be None or a string, not %.200s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001987 Py_TYPE(sep)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001988 return NULL;
1989 }
1990 if (end == Py_None) {
1991 end = NULL;
1992 }
1993 else if (end && !PyUnicode_Check(end)) {
1994 PyErr_Format(PyExc_TypeError,
1995 "end must be None or a string, not %.200s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001996 Py_TYPE(end)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 return NULL;
1998 }
Guido van Rossum34343512006-11-30 22:13:52 +00001999
INADA Naokibd584f12017-01-19 12:50:34 +01002000 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002001 if (i > 0) {
2002 if (sep == NULL)
2003 err = PyFile_WriteString(" ", file);
2004 else
2005 err = PyFile_WriteObject(sep, file,
2006 Py_PRINT_RAW);
2007 if (err)
2008 return NULL;
2009 }
INADA Naokibd584f12017-01-19 12:50:34 +01002010 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002011 if (err)
2012 return NULL;
2013 }
Guido van Rossum34343512006-11-30 22:13:52 +00002014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 if (end == NULL)
2016 err = PyFile_WriteString("\n", file);
2017 else
2018 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
2019 if (err)
2020 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00002021
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03002022 if (flush) {
2023 PyObject *tmp = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
2024 if (tmp == NULL)
Georg Brandlbc3b6822012-01-13 19:41:25 +01002025 return NULL;
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03002026 Py_DECREF(tmp);
Georg Brandlbc3b6822012-01-13 19:41:25 +01002027 }
2028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002029 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00002030}
2031
2032PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07002033"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00002034\n\
2035Prints the values to a stream, or to sys.stdout by default.\n\
2036Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07002037file: a file-like object (stream); defaults to the current sys.stdout.\n\
2038sep: string inserted between values, default a space.\n\
2039end: string appended after the last value, default a newline.\n\
2040flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00002041
2042
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002043/*[clinic input]
2044input as builtin_input
2045
2046 prompt: object(c_default="NULL") = None
2047 /
2048
2049Read a string from standard input. The trailing newline is stripped.
2050
2051The prompt string, if given, is printed to standard output without a
2052trailing newline before reading input.
2053
2054If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
2055On *nix systems, readline is used if available.
2056[clinic start generated code]*/
2057
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002058static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002059builtin_input_impl(PyObject *module, PyObject *prompt)
2060/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002061{
Victor Stinnerbd303c12013-11-07 23:07:29 +01002062 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
2063 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
2064 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002065 PyObject *tmp;
2066 long fd;
2067 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00002068
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 /* Check that stdin/out/err are intact */
2070 if (fin == NULL || fin == Py_None) {
2071 PyErr_SetString(PyExc_RuntimeError,
2072 "input(): lost sys.stdin");
2073 return NULL;
2074 }
2075 if (fout == NULL || fout == Py_None) {
2076 PyErr_SetString(PyExc_RuntimeError,
2077 "input(): lost sys.stdout");
2078 return NULL;
2079 }
2080 if (ferr == NULL || ferr == Py_None) {
2081 PyErr_SetString(PyExc_RuntimeError,
2082 "input(): lost sys.stderr");
2083 return NULL;
2084 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002085
Steve Dowerb82e17e2019-05-23 08:45:22 -07002086 if (PySys_Audit("builtins.input", "O", prompt ? prompt : Py_None) < 0) {
2087 return NULL;
2088 }
2089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 /* First of all, flush stderr */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002091 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 if (tmp == NULL)
2093 PyErr_Clear();
2094 else
2095 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00002096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 /* We should only use (GNU) readline if Python's sys.stdin and
2098 sys.stdout are the same as C's stdin and stdout, because we
2099 need to pass it those. */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002100 tmp = _PyObject_CallMethodIdNoArgs(fin, &PyId_fileno);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002101 if (tmp == NULL) {
2102 PyErr_Clear();
2103 tty = 0;
2104 }
2105 else {
2106 fd = PyLong_AsLong(tmp);
2107 Py_DECREF(tmp);
2108 if (fd < 0 && PyErr_Occurred())
2109 return NULL;
2110 tty = fd == fileno(stdin) && isatty(fd);
2111 }
2112 if (tty) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002113 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno);
Martin Panterc9a6ab52015-10-10 01:25:38 +00002114 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002115 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00002116 tty = 0;
2117 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 else {
2119 fd = PyLong_AsLong(tmp);
2120 Py_DECREF(tmp);
2121 if (fd < 0 && PyErr_Occurred())
2122 return NULL;
2123 tty = fd == fileno(stdout) && isatty(fd);
2124 }
2125 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002127 /* If we're interactive, use (GNU) readline */
2128 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002129 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02002130 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002131 char *s = NULL;
2132 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2133 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002134 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002136 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002137
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002138 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002139 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002140 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002141 if (!stdin_encoding || !stdin_errors ||
2142 !PyUnicode_Check(stdin_encoding) ||
2143 !PyUnicode_Check(stdin_errors)) {
2144 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002145 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002146 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002147 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2148 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002149 if (!stdin_encoding_str || !stdin_errors_str)
2150 goto _readline_errors;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002151 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 if (tmp == NULL)
2153 PyErr_Clear();
2154 else
2155 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002156 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002157 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002158 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002159 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002160 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002161 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002162 if (!stdout_encoding || !stdout_errors ||
2163 !PyUnicode_Check(stdout_encoding) ||
2164 !PyUnicode_Check(stdout_errors)) {
2165 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002166 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002167 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002168 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2169 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002170 if (!stdout_encoding_str || !stdout_errors_str)
2171 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002172 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002173 if (stringpo == NULL)
2174 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002175 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002176 stdout_encoding_str, stdout_errors_str);
2177 Py_CLEAR(stdout_encoding);
2178 Py_CLEAR(stdout_errors);
2179 Py_CLEAR(stringpo);
2180 if (po == NULL)
2181 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002182 assert(PyBytes_Check(po));
2183 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 }
2185 else {
2186 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002187 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002188 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002189 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002191 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 if (!PyErr_Occurred())
2193 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002194 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002195 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002196
2197 len = strlen(s);
2198 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 PyErr_SetNone(PyExc_EOFError);
2200 result = NULL;
2201 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002202 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002203 if (len > PY_SSIZE_T_MAX) {
2204 PyErr_SetString(PyExc_OverflowError,
2205 "input: input too long");
2206 result = NULL;
2207 }
2208 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002209 len--; /* strip trailing '\n' */
2210 if (len != 0 && s[len-1] == '\r')
2211 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002212 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2213 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002214 }
2215 }
2216 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002217 Py_DECREF(stdin_errors);
2218 Py_XDECREF(po);
Victor Stinner00d7abd2020-12-01 09:56:42 +01002219 PyMem_Free(s);
Steve Dowerb82e17e2019-05-23 08:45:22 -07002220
2221 if (result != NULL) {
2222 if (PySys_Audit("builtins.input/result", "O", result) < 0) {
2223 return NULL;
2224 }
2225 }
2226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002228
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002229 _readline_errors:
2230 Py_XDECREF(stdin_encoding);
2231 Py_XDECREF(stdout_encoding);
2232 Py_XDECREF(stdin_errors);
2233 Py_XDECREF(stdout_errors);
2234 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002235 if (tty)
2236 return NULL;
2237
2238 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002239 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002242 if (prompt != NULL) {
2243 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002244 return NULL;
2245 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002246 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002247 if (tmp == NULL)
2248 PyErr_Clear();
2249 else
2250 Py_DECREF(tmp);
2251 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002252}
2253
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002254
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002255/*[clinic input]
2256repr as builtin_repr
2257
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002258 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002259 /
2260
2261Return the canonical string representation of the object.
2262
2263For many object types, including most builtins, eval(repr(obj)) == obj.
2264[clinic start generated code]*/
2265
Guido van Rossum79f25d91997-04-29 20:08:16 +00002266static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002267builtin_repr(PyObject *module, PyObject *obj)
2268/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002269{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002270 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002271}
2272
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002273
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002274/*[clinic input]
2275round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002276
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002277 number: object
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002278 ndigits: object = None
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002279
2280Round a number to a given precision in decimal digits.
2281
2282The return value is an integer if ndigits is omitted or None. Otherwise
2283the return value has the same type as the number. ndigits may be negative.
2284[clinic start generated code]*/
2285
2286static PyObject *
2287builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002288/*[clinic end generated code: output=ff0d9dd176c02ede input=275678471d7aca15]*/
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002289{
2290 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002292 if (Py_TYPE(number)->tp_dict == NULL) {
2293 if (PyType_Ready(Py_TYPE(number)) < 0)
2294 return NULL;
2295 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002296
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002297 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002298 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002299 if (!PyErr_Occurred())
2300 PyErr_Format(PyExc_TypeError,
2301 "type %.100s doesn't define __round__ method",
2302 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 return NULL;
2304 }
Alex Martelliae211f92007-08-22 23:21:33 +00002305
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002306 if (ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002307 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002308 else
Petr Viktorinffd97532020-02-11 17:46:57 +01002309 result = PyObject_CallOneArg(round, ndigits);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002310 Py_DECREF(round);
2311 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002312}
2313
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002314
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002315/*AC: we need to keep the kwds dict intact to easily call into the
2316 * list.sort method, which isn't currently supported in AC. So we just use
2317 * the initially generated signature with a custom implementation.
2318 */
2319/* [disabled clinic input]
2320sorted as builtin_sorted
2321
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002322 iterable as seq: object
2323 key as keyfunc: object = None
2324 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002325
2326Return a new list containing all items from the iterable in ascending order.
2327
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002328A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002329reverse flag can be set to request the result in descending order.
2330[end disabled clinic input]*/
2331
2332PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002333"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002334"--\n"
2335"\n"
2336"Return a new list containing all items from the iterable in ascending order.\n"
2337"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002338"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002339"reverse flag can be set to request the result in descending order.");
2340
2341#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002342 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002343
Raymond Hettinger64958a12003-12-17 20:43:33 +00002344static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002345builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002346{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002347 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002348
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002349 /* Keyword arguments are passed through list.sort() which will check
2350 them. */
2351 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002354 newlist = PySequence_List(seq);
2355 if (newlist == NULL)
2356 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002357
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002358 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002359 if (callable == NULL) {
2360 Py_DECREF(newlist);
2361 return NULL;
2362 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002363
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002364 assert(nargs >= 1);
Petr Viktorinffd97532020-02-11 17:46:57 +01002365 v = PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002366 Py_DECREF(callable);
2367 if (v == NULL) {
2368 Py_DECREF(newlist);
2369 return NULL;
2370 }
2371 Py_DECREF(v);
2372 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002373}
2374
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002375
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002376/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002377static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002378builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002379{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002380 PyObject *v = NULL;
2381 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002383 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2384 return NULL;
2385 if (v == NULL) {
2386 d = PyEval_GetLocals();
Serhiy Storchaka41c57b32019-09-01 12:03:39 +03002387 Py_XINCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002388 }
2389 else {
Serhiy Storchaka41c57b32019-09-01 12:03:39 +03002390 if (_PyObject_LookupAttrId(v, &PyId___dict__, &d) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002391 PyErr_SetString(PyExc_TypeError,
2392 "vars() argument must have __dict__ attribute");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002393 }
2394 }
2395 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002396}
2397
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002398PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002399"vars([object]) -> dictionary\n\
2400\n\
2401Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002402With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002403
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002404
2405/*[clinic input]
2406sum as builtin_sum
2407
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002408 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002409 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002410 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002411
2412Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2413
2414When the iterable is empty, return the start value.
2415This function is intended specifically for use with numeric values and may
2416reject non-numeric types.
2417[clinic start generated code]*/
2418
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002419static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002420builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002421/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002422{
2423 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002425
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002426 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 if (iter == NULL)
2428 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002430 if (result == NULL) {
2431 result = PyLong_FromLong(0);
2432 if (result == NULL) {
2433 Py_DECREF(iter);
2434 return NULL;
2435 }
2436 } else {
2437 /* reject string values for 'start' parameter */
2438 if (PyUnicode_Check(result)) {
2439 PyErr_SetString(PyExc_TypeError,
2440 "sum() can't sum strings [use ''.join(seq) instead]");
2441 Py_DECREF(iter);
2442 return NULL;
2443 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002444 if (PyBytes_Check(result)) {
2445 PyErr_SetString(PyExc_TypeError,
2446 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002447 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002448 return NULL;
2449 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002450 if (PyByteArray_Check(result)) {
2451 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002452 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002453 Py_DECREF(iter);
2454 return NULL;
2455 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002456 Py_INCREF(result);
2457 }
Alex Martellia70b1912003-04-22 08:12:33 +00002458
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002459#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2461 Assumes all inputs are the same type. If the assumption fails, default
2462 to the more general routine.
2463 */
2464 if (PyLong_CheckExact(result)) {
2465 int overflow;
2466 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2467 /* If this already overflowed, don't even enter the loop. */
2468 if (overflow == 0) {
2469 Py_DECREF(result);
2470 result = NULL;
2471 }
2472 while(result == NULL) {
2473 item = PyIter_Next(iter);
2474 if (item == NULL) {
2475 Py_DECREF(iter);
2476 if (PyErr_Occurred())
2477 return NULL;
2478 return PyLong_FromLong(i_result);
2479 }
Serhiy Storchaka88bdb922019-09-10 16:31:01 +03002480 if (PyLong_CheckExact(item) || PyBool_Check(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002481 long b = PyLong_AsLongAndOverflow(item, &overflow);
Serhiy Storchaka29500732019-05-05 14:26:23 +03002482 if (overflow == 0 &&
2483 (i_result >= 0 ? (b <= LONG_MAX - i_result)
2484 : (b >= LONG_MIN - i_result)))
2485 {
2486 i_result += b;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 Py_DECREF(item);
2488 continue;
2489 }
2490 }
2491 /* Either overflowed or is not an int. Restore real objects and process normally */
2492 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002493 if (result == NULL) {
2494 Py_DECREF(item);
2495 Py_DECREF(iter);
2496 return NULL;
2497 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002498 temp = PyNumber_Add(result, item);
2499 Py_DECREF(result);
2500 Py_DECREF(item);
2501 result = temp;
2502 if (result == NULL) {
2503 Py_DECREF(iter);
2504 return NULL;
2505 }
2506 }
2507 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 if (PyFloat_CheckExact(result)) {
2510 double f_result = PyFloat_AS_DOUBLE(result);
2511 Py_DECREF(result);
2512 result = NULL;
2513 while(result == NULL) {
2514 item = PyIter_Next(iter);
2515 if (item == NULL) {
2516 Py_DECREF(iter);
2517 if (PyErr_Occurred())
2518 return NULL;
2519 return PyFloat_FromDouble(f_result);
2520 }
2521 if (PyFloat_CheckExact(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002522 f_result += PyFloat_AS_DOUBLE(item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002523 Py_DECREF(item);
2524 continue;
2525 }
Serhiy Storchaka88bdb922019-09-10 16:31:01 +03002526 if (PyLong_Check(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 long value;
2528 int overflow;
2529 value = PyLong_AsLongAndOverflow(item, &overflow);
2530 if (!overflow) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 f_result += (double)value;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002532 Py_DECREF(item);
2533 continue;
2534 }
2535 }
2536 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002537 if (result == NULL) {
2538 Py_DECREF(item);
2539 Py_DECREF(iter);
2540 return NULL;
2541 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 temp = PyNumber_Add(result, item);
2543 Py_DECREF(result);
2544 Py_DECREF(item);
2545 result = temp;
2546 if (result == NULL) {
2547 Py_DECREF(iter);
2548 return NULL;
2549 }
2550 }
2551 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002552#endif
2553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002554 for(;;) {
2555 item = PyIter_Next(iter);
2556 if (item == NULL) {
2557 /* error, or end-of-sequence */
2558 if (PyErr_Occurred()) {
2559 Py_DECREF(result);
2560 result = NULL;
2561 }
2562 break;
2563 }
2564 /* It's tempting to use PyNumber_InPlaceAdd instead of
2565 PyNumber_Add here, to avoid quadratic running time
2566 when doing 'sum(list_of_lists, [])'. However, this
2567 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002569 empty = []
2570 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002571
Brandt Bucherabb9a442020-02-01 03:08:34 -08002572 would change the value of empty. In fact, using
2573 in-place addition rather that binary addition for
2574 any of the steps introduces subtle behavior changes:
Victor Stinner58f4e1a2020-02-05 18:24:33 +01002575
Brandt Bucherabb9a442020-02-01 03:08:34 -08002576 https://bugs.python.org/issue18305 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 temp = PyNumber_Add(result, item);
2578 Py_DECREF(result);
2579 Py_DECREF(item);
2580 result = temp;
2581 if (result == NULL)
2582 break;
2583 }
2584 Py_DECREF(iter);
2585 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002586}
2587
Alex Martellia70b1912003-04-22 08:12:33 +00002588
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002589/*[clinic input]
2590isinstance as builtin_isinstance
2591
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002592 obj: object
2593 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002594 /
2595
2596Return whether an object is an instance of a class or of a subclass thereof.
2597
2598A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2599check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2600or ...`` etc.
2601[clinic start generated code]*/
2602
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002603static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002604builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002605 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002606/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002607{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002608 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002609
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002610 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 if (retval < 0)
2612 return NULL;
2613 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002614}
2615
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002616
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002617/*[clinic input]
2618issubclass as builtin_issubclass
2619
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002620 cls: object
2621 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002622 /
2623
Alex Poveldf773f82020-06-03 15:19:45 +02002624Return whether 'cls' is derived from another class or is the same class.
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002625
2626A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2627check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
Alex Poveldf773f82020-06-03 15:19:45 +02002628or ...``.
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002629[clinic start generated code]*/
2630
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002631static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002632builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002633 PyObject *class_or_tuple)
Alex Poveldf773f82020-06-03 15:19:45 +02002634/*[clinic end generated code: output=358412410cd7a250 input=a24b9f3d58c370d6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002635{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002636 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002637
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002638 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002639 if (retval < 0)
2640 return NULL;
2641 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002642}
2643
2644
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002645typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002646 PyObject_HEAD
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002647 Py_ssize_t tuplesize;
2648 PyObject *ittuple; /* tuple of iterators */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002649 PyObject *result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002650 int strict;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002651} zipobject;
2652
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002653static PyObject *
2654zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002655{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002656 zipobject *lz;
2657 Py_ssize_t i;
2658 PyObject *ittuple; /* tuple of iterators */
2659 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002660 Py_ssize_t tuplesize;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002661 int strict = 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002662
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002663 if (kwds) {
2664 PyObject *empty = PyTuple_New(0);
2665 if (empty == NULL) {
2666 return NULL;
2667 }
2668 static char *kwlist[] = {"strict", NULL};
2669 int parsed = PyArg_ParseTupleAndKeywords(
2670 empty, kwds, "|$p:zip", kwlist, &strict);
2671 Py_DECREF(empty);
2672 if (!parsed) {
2673 return NULL;
2674 }
2675 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002677 /* args must be a tuple */
2678 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002679 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002681 /* obtain iterators */
2682 ittuple = PyTuple_New(tuplesize);
2683 if (ittuple == NULL)
2684 return NULL;
2685 for (i=0; i < tuplesize; ++i) {
2686 PyObject *item = PyTuple_GET_ITEM(args, i);
2687 PyObject *it = PyObject_GetIter(item);
2688 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002689 Py_DECREF(ittuple);
2690 return NULL;
2691 }
2692 PyTuple_SET_ITEM(ittuple, i, it);
2693 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002695 /* create a result holder */
2696 result = PyTuple_New(tuplesize);
2697 if (result == NULL) {
2698 Py_DECREF(ittuple);
2699 return NULL;
2700 }
2701 for (i=0 ; i < tuplesize ; i++) {
2702 Py_INCREF(Py_None);
2703 PyTuple_SET_ITEM(result, i, Py_None);
2704 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002706 /* create zipobject structure */
2707 lz = (zipobject *)type->tp_alloc(type, 0);
2708 if (lz == NULL) {
2709 Py_DECREF(ittuple);
2710 Py_DECREF(result);
2711 return NULL;
2712 }
2713 lz->ittuple = ittuple;
2714 lz->tuplesize = tuplesize;
2715 lz->result = result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002716 lz->strict = strict;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002718 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002719}
2720
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002721static void
2722zip_dealloc(zipobject *lz)
2723{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002724 PyObject_GC_UnTrack(lz);
2725 Py_XDECREF(lz->ittuple);
2726 Py_XDECREF(lz->result);
2727 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002728}
2729
2730static int
2731zip_traverse(zipobject *lz, visitproc visit, void *arg)
2732{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002733 Py_VISIT(lz->ittuple);
2734 Py_VISIT(lz->result);
2735 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002736}
2737
2738static PyObject *
2739zip_next(zipobject *lz)
2740{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 Py_ssize_t i;
2742 Py_ssize_t tuplesize = lz->tuplesize;
2743 PyObject *result = lz->result;
2744 PyObject *it;
2745 PyObject *item;
2746 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002748 if (tuplesize == 0)
2749 return NULL;
2750 if (Py_REFCNT(result) == 1) {
2751 Py_INCREF(result);
2752 for (i=0 ; i < tuplesize ; i++) {
2753 it = PyTuple_GET_ITEM(lz->ittuple, i);
2754 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002755 if (item == NULL) {
2756 Py_DECREF(result);
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002757 if (lz->strict) {
2758 goto check;
2759 }
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002760 return NULL;
2761 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002762 olditem = PyTuple_GET_ITEM(result, i);
2763 PyTuple_SET_ITEM(result, i, item);
2764 Py_DECREF(olditem);
2765 }
Brandt Bucher226a0122020-12-04 19:45:57 -08002766 // bpo-42536: The GC may have untracked this result tuple. Since we're
2767 // recycling it, make sure it's tracked again:
2768 if (!_PyObject_GC_IS_TRACKED(result)) {
2769 _PyObject_GC_TRACK(result);
2770 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002771 } else {
2772 result = PyTuple_New(tuplesize);
2773 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002774 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002775 for (i=0 ; i < tuplesize ; i++) {
2776 it = PyTuple_GET_ITEM(lz->ittuple, i);
2777 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002778 if (item == NULL) {
2779 Py_DECREF(result);
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002780 if (lz->strict) {
2781 goto check;
2782 }
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002783 return NULL;
2784 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002785 PyTuple_SET_ITEM(result, i, item);
2786 }
2787 }
2788 return result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002789check:
2790 if (PyErr_Occurred()) {
2791 if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
2792 // next() on argument i raised an exception (not StopIteration)
2793 return NULL;
2794 }
2795 PyErr_Clear();
2796 }
2797 if (i) {
2798 // ValueError: zip() argument 2 is shorter than argument 1
2799 // ValueError: zip() argument 3 is shorter than arguments 1-2
2800 const char* plural = i == 1 ? " " : "s 1-";
2801 return PyErr_Format(PyExc_ValueError,
2802 "zip() argument %d is shorter than argument%s%d",
2803 i + 1, plural, i);
2804 }
2805 for (i = 1; i < tuplesize; i++) {
2806 it = PyTuple_GET_ITEM(lz->ittuple, i);
2807 item = (*Py_TYPE(it)->tp_iternext)(it);
2808 if (item) {
2809 Py_DECREF(item);
2810 const char* plural = i == 1 ? " " : "s 1-";
2811 return PyErr_Format(PyExc_ValueError,
2812 "zip() argument %d is longer than argument%s%d",
2813 i + 1, plural, i);
2814 }
2815 if (PyErr_Occurred()) {
2816 if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
2817 // next() on argument i raised an exception (not StopIteration)
2818 return NULL;
2819 }
2820 PyErr_Clear();
2821 }
2822 // Argument i is exhausted. So far so good...
2823 }
2824 // All arguments are exhausted. Success!
2825 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002826}
Barry Warsawbd599b52000-08-03 15:45:29 +00002827
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002828static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302829zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002830{
2831 /* Just recreate the zip with the internal iterator tuple */
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002832 if (lz->strict) {
2833 return PyTuple_Pack(3, Py_TYPE(lz), lz->ittuple, Py_True);
2834 }
2835 return PyTuple_Pack(2, Py_TYPE(lz), lz->ittuple);
2836}
2837
2838PyDoc_STRVAR(setstate_doc, "Set state information for unpickling.");
2839
2840static PyObject *
2841zip_setstate(zipobject *lz, PyObject *state)
2842{
2843 int strict = PyObject_IsTrue(state);
2844 if (strict < 0) {
2845 return NULL;
2846 }
2847 lz->strict = strict;
2848 Py_RETURN_NONE;
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002849}
2850
2851static PyMethodDef zip_methods[] = {
2852 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002853 {"__setstate__", (PyCFunction)zip_setstate, METH_O, setstate_doc},
2854 {NULL} /* sentinel */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002855};
2856
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002857PyDoc_STRVAR(zip_doc,
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002858"zip(*iterables, strict=False) --> Yield tuples until an input is exhausted.\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002859\n\
Gregory P. Smith6a5d3ff2020-05-15 14:26:00 -07002860 >>> list(zip('abcdefg', range(3), range(4)))\n\
2861 [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]\n\
2862\n\
2863The zip object yields n-length tuples, where n is the number of iterables\n\
2864passed as positional arguments to zip(). The i-th element in every tuple\n\
2865comes from the i-th iterable argument to zip(). This continues until the\n\
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002866shortest argument is exhausted.\n\
2867\n\
2868If strict is true and one of the arguments is exhausted before the others,\n\
2869raise a ValueError.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002870
2871PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002872 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2873 "zip", /* tp_name */
2874 sizeof(zipobject), /* tp_basicsize */
2875 0, /* tp_itemsize */
2876 /* methods */
2877 (destructor)zip_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002878 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002879 0, /* tp_getattr */
2880 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002881 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002882 0, /* tp_repr */
2883 0, /* tp_as_number */
2884 0, /* tp_as_sequence */
2885 0, /* tp_as_mapping */
2886 0, /* tp_hash */
2887 0, /* tp_call */
2888 0, /* tp_str */
2889 PyObject_GenericGetAttr, /* tp_getattro */
2890 0, /* tp_setattro */
2891 0, /* tp_as_buffer */
2892 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2893 Py_TPFLAGS_BASETYPE, /* tp_flags */
2894 zip_doc, /* tp_doc */
2895 (traverseproc)zip_traverse, /* tp_traverse */
2896 0, /* tp_clear */
2897 0, /* tp_richcompare */
2898 0, /* tp_weaklistoffset */
2899 PyObject_SelfIter, /* tp_iter */
2900 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002901 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002902 0, /* tp_members */
2903 0, /* tp_getset */
2904 0, /* tp_base */
2905 0, /* tp_dict */
2906 0, /* tp_descr_get */
2907 0, /* tp_descr_set */
2908 0, /* tp_dictoffset */
2909 0, /* tp_init */
2910 PyType_GenericAlloc, /* tp_alloc */
2911 zip_new, /* tp_new */
2912 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002913};
Barry Warsawbd599b52000-08-03 15:45:29 +00002914
2915
Guido van Rossum79f25d91997-04-29 20:08:16 +00002916static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002917 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002918 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002919 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002920 BUILTIN_ABS_METHODDEF
2921 BUILTIN_ALL_METHODDEF
2922 BUILTIN_ANY_METHODDEF
2923 BUILTIN_ASCII_METHODDEF
2924 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002925 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002926 BUILTIN_CALLABLE_METHODDEF
2927 BUILTIN_CHR_METHODDEF
2928 BUILTIN_COMPILE_METHODDEF
2929 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002930 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002931 BUILTIN_DIVMOD_METHODDEF
2932 BUILTIN_EVAL_METHODDEF
2933 BUILTIN_EXEC_METHODDEF
2934 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002935 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002936 BUILTIN_GLOBALS_METHODDEF
2937 BUILTIN_HASATTR_METHODDEF
2938 BUILTIN_HASH_METHODDEF
2939 BUILTIN_HEX_METHODDEF
2940 BUILTIN_ID_METHODDEF
2941 BUILTIN_INPUT_METHODDEF
2942 BUILTIN_ISINSTANCE_METHODDEF
2943 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002944 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04002945 BUILTIN_AITER_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002946 BUILTIN_LEN_METHODDEF
2947 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002948 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2949 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2950 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04002951 BUILTIN_ANEXT_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002952 BUILTIN_OCT_METHODDEF
2953 BUILTIN_ORD_METHODDEF
2954 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002955 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002956 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002957 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002958 BUILTIN_SETATTR_METHODDEF
2959 BUILTIN_SORTED_METHODDEF
2960 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002961 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2962 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002963};
2964
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002965PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002966"Built-in functions, exceptions, and other objects.\n\
2967\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002968Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002969
Martin v. Löwis1a214512008-06-11 05:26:20 +00002970static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002971 PyModuleDef_HEAD_INIT,
2972 "builtins",
2973 builtin_doc,
2974 -1, /* multiple "initialization" just copies the module dict. */
2975 builtin_methods,
2976 NULL,
2977 NULL,
2978 NULL,
2979 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002980};
2981
2982
Guido van Rossum25ce5661997-08-02 03:10:38 +00002983PyObject *
Victor Stinnerbcb094b2021-02-19 15:10:45 +01002984_PyBuiltin_Init(PyInterpreterState *interp)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002985{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002986 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002987
Victor Stinnerbcb094b2021-02-19 15:10:45 +01002988 const PyConfig *config = _PyInterpreterState_GetConfig(interp);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002989
Benjamin Peterson42124a72012-10-30 23:41:54 -04002990 if (PyType_Ready(&PyFilter_Type) < 0 ||
2991 PyType_Ready(&PyMap_Type) < 0 ||
2992 PyType_Ready(&PyZip_Type) < 0)
2993 return NULL;
2994
Eric Snowd393c1b2017-09-14 12:18:12 -06002995 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002996 if (mod == NULL)
2997 return NULL;
2998 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002999
Tim Peters7571a0f2003-03-23 17:52:28 +00003000#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003001 /* "builtins" exposes a number of statically allocated objects
3002 * that, before this code was added in 2.3, never showed up in
3003 * the list of "all objects" maintained by Py_TRACE_REFS. As a
3004 * result, programs leaking references to None and False (etc)
3005 * couldn't be diagnosed by examining sys.getobjects(0).
3006 */
Tim Peters7571a0f2003-03-23 17:52:28 +00003007#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
3008#else
3009#define ADD_TO_ALL(OBJECT) (void)0
3010#endif
3011
Tim Peters4b7625e2001-09-13 21:37:17 +00003012#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003013 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
3014 return NULL; \
3015 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00003016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003017 SETBUILTIN("None", Py_None);
3018 SETBUILTIN("Ellipsis", Py_Ellipsis);
3019 SETBUILTIN("NotImplemented", Py_NotImplemented);
3020 SETBUILTIN("False", Py_False);
3021 SETBUILTIN("True", Py_True);
3022 SETBUILTIN("bool", &PyBool_Type);
3023 SETBUILTIN("memoryview", &PyMemoryView_Type);
3024 SETBUILTIN("bytearray", &PyByteArray_Type);
3025 SETBUILTIN("bytes", &PyBytes_Type);
3026 SETBUILTIN("classmethod", &PyClassMethod_Type);
3027 SETBUILTIN("complex", &PyComplex_Type);
3028 SETBUILTIN("dict", &PyDict_Type);
3029 SETBUILTIN("enumerate", &PyEnum_Type);
3030 SETBUILTIN("filter", &PyFilter_Type);
3031 SETBUILTIN("float", &PyFloat_Type);
3032 SETBUILTIN("frozenset", &PyFrozenSet_Type);
3033 SETBUILTIN("property", &PyProperty_Type);
3034 SETBUILTIN("int", &PyLong_Type);
3035 SETBUILTIN("list", &PyList_Type);
3036 SETBUILTIN("map", &PyMap_Type);
3037 SETBUILTIN("object", &PyBaseObject_Type);
3038 SETBUILTIN("range", &PyRange_Type);
3039 SETBUILTIN("reversed", &PyReversed_Type);
3040 SETBUILTIN("set", &PySet_Type);
3041 SETBUILTIN("slice", &PySlice_Type);
3042 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
3043 SETBUILTIN("str", &PyUnicode_Type);
3044 SETBUILTIN("super", &PySuper_Type);
3045 SETBUILTIN("tuple", &PyTuple_Type);
3046 SETBUILTIN("type", &PyType_Type);
3047 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02003048 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003049 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03003050 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003051 return NULL;
3052 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03003053 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00003054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003055 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00003056#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00003057#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00003058}