blob: 3b0e59a6d18c36b763bf556c9cab03715230436e [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00004#include <ctype.h>
Victor Stinnereec8e612021-03-18 14:57:49 +01005#include "pycore_ast.h" // _PyAST_Validate()
Victor Stinnera81fca62021-03-24 00:51:50 +01006#include "pycore_compile.h" // _PyAST_Compile()
Victor Stinnerc96d00e2020-06-22 18:02:49 +02007#include "pycore_object.h" // _Py_AddToAllObjects()
Victor Stinner384621c2020-06-22 17:27:35 +02008#include "pycore_pyerrors.h" // _PyErr_NoMemory()
9#include "pycore_pystate.h" // _PyThreadState_GET()
10#include "pycore_tuple.h" // _PyTuple_FromArray()
Mark Shannon0332e562021-02-01 10:42:03 +000011#include "pycore_ceval.h" // _PyEval_Vector()
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012
Victor Stinnerbd303c12013-11-07 23:07:29 +010013_Py_IDENTIFIER(__builtins__);
14_Py_IDENTIFIER(__dict__);
15_Py_IDENTIFIER(__prepare__);
16_Py_IDENTIFIER(__round__);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010017_Py_IDENTIFIER(__mro_entries__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010018_Py_IDENTIFIER(encoding);
19_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020020_Py_IDENTIFIER(fileno);
21_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010022_Py_IDENTIFIER(metaclass);
23_Py_IDENTIFIER(sort);
24_Py_IDENTIFIER(stdin);
25_Py_IDENTIFIER(stdout);
26_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020027
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030028#include "clinic/bltinmodule.c.h"
29
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010030static PyObject*
Victor Stinner05d68a82018-01-18 11:15:25 +010031update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010032{
Victor Stinner05d68a82018-01-18 11:15:25 +010033 Py_ssize_t i, j;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010034 PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010035 assert(PyTuple_Check(bases));
36
37 for (i = 0; i < nargs; i++) {
38 base = args[i];
39 if (PyType_Check(base)) {
40 if (new_bases) {
41 /* If we already have made a replacement, then we append every normal base,
42 otherwise just skip it. */
43 if (PyList_Append(new_bases, base) < 0) {
44 goto error;
45 }
46 }
47 continue;
48 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020049 if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, &meth) < 0) {
50 goto error;
51 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010052 if (!meth) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010053 if (new_bases) {
54 if (PyList_Append(new_bases, base) < 0) {
55 goto error;
56 }
57 }
58 continue;
59 }
Petr Viktorinffd97532020-02-11 17:46:57 +010060 new_base = PyObject_CallOneArg(meth, bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010061 Py_DECREF(meth);
62 if (!new_base) {
63 goto error;
64 }
65 if (!PyTuple_Check(new_base)) {
66 PyErr_SetString(PyExc_TypeError,
67 "__mro_entries__ must return a tuple");
68 Py_DECREF(new_base);
69 goto error;
70 }
71 if (!new_bases) {
72 /* If this is a first successful replacement, create new_bases list and
73 copy previously encountered bases. */
74 if (!(new_bases = PyList_New(i))) {
75 goto error;
76 }
77 for (j = 0; j < i; j++) {
78 base = args[j];
79 PyList_SET_ITEM(new_bases, j, base);
80 Py_INCREF(base);
81 }
82 }
83 j = PyList_GET_SIZE(new_bases);
84 if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
85 goto error;
86 }
87 Py_DECREF(new_base);
88 }
89 if (!new_bases) {
90 return bases;
91 }
92 result = PyList_AsTuple(new_bases);
93 Py_DECREF(new_bases);
94 return result;
95
96error:
97 Py_XDECREF(new_bases);
98 return NULL;
99}
100
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000101/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000102static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200103builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
Victor Stinner773dc6d2017-01-16 23:46:26 +0100104 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000105{
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100106 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *orig_bases;
Nick Coghlan19d24672016-12-05 16:47:55 +1000107 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +0100108 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000110 if (nargs < 2) {
111 PyErr_SetString(PyExc_TypeError,
112 "__build_class__: not enough arguments");
113 return NULL;
114 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100115 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -0500116 if (!PyFunction_Check(func)) {
117 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -0500118 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -0500119 return NULL;
120 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100121 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000122 if (!PyUnicode_Check(name)) {
123 PyErr_SetString(PyExc_TypeError,
124 "__build_class__: name is not a string");
125 return NULL;
126 }
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +0500127 orig_bases = _PyTuple_FromArray(args + 2, nargs - 2);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100128 if (orig_bases == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000129 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000130
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100131 bases = update_bases(orig_bases, args + 2, nargs - 2);
132 if (bases == NULL) {
133 Py_DECREF(orig_bases);
134 return NULL;
135 }
136
Victor Stinner773dc6d2017-01-16 23:46:26 +0100137 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000138 meta = NULL;
139 mkw = NULL;
140 }
141 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +0100142 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 if (mkw == NULL) {
144 Py_DECREF(bases);
145 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000146 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100147
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200148 meta = _PyDict_GetItemIdWithError(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 if (meta != NULL) {
150 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100151 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 Py_DECREF(meta);
153 Py_DECREF(mkw);
154 Py_DECREF(bases);
155 return NULL;
156 }
Nick Coghlande31b192011-10-23 22:04:16 +1000157 /* metaclass is explicitly given, check if it's indeed a class */
158 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000159 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200160 else if (PyErr_Occurred()) {
161 Py_DECREF(mkw);
162 Py_DECREF(bases);
163 return NULL;
164 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 }
166 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000167 /* if there are no bases, use type: */
168 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000169 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000170 }
171 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000172 else {
173 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
Victor Stinnera102ed72020-02-07 02:24:48 +0100174 meta = (PyObject *)Py_TYPE(base0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000175 }
176 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000177 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000179
Nick Coghlande31b192011-10-23 22:04:16 +1000180 if (isclass) {
181 /* meta is really a class, so check for a more derived
182 metaclass, or possible metaclass conflicts: */
183 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
184 bases);
185 if (winner == NULL) {
186 Py_DECREF(meta);
187 Py_XDECREF(mkw);
188 Py_DECREF(bases);
189 return NULL;
190 }
191 if (winner != meta) {
192 Py_DECREF(meta);
193 meta = winner;
194 Py_INCREF(meta);
195 }
196 }
197 /* else: meta is not a class, so we cannot do the metaclass
198 calculation, so we will use the explicitly given object as it is */
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200199 if (_PyObject_LookupAttrId(meta, &PyId___prepare__, &prep) < 0) {
200 ns = NULL;
201 }
202 else if (prep == NULL) {
203 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000204 }
205 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200206 PyObject *pargs[2] = {name, bases};
Petr Viktorinffd97532020-02-11 17:46:57 +0100207 ns = PyObject_VectorcallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 Py_DECREF(prep);
209 }
210 if (ns == NULL) {
211 Py_DECREF(meta);
212 Py_XDECREF(mkw);
213 Py_DECREF(bases);
214 return NULL;
215 }
Oren Milman5837d042017-09-27 17:04:37 +0300216 if (!PyMapping_Check(ns)) {
217 PyErr_Format(PyExc_TypeError,
218 "%.200s.__prepare__() must return a mapping, not %.200s",
219 isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
220 Py_TYPE(ns)->tp_name);
221 goto error;
222 }
Mark Shannon0332e562021-02-01 10:42:03 +0000223 PyFrameConstructor *f = PyFunction_AS_FRAME_CONSTRUCTOR(func);
224 PyThreadState *tstate = PyThreadState_GET();
225 cell = _PyEval_Vector(tstate, f, ns, NULL, 0, NULL);
Nick Coghlan19d24672016-12-05 16:47:55 +1000226 if (cell != NULL) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100227 if (bases != orig_bases) {
228 if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
229 goto error;
230 }
231 }
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200232 PyObject *margs[3] = {name, bases, ns};
Petr Viktorinffd97532020-02-11 17:46:57 +0100233 cls = PyObject_VectorcallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000234 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
235 PyObject *cell_cls = PyCell_GET(cell);
236 if (cell_cls != cls) {
Nick Coghlan19d24672016-12-05 16:47:55 +1000237 if (cell_cls == NULL) {
238 const char *msg =
239 "__class__ not set defining %.200R as %.200R. "
240 "Was __classcell__ propagated to type.__new__?";
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300241 PyErr_Format(PyExc_RuntimeError, msg, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000242 } else {
243 const char *msg =
244 "__class__ set to %.200R defining %.200R as %.200R";
245 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000246 }
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300247 Py_DECREF(cls);
248 cls = NULL;
249 goto error;
Nick Coghlan19d24672016-12-05 16:47:55 +1000250 }
251 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000253error:
254 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 Py_DECREF(ns);
256 Py_DECREF(meta);
257 Py_XDECREF(mkw);
258 Py_DECREF(bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100259 if (bases != orig_bases) {
260 Py_DECREF(orig_bases);
261 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000263}
264
265PyDoc_STRVAR(build_class_doc,
Pablo Galindoe3babbd2019-10-13 16:35:41 +0100266"__build_class__(func, name, /, *bases, [metaclass], **kwds) -> class\n\
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000267\n\
268Internal helper function used by the class statement.");
269
270static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000271builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000272{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000273 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
274 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400275 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400276 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000277
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400278 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 kwlist, &name, &globals, &locals, &fromlist, &level))
280 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400281 return PyImport_ImportModuleLevelObject(name, globals, locals,
282 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000283}
284
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000285PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400286"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000287\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000288Import a module. Because this function is meant for use by the Python\n\
oldk461d2252018-02-02 12:20:00 +0800289interpreter and not for general use, it is better to use\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000290importlib.import_module() to programmatically import a module.\n\
291\n\
292The globals argument is only used to determine the context;\n\
293they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000294should be a list of names to emulate ``from name import ...'', or an\n\
295empty list to emulate ``import name''.\n\
296When importing a module from a package, note that __import__('A.B', ...)\n\
297returns package A when fromlist is empty, but its submodule B when\n\
oldk461d2252018-02-02 12:20:00 +0800298fromlist is not empty. The level argument is used to determine whether to\n\
299perform absolute or relative imports: 0 is absolute, while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000300is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000301
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000302
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000303/*[clinic input]
304abs as builtin_abs
305
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300306 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000307 /
308
309Return the absolute value of the argument.
310[clinic start generated code]*/
311
Guido van Rossum79f25d91997-04-29 20:08:16 +0000312static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300313builtin_abs(PyObject *module, PyObject *x)
314/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000315{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000316 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000317}
318
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000319/*[clinic input]
320all as builtin_all
321
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300322 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000323 /
324
325Return True if bool(x) is True for all values x in the iterable.
326
327If the iterable is empty, return True.
328[clinic start generated code]*/
329
Raymond Hettinger96229b12005-03-11 06:49:40 +0000330static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300331builtin_all(PyObject *module, PyObject *iterable)
332/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 PyObject *it, *item;
335 PyObject *(*iternext)(PyObject *);
336 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000337
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000338 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 if (it == NULL)
340 return NULL;
341 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 for (;;) {
344 item = iternext(it);
345 if (item == NULL)
346 break;
347 cmp = PyObject_IsTrue(item);
348 Py_DECREF(item);
349 if (cmp < 0) {
350 Py_DECREF(it);
351 return NULL;
352 }
353 if (cmp == 0) {
354 Py_DECREF(it);
355 Py_RETURN_FALSE;
356 }
357 }
358 Py_DECREF(it);
359 if (PyErr_Occurred()) {
360 if (PyErr_ExceptionMatches(PyExc_StopIteration))
361 PyErr_Clear();
362 else
363 return NULL;
364 }
365 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000366}
367
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000368/*[clinic input]
369any as builtin_any
370
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300371 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000372 /
373
374Return True if bool(x) is True for any x in the iterable.
375
376If the iterable is empty, return False.
377[clinic start generated code]*/
378
Raymond Hettinger96229b12005-03-11 06:49:40 +0000379static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300380builtin_any(PyObject *module, PyObject *iterable)
381/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000382{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 PyObject *it, *item;
384 PyObject *(*iternext)(PyObject *);
385 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000386
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000387 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 if (it == NULL)
389 return NULL;
390 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 for (;;) {
393 item = iternext(it);
394 if (item == NULL)
395 break;
396 cmp = PyObject_IsTrue(item);
397 Py_DECREF(item);
398 if (cmp < 0) {
399 Py_DECREF(it);
400 return NULL;
401 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400402 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 Py_DECREF(it);
404 Py_RETURN_TRUE;
405 }
406 }
407 Py_DECREF(it);
408 if (PyErr_Occurred()) {
409 if (PyErr_ExceptionMatches(PyExc_StopIteration))
410 PyErr_Clear();
411 else
412 return NULL;
413 }
414 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000415}
416
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000417/*[clinic input]
418ascii as builtin_ascii
419
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300420 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000421 /
422
423Return an ASCII-only representation of an object.
424
425As repr(), return a string containing a printable representation of an
426object, but escape the non-ASCII characters in the string returned by
427repr() using \\x, \\u or \\U escapes. This generates a string similar
428to that returned by repr() in Python 2.
429[clinic start generated code]*/
430
Georg Brandl559e5d72008-06-11 18:37:52 +0000431static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300432builtin_ascii(PyObject *module, PyObject *obj)
433/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000434{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000435 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000436}
437
Georg Brandl559e5d72008-06-11 18:37:52 +0000438
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000439/*[clinic input]
440bin as builtin_bin
441
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300442 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000443 /
444
445Return the binary representation of an integer.
446
447 >>> bin(2796202)
448 '0b1010101010101010101010'
449[clinic start generated code]*/
450
Guido van Rossum79f25d91997-04-29 20:08:16 +0000451static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300452builtin_bin(PyObject *module, PyObject *number)
453/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000454{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000455 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000456}
457
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000458
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000459/*[clinic input]
460callable as builtin_callable
461
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300462 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000463 /
464
465Return whether the object is callable (i.e., some kind of function).
466
467Note that classes are callable, as are instances of classes with a
468__call__() method.
469[clinic start generated code]*/
470
Antoine Pitroue71362d2010-11-27 22:00:11 +0000471static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300472builtin_callable(PyObject *module, PyObject *obj)
473/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000474{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000475 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000476}
477
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400478static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200479builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400480{
481 PyObject *hook = PySys_GetObject("breakpointhook");
482
483 if (hook == NULL) {
484 PyErr_SetString(PyExc_RuntimeError, "lost sys.breakpointhook");
485 return NULL;
486 }
Steve Dower60419a72019-06-24 08:42:54 -0700487
488 if (PySys_Audit("builtins.breakpoint", "O", hook) < 0) {
489 return NULL;
490 }
491
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400492 Py_INCREF(hook);
Petr Viktorinffd97532020-02-11 17:46:57 +0100493 PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400494 Py_DECREF(hook);
495 return retval;
496}
497
498PyDoc_STRVAR(breakpoint_doc,
499"breakpoint(*args, **kws)\n\
500\n\
501Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
502whatever arguments are passed.\n\
503\n\
504By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000505
Raymond Hettinger17301e92008-03-13 00:19:26 +0000506typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 PyObject_HEAD
508 PyObject *func;
509 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000510} filterobject;
511
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000512static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000513filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000514{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 PyObject *func, *seq;
516 PyObject *it;
517 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000518
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300519 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000521
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
523 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 /* Get iterator. */
526 it = PyObject_GetIter(seq);
527 if (it == NULL)
528 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 /* create filterobject structure */
531 lz = (filterobject *)type->tp_alloc(type, 0);
532 if (lz == NULL) {
533 Py_DECREF(it);
534 return NULL;
535 }
Dong-hee Na9a9c11a2021-03-11 01:39:52 +0900536
537 lz->func = Py_NewRef(func);
538 lz->it = it;
539
540 return (PyObject *)lz;
541}
542
543static PyObject *
544filter_vectorcall(PyObject *type, PyObject * const*args,
545 size_t nargsf, PyObject *kwnames)
546{
547 PyTypeObject *tp = (PyTypeObject *)type;
548 if (tp == &PyFilter_Type && !_PyArg_NoKwnames("filter", kwnames)) {
549 return NULL;
550 }
551
552 Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
553 if (!_PyArg_CheckPositional("filter", nargs, 2, 2)) {
554 return NULL;
555 }
556
557 PyObject *it = PyObject_GetIter(args[1]);
558 if (it == NULL) {
559 return NULL;
560 }
561
562 filterobject *lz = (filterobject *)tp->tp_alloc(tp, 0);
563
564 if (lz == NULL) {
565 Py_DECREF(it);
566 return NULL;
567 }
568
569 lz->func = Py_NewRef(args[0]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000573}
574
575static void
576filter_dealloc(filterobject *lz)
577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 PyObject_GC_UnTrack(lz);
579 Py_XDECREF(lz->func);
580 Py_XDECREF(lz->it);
581 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000582}
583
584static int
585filter_traverse(filterobject *lz, visitproc visit, void *arg)
586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 Py_VISIT(lz->it);
588 Py_VISIT(lz->func);
589 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000590}
591
592static PyObject *
593filter_next(filterobject *lz)
594{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000595 PyObject *item;
596 PyObject *it = lz->it;
597 long ok;
598 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400599 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 iternext = *Py_TYPE(it)->tp_iternext;
602 for (;;) {
603 item = iternext(it);
604 if (item == NULL)
605 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000606
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400607 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 ok = PyObject_IsTrue(item);
609 } else {
610 PyObject *good;
Petr Viktorinffd97532020-02-11 17:46:57 +0100611 good = PyObject_CallOneArg(lz->func, item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 if (good == NULL) {
613 Py_DECREF(item);
614 return NULL;
615 }
616 ok = PyObject_IsTrue(good);
617 Py_DECREF(good);
618 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200619 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 return item;
621 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200622 if (ok < 0)
623 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000625}
626
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000627static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530628filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000629{
630 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
631}
632
633PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
634
635static PyMethodDef filter_methods[] = {
636 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
637 {NULL, NULL} /* sentinel */
638};
639
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000640PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000641"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000642\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000643Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000644is true. If function is None, return the items that are true.");
645
646PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000647 PyVarObject_HEAD_INIT(&PyType_Type, 0)
648 "filter", /* tp_name */
649 sizeof(filterobject), /* tp_basicsize */
650 0, /* tp_itemsize */
651 /* methods */
652 (destructor)filter_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200653 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 0, /* tp_getattr */
655 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200656 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 0, /* tp_repr */
658 0, /* tp_as_number */
659 0, /* tp_as_sequence */
660 0, /* tp_as_mapping */
661 0, /* tp_hash */
662 0, /* tp_call */
663 0, /* tp_str */
664 PyObject_GenericGetAttr, /* tp_getattro */
665 0, /* tp_setattro */
666 0, /* tp_as_buffer */
667 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
668 Py_TPFLAGS_BASETYPE, /* tp_flags */
669 filter_doc, /* tp_doc */
670 (traverseproc)filter_traverse, /* tp_traverse */
671 0, /* tp_clear */
672 0, /* tp_richcompare */
673 0, /* tp_weaklistoffset */
674 PyObject_SelfIter, /* tp_iter */
675 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000676 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 0, /* tp_members */
678 0, /* tp_getset */
679 0, /* tp_base */
680 0, /* tp_dict */
681 0, /* tp_descr_get */
682 0, /* tp_descr_set */
683 0, /* tp_dictoffset */
684 0, /* tp_init */
685 PyType_GenericAlloc, /* tp_alloc */
686 filter_new, /* tp_new */
687 PyObject_GC_Del, /* tp_free */
Dong-hee Na9a9c11a2021-03-11 01:39:52 +0900688 .tp_vectorcall = (vectorcallfunc)filter_vectorcall
Raymond Hettinger17301e92008-03-13 00:19:26 +0000689};
690
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000691
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000692/*[clinic input]
693format as builtin_format
694
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300695 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000696 format_spec: unicode(c_default="NULL") = ''
697 /
698
699Return value.__format__(format_spec)
700
Amit Kumar2e6bb442017-05-29 06:32:26 +0530701format_spec defaults to the empty string.
702See the Format Specification Mini-Language section of help('FORMATTING') for
703details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000704[clinic start generated code]*/
705
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000706static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300707builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530708/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000709{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000710 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000711}
712
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000713/*[clinic input]
714chr as builtin_chr
715
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300716 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000717 /
718
719Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
720[clinic start generated code]*/
721
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000722static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300723builtin_chr_impl(PyObject *module, int i)
724/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000725{
726 return PyUnicode_FromOrdinal(i);
727}
Guido van Rossum09095f32000-03-10 23:00:52 +0000728
729
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000730/*[clinic input]
731compile as builtin_compile
732
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300733 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000734 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300735 mode: str
736 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200737 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300738 optimize: int = -1
Victor Stinnerefdf6ca2019-06-12 02:52:16 +0200739 *
740 _feature_version as feature_version: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000741
742Compile source into a code object that can be executed by exec() or eval().
743
744The source code may represent a Python module, statement or expression.
745The filename will be used for run-time error messages.
746The mode must be 'exec' to compile a module, 'single' to compile a
747single (interactive) statement, or 'eval' to compile an expression.
748The flags argument, if present, controls which future statements influence
749the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300750The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000751the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300752compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000753in addition to any features explicitly specified.
754[clinic start generated code]*/
755
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000756static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300757builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
758 const char *mode, int flags, int dont_inherit,
Guido van Rossum495da292019-03-07 12:38:08 -0800759 int optimize, int feature_version)
Victor Stinnerefdf6ca2019-06-12 02:52:16 +0200760/*[clinic end generated code: output=b0c09c84f116d3d7 input=40171fb92c1d580d]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000761{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000762 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200763 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000764 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 int is_ast;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800766 int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000767 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000768
Victor Stinner37d66d72019-06-13 02:16:41 +0200769 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000770 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -0800771 if (feature_version >= 0 && (flags & PyCF_ONLY_AST)) {
772 cf.cf_feature_version = feature_version;
773 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000774
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000775 if (flags &
Batuhan Taşkaya44540572020-04-22 19:09:03 +0300776 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_COMPILE_MASK))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 {
778 PyErr_SetString(PyExc_ValueError,
779 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000780 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 }
782 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000783
Georg Brandl8334fd92010-12-04 10:26:46 +0000784 if (optimize < -1 || optimize > 2) {
785 PyErr_SetString(PyExc_ValueError,
786 "compile(): invalid optimize value");
787 goto error;
788 }
789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 if (!dont_inherit) {
791 PyEval_MergeCompilerFlags(&cf);
792 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000793
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000794 if (strcmp(mode, "exec") == 0)
795 compile_mode = 0;
796 else if (strcmp(mode, "eval") == 0)
797 compile_mode = 1;
798 else if (strcmp(mode, "single") == 0)
799 compile_mode = 2;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800800 else if (strcmp(mode, "func_type") == 0) {
801 if (!(flags & PyCF_ONLY_AST)) {
802 PyErr_SetString(PyExc_ValueError,
803 "compile() mode 'func_type' requires flag PyCF_ONLY_AST");
804 goto error;
805 }
806 compile_mode = 3;
807 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 else {
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800809 const char *msg;
810 if (flags & PyCF_ONLY_AST)
811 msg = "compile() mode must be 'exec', 'eval', 'single' or 'func_type'";
812 else
813 msg = "compile() mode must be 'exec', 'eval' or 'single'";
814 PyErr_SetString(PyExc_ValueError, msg);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000815 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000817
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000818 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000820 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000822 if (flags & PyCF_ONLY_AST) {
823 Py_INCREF(source);
824 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000825 }
826 else {
827 PyArena *arena;
828 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000829
Victor Stinner8370e072021-03-24 02:23:01 +0100830 arena = _PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200831 if (arena == NULL)
832 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000833 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 if (mod == NULL) {
Victor Stinner8370e072021-03-24 02:23:01 +0100835 _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)) {
Victor Stinner8370e072021-03-24 02:23:01 +0100839 _PyArena_Free(arena);
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500840 goto error;
841 }
Victor Stinnera81fca62021-03-24 00:51:50 +0100842 result = (PyObject*)_PyAST_Compile(mod, filename,
843 &cf, optimize, arena);
Victor Stinner8370e072021-03-24 02:23:01 +0100844 _PyArena_Free(arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000845 }
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
Pablo Galindoa02683a2021-03-24 01:42:13 +00001662 PyObject* new_awaitable = PyAnextAwaitable_New(
1663 awaitable, default_value);
1664 Py_DECREF(awaitable);
1665 return new_awaitable;
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04001666}
1667
1668
1669/*[clinic input]
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001670len as builtin_len
1671
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001672 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001673 /
1674
1675Return the number of items in a container.
1676[clinic start generated code]*/
1677
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001678static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001679builtin_len(PyObject *module, PyObject *obj)
1680/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001681{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001683
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001684 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001685 if (res < 0) {
1686 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001688 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001690}
1691
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001692
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001693/*[clinic input]
1694locals as builtin_locals
1695
1696Return a dictionary containing the current scope's local variables.
1697
1698NOTE: Whether or not updates to this dictionary will affect name lookups in
1699the local scope and vice-versa is *implementation dependent* and not
1700covered by any backwards compatibility guarantees.
1701[clinic start generated code]*/
1702
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001703static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001704builtin_locals_impl(PyObject *module)
1705/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001706{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 d = PyEval_GetLocals();
1710 Py_XINCREF(d);
1711 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001712}
1713
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001714
Guido van Rossum79f25d91997-04-29 20:08:16 +00001715static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001716min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001717{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001718 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001719 PyObject *emptytuple, *defaultval = NULL;
1720 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001721 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001722 const int positional = PyTuple_Size(args) > 1;
1723 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001724
Dong-hee Naabdc6342020-01-11 01:31:43 +09001725 if (positional) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 v = args;
Dong-hee Naabdc6342020-01-11 01:31:43 +09001727 }
1728 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) {
1729 if (PyExceptionClass_Check(PyExc_TypeError)) {
1730 PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name);
1731 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001732 return NULL;
Dong-hee Naabdc6342020-01-11 01:31:43 +09001733 }
Tim Peters67d687a2002-04-29 21:27:32 +00001734
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001735 emptytuple = PyTuple_New(0);
1736 if (emptytuple == NULL)
1737 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001738 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1739 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1740 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001741 Py_DECREF(emptytuple);
1742 if (!ret)
1743 return NULL;
1744
1745 if (positional && defaultval != NULL) {
1746 PyErr_Format(PyExc_TypeError,
1747 "Cannot specify a default for %s() with multiple "
1748 "positional arguments", name);
1749 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001751
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001752 it = PyObject_GetIter(v);
1753 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001754 return NULL;
1755 }
Tim Petersc3074532001-05-03 07:00:32 +00001756
Alexander Marshalove22072f2018-07-24 10:58:21 +07001757 if (keyfunc == Py_None) {
1758 keyfunc = NULL;
1759 }
1760
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001761 maxitem = NULL; /* the result */
1762 maxval = NULL; /* the value associated with the result */
1763 while (( item = PyIter_Next(it) )) {
1764 /* get the value from the key function */
1765 if (keyfunc != NULL) {
Petr Viktorinffd97532020-02-11 17:46:57 +01001766 val = PyObject_CallOneArg(keyfunc, item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 if (val == NULL)
1768 goto Fail_it_item;
1769 }
1770 /* no key function; the value is the item */
1771 else {
1772 val = item;
1773 Py_INCREF(val);
1774 }
Tim Petersc3074532001-05-03 07:00:32 +00001775
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001776 /* maximum value and item are unset; set them */
1777 if (maxval == NULL) {
1778 maxitem = item;
1779 maxval = val;
1780 }
1781 /* maximum value and item are set; update them as necessary */
1782 else {
1783 int cmp = PyObject_RichCompareBool(val, maxval, op);
1784 if (cmp < 0)
1785 goto Fail_it_item_and_val;
1786 else if (cmp > 0) {
1787 Py_DECREF(maxval);
1788 Py_DECREF(maxitem);
1789 maxval = val;
1790 maxitem = item;
1791 }
1792 else {
1793 Py_DECREF(item);
1794 Py_DECREF(val);
1795 }
1796 }
1797 }
1798 if (PyErr_Occurred())
1799 goto Fail_it;
1800 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001802 if (defaultval != NULL) {
1803 Py_INCREF(defaultval);
1804 maxitem = defaultval;
1805 } else {
1806 PyErr_Format(PyExc_ValueError,
1807 "%s() arg is an empty sequence", name);
1808 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001809 }
1810 else
1811 Py_DECREF(maxval);
1812 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001813 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001814
1815Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001817Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001818 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001819Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001820 Py_XDECREF(maxval);
1821 Py_XDECREF(maxitem);
1822 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001823 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001824}
1825
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001826/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001828builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001831}
1832
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001833PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001834"min(iterable, *[, default=obj, key=func]) -> value\n\
1835min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001836\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001837With a single iterable argument, return its smallest item. The\n\
1838default keyword-only argument specifies an object to return if\n\
1839the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001840With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001841
1842
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001843/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001845builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001846{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001847 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001848}
1849
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001850PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001851"max(iterable, *[, default=obj, key=func]) -> value\n\
1852max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001853\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001854With a single iterable argument, return its biggest item. The\n\
1855default keyword-only argument specifies an object to return if\n\
1856the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001857With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001858
1859
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001860/*[clinic input]
1861oct as builtin_oct
1862
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001863 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001864 /
1865
1866Return the octal representation of an integer.
1867
1868 >>> oct(342391)
1869 '0o1234567'
1870[clinic start generated code]*/
1871
Guido van Rossum79f25d91997-04-29 20:08:16 +00001872static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001873builtin_oct(PyObject *module, PyObject *number)
1874/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001875{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001876 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001877}
1878
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001879
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001880/*[clinic input]
1881ord as builtin_ord
1882
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001883 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001884 /
1885
1886Return the Unicode code point for a one-character string.
1887[clinic start generated code]*/
1888
Guido van Rossum79f25d91997-04-29 20:08:16 +00001889static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001890builtin_ord(PyObject *module, PyObject *c)
1891/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001892{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001893 long ord;
1894 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001895
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001896 if (PyBytes_Check(c)) {
1897 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001899 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 return PyLong_FromLong(ord);
1901 }
1902 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001903 else if (PyUnicode_Check(c)) {
1904 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001905 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001906 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001908 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001909 return PyLong_FromLong(ord);
1910 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001912 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001914 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001915 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001916 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001917 return PyLong_FromLong(ord);
1918 }
1919 }
1920 else {
1921 PyErr_Format(PyExc_TypeError,
1922 "ord() expected string of length 1, but " \
Victor Stinnera102ed72020-02-07 02:24:48 +01001923 "%.200s found", Py_TYPE(c)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 return NULL;
1925 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 PyErr_Format(PyExc_TypeError,
1928 "ord() expected a character, "
1929 "but string of length %zd found",
1930 size);
1931 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001932}
1933
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001934
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001935/*[clinic input]
1936pow as builtin_pow
1937
Ammar Askar87d6cd32019-09-21 00:28:49 -04001938 base: object
1939 exp: object
1940 mod: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001941
Raymond Hettingerb104ecb2019-09-21 12:57:44 -07001942Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001943
1944Some types, such as ints, are able to use a more efficient algorithm when
1945invoked using the three argument form.
1946[clinic start generated code]*/
1947
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001948static PyObject *
Ammar Askar87d6cd32019-09-21 00:28:49 -04001949builtin_pow_impl(PyObject *module, PyObject *base, PyObject *exp,
1950 PyObject *mod)
Raymond Hettingerb104ecb2019-09-21 12:57:44 -07001951/*[clinic end generated code: output=3ca1538221bbf15f input=435dbd48a12efb23]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001952{
Ammar Askar87d6cd32019-09-21 00:28:49 -04001953 return PyNumber_Power(base, exp, mod);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001954}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001955
1956
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001957/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001958static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001959builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001960{
INADA Naokibd584f12017-01-19 12:50:34 +01001961 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001962 static struct _PyArg_Parser _parser = {"|OOOp:print", _keywords, 0};
1963 PyObject *sep = NULL, *end = NULL, *file = NULL;
1964 int flush = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001965 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001966
INADA Naokibd584f12017-01-19 12:50:34 +01001967 if (kwnames != NULL &&
1968 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1969 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001970 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001971 }
1972
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001973 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001974 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001975 if (file == NULL) {
1976 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1977 return NULL;
1978 }
1979
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001980 /* sys.stdout may be None when FILE* stdout isn't connected */
1981 if (file == Py_None)
1982 Py_RETURN_NONE;
1983 }
Guido van Rossum34343512006-11-30 22:13:52 +00001984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 if (sep == Py_None) {
1986 sep = NULL;
1987 }
1988 else if (sep && !PyUnicode_Check(sep)) {
1989 PyErr_Format(PyExc_TypeError,
1990 "sep must be None or a string, not %.200s",
Victor Stinnera102ed72020-02-07 02:24:48 +01001991 Py_TYPE(sep)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001992 return NULL;
1993 }
1994 if (end == Py_None) {
1995 end = NULL;
1996 }
1997 else if (end && !PyUnicode_Check(end)) {
1998 PyErr_Format(PyExc_TypeError,
1999 "end must be None or a string, not %.200s",
Victor Stinnera102ed72020-02-07 02:24:48 +01002000 Py_TYPE(end)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002001 return NULL;
2002 }
Guido van Rossum34343512006-11-30 22:13:52 +00002003
INADA Naokibd584f12017-01-19 12:50:34 +01002004 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002005 if (i > 0) {
2006 if (sep == NULL)
2007 err = PyFile_WriteString(" ", file);
2008 else
2009 err = PyFile_WriteObject(sep, file,
2010 Py_PRINT_RAW);
2011 if (err)
2012 return NULL;
2013 }
INADA Naokibd584f12017-01-19 12:50:34 +01002014 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 if (err)
2016 return NULL;
2017 }
Guido van Rossum34343512006-11-30 22:13:52 +00002018
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002019 if (end == NULL)
2020 err = PyFile_WriteString("\n", file);
2021 else
2022 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
2023 if (err)
2024 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00002025
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03002026 if (flush) {
2027 PyObject *tmp = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
2028 if (tmp == NULL)
Georg Brandlbc3b6822012-01-13 19:41:25 +01002029 return NULL;
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03002030 Py_DECREF(tmp);
Georg Brandlbc3b6822012-01-13 19:41:25 +01002031 }
2032
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002033 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00002034}
2035
2036PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07002037"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00002038\n\
2039Prints the values to a stream, or to sys.stdout by default.\n\
2040Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07002041file: a file-like object (stream); defaults to the current sys.stdout.\n\
2042sep: string inserted between values, default a space.\n\
2043end: string appended after the last value, default a newline.\n\
2044flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00002045
2046
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002047/*[clinic input]
2048input as builtin_input
2049
2050 prompt: object(c_default="NULL") = None
2051 /
2052
2053Read a string from standard input. The trailing newline is stripped.
2054
2055The prompt string, if given, is printed to standard output without a
2056trailing newline before reading input.
2057
2058If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
2059On *nix systems, readline is used if available.
2060[clinic start generated code]*/
2061
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002062static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002063builtin_input_impl(PyObject *module, PyObject *prompt)
2064/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002065{
Victor Stinnerbd303c12013-11-07 23:07:29 +01002066 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
2067 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
2068 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 PyObject *tmp;
2070 long fd;
2071 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00002072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002073 /* Check that stdin/out/err are intact */
2074 if (fin == NULL || fin == Py_None) {
2075 PyErr_SetString(PyExc_RuntimeError,
2076 "input(): lost sys.stdin");
2077 return NULL;
2078 }
2079 if (fout == NULL || fout == Py_None) {
2080 PyErr_SetString(PyExc_RuntimeError,
2081 "input(): lost sys.stdout");
2082 return NULL;
2083 }
2084 if (ferr == NULL || ferr == Py_None) {
2085 PyErr_SetString(PyExc_RuntimeError,
2086 "input(): lost sys.stderr");
2087 return NULL;
2088 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002089
Steve Dowerb82e17e2019-05-23 08:45:22 -07002090 if (PySys_Audit("builtins.input", "O", prompt ? prompt : Py_None) < 0) {
2091 return NULL;
2092 }
2093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 /* First of all, flush stderr */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002095 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002096 if (tmp == NULL)
2097 PyErr_Clear();
2098 else
2099 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00002100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002101 /* We should only use (GNU) readline if Python's sys.stdin and
2102 sys.stdout are the same as C's stdin and stdout, because we
2103 need to pass it those. */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002104 tmp = _PyObject_CallMethodIdNoArgs(fin, &PyId_fileno);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002105 if (tmp == NULL) {
2106 PyErr_Clear();
2107 tty = 0;
2108 }
2109 else {
2110 fd = PyLong_AsLong(tmp);
2111 Py_DECREF(tmp);
2112 if (fd < 0 && PyErr_Occurred())
2113 return NULL;
2114 tty = fd == fileno(stdin) && isatty(fd);
2115 }
2116 if (tty) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002117 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno);
Martin Panterc9a6ab52015-10-10 01:25:38 +00002118 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00002120 tty = 0;
2121 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002122 else {
2123 fd = PyLong_AsLong(tmp);
2124 Py_DECREF(tmp);
2125 if (fd < 0 && PyErr_Occurred())
2126 return NULL;
2127 tty = fd == fileno(stdout) && isatty(fd);
2128 }
2129 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002131 /* If we're interactive, use (GNU) readline */
2132 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002133 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02002134 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002135 char *s = NULL;
2136 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2137 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002138 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002140 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002141
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002142 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002143 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002144 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002145 if (!stdin_encoding || !stdin_errors ||
2146 !PyUnicode_Check(stdin_encoding) ||
2147 !PyUnicode_Check(stdin_errors)) {
2148 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002149 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002150 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002151 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2152 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002153 if (!stdin_encoding_str || !stdin_errors_str)
2154 goto _readline_errors;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002155 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 if (tmp == NULL)
2157 PyErr_Clear();
2158 else
2159 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002160 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002161 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002162 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002164 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002165 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002166 if (!stdout_encoding || !stdout_errors ||
2167 !PyUnicode_Check(stdout_encoding) ||
2168 !PyUnicode_Check(stdout_errors)) {
2169 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002170 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002171 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002172 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2173 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002174 if (!stdout_encoding_str || !stdout_errors_str)
2175 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002176 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002177 if (stringpo == NULL)
2178 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002180 stdout_encoding_str, stdout_errors_str);
2181 Py_CLEAR(stdout_encoding);
2182 Py_CLEAR(stdout_errors);
2183 Py_CLEAR(stringpo);
2184 if (po == NULL)
2185 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002186 assert(PyBytes_Check(po));
2187 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002188 }
2189 else {
2190 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002191 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002193 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002195 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 if (!PyErr_Occurred())
2197 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002198 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002200
2201 len = strlen(s);
2202 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002203 PyErr_SetNone(PyExc_EOFError);
2204 result = NULL;
2205 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002206 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 if (len > PY_SSIZE_T_MAX) {
2208 PyErr_SetString(PyExc_OverflowError,
2209 "input: input too long");
2210 result = NULL;
2211 }
2212 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002213 len--; /* strip trailing '\n' */
2214 if (len != 0 && s[len-1] == '\r')
2215 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002216 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2217 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002218 }
2219 }
2220 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002221 Py_DECREF(stdin_errors);
2222 Py_XDECREF(po);
Victor Stinner00d7abd2020-12-01 09:56:42 +01002223 PyMem_Free(s);
Steve Dowerb82e17e2019-05-23 08:45:22 -07002224
2225 if (result != NULL) {
2226 if (PySys_Audit("builtins.input/result", "O", result) < 0) {
2227 return NULL;
2228 }
2229 }
2230
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002231 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002232
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002233 _readline_errors:
2234 Py_XDECREF(stdin_encoding);
2235 Py_XDECREF(stdout_encoding);
2236 Py_XDECREF(stdin_errors);
2237 Py_XDECREF(stdout_errors);
2238 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002239 if (tty)
2240 return NULL;
2241
2242 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002246 if (prompt != NULL) {
2247 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 return NULL;
2249 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002250 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002251 if (tmp == NULL)
2252 PyErr_Clear();
2253 else
2254 Py_DECREF(tmp);
2255 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002256}
2257
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002258
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002259/*[clinic input]
2260repr as builtin_repr
2261
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002262 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002263 /
2264
2265Return the canonical string representation of the object.
2266
2267For many object types, including most builtins, eval(repr(obj)) == obj.
2268[clinic start generated code]*/
2269
Guido van Rossum79f25d91997-04-29 20:08:16 +00002270static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002271builtin_repr(PyObject *module, PyObject *obj)
2272/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002273{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002274 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002275}
2276
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002277
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002278/*[clinic input]
2279round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002280
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002281 number: object
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002282 ndigits: object = None
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002283
2284Round a number to a given precision in decimal digits.
2285
2286The return value is an integer if ndigits is omitted or None. Otherwise
2287the return value has the same type as the number. ndigits may be negative.
2288[clinic start generated code]*/
2289
2290static PyObject *
2291builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002292/*[clinic end generated code: output=ff0d9dd176c02ede input=275678471d7aca15]*/
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002293{
2294 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002295
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 if (Py_TYPE(number)->tp_dict == NULL) {
2297 if (PyType_Ready(Py_TYPE(number)) < 0)
2298 return NULL;
2299 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002300
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002301 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002302 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002303 if (!PyErr_Occurred())
2304 PyErr_Format(PyExc_TypeError,
2305 "type %.100s doesn't define __round__ method",
2306 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002307 return NULL;
2308 }
Alex Martelliae211f92007-08-22 23:21:33 +00002309
Serhiy Storchaka279f4462019-09-14 12:24:05 +03002310 if (ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002311 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002312 else
Petr Viktorinffd97532020-02-11 17:46:57 +01002313 result = PyObject_CallOneArg(round, ndigits);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002314 Py_DECREF(round);
2315 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002316}
2317
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002318
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002319/*AC: we need to keep the kwds dict intact to easily call into the
2320 * list.sort method, which isn't currently supported in AC. So we just use
2321 * the initially generated signature with a custom implementation.
2322 */
2323/* [disabled clinic input]
2324sorted as builtin_sorted
2325
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002326 iterable as seq: object
2327 key as keyfunc: object = None
2328 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002329
2330Return a new list containing all items from the iterable in ascending order.
2331
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002332A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002333reverse flag can be set to request the result in descending order.
2334[end disabled clinic input]*/
2335
2336PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002337"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002338"--\n"
2339"\n"
2340"Return a new list containing all items from the iterable in ascending order.\n"
2341"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002342"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002343"reverse flag can be set to request the result in descending order.");
2344
2345#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002346 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002347
Raymond Hettinger64958a12003-12-17 20:43:33 +00002348static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002349builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002350{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002351 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002352
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002353 /* Keyword arguments are passed through list.sort() which will check
2354 them. */
2355 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002356 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002357
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002358 newlist = PySequence_List(seq);
2359 if (newlist == NULL)
2360 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002361
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002362 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 if (callable == NULL) {
2364 Py_DECREF(newlist);
2365 return NULL;
2366 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002367
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002368 assert(nargs >= 1);
Petr Viktorinffd97532020-02-11 17:46:57 +01002369 v = PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 Py_DECREF(callable);
2371 if (v == NULL) {
2372 Py_DECREF(newlist);
2373 return NULL;
2374 }
2375 Py_DECREF(v);
2376 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002377}
2378
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002379
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002380/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002381static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002382builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002383{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 PyObject *v = NULL;
2385 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002386
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002387 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2388 return NULL;
2389 if (v == NULL) {
2390 d = PyEval_GetLocals();
Serhiy Storchaka41c57b32019-09-01 12:03:39 +03002391 Py_XINCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002392 }
2393 else {
Serhiy Storchaka41c57b32019-09-01 12:03:39 +03002394 if (_PyObject_LookupAttrId(v, &PyId___dict__, &d) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002395 PyErr_SetString(PyExc_TypeError,
2396 "vars() argument must have __dict__ attribute");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002397 }
2398 }
2399 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002400}
2401
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002402PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002403"vars([object]) -> dictionary\n\
2404\n\
2405Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002406With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002407
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002408
2409/*[clinic input]
2410sum as builtin_sum
2411
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002412 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002413 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002414 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002415
2416Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2417
2418When the iterable is empty, return the start value.
2419This function is intended specifically for use with numeric values and may
2420reject non-numeric types.
2421[clinic start generated code]*/
2422
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002423static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002424builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002425/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002426{
2427 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002429
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002430 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 if (iter == NULL)
2432 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002433
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002434 if (result == NULL) {
2435 result = PyLong_FromLong(0);
2436 if (result == NULL) {
2437 Py_DECREF(iter);
2438 return NULL;
2439 }
2440 } else {
2441 /* reject string values for 'start' parameter */
2442 if (PyUnicode_Check(result)) {
2443 PyErr_SetString(PyExc_TypeError,
2444 "sum() can't sum strings [use ''.join(seq) instead]");
2445 Py_DECREF(iter);
2446 return NULL;
2447 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002448 if (PyBytes_Check(result)) {
2449 PyErr_SetString(PyExc_TypeError,
2450 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002451 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002452 return NULL;
2453 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002454 if (PyByteArray_Check(result)) {
2455 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002456 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002457 Py_DECREF(iter);
2458 return NULL;
2459 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 Py_INCREF(result);
2461 }
Alex Martellia70b1912003-04-22 08:12:33 +00002462
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002463#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2465 Assumes all inputs are the same type. If the assumption fails, default
2466 to the more general routine.
2467 */
2468 if (PyLong_CheckExact(result)) {
2469 int overflow;
2470 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2471 /* If this already overflowed, don't even enter the loop. */
2472 if (overflow == 0) {
2473 Py_DECREF(result);
2474 result = NULL;
2475 }
2476 while(result == NULL) {
2477 item = PyIter_Next(iter);
2478 if (item == NULL) {
2479 Py_DECREF(iter);
2480 if (PyErr_Occurred())
2481 return NULL;
2482 return PyLong_FromLong(i_result);
2483 }
Serhiy Storchaka88bdb922019-09-10 16:31:01 +03002484 if (PyLong_CheckExact(item) || PyBool_Check(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002485 long b = PyLong_AsLongAndOverflow(item, &overflow);
Serhiy Storchaka29500732019-05-05 14:26:23 +03002486 if (overflow == 0 &&
2487 (i_result >= 0 ? (b <= LONG_MAX - i_result)
2488 : (b >= LONG_MIN - i_result)))
2489 {
2490 i_result += b;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002491 Py_DECREF(item);
2492 continue;
2493 }
2494 }
2495 /* Either overflowed or is not an int. Restore real objects and process normally */
2496 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002497 if (result == NULL) {
2498 Py_DECREF(item);
2499 Py_DECREF(iter);
2500 return NULL;
2501 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 temp = PyNumber_Add(result, item);
2503 Py_DECREF(result);
2504 Py_DECREF(item);
2505 result = temp;
2506 if (result == NULL) {
2507 Py_DECREF(iter);
2508 return NULL;
2509 }
2510 }
2511 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002513 if (PyFloat_CheckExact(result)) {
2514 double f_result = PyFloat_AS_DOUBLE(result);
2515 Py_DECREF(result);
2516 result = NULL;
2517 while(result == NULL) {
2518 item = PyIter_Next(iter);
2519 if (item == NULL) {
2520 Py_DECREF(iter);
2521 if (PyErr_Occurred())
2522 return NULL;
2523 return PyFloat_FromDouble(f_result);
2524 }
2525 if (PyFloat_CheckExact(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 f_result += PyFloat_AS_DOUBLE(item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 Py_DECREF(item);
2528 continue;
2529 }
Serhiy Storchaka88bdb922019-09-10 16:31:01 +03002530 if (PyLong_Check(item)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 long value;
2532 int overflow;
2533 value = PyLong_AsLongAndOverflow(item, &overflow);
2534 if (!overflow) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 f_result += (double)value;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 Py_DECREF(item);
2537 continue;
2538 }
2539 }
2540 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002541 if (result == NULL) {
2542 Py_DECREF(item);
2543 Py_DECREF(iter);
2544 return NULL;
2545 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002546 temp = PyNumber_Add(result, item);
2547 Py_DECREF(result);
2548 Py_DECREF(item);
2549 result = temp;
2550 if (result == NULL) {
2551 Py_DECREF(iter);
2552 return NULL;
2553 }
2554 }
2555 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002556#endif
2557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002558 for(;;) {
2559 item = PyIter_Next(iter);
2560 if (item == NULL) {
2561 /* error, or end-of-sequence */
2562 if (PyErr_Occurred()) {
2563 Py_DECREF(result);
2564 result = NULL;
2565 }
2566 break;
2567 }
2568 /* It's tempting to use PyNumber_InPlaceAdd instead of
2569 PyNumber_Add here, to avoid quadratic running time
2570 when doing 'sum(list_of_lists, [])'. However, this
2571 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002573 empty = []
2574 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002575
Brandt Bucherabb9a442020-02-01 03:08:34 -08002576 would change the value of empty. In fact, using
2577 in-place addition rather that binary addition for
2578 any of the steps introduces subtle behavior changes:
Victor Stinner58f4e1a2020-02-05 18:24:33 +01002579
Brandt Bucherabb9a442020-02-01 03:08:34 -08002580 https://bugs.python.org/issue18305 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002581 temp = PyNumber_Add(result, item);
2582 Py_DECREF(result);
2583 Py_DECREF(item);
2584 result = temp;
2585 if (result == NULL)
2586 break;
2587 }
2588 Py_DECREF(iter);
2589 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002590}
2591
Alex Martellia70b1912003-04-22 08:12:33 +00002592
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002593/*[clinic input]
2594isinstance as builtin_isinstance
2595
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002596 obj: object
2597 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002598 /
2599
2600Return whether an object is an instance of a class or of a subclass thereof.
2601
2602A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2603check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2604or ...`` etc.
2605[clinic start generated code]*/
2606
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002607static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002608builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002609 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002610/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002611{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002612 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002613
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002614 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002615 if (retval < 0)
2616 return NULL;
2617 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002618}
2619
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002620
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002621/*[clinic input]
2622issubclass as builtin_issubclass
2623
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002624 cls: object
2625 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002626 /
2627
Alex Poveldf773f82020-06-03 15:19:45 +02002628Return whether 'cls' is derived from another class or is the same class.
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002629
2630A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2631check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
Alex Poveldf773f82020-06-03 15:19:45 +02002632or ...``.
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002633[clinic start generated code]*/
2634
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002635static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002636builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002637 PyObject *class_or_tuple)
Alex Poveldf773f82020-06-03 15:19:45 +02002638/*[clinic end generated code: output=358412410cd7a250 input=a24b9f3d58c370d6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002639{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002640 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002641
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002642 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002643 if (retval < 0)
2644 return NULL;
2645 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002646}
2647
2648
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002649typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002650 PyObject_HEAD
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002651 Py_ssize_t tuplesize;
2652 PyObject *ittuple; /* tuple of iterators */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002653 PyObject *result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002654 int strict;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002655} zipobject;
2656
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002657static PyObject *
2658zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002659{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002660 zipobject *lz;
2661 Py_ssize_t i;
2662 PyObject *ittuple; /* tuple of iterators */
2663 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002664 Py_ssize_t tuplesize;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002665 int strict = 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002666
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002667 if (kwds) {
2668 PyObject *empty = PyTuple_New(0);
2669 if (empty == NULL) {
2670 return NULL;
2671 }
2672 static char *kwlist[] = {"strict", NULL};
2673 int parsed = PyArg_ParseTupleAndKeywords(
2674 empty, kwds, "|$p:zip", kwlist, &strict);
2675 Py_DECREF(empty);
2676 if (!parsed) {
2677 return NULL;
2678 }
2679 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002681 /* args must be a tuple */
2682 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002683 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002684
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002685 /* obtain iterators */
2686 ittuple = PyTuple_New(tuplesize);
2687 if (ittuple == NULL)
2688 return NULL;
2689 for (i=0; i < tuplesize; ++i) {
2690 PyObject *item = PyTuple_GET_ITEM(args, i);
2691 PyObject *it = PyObject_GetIter(item);
2692 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002693 Py_DECREF(ittuple);
2694 return NULL;
2695 }
2696 PyTuple_SET_ITEM(ittuple, i, it);
2697 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002699 /* create a result holder */
2700 result = PyTuple_New(tuplesize);
2701 if (result == NULL) {
2702 Py_DECREF(ittuple);
2703 return NULL;
2704 }
2705 for (i=0 ; i < tuplesize ; i++) {
2706 Py_INCREF(Py_None);
2707 PyTuple_SET_ITEM(result, i, Py_None);
2708 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002709
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002710 /* create zipobject structure */
2711 lz = (zipobject *)type->tp_alloc(type, 0);
2712 if (lz == NULL) {
2713 Py_DECREF(ittuple);
2714 Py_DECREF(result);
2715 return NULL;
2716 }
2717 lz->ittuple = ittuple;
2718 lz->tuplesize = tuplesize;
2719 lz->result = result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002720 lz->strict = strict;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002721
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002722 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002723}
2724
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002725static void
2726zip_dealloc(zipobject *lz)
2727{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002728 PyObject_GC_UnTrack(lz);
2729 Py_XDECREF(lz->ittuple);
2730 Py_XDECREF(lz->result);
2731 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002732}
2733
2734static int
2735zip_traverse(zipobject *lz, visitproc visit, void *arg)
2736{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002737 Py_VISIT(lz->ittuple);
2738 Py_VISIT(lz->result);
2739 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002740}
2741
2742static PyObject *
2743zip_next(zipobject *lz)
2744{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002745 Py_ssize_t i;
2746 Py_ssize_t tuplesize = lz->tuplesize;
2747 PyObject *result = lz->result;
2748 PyObject *it;
2749 PyObject *item;
2750 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002751
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002752 if (tuplesize == 0)
2753 return NULL;
2754 if (Py_REFCNT(result) == 1) {
2755 Py_INCREF(result);
2756 for (i=0 ; i < tuplesize ; i++) {
2757 it = PyTuple_GET_ITEM(lz->ittuple, i);
2758 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002759 if (item == NULL) {
2760 Py_DECREF(result);
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002761 if (lz->strict) {
2762 goto check;
2763 }
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002764 return NULL;
2765 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002766 olditem = PyTuple_GET_ITEM(result, i);
2767 PyTuple_SET_ITEM(result, i, item);
2768 Py_DECREF(olditem);
2769 }
Brandt Bucher226a0122020-12-04 19:45:57 -08002770 // bpo-42536: The GC may have untracked this result tuple. Since we're
2771 // recycling it, make sure it's tracked again:
2772 if (!_PyObject_GC_IS_TRACKED(result)) {
2773 _PyObject_GC_TRACK(result);
2774 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002775 } else {
2776 result = PyTuple_New(tuplesize);
2777 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002778 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002779 for (i=0 ; i < tuplesize ; i++) {
2780 it = PyTuple_GET_ITEM(lz->ittuple, i);
2781 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002782 if (item == NULL) {
2783 Py_DECREF(result);
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002784 if (lz->strict) {
2785 goto check;
2786 }
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002787 return NULL;
2788 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002789 PyTuple_SET_ITEM(result, i, item);
2790 }
2791 }
2792 return result;
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002793check:
2794 if (PyErr_Occurred()) {
2795 if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
2796 // next() on argument i raised an exception (not StopIteration)
2797 return NULL;
2798 }
2799 PyErr_Clear();
2800 }
2801 if (i) {
2802 // ValueError: zip() argument 2 is shorter than argument 1
2803 // ValueError: zip() argument 3 is shorter than arguments 1-2
2804 const char* plural = i == 1 ? " " : "s 1-";
2805 return PyErr_Format(PyExc_ValueError,
2806 "zip() argument %d is shorter than argument%s%d",
2807 i + 1, plural, i);
2808 }
2809 for (i = 1; i < tuplesize; i++) {
2810 it = PyTuple_GET_ITEM(lz->ittuple, i);
2811 item = (*Py_TYPE(it)->tp_iternext)(it);
2812 if (item) {
2813 Py_DECREF(item);
2814 const char* plural = i == 1 ? " " : "s 1-";
2815 return PyErr_Format(PyExc_ValueError,
2816 "zip() argument %d is longer than argument%s%d",
2817 i + 1, plural, i);
2818 }
2819 if (PyErr_Occurred()) {
2820 if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
2821 // next() on argument i raised an exception (not StopIteration)
2822 return NULL;
2823 }
2824 PyErr_Clear();
2825 }
2826 // Argument i is exhausted. So far so good...
2827 }
2828 // All arguments are exhausted. Success!
2829 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002830}
Barry Warsawbd599b52000-08-03 15:45:29 +00002831
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002832static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302833zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002834{
2835 /* Just recreate the zip with the internal iterator tuple */
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002836 if (lz->strict) {
2837 return PyTuple_Pack(3, Py_TYPE(lz), lz->ittuple, Py_True);
2838 }
2839 return PyTuple_Pack(2, Py_TYPE(lz), lz->ittuple);
2840}
2841
2842PyDoc_STRVAR(setstate_doc, "Set state information for unpickling.");
2843
2844static PyObject *
2845zip_setstate(zipobject *lz, PyObject *state)
2846{
2847 int strict = PyObject_IsTrue(state);
2848 if (strict < 0) {
2849 return NULL;
2850 }
2851 lz->strict = strict;
2852 Py_RETURN_NONE;
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002853}
2854
2855static PyMethodDef zip_methods[] = {
2856 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002857 {"__setstate__", (PyCFunction)zip_setstate, METH_O, setstate_doc},
2858 {NULL} /* sentinel */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002859};
2860
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002861PyDoc_STRVAR(zip_doc,
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002862"zip(*iterables, strict=False) --> Yield tuples until an input is exhausted.\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002863\n\
Gregory P. Smith6a5d3ff2020-05-15 14:26:00 -07002864 >>> list(zip('abcdefg', range(3), range(4)))\n\
2865 [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]\n\
2866\n\
2867The zip object yields n-length tuples, where n is the number of iterables\n\
2868passed as positional arguments to zip(). The i-th element in every tuple\n\
2869comes from the i-th iterable argument to zip(). This continues until the\n\
Guido van Rossum310f6aa2020-06-19 03:16:57 -07002870shortest argument is exhausted.\n\
2871\n\
2872If strict is true and one of the arguments is exhausted before the others,\n\
2873raise a ValueError.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002874
2875PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002876 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2877 "zip", /* tp_name */
2878 sizeof(zipobject), /* tp_basicsize */
2879 0, /* tp_itemsize */
2880 /* methods */
2881 (destructor)zip_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002882 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002883 0, /* tp_getattr */
2884 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002885 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002886 0, /* tp_repr */
2887 0, /* tp_as_number */
2888 0, /* tp_as_sequence */
2889 0, /* tp_as_mapping */
2890 0, /* tp_hash */
2891 0, /* tp_call */
2892 0, /* tp_str */
2893 PyObject_GenericGetAttr, /* tp_getattro */
2894 0, /* tp_setattro */
2895 0, /* tp_as_buffer */
2896 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2897 Py_TPFLAGS_BASETYPE, /* tp_flags */
2898 zip_doc, /* tp_doc */
2899 (traverseproc)zip_traverse, /* tp_traverse */
2900 0, /* tp_clear */
2901 0, /* tp_richcompare */
2902 0, /* tp_weaklistoffset */
2903 PyObject_SelfIter, /* tp_iter */
2904 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002905 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002906 0, /* tp_members */
2907 0, /* tp_getset */
2908 0, /* tp_base */
2909 0, /* tp_dict */
2910 0, /* tp_descr_get */
2911 0, /* tp_descr_set */
2912 0, /* tp_dictoffset */
2913 0, /* tp_init */
2914 PyType_GenericAlloc, /* tp_alloc */
2915 zip_new, /* tp_new */
2916 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002917};
Barry Warsawbd599b52000-08-03 15:45:29 +00002918
2919
Guido van Rossum79f25d91997-04-29 20:08:16 +00002920static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002921 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002922 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002923 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002924 BUILTIN_ABS_METHODDEF
2925 BUILTIN_ALL_METHODDEF
2926 BUILTIN_ANY_METHODDEF
2927 BUILTIN_ASCII_METHODDEF
2928 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002929 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002930 BUILTIN_CALLABLE_METHODDEF
2931 BUILTIN_CHR_METHODDEF
2932 BUILTIN_COMPILE_METHODDEF
2933 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002934 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002935 BUILTIN_DIVMOD_METHODDEF
2936 BUILTIN_EVAL_METHODDEF
2937 BUILTIN_EXEC_METHODDEF
2938 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002939 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002940 BUILTIN_GLOBALS_METHODDEF
2941 BUILTIN_HASATTR_METHODDEF
2942 BUILTIN_HASH_METHODDEF
2943 BUILTIN_HEX_METHODDEF
2944 BUILTIN_ID_METHODDEF
2945 BUILTIN_INPUT_METHODDEF
2946 BUILTIN_ISINSTANCE_METHODDEF
2947 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002948 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04002949 BUILTIN_AITER_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002950 BUILTIN_LEN_METHODDEF
2951 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002952 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2953 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2954 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Joshua Bronsonf0a6fde2021-03-23 18:47:21 -04002955 BUILTIN_ANEXT_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002956 BUILTIN_OCT_METHODDEF
2957 BUILTIN_ORD_METHODDEF
2958 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002959 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002960 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002961 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002962 BUILTIN_SETATTR_METHODDEF
2963 BUILTIN_SORTED_METHODDEF
2964 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002965 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2966 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002967};
2968
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002969PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002970"Built-in functions, exceptions, and other objects.\n\
2971\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002972Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002973
Martin v. Löwis1a214512008-06-11 05:26:20 +00002974static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002975 PyModuleDef_HEAD_INIT,
2976 "builtins",
2977 builtin_doc,
2978 -1, /* multiple "initialization" just copies the module dict. */
2979 builtin_methods,
2980 NULL,
2981 NULL,
2982 NULL,
2983 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002984};
2985
2986
Guido van Rossum25ce5661997-08-02 03:10:38 +00002987PyObject *
Victor Stinnerbcb094b2021-02-19 15:10:45 +01002988_PyBuiltin_Init(PyInterpreterState *interp)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002989{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002990 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002991
Victor Stinnerbcb094b2021-02-19 15:10:45 +01002992 const PyConfig *config = _PyInterpreterState_GetConfig(interp);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002993
Benjamin Peterson42124a72012-10-30 23:41:54 -04002994 if (PyType_Ready(&PyFilter_Type) < 0 ||
2995 PyType_Ready(&PyMap_Type) < 0 ||
2996 PyType_Ready(&PyZip_Type) < 0)
2997 return NULL;
2998
Eric Snowd393c1b2017-09-14 12:18:12 -06002999 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003000 if (mod == NULL)
3001 return NULL;
3002 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00003003
Tim Peters7571a0f2003-03-23 17:52:28 +00003004#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003005 /* "builtins" exposes a number of statically allocated objects
3006 * that, before this code was added in 2.3, never showed up in
3007 * the list of "all objects" maintained by Py_TRACE_REFS. As a
3008 * result, programs leaking references to None and False (etc)
3009 * couldn't be diagnosed by examining sys.getobjects(0).
3010 */
Tim Peters7571a0f2003-03-23 17:52:28 +00003011#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
3012#else
3013#define ADD_TO_ALL(OBJECT) (void)0
3014#endif
3015
Tim Peters4b7625e2001-09-13 21:37:17 +00003016#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003017 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
3018 return NULL; \
3019 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00003020
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003021 SETBUILTIN("None", Py_None);
3022 SETBUILTIN("Ellipsis", Py_Ellipsis);
3023 SETBUILTIN("NotImplemented", Py_NotImplemented);
3024 SETBUILTIN("False", Py_False);
3025 SETBUILTIN("True", Py_True);
3026 SETBUILTIN("bool", &PyBool_Type);
3027 SETBUILTIN("memoryview", &PyMemoryView_Type);
3028 SETBUILTIN("bytearray", &PyByteArray_Type);
3029 SETBUILTIN("bytes", &PyBytes_Type);
3030 SETBUILTIN("classmethod", &PyClassMethod_Type);
3031 SETBUILTIN("complex", &PyComplex_Type);
3032 SETBUILTIN("dict", &PyDict_Type);
3033 SETBUILTIN("enumerate", &PyEnum_Type);
3034 SETBUILTIN("filter", &PyFilter_Type);
3035 SETBUILTIN("float", &PyFloat_Type);
3036 SETBUILTIN("frozenset", &PyFrozenSet_Type);
3037 SETBUILTIN("property", &PyProperty_Type);
3038 SETBUILTIN("int", &PyLong_Type);
3039 SETBUILTIN("list", &PyList_Type);
3040 SETBUILTIN("map", &PyMap_Type);
3041 SETBUILTIN("object", &PyBaseObject_Type);
3042 SETBUILTIN("range", &PyRange_Type);
3043 SETBUILTIN("reversed", &PyReversed_Type);
3044 SETBUILTIN("set", &PySet_Type);
3045 SETBUILTIN("slice", &PySlice_Type);
3046 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
3047 SETBUILTIN("str", &PyUnicode_Type);
3048 SETBUILTIN("super", &PySuper_Type);
3049 SETBUILTIN("tuple", &PyTuple_Type);
3050 SETBUILTIN("type", &PyType_Type);
3051 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02003052 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003053 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03003054 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003055 return NULL;
3056 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03003057 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00003058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003059 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00003060#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00003061#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00003062}