blob: fd9b97f8e90d4152970130c41bd72465f710386b [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 Stinner94faa072021-03-23 20:47:40 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
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
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 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);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 if (mod == NULL) {
835 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000836 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000837 }
Victor Stinnereec8e612021-03-18 14:57:49 +0100838 if (!_PyAST_Validate(mod)) {
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500839 PyArena_Free(arena);
840 goto error;
841 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200842 result = (PyObject*)PyAST_CompileObject(mod, filename,
843 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 PyArena_Free(arena);
845 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000846 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000848
Dino Viehland41540692019-05-28 16:21:17 -0700849 str = _Py_SourceAsString(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000850 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000851 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000852
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000853 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Guido van Rossumc001c092020-04-30 12:12:19 -0700854
Martin Panter61d6e4a2015-11-07 02:56:11 +0000855 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000856 goto finally;
857
858error:
859 result = NULL;
860finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200861 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000862 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000863}
864
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000865/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000866static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000867builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000868{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000869 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000870
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
872 return NULL;
873 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000874}
875
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000876PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000877"dir([object]) -> list of strings\n"
878"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000879"If called without an argument, return the names in the current scope.\n"
880"Else, return an alphabetized list of names comprising (some of) the attributes\n"
881"of the given object, and of attributes reachable from it.\n"
882"If the object supplies a method named __dir__, it will be used; otherwise\n"
883"the default dir() logic is used and returns:\n"
884" for a module object: the module's attributes.\n"
885" for a class object: its attributes, and recursively the attributes\n"
886" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000887" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000888" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000889
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000890/*[clinic input]
891divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000892
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300893 x: object
894 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000895 /
896
Zachary Ware7f227d92016-04-28 14:39:50 -0500897Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000898[clinic start generated code]*/
899
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000900static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300901builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
902/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000903{
904 return PyNumber_Divmod(x, y);
905}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000906
907
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000908/*[clinic input]
909eval as builtin_eval
910
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300911 source: object
912 globals: object = None
913 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000914 /
915
916Evaluate the given source in the context of globals and locals.
917
918The source may be a string representing a Python expression
919or a code object as returned by compile().
920The globals must be a dictionary and locals can be any mapping,
921defaulting to the current globals and locals.
922If only globals is given, locals defaults to it.
923[clinic start generated code]*/
924
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000925static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300926builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400927 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300928/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000929{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000930 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200931 const char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 if (locals != Py_None && !PyMapping_Check(locals)) {
934 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
935 return NULL;
936 }
937 if (globals != Py_None && !PyDict_Check(globals)) {
938 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
939 "globals must be a real dict; try eval(expr, {}, mapping)"
940 : "globals must be a dict");
941 return NULL;
942 }
943 if (globals == Py_None) {
944 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100945 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100947 if (locals == NULL)
948 return NULL;
949 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 }
951 else if (locals == Py_None)
952 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000953
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 if (globals == NULL || locals == NULL) {
955 PyErr_SetString(PyExc_TypeError,
956 "eval must be given globals and locals "
957 "when called without a frame");
958 return NULL;
959 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000960
Serhiy Storchakab510e102020-10-26 12:47:57 +0200961 int r = _PyDict_ContainsId(globals, &PyId___builtins__);
962 if (r == 0) {
963 r = _PyDict_SetItemId(globals, &PyId___builtins__,
964 PyEval_GetBuiltins());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 }
Serhiy Storchakab510e102020-10-26 12:47:57 +0200966 if (r < 0) {
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200967 return NULL;
968 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000969
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000970 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -0700971 if (PySys_Audit("exec", "O", source) < 0) {
972 return NULL;
973 }
974
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000975 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 PyErr_SetString(PyExc_TypeError,
Steve Dowerb82e17e2019-05-23 08:45:22 -0700977 "code object passed to eval() may not contain free variables");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 return NULL;
979 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000980 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000982
Victor Stinner37d66d72019-06-13 02:16:41 +0200983 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Dino Viehland41540692019-05-28 16:21:17 -0700985 str = _Py_SourceAsString(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 if (str == NULL)
987 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000988
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000989 while (*str == ' ' || *str == '\t')
990 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 (void)PyEval_MergeCompilerFlags(&cf);
993 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000994 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000995 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000996}
997
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000998/*[clinic input]
999exec as builtin_exec
1000
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001001 source: object
1002 globals: object = None
1003 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001004 /
1005
1006Execute the given source in the context of globals and locals.
1007
1008The source may be a string representing one or more Python statements
1009or a code object as returned by compile().
1010The globals must be a dictionary and locals can be any mapping,
1011defaulting to the current globals and locals.
1012If only globals is given, locals defaults to it.
1013[clinic start generated code]*/
1014
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001015static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001016builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -04001017 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001018/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +00001019{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +00001021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 if (globals == Py_None) {
1023 globals = PyEval_GetGlobals();
1024 if (locals == Py_None) {
1025 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01001026 if (locals == NULL)
1027 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 }
1029 if (!globals || !locals) {
1030 PyErr_SetString(PyExc_SystemError,
1031 "globals and locals cannot be NULL");
1032 return NULL;
1033 }
1034 }
1035 else if (locals == Py_None)
1036 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001039 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001040 Py_TYPE(globals)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 return NULL;
1042 }
1043 if (!PyMapping_Check(locals)) {
1044 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001045 "locals must be a mapping or None, not %.100s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001046 Py_TYPE(locals)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 return NULL;
1048 }
Serhiy Storchakab510e102020-10-26 12:47:57 +02001049 int r = _PyDict_ContainsId(globals, &PyId___builtins__);
1050 if (r == 0) {
1051 r = _PyDict_SetItemId(globals, &PyId___builtins__,
1052 PyEval_GetBuiltins());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 }
Serhiy Storchakab510e102020-10-26 12:47:57 +02001054 if (r < 0) {
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001055 return NULL;
1056 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001058 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -07001059 if (PySys_Audit("exec", "O", source) < 0) {
1060 return NULL;
1061 }
1062
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001063 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 PyErr_SetString(PyExc_TypeError,
1065 "code object passed to exec() may not "
1066 "contain free variables");
1067 return NULL;
1068 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001069 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 }
1071 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001072 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001073 const char *str;
Victor Stinner37d66d72019-06-13 02:16:41 +02001074 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Dino Viehland41540692019-05-28 16:21:17 -07001076 str = _Py_SourceAsString(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001077 "string, bytes or code", &cf,
1078 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 if (str == NULL)
1080 return NULL;
1081 if (PyEval_MergeCompilerFlags(&cf))
1082 v = PyRun_StringFlags(str, Py_file_input, globals,
1083 locals, &cf);
1084 else
1085 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001086 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 }
1088 if (v == NULL)
1089 return NULL;
1090 Py_DECREF(v);
1091 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001092}
1093
Georg Brandl7cae87c2006-09-06 06:51:57 +00001094
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001095/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001096static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001097builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001098{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001099 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100
Serhiy Storchaka79342662019-01-12 08:25:41 +02001101 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001102 return NULL;
1103
Serhiy Storchaka79342662019-01-12 08:25:41 +02001104 v = args[0];
1105 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 if (!PyUnicode_Check(name)) {
1107 PyErr_SetString(PyExc_TypeError,
1108 "getattr(): attribute name must be string");
1109 return NULL;
1110 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001111 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001112 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001113 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001114 Py_INCREF(dflt);
1115 return dflt;
1116 }
1117 }
1118 else {
1119 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 }
1121 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001122}
1123
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001124PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001125"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001126\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001127Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1128When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001129exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001130
1131
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001132/*[clinic input]
1133globals as builtin_globals
1134
1135Return the dictionary containing the current scope's global variables.
1136
1137NOTE: Updates to this dictionary *will* affect name lookups in the current
1138global scope and vice-versa.
1139[clinic start generated code]*/
1140
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001141static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001142builtin_globals_impl(PyObject *module)
1143/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001144{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001145 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 d = PyEval_GetGlobals();
1148 Py_XINCREF(d);
1149 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001150}
1151
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001153/*[clinic input]
1154hasattr as builtin_hasattr
1155
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001156 obj: object
1157 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001158 /
1159
1160Return whether the object has an attribute with the given name.
1161
1162This is done by calling getattr(obj, name) and catching AttributeError.
1163[clinic start generated code]*/
1164
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001165static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001166builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1167/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001168{
1169 PyObject *v;
1170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 if (!PyUnicode_Check(name)) {
1172 PyErr_SetString(PyExc_TypeError,
1173 "hasattr(): attribute name must be string");
1174 return NULL;
1175 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001176 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001177 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001179 if (v == NULL) {
1180 Py_RETURN_FALSE;
1181 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001183 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001184}
1185
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001187/* AC: gdb's integration with CPython relies on builtin_id having
1188 * the *exact* parameter names of "self" and "v", so we ensure we
1189 * preserve those name rather than using the AC defaults.
1190 */
1191/*[clinic input]
1192id as builtin_id
1193
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001194 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001195 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001196 /
1197
1198Return the identity of an object.
1199
1200This is guaranteed to be unique among simultaneously existing objects.
1201(CPython uses the object's memory address.)
1202[clinic start generated code]*/
1203
Guido van Rossum79f25d91997-04-29 20:08:16 +00001204static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001205builtin_id(PyModuleDef *self, PyObject *v)
1206/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001207{
Steve Dowerb82e17e2019-05-23 08:45:22 -07001208 PyObject *id = PyLong_FromVoidPtr(v);
1209
1210 if (id && PySys_Audit("builtins.id", "O", id) < 0) {
1211 Py_DECREF(id);
1212 return NULL;
1213 }
1214
1215 return id;
Guido van Rossum5b722181993-03-30 17:46:03 +00001216}
1217
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001218
Raymond Hettingera6c60372008-03-13 01:26:19 +00001219/* map object ************************************************************/
1220
1221typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 PyObject_HEAD
1223 PyObject *iters;
1224 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001225} mapobject;
1226
Guido van Rossum79f25d91997-04-29 20:08:16 +00001227static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001228map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001229{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 PyObject *it, *iters, *func;
1231 mapobject *lz;
1232 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001233
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001234 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001237 numargs = PyTuple_Size(args);
1238 if (numargs < 2) {
1239 PyErr_SetString(PyExc_TypeError,
1240 "map() must have at least two arguments.");
1241 return NULL;
1242 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001244 iters = PyTuple_New(numargs-1);
1245 if (iters == NULL)
1246 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 for (i=1 ; i<numargs ; i++) {
1249 /* Get iterator. */
1250 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1251 if (it == NULL) {
1252 Py_DECREF(iters);
1253 return NULL;
1254 }
1255 PyTuple_SET_ITEM(iters, i-1, it);
1256 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001257
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 /* create mapobject structure */
1259 lz = (mapobject *)type->tp_alloc(type, 0);
1260 if (lz == NULL) {
1261 Py_DECREF(iters);
1262 return NULL;
1263 }
1264 lz->iters = iters;
1265 func = PyTuple_GET_ITEM(args, 0);
Dong-hee Na86883d42021-03-22 19:01:14 +09001266 lz->func = Py_NewRef(func);
1267
1268 return (PyObject *)lz;
1269}
1270
1271static PyObject *
1272map_vectorcall(PyObject *type, PyObject * const*args,
1273 size_t nargsf, PyObject *kwnames)
1274{
1275 PyTypeObject *tp = (PyTypeObject *)type;
1276 if (tp == &PyMap_Type && !_PyArg_NoKwnames("map", kwnames)) {
1277 return NULL;
1278 }
1279
1280 Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
1281 if (nargs < 2) {
1282 PyErr_SetString(PyExc_TypeError,
1283 "map() must have at least two arguments.");
1284 return NULL;
1285 }
1286
1287 PyObject *iters = PyTuple_New(nargs-1);
1288 if (iters == NULL) {
1289 return NULL;
1290 }
1291
1292 for (int i=1; i<nargs; i++) {
1293 PyObject *it = PyObject_GetIter(args[i]);
1294 if (it == NULL) {
1295 Py_DECREF(iters);
1296 return NULL;
1297 }
1298 PyTuple_SET_ITEM(iters, i-1, it);
1299 }
1300
1301 mapobject *lz = (mapobject *)tp->tp_alloc(tp, 0);
1302 if (lz == NULL) {
1303 Py_DECREF(iters);
1304 return NULL;
1305 }
1306 lz->iters = iters;
1307 lz->func = Py_NewRef(args[0]);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001309 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001310}
1311
1312static void
1313map_dealloc(mapobject *lz)
1314{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 PyObject_GC_UnTrack(lz);
1316 Py_XDECREF(lz->iters);
1317 Py_XDECREF(lz->func);
1318 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001319}
1320
1321static int
1322map_traverse(mapobject *lz, visitproc visit, void *arg)
1323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001324 Py_VISIT(lz->iters);
1325 Py_VISIT(lz->func);
1326 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001327}
1328
1329static PyObject *
1330map_next(mapobject *lz)
1331{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001332 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001333 PyObject **stack;
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001334 PyObject *result = NULL;
Victor Stinner4d231bc2019-11-14 13:36:21 +01001335 PyThreadState *tstate = _PyThreadState_GET();
Raymond Hettingera6c60372008-03-13 01:26:19 +00001336
Victor Stinner4d231bc2019-11-14 13:36:21 +01001337 const Py_ssize_t niters = PyTuple_GET_SIZE(lz->iters);
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001338 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1339 stack = small_stack;
1340 }
1341 else {
1342 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1343 if (stack == NULL) {
Victor Stinner4d231bc2019-11-14 13:36:21 +01001344 _PyErr_NoMemory(tstate);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001345 return NULL;
1346 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001348
Victor Stinner4d231bc2019-11-14 13:36:21 +01001349 Py_ssize_t nargs = 0;
1350 for (Py_ssize_t i=0; i < niters; i++) {
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001351 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1352 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1353 if (val == NULL) {
1354 goto exit;
1355 }
1356 stack[i] = val;
1357 nargs++;
1358 }
1359
Victor Stinner4d231bc2019-11-14 13:36:21 +01001360 result = _PyObject_VectorcallTstate(tstate, lz->func, stack, nargs, NULL);
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001361
1362exit:
Victor Stinner4d231bc2019-11-14 13:36:21 +01001363 for (Py_ssize_t i=0; i < nargs; i++) {
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001364 Py_DECREF(stack[i]);
1365 }
1366 if (stack != small_stack) {
1367 PyMem_Free(stack);
1368 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001370}
1371
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001372static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301373map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001374{
1375 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1376 PyObject *args = PyTuple_New(numargs+1);
1377 Py_ssize_t i;
1378 if (args == NULL)
1379 return NULL;
1380 Py_INCREF(lz->func);
1381 PyTuple_SET_ITEM(args, 0, lz->func);
1382 for (i = 0; i<numargs; i++){
1383 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1384 Py_INCREF(it);
1385 PyTuple_SET_ITEM(args, i+1, it);
1386 }
1387
1388 return Py_BuildValue("ON", Py_TYPE(lz), args);
1389}
1390
1391static PyMethodDef map_methods[] = {
1392 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1393 {NULL, NULL} /* sentinel */
1394};
1395
1396
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001397PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001398"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001399\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001400Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001401each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001402
Raymond Hettingera6c60372008-03-13 01:26:19 +00001403PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1405 "map", /* tp_name */
1406 sizeof(mapobject), /* tp_basicsize */
1407 0, /* tp_itemsize */
1408 /* methods */
1409 (destructor)map_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001410 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001411 0, /* tp_getattr */
1412 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001413 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 0, /* tp_repr */
1415 0, /* tp_as_number */
1416 0, /* tp_as_sequence */
1417 0, /* tp_as_mapping */
1418 0, /* tp_hash */
1419 0, /* tp_call */
1420 0, /* tp_str */
1421 PyObject_GenericGetAttr, /* tp_getattro */
1422 0, /* tp_setattro */
1423 0, /* tp_as_buffer */
1424 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1425 Py_TPFLAGS_BASETYPE, /* tp_flags */
1426 map_doc, /* tp_doc */
1427 (traverseproc)map_traverse, /* tp_traverse */
1428 0, /* tp_clear */
1429 0, /* tp_richcompare */
1430 0, /* tp_weaklistoffset */
1431 PyObject_SelfIter, /* tp_iter */
1432 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001433 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001434 0, /* tp_members */
1435 0, /* tp_getset */
1436 0, /* tp_base */
1437 0, /* tp_dict */
1438 0, /* tp_descr_get */
1439 0, /* tp_descr_set */
1440 0, /* tp_dictoffset */
1441 0, /* tp_init */
1442 PyType_GenericAlloc, /* tp_alloc */
1443 map_new, /* tp_new */
1444 PyObject_GC_Del, /* tp_free */
Dong-hee Na86883d42021-03-22 19:01:14 +09001445 .tp_vectorcall = (vectorcallfunc)map_vectorcall
Raymond Hettingera6c60372008-03-13 01:26:19 +00001446};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001447
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001448
1449/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001450static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001451builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001452{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001453 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001454
Serhiy Storchaka79342662019-01-12 08:25:41 +02001455 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001456 return NULL;
1457
Serhiy Storchaka79342662019-01-12 08:25:41 +02001458 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 if (!PyIter_Check(it)) {
1460 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001461 "'%.200s' object is not an iterator",
Victor Stinnera102ed72020-02-07 02:24:48 +01001462 Py_TYPE(it)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001463 return NULL;
1464 }
1465
Victor Stinnera102ed72020-02-07 02:24:48 +01001466 res = (*Py_TYPE(it)->tp_iternext)(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001467 if (res != NULL) {
1468 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001469 } else if (nargs > 1) {
1470 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001471 if (PyErr_Occurred()) {
1472 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1473 return NULL;
1474 PyErr_Clear();
1475 }
1476 Py_INCREF(def);
1477 return def;
1478 } else if (PyErr_Occurred()) {
1479 return NULL;
1480 } else {
1481 PyErr_SetNone(PyExc_StopIteration);
1482 return NULL;
1483 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001484}
1485
1486PyDoc_STRVAR(next_doc,
1487"next(iterator[, default])\n\
1488\n\
1489Return the next item from the iterator. If default is given and the iterator\n\
1490is exhausted, it is returned instead of raising StopIteration.");
1491
1492
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001493/*[clinic input]
1494setattr as builtin_setattr
1495
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001496 obj: object
1497 name: object
1498 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001499 /
1500
1501Sets the named attribute on the given object to the specified value.
1502
1503setattr(x, 'y', v) is equivalent to ``x.y = v''
1504[clinic start generated code]*/
1505
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001506static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001507builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001508 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001509/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001510{
1511 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001512 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001513 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001514}
1515
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001516
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001517/*[clinic input]
1518delattr as builtin_delattr
1519
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001520 obj: object
1521 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001522 /
1523
1524Deletes the named attribute from the given object.
1525
1526delattr(x, 'y') is equivalent to ``del x.y''
1527[clinic start generated code]*/
1528
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001529static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001530builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1531/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001532{
1533 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001534 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001535 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001536}
1537
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001538
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001539/*[clinic input]
1540hash as builtin_hash
1541
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001542 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001543 /
1544
1545Return the hash value for the given object.
1546
1547Two objects that compare equal must also have the same hash value, but the
1548reverse is not necessarily true.
1549[clinic start generated code]*/
1550
Guido van Rossum79f25d91997-04-29 20:08:16 +00001551static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001552builtin_hash(PyObject *module, PyObject *obj)
1553/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001554{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001555 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001556
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001557 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001558 if (x == -1)
1559 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001560 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001561}
1562
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001563
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001564/*[clinic input]
1565hex as builtin_hex
1566
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001567 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001568 /
1569
1570Return the hexadecimal representation of an integer.
1571
1572 >>> hex(12648430)
1573 '0xc0ffee'
1574[clinic start generated code]*/
1575
Guido van Rossum79f25d91997-04-29 20:08:16 +00001576static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001577builtin_hex(PyObject *module, PyObject *number)
1578/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001579{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001580 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001581}
1582
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001583
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001584/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001585static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001586builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001587{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001588 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001589
Serhiy Storchaka79342662019-01-12 08:25:41 +02001590 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001591 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001592 v = args[0];
1593 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001594 return PyObject_GetIter(v);
1595 if (!PyCallable_Check(v)) {
1596 PyErr_SetString(PyExc_TypeError,
1597 "iter(v, w): v must be callable");
1598 return NULL;
1599 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001600 PyObject *sentinel = args[1];
1601 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001602}
1603
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001604PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001605"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001606iter(callable, sentinel) -> iterator\n\
1607\n\
1608Get an iterator from an object. In the first form, the argument must\n\
1609supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001610In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001611
1612
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001613/*[clinic input]
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04001614aiter as builtin_aiter
1615
1616 async_iterable: object
1617 /
1618
1619Return an AsyncIterator for an AsyncIterable object.
1620[clinic start generated code]*/
1621
1622static PyObject *
1623builtin_aiter(PyObject *module, PyObject *async_iterable)
1624/*[clinic end generated code: output=1bae108d86f7960e input=473993d0cacc7d23]*/
1625{
1626 return PyObject_GetAiter(async_iterable);
1627}
1628
1629PyObject *PyAnextAwaitable_New(PyObject *, PyObject *);
1630
1631/*[clinic input]
1632anext as builtin_anext
1633
1634 aiterator: object
1635 default: object = NULL
1636 /
1637
1638Return the next item from the async iterator.
1639[clinic start generated code]*/
1640
1641static PyObject *
1642builtin_anext_impl(PyObject *module, PyObject *aiterator,
1643 PyObject *default_value)
1644/*[clinic end generated code: output=f02c060c163a81fa input=699d11f4e38eca24]*/
1645{
1646 PyTypeObject *t;
1647 PyObject *awaitable;
1648
1649 t = Py_TYPE(aiterator);
1650 if (t->tp_as_async == NULL || t->tp_as_async->am_anext == NULL) {
1651 PyErr_Format(PyExc_TypeError,
1652 "'%.200s' object is not an async iterator",
1653 t->tp_name);
1654 return NULL;
1655 }
1656
1657 awaitable = (*t->tp_as_async->am_anext)(aiterator);
1658 if (default_value == NULL) {
1659 return awaitable;
1660 }
1661
1662 return PyAnextAwaitable_New(awaitable, default_value);
1663}
1664
1665
1666/*[clinic input]
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001667len as builtin_len
1668
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001669 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001670 /
1671
1672Return the number of items in a container.
1673[clinic start generated code]*/
1674
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001675static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001676builtin_len(PyObject *module, PyObject *obj)
1677/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001678{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001680
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001681 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001682 if (res < 0) {
1683 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001685 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001686 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001687}
1688
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001689
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001690/*[clinic input]
1691locals as builtin_locals
1692
1693Return a dictionary containing the current scope's local variables.
1694
1695NOTE: Whether or not updates to this dictionary will affect name lookups in
1696the local scope and vice-versa is *implementation dependent* and not
1697covered by any backwards compatibility guarantees.
1698[clinic start generated code]*/
1699
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001700static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001701builtin_locals_impl(PyObject *module)
1702/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001703{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001704 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 d = PyEval_GetLocals();
1707 Py_XINCREF(d);
1708 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001709}
1710
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001711
Guido van Rossum79f25d91997-04-29 20:08:16 +00001712static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001713min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001714{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001715 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001716 PyObject *emptytuple, *defaultval = NULL;
1717 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001718 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001719 const int positional = PyTuple_Size(args) > 1;
1720 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001721
Dong-hee Naabdc6342020-01-11 01:31:43 +09001722 if (positional) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001723 v = args;
Dong-hee Naabdc6342020-01-11 01:31:43 +09001724 }
1725 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) {
1726 if (PyExceptionClass_Check(PyExc_TypeError)) {
1727 PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name);
1728 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 return NULL;
Dong-hee Naabdc6342020-01-11 01:31:43 +09001730 }
Tim Peters67d687a2002-04-29 21:27:32 +00001731
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001732 emptytuple = PyTuple_New(0);
1733 if (emptytuple == NULL)
1734 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001735 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1736 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1737 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001738 Py_DECREF(emptytuple);
1739 if (!ret)
1740 return NULL;
1741
1742 if (positional && defaultval != NULL) {
1743 PyErr_Format(PyExc_TypeError,
1744 "Cannot specify a default for %s() with multiple "
1745 "positional arguments", name);
1746 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001747 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001748
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001749 it = PyObject_GetIter(v);
1750 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 return NULL;
1752 }
Tim Petersc3074532001-05-03 07:00:32 +00001753
Alexander Marshalove22072f2018-07-24 10:58:21 +07001754 if (keyfunc == Py_None) {
1755 keyfunc = NULL;
1756 }
1757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 maxitem = NULL; /* the result */
1759 maxval = NULL; /* the value associated with the result */
1760 while (( item = PyIter_Next(it) )) {
1761 /* get the value from the key function */
1762 if (keyfunc != NULL) {
Petr Viktorinffd97532020-02-11 17:46:57 +01001763 val = PyObject_CallOneArg(keyfunc, item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001764 if (val == NULL)
1765 goto Fail_it_item;
1766 }
1767 /* no key function; the value is the item */
1768 else {
1769 val = item;
1770 Py_INCREF(val);
1771 }
Tim Petersc3074532001-05-03 07:00:32 +00001772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 /* maximum value and item are unset; set them */
1774 if (maxval == NULL) {
1775 maxitem = item;
1776 maxval = val;
1777 }
1778 /* maximum value and item are set; update them as necessary */
1779 else {
1780 int cmp = PyObject_RichCompareBool(val, maxval, op);
1781 if (cmp < 0)
1782 goto Fail_it_item_and_val;
1783 else if (cmp > 0) {
1784 Py_DECREF(maxval);
1785 Py_DECREF(maxitem);
1786 maxval = val;
1787 maxitem = item;
1788 }
1789 else {
1790 Py_DECREF(item);
1791 Py_DECREF(val);
1792 }
1793 }
1794 }
1795 if (PyErr_Occurred())
1796 goto Fail_it;
1797 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001798 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001799 if (defaultval != NULL) {
1800 Py_INCREF(defaultval);
1801 maxitem = defaultval;
1802 } else {
1803 PyErr_Format(PyExc_ValueError,
1804 "%s() arg is an empty sequence", name);
1805 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 }
1807 else
1808 Py_DECREF(maxval);
1809 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001811
1812Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001813 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001814Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001815 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001816Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001817 Py_XDECREF(maxval);
1818 Py_XDECREF(maxitem);
1819 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001820 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001821}
1822
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001823/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001825builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001826{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001827 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001828}
1829
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001830PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001831"min(iterable, *[, default=obj, key=func]) -> value\n\
1832min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001833\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001834With a single iterable argument, return its smallest item. The\n\
1835default keyword-only argument specifies an object to return if\n\
1836the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001837With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001838
1839
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001840/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001841static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001842builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001843{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001844 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001845}
1846
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001847PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001848"max(iterable, *[, default=obj, key=func]) -> value\n\
1849max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001850\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001851With a single iterable argument, return its biggest item. The\n\
1852default keyword-only argument specifies an object to return if\n\
1853the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001854With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001855
1856
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001857/*[clinic input]
1858oct as builtin_oct
1859
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001860 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001861 /
1862
1863Return the octal representation of an integer.
1864
1865 >>> oct(342391)
1866 '0o1234567'
1867[clinic start generated code]*/
1868
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001870builtin_oct(PyObject *module, PyObject *number)
1871/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001872{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001873 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001874}
1875
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001876
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001877/*[clinic input]
1878ord as builtin_ord
1879
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001880 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001881 /
1882
1883Return the Unicode code point for a one-character string.
1884[clinic start generated code]*/
1885
Guido van Rossum79f25d91997-04-29 20:08:16 +00001886static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001887builtin_ord(PyObject *module, PyObject *c)
1888/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001889{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 long ord;
1891 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001892
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001893 if (PyBytes_Check(c)) {
1894 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001896 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 return PyLong_FromLong(ord);
1898 }
1899 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001900 else if (PyUnicode_Check(c)) {
1901 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001902 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001903 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001905 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001906 return PyLong_FromLong(ord);
1907 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001909 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001910 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001911 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001913 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001914 return PyLong_FromLong(ord);
1915 }
1916 }
1917 else {
1918 PyErr_Format(PyExc_TypeError,
1919 "ord() expected string of length 1, but " \
Victor Stinnera102ed72020-02-07 02:24:48 +01001920 "%.200s found", Py_TYPE(c)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001921 return NULL;
1922 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001923
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 PyErr_Format(PyExc_TypeError,
1925 "ord() expected a character, "
1926 "but string of length %zd found",
1927 size);
1928 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001929}
1930
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001931
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001932/*[clinic input]
1933pow as builtin_pow
1934
Ammar Askar87d6cd32019-09-21 00:28:49 -04001935 base: object
1936 exp: object
1937 mod: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001938
Raymond Hettingerb104ecb2019-09-21 12:57:44 -07001939Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001940
1941Some types, such as ints, are able to use a more efficient algorithm when
1942invoked using the three argument form.
1943[clinic start generated code]*/
1944
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001945static PyObject *
Ammar Askar87d6cd32019-09-21 00:28:49 -04001946builtin_pow_impl(PyObject *module, PyObject *base, PyObject *exp,
1947 PyObject *mod)
Raymond Hettingerb104ecb2019-09-21 12:57:44 -07001948/*[clinic end generated code: output=3ca1538221bbf15f input=435dbd48a12efb23]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001949{
Ammar Askar87d6cd32019-09-21 00:28:49 -04001950 return PyNumber_Power(base, exp, mod);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001951}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001952
1953
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001954/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001955static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001956builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001957{
INADA Naokibd584f12017-01-19 12:50:34 +01001958 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001959 static struct _PyArg_Parser _parser = {"|OOOp:print", _keywords, 0};
1960 PyObject *sep = NULL, *end = NULL, *file = NULL;
1961 int flush = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001963
INADA Naokibd584f12017-01-19 12:50:34 +01001964 if (kwnames != NULL &&
1965 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1966 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001967 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001968 }
1969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001970 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001971 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001972 if (file == NULL) {
1973 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1974 return NULL;
1975 }
1976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 /* sys.stdout may be None when FILE* stdout isn't connected */
1978 if (file == Py_None)
1979 Py_RETURN_NONE;
1980 }
Guido van Rossum34343512006-11-30 22:13:52 +00001981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001982 if (sep == Py_None) {
1983 sep = NULL;
1984 }
1985 else if (sep && !PyUnicode_Check(sep)) {
1986 PyErr_Format(PyExc_TypeError,
1987 "sep must be None or a string, not %.200s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001988 Py_TYPE(sep)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 return NULL;
1990 }
1991 if (end == Py_None) {
1992 end = NULL;
1993 }
1994 else if (end && !PyUnicode_Check(end)) {
1995 PyErr_Format(PyExc_TypeError,
1996 "end must be None or a string, not %.200s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001997 Py_TYPE(end)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 return NULL;
1999 }
Guido van Rossum34343512006-11-30 22:13:52 +00002000
INADA Naokibd584f12017-01-19 12:50:34 +01002001 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002002 if (i > 0) {
2003 if (sep == NULL)
2004 err = PyFile_WriteString(" ", file);
2005 else
2006 err = PyFile_WriteObject(sep, file,
2007 Py_PRINT_RAW);
2008 if (err)
2009 return NULL;
2010 }
INADA Naokibd584f12017-01-19 12:50:34 +01002011 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 if (err)
2013 return NULL;
2014 }
Guido van Rossum34343512006-11-30 22:13:52 +00002015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002016 if (end == NULL)
2017 err = PyFile_WriteString("\n", file);
2018 else
2019 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
2020 if (err)
2021 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00002022
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03002023 if (flush) {
2024 PyObject *tmp = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
2025 if (tmp == NULL)
Georg Brandlbc3b6822012-01-13 19:41:25 +01002026 return NULL;
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03002027 Py_DECREF(tmp);
Georg Brandlbc3b6822012-01-13 19:41:25 +01002028 }
2029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002030 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00002031}
2032
2033PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07002034"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00002035\n\
2036Prints the values to a stream, or to sys.stdout by default.\n\
2037Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07002038file: a file-like object (stream); defaults to the current sys.stdout.\n\
2039sep: string inserted between values, default a space.\n\
2040end: string appended after the last value, default a newline.\n\
2041flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00002042
2043
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002044/*[clinic input]
2045input as builtin_input
2046
2047 prompt: object(c_default="NULL") = None
2048 /
2049
2050Read a string from standard input. The trailing newline is stripped.
2051
2052The prompt string, if given, is printed to standard output without a
2053trailing newline before reading input.
2054
2055If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
2056On *nix systems, readline is used if available.
2057[clinic start generated code]*/
2058
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002059static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002060builtin_input_impl(PyObject *module, PyObject *prompt)
2061/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002062{
Victor Stinnerbd303c12013-11-07 23:07:29 +01002063 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
2064 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
2065 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002066 PyObject *tmp;
2067 long fd;
2068 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00002069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002070 /* Check that stdin/out/err are intact */
2071 if (fin == NULL || fin == Py_None) {
2072 PyErr_SetString(PyExc_RuntimeError,
2073 "input(): lost sys.stdin");
2074 return NULL;
2075 }
2076 if (fout == NULL || fout == Py_None) {
2077 PyErr_SetString(PyExc_RuntimeError,
2078 "input(): lost sys.stdout");
2079 return NULL;
2080 }
2081 if (ferr == NULL || ferr == Py_None) {
2082 PyErr_SetString(PyExc_RuntimeError,
2083 "input(): lost sys.stderr");
2084 return NULL;
2085 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002086
Steve Dowerb82e17e2019-05-23 08:45:22 -07002087 if (PySys_Audit("builtins.input", "O", prompt ? prompt : Py_None) < 0) {
2088 return NULL;
2089 }
2090
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 /* First of all, flush stderr */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002092 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002093 if (tmp == NULL)
2094 PyErr_Clear();
2095 else
2096 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00002097
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 /* We should only use (GNU) readline if Python's sys.stdin and
2099 sys.stdout are the same as C's stdin and stdout, because we
2100 need to pass it those. */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002101 tmp = _PyObject_CallMethodIdNoArgs(fin, &PyId_fileno);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002102 if (tmp == NULL) {
2103 PyErr_Clear();
2104 tty = 0;
2105 }
2106 else {
2107 fd = PyLong_AsLong(tmp);
2108 Py_DECREF(tmp);
2109 if (fd < 0 && PyErr_Occurred())
2110 return NULL;
2111 tty = fd == fileno(stdin) && isatty(fd);
2112 }
2113 if (tty) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002114 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno);
Martin Panterc9a6ab52015-10-10 01:25:38 +00002115 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002116 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00002117 tty = 0;
2118 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 else {
2120 fd = PyLong_AsLong(tmp);
2121 Py_DECREF(tmp);
2122 if (fd < 0 && PyErr_Occurred())
2123 return NULL;
2124 tty = fd == fileno(stdout) && isatty(fd);
2125 }
2126 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002127
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002128 /* If we're interactive, use (GNU) readline */
2129 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002130 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02002131 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002132 char *s = NULL;
2133 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2134 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002135 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002137 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002138
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002139 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002140 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002141 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002142 if (!stdin_encoding || !stdin_errors ||
2143 !PyUnicode_Check(stdin_encoding) ||
2144 !PyUnicode_Check(stdin_errors)) {
2145 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002146 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002147 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002148 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2149 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002150 if (!stdin_encoding_str || !stdin_errors_str)
2151 goto _readline_errors;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002152 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002153 if (tmp == NULL)
2154 PyErr_Clear();
2155 else
2156 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002157 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002158 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002159 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002160 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002161 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002162 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002163 if (!stdout_encoding || !stdout_errors ||
2164 !PyUnicode_Check(stdout_encoding) ||
2165 !PyUnicode_Check(stdout_errors)) {
2166 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002167 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002168 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002169 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2170 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002171 if (!stdout_encoding_str || !stdout_errors_str)
2172 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002173 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002174 if (stringpo == NULL)
2175 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002177 stdout_encoding_str, stdout_errors_str);
2178 Py_CLEAR(stdout_encoding);
2179 Py_CLEAR(stdout_errors);
2180 Py_CLEAR(stringpo);
2181 if (po == NULL)
2182 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002183 assert(PyBytes_Check(po));
2184 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002185 }
2186 else {
2187 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002188 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002190 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002191 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002192 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 if (!PyErr_Occurred())
2194 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002195 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002197
2198 len = strlen(s);
2199 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 PyErr_SetNone(PyExc_EOFError);
2201 result = NULL;
2202 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002203 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 if (len > PY_SSIZE_T_MAX) {
2205 PyErr_SetString(PyExc_OverflowError,
2206 "input: input too long");
2207 result = NULL;
2208 }
2209 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002210 len--; /* strip trailing '\n' */
2211 if (len != 0 && s[len-1] == '\r')
2212 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002213 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2214 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 }
2216 }
2217 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002218 Py_DECREF(stdin_errors);
2219 Py_XDECREF(po);
Victor Stinner00d7abd2020-12-01 09:56:42 +01002220 PyMem_Free(s);
Steve Dowerb82e17e2019-05-23 08:45:22 -07002221
2222 if (result != NULL) {
2223 if (PySys_Audit("builtins.input/result", "O", result) < 0) {
2224 return NULL;
2225 }
2226 }
2227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002229
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002230 _readline_errors:
2231 Py_XDECREF(stdin_encoding);
2232 Py_XDECREF(stdout_encoding);
2233 Py_XDECREF(stdin_errors);
2234 Py_XDECREF(stdout_errors);
2235 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002236 if (tty)
2237 return NULL;
2238
2239 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002240 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002242 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002243 if (prompt != NULL) {
2244 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 return NULL;
2246 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002247 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 if (tmp == NULL)
2249 PyErr_Clear();
2250 else
2251 Py_DECREF(tmp);
2252 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002253}
2254
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002255
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002256/*[clinic input]
2257repr as builtin_repr
2258
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002259 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002260 /
2261
2262Return the canonical string representation of the object.
2263
2264For many object types, including most builtins, eval(repr(obj)) == obj.
2265[clinic start generated code]*/
2266
Guido van Rossum79f25d91997-04-29 20:08:16 +00002267static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002268builtin_repr(PyObject *module, PyObject *obj)
2269/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002270{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002271 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002272}
2273
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002274
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002275/*[clinic input]
2276round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002277
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002278 number: object
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002279 ndigits: object = None
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002280
2281Round a number to a given precision in decimal digits.
2282
2283The return value is an integer if ndigits is omitted or None. Otherwise
2284the return value has the same type as the number. ndigits may be negative.
2285[clinic start generated code]*/
2286
2287static PyObject *
2288builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002289/*[clinic end generated code: output=ff0d9dd176c02ede input=275678471d7aca15]*/
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002290{
2291 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002292
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002293 if (Py_TYPE(number)->tp_dict == NULL) {
2294 if (PyType_Ready(Py_TYPE(number)) < 0)
2295 return NULL;
2296 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002297
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002298 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002299 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002300 if (!PyErr_Occurred())
2301 PyErr_Format(PyExc_TypeError,
2302 "type %.100s doesn't define __round__ method",
2303 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002304 return NULL;
2305 }
Alex Martelliae211f92007-08-22 23:21:33 +00002306
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002307 if (ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002308 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 else
Petr Viktorinffd97532020-02-11 17:46:57 +01002310 result = PyObject_CallOneArg(round, ndigits);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002311 Py_DECREF(round);
2312 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002313}
2314
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002315
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002316/*AC: we need to keep the kwds dict intact to easily call into the
2317 * list.sort method, which isn't currently supported in AC. So we just use
2318 * the initially generated signature with a custom implementation.
2319 */
2320/* [disabled clinic input]
2321sorted as builtin_sorted
2322
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002323 iterable as seq: object
2324 key as keyfunc: object = None
2325 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002326
2327Return a new list containing all items from the iterable in ascending order.
2328
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002329A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002330reverse flag can be set to request the result in descending order.
2331[end disabled clinic input]*/
2332
2333PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002334"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002335"--\n"
2336"\n"
2337"Return a new list containing all items from the iterable in ascending order.\n"
2338"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002339"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002340"reverse flag can be set to request the result in descending order.");
2341
2342#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002343 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002344
Raymond Hettinger64958a12003-12-17 20:43:33 +00002345static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002346builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002347{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002348 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002349
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002350 /* Keyword arguments are passed through list.sort() which will check
2351 them. */
2352 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002353 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002355 newlist = PySequence_List(seq);
2356 if (newlist == NULL)
2357 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002358
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002359 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002360 if (callable == NULL) {
2361 Py_DECREF(newlist);
2362 return NULL;
2363 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002364
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002365 assert(nargs >= 1);
Petr Viktorinffd97532020-02-11 17:46:57 +01002366 v = PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002367 Py_DECREF(callable);
2368 if (v == NULL) {
2369 Py_DECREF(newlist);
2370 return NULL;
2371 }
2372 Py_DECREF(v);
2373 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002374}
2375
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002376
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002377/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002378static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002379builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002381 PyObject *v = NULL;
2382 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2385 return NULL;
2386 if (v == NULL) {
2387 d = PyEval_GetLocals();
Serhiy Storchaka41c57b32019-09-01 12:03:39 +03002388 Py_XINCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 }
2390 else {
Serhiy Storchaka41c57b32019-09-01 12:03:39 +03002391 if (_PyObject_LookupAttrId(v, &PyId___dict__, &d) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002392 PyErr_SetString(PyExc_TypeError,
2393 "vars() argument must have __dict__ attribute");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 }
2395 }
2396 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002397}
2398
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002399PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002400"vars([object]) -> dictionary\n\
2401\n\
2402Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002403With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002404
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002405
2406/*[clinic input]
2407sum as builtin_sum
2408
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002409 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002410 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002411 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002412
2413Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2414
2415When the iterable is empty, return the start value.
2416This function is intended specifically for use with numeric values and may
2417reject non-numeric types.
2418[clinic start generated code]*/
2419
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002420static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002421builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002422/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002423{
2424 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002425 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002426
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002427 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 if (iter == NULL)
2429 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 if (result == NULL) {
2432 result = PyLong_FromLong(0);
2433 if (result == NULL) {
2434 Py_DECREF(iter);
2435 return NULL;
2436 }
2437 } else {
2438 /* reject string values for 'start' parameter */
2439 if (PyUnicode_Check(result)) {
2440 PyErr_SetString(PyExc_TypeError,
2441 "sum() can't sum strings [use ''.join(seq) instead]");
2442 Py_DECREF(iter);
2443 return NULL;
2444 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002445 if (PyBytes_Check(result)) {
2446 PyErr_SetString(PyExc_TypeError,
2447 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002448 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002449 return NULL;
2450 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 if (PyByteArray_Check(result)) {
2452 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002453 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002454 Py_DECREF(iter);
2455 return NULL;
2456 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002457 Py_INCREF(result);
2458 }
Alex Martellia70b1912003-04-22 08:12:33 +00002459
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002460#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2462 Assumes all inputs are the same type. If the assumption fails, default
2463 to the more general routine.
2464 */
2465 if (PyLong_CheckExact(result)) {
2466 int overflow;
2467 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2468 /* If this already overflowed, don't even enter the loop. */
2469 if (overflow == 0) {
2470 Py_DECREF(result);
2471 result = NULL;
2472 }
2473 while(result == NULL) {
2474 item = PyIter_Next(iter);
2475 if (item == NULL) {
2476 Py_DECREF(iter);
2477 if (PyErr_Occurred())
2478 return NULL;
2479 return PyLong_FromLong(i_result);
2480 }
Serhiy Storchaka88bdb922019-09-10 16:31:01 +03002481 if (PyLong_CheckExact(item) || PyBool_Check(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 long b = PyLong_AsLongAndOverflow(item, &overflow);
Serhiy Storchaka29500732019-05-05 14:26:23 +03002483 if (overflow == 0 &&
2484 (i_result >= 0 ? (b <= LONG_MAX - i_result)
2485 : (b >= LONG_MIN - i_result)))
2486 {
2487 i_result += b;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002488 Py_DECREF(item);
2489 continue;
2490 }
2491 }
2492 /* Either overflowed or is not an int. Restore real objects and process normally */
2493 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002494 if (result == NULL) {
2495 Py_DECREF(item);
2496 Py_DECREF(iter);
2497 return NULL;
2498 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002499 temp = PyNumber_Add(result, item);
2500 Py_DECREF(result);
2501 Py_DECREF(item);
2502 result = temp;
2503 if (result == NULL) {
2504 Py_DECREF(iter);
2505 return NULL;
2506 }
2507 }
2508 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002510 if (PyFloat_CheckExact(result)) {
2511 double f_result = PyFloat_AS_DOUBLE(result);
2512 Py_DECREF(result);
2513 result = NULL;
2514 while(result == NULL) {
2515 item = PyIter_Next(iter);
2516 if (item == NULL) {
2517 Py_DECREF(iter);
2518 if (PyErr_Occurred())
2519 return NULL;
2520 return PyFloat_FromDouble(f_result);
2521 }
2522 if (PyFloat_CheckExact(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002523 f_result += PyFloat_AS_DOUBLE(item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002524 Py_DECREF(item);
2525 continue;
2526 }
Serhiy Storchaka88bdb922019-09-10 16:31:01 +03002527 if (PyLong_Check(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 long value;
2529 int overflow;
2530 value = PyLong_AsLongAndOverflow(item, &overflow);
2531 if (!overflow) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002532 f_result += (double)value;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 Py_DECREF(item);
2534 continue;
2535 }
2536 }
2537 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002538 if (result == NULL) {
2539 Py_DECREF(item);
2540 Py_DECREF(iter);
2541 return NULL;
2542 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 temp = PyNumber_Add(result, item);
2544 Py_DECREF(result);
2545 Py_DECREF(item);
2546 result = temp;
2547 if (result == NULL) {
2548 Py_DECREF(iter);
2549 return NULL;
2550 }
2551 }
2552 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002553#endif
2554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002555 for(;;) {
2556 item = PyIter_Next(iter);
2557 if (item == NULL) {
2558 /* error, or end-of-sequence */
2559 if (PyErr_Occurred()) {
2560 Py_DECREF(result);
2561 result = NULL;
2562 }
2563 break;
2564 }
2565 /* It's tempting to use PyNumber_InPlaceAdd instead of
2566 PyNumber_Add here, to avoid quadratic running time
2567 when doing 'sum(list_of_lists, [])'. However, this
2568 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002570 empty = []
2571 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002572
Brandt Bucherabb9a442020-02-01 03:08:34 -08002573 would change the value of empty. In fact, using
2574 in-place addition rather that binary addition for
2575 any of the steps introduces subtle behavior changes:
Victor Stinner58f4e1a2020-02-05 18:24:33 +01002576
Brandt Bucherabb9a442020-02-01 03:08:34 -08002577 https://bugs.python.org/issue18305 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002578 temp = PyNumber_Add(result, item);
2579 Py_DECREF(result);
2580 Py_DECREF(item);
2581 result = temp;
2582 if (result == NULL)
2583 break;
2584 }
2585 Py_DECREF(iter);
2586 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002587}
2588
Alex Martellia70b1912003-04-22 08:12:33 +00002589
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002590/*[clinic input]
2591isinstance as builtin_isinstance
2592
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002593 obj: object
2594 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002595 /
2596
2597Return whether an object is an instance of a class or of a subclass thereof.
2598
2599A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2600check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2601or ...`` etc.
2602[clinic start generated code]*/
2603
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002604static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002605builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002606 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002607/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002608{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002609 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002610
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002611 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002612 if (retval < 0)
2613 return NULL;
2614 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002615}
2616
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002617
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002618/*[clinic input]
2619issubclass as builtin_issubclass
2620
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002621 cls: object
2622 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002623 /
2624
Alex Poveldf773f82020-06-03 15:19:45 +02002625Return whether 'cls' is derived from another class or is the same class.
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002626
2627A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2628check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
Alex Poveldf773f82020-06-03 15:19:45 +02002629or ...``.
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002630[clinic start generated code]*/
2631
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002632static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002633builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002634 PyObject *class_or_tuple)
Alex Poveldf773f82020-06-03 15:19:45 +02002635/*[clinic end generated code: output=358412410cd7a250 input=a24b9f3d58c370d6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002636{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002638
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002639 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002640 if (retval < 0)
2641 return NULL;
2642 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002643}
2644
2645
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002646typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002647 PyObject_HEAD
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002648 Py_ssize_t tuplesize;
2649 PyObject *ittuple; /* tuple of iterators */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002650 PyObject *result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002651 int strict;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002652} zipobject;
2653
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002654static PyObject *
2655zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002656{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002657 zipobject *lz;
2658 Py_ssize_t i;
2659 PyObject *ittuple; /* tuple of iterators */
2660 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002661 Py_ssize_t tuplesize;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002662 int strict = 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002663
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002664 if (kwds) {
2665 PyObject *empty = PyTuple_New(0);
2666 if (empty == NULL) {
2667 return NULL;
2668 }
2669 static char *kwlist[] = {"strict", NULL};
2670 int parsed = PyArg_ParseTupleAndKeywords(
2671 empty, kwds, "|$p:zip", kwlist, &strict);
2672 Py_DECREF(empty);
2673 if (!parsed) {
2674 return NULL;
2675 }
2676 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002678 /* args must be a tuple */
2679 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002680 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002682 /* obtain iterators */
2683 ittuple = PyTuple_New(tuplesize);
2684 if (ittuple == NULL)
2685 return NULL;
2686 for (i=0; i < tuplesize; ++i) {
2687 PyObject *item = PyTuple_GET_ITEM(args, i);
2688 PyObject *it = PyObject_GetIter(item);
2689 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002690 Py_DECREF(ittuple);
2691 return NULL;
2692 }
2693 PyTuple_SET_ITEM(ittuple, i, it);
2694 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002696 /* create a result holder */
2697 result = PyTuple_New(tuplesize);
2698 if (result == NULL) {
2699 Py_DECREF(ittuple);
2700 return NULL;
2701 }
2702 for (i=0 ; i < tuplesize ; i++) {
2703 Py_INCREF(Py_None);
2704 PyTuple_SET_ITEM(result, i, Py_None);
2705 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002706
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002707 /* create zipobject structure */
2708 lz = (zipobject *)type->tp_alloc(type, 0);
2709 if (lz == NULL) {
2710 Py_DECREF(ittuple);
2711 Py_DECREF(result);
2712 return NULL;
2713 }
2714 lz->ittuple = ittuple;
2715 lz->tuplesize = tuplesize;
2716 lz->result = result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002717 lz->strict = strict;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002719 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002720}
2721
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002722static void
2723zip_dealloc(zipobject *lz)
2724{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002725 PyObject_GC_UnTrack(lz);
2726 Py_XDECREF(lz->ittuple);
2727 Py_XDECREF(lz->result);
2728 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002729}
2730
2731static int
2732zip_traverse(zipobject *lz, visitproc visit, void *arg)
2733{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002734 Py_VISIT(lz->ittuple);
2735 Py_VISIT(lz->result);
2736 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002737}
2738
2739static PyObject *
2740zip_next(zipobject *lz)
2741{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002742 Py_ssize_t i;
2743 Py_ssize_t tuplesize = lz->tuplesize;
2744 PyObject *result = lz->result;
2745 PyObject *it;
2746 PyObject *item;
2747 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002748
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002749 if (tuplesize == 0)
2750 return NULL;
2751 if (Py_REFCNT(result) == 1) {
2752 Py_INCREF(result);
2753 for (i=0 ; i < tuplesize ; i++) {
2754 it = PyTuple_GET_ITEM(lz->ittuple, i);
2755 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002756 if (item == NULL) {
2757 Py_DECREF(result);
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002758 if (lz->strict) {
2759 goto check;
2760 }
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002761 return NULL;
2762 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002763 olditem = PyTuple_GET_ITEM(result, i);
2764 PyTuple_SET_ITEM(result, i, item);
2765 Py_DECREF(olditem);
2766 }
Brandt Bucher226a0122020-12-04 19:45:57 -08002767 // bpo-42536: The GC may have untracked this result tuple. Since we're
2768 // recycling it, make sure it's tracked again:
2769 if (!_PyObject_GC_IS_TRACKED(result)) {
2770 _PyObject_GC_TRACK(result);
2771 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002772 } else {
2773 result = PyTuple_New(tuplesize);
2774 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002775 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002776 for (i=0 ; i < tuplesize ; i++) {
2777 it = PyTuple_GET_ITEM(lz->ittuple, i);
2778 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002779 if (item == NULL) {
2780 Py_DECREF(result);
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002781 if (lz->strict) {
2782 goto check;
2783 }
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002784 return NULL;
2785 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 PyTuple_SET_ITEM(result, i, item);
2787 }
2788 }
2789 return result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002790check:
2791 if (PyErr_Occurred()) {
2792 if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
2793 // next() on argument i raised an exception (not StopIteration)
2794 return NULL;
2795 }
2796 PyErr_Clear();
2797 }
2798 if (i) {
2799 // ValueError: zip() argument 2 is shorter than argument 1
2800 // ValueError: zip() argument 3 is shorter than arguments 1-2
2801 const char* plural = i == 1 ? " " : "s 1-";
2802 return PyErr_Format(PyExc_ValueError,
2803 "zip() argument %d is shorter than argument%s%d",
2804 i + 1, plural, i);
2805 }
2806 for (i = 1; i < tuplesize; i++) {
2807 it = PyTuple_GET_ITEM(lz->ittuple, i);
2808 item = (*Py_TYPE(it)->tp_iternext)(it);
2809 if (item) {
2810 Py_DECREF(item);
2811 const char* plural = i == 1 ? " " : "s 1-";
2812 return PyErr_Format(PyExc_ValueError,
2813 "zip() argument %d is longer than argument%s%d",
2814 i + 1, plural, i);
2815 }
2816 if (PyErr_Occurred()) {
2817 if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
2818 // next() on argument i raised an exception (not StopIteration)
2819 return NULL;
2820 }
2821 PyErr_Clear();
2822 }
2823 // Argument i is exhausted. So far so good...
2824 }
2825 // All arguments are exhausted. Success!
2826 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002827}
Barry Warsawbd599b52000-08-03 15:45:29 +00002828
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002829static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302830zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002831{
2832 /* Just recreate the zip with the internal iterator tuple */
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002833 if (lz->strict) {
2834 return PyTuple_Pack(3, Py_TYPE(lz), lz->ittuple, Py_True);
2835 }
2836 return PyTuple_Pack(2, Py_TYPE(lz), lz->ittuple);
2837}
2838
2839PyDoc_STRVAR(setstate_doc, "Set state information for unpickling.");
2840
2841static PyObject *
2842zip_setstate(zipobject *lz, PyObject *state)
2843{
2844 int strict = PyObject_IsTrue(state);
2845 if (strict < 0) {
2846 return NULL;
2847 }
2848 lz->strict = strict;
2849 Py_RETURN_NONE;
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002850}
2851
2852static PyMethodDef zip_methods[] = {
2853 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002854 {"__setstate__", (PyCFunction)zip_setstate, METH_O, setstate_doc},
2855 {NULL} /* sentinel */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002856};
2857
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002858PyDoc_STRVAR(zip_doc,
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002859"zip(*iterables, strict=False) --> Yield tuples until an input is exhausted.\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002860\n\
Gregory P. Smith6a5d3ff2020-05-15 14:26:00 -07002861 >>> list(zip('abcdefg', range(3), range(4)))\n\
2862 [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]\n\
2863\n\
2864The zip object yields n-length tuples, where n is the number of iterables\n\
2865passed as positional arguments to zip(). The i-th element in every tuple\n\
2866comes from the i-th iterable argument to zip(). This continues until the\n\
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002867shortest argument is exhausted.\n\
2868\n\
2869If strict is true and one of the arguments is exhausted before the others,\n\
2870raise a ValueError.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002871
2872PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002873 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2874 "zip", /* tp_name */
2875 sizeof(zipobject), /* tp_basicsize */
2876 0, /* tp_itemsize */
2877 /* methods */
2878 (destructor)zip_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002879 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002880 0, /* tp_getattr */
2881 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002882 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002883 0, /* tp_repr */
2884 0, /* tp_as_number */
2885 0, /* tp_as_sequence */
2886 0, /* tp_as_mapping */
2887 0, /* tp_hash */
2888 0, /* tp_call */
2889 0, /* tp_str */
2890 PyObject_GenericGetAttr, /* tp_getattro */
2891 0, /* tp_setattro */
2892 0, /* tp_as_buffer */
2893 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2894 Py_TPFLAGS_BASETYPE, /* tp_flags */
2895 zip_doc, /* tp_doc */
2896 (traverseproc)zip_traverse, /* tp_traverse */
2897 0, /* tp_clear */
2898 0, /* tp_richcompare */
2899 0, /* tp_weaklistoffset */
2900 PyObject_SelfIter, /* tp_iter */
2901 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002902 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002903 0, /* tp_members */
2904 0, /* tp_getset */
2905 0, /* tp_base */
2906 0, /* tp_dict */
2907 0, /* tp_descr_get */
2908 0, /* tp_descr_set */
2909 0, /* tp_dictoffset */
2910 0, /* tp_init */
2911 PyType_GenericAlloc, /* tp_alloc */
2912 zip_new, /* tp_new */
2913 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002914};
Barry Warsawbd599b52000-08-03 15:45:29 +00002915
2916
Guido van Rossum79f25d91997-04-29 20:08:16 +00002917static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002918 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002919 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002920 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002921 BUILTIN_ABS_METHODDEF
2922 BUILTIN_ALL_METHODDEF
2923 BUILTIN_ANY_METHODDEF
2924 BUILTIN_ASCII_METHODDEF
2925 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002926 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002927 BUILTIN_CALLABLE_METHODDEF
2928 BUILTIN_CHR_METHODDEF
2929 BUILTIN_COMPILE_METHODDEF
2930 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002931 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002932 BUILTIN_DIVMOD_METHODDEF
2933 BUILTIN_EVAL_METHODDEF
2934 BUILTIN_EXEC_METHODDEF
2935 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002936 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002937 BUILTIN_GLOBALS_METHODDEF
2938 BUILTIN_HASATTR_METHODDEF
2939 BUILTIN_HASH_METHODDEF
2940 BUILTIN_HEX_METHODDEF
2941 BUILTIN_ID_METHODDEF
2942 BUILTIN_INPUT_METHODDEF
2943 BUILTIN_ISINSTANCE_METHODDEF
2944 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002945 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04002946 BUILTIN_AITER_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002947 BUILTIN_LEN_METHODDEF
2948 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002949 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2950 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2951 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04002952 BUILTIN_ANEXT_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002953 BUILTIN_OCT_METHODDEF
2954 BUILTIN_ORD_METHODDEF
2955 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002956 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002957 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002958 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002959 BUILTIN_SETATTR_METHODDEF
2960 BUILTIN_SORTED_METHODDEF
2961 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002962 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2963 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002964};
2965
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002966PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002967"Built-in functions, exceptions, and other objects.\n\
2968\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002969Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002970
Martin v. Löwis1a214512008-06-11 05:26:20 +00002971static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002972 PyModuleDef_HEAD_INIT,
2973 "builtins",
2974 builtin_doc,
2975 -1, /* multiple "initialization" just copies the module dict. */
2976 builtin_methods,
2977 NULL,
2978 NULL,
2979 NULL,
2980 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002981};
2982
2983
Guido van Rossum25ce5661997-08-02 03:10:38 +00002984PyObject *
Victor Stinnerbcb094b2021-02-19 15:10:45 +01002985_PyBuiltin_Init(PyInterpreterState *interp)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002986{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002987 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002988
Victor Stinnerbcb094b2021-02-19 15:10:45 +01002989 const PyConfig *config = _PyInterpreterState_GetConfig(interp);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002990
Benjamin Peterson42124a72012-10-30 23:41:54 -04002991 if (PyType_Ready(&PyFilter_Type) < 0 ||
2992 PyType_Ready(&PyMap_Type) < 0 ||
2993 PyType_Ready(&PyZip_Type) < 0)
2994 return NULL;
2995
Eric Snowd393c1b2017-09-14 12:18:12 -06002996 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002997 if (mod == NULL)
2998 return NULL;
2999 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00003000
Tim Peters7571a0f2003-03-23 17:52:28 +00003001#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003002 /* "builtins" exposes a number of statically allocated objects
3003 * that, before this code was added in 2.3, never showed up in
3004 * the list of "all objects" maintained by Py_TRACE_REFS. As a
3005 * result, programs leaking references to None and False (etc)
3006 * couldn't be diagnosed by examining sys.getobjects(0).
3007 */
Tim Peters7571a0f2003-03-23 17:52:28 +00003008#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
3009#else
3010#define ADD_TO_ALL(OBJECT) (void)0
3011#endif
3012
Tim Peters4b7625e2001-09-13 21:37:17 +00003013#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003014 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
3015 return NULL; \
3016 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00003017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003018 SETBUILTIN("None", Py_None);
3019 SETBUILTIN("Ellipsis", Py_Ellipsis);
3020 SETBUILTIN("NotImplemented", Py_NotImplemented);
3021 SETBUILTIN("False", Py_False);
3022 SETBUILTIN("True", Py_True);
3023 SETBUILTIN("bool", &PyBool_Type);
3024 SETBUILTIN("memoryview", &PyMemoryView_Type);
3025 SETBUILTIN("bytearray", &PyByteArray_Type);
3026 SETBUILTIN("bytes", &PyBytes_Type);
3027 SETBUILTIN("classmethod", &PyClassMethod_Type);
3028 SETBUILTIN("complex", &PyComplex_Type);
3029 SETBUILTIN("dict", &PyDict_Type);
3030 SETBUILTIN("enumerate", &PyEnum_Type);
3031 SETBUILTIN("filter", &PyFilter_Type);
3032 SETBUILTIN("float", &PyFloat_Type);
3033 SETBUILTIN("frozenset", &PyFrozenSet_Type);
3034 SETBUILTIN("property", &PyProperty_Type);
3035 SETBUILTIN("int", &PyLong_Type);
3036 SETBUILTIN("list", &PyList_Type);
3037 SETBUILTIN("map", &PyMap_Type);
3038 SETBUILTIN("object", &PyBaseObject_Type);
3039 SETBUILTIN("range", &PyRange_Type);
3040 SETBUILTIN("reversed", &PyReversed_Type);
3041 SETBUILTIN("set", &PySet_Type);
3042 SETBUILTIN("slice", &PySlice_Type);
3043 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
3044 SETBUILTIN("str", &PyUnicode_Type);
3045 SETBUILTIN("super", &PySuper_Type);
3046 SETBUILTIN("tuple", &PyTuple_Type);
3047 SETBUILTIN("type", &PyType_Type);
3048 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02003049 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003050 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03003051 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003052 return NULL;
3053 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03003054 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00003055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003056 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00003057#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00003058#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00003059}