blob: 56d882d387eeedb41d52a87bc26ae0bfcf606b81 [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 Stinner5f2df882018-11-12 00:56:19 +01005#include "ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinner621cebe2018-11-12 16:53:38 +01007#include "pycore_pystate.h"
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +05008#include "pycore_tupleobject.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009
Victor Stinnerbd303c12013-11-07 23:07:29 +010010_Py_IDENTIFIER(__builtins__);
11_Py_IDENTIFIER(__dict__);
12_Py_IDENTIFIER(__prepare__);
13_Py_IDENTIFIER(__round__);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010014_Py_IDENTIFIER(__mro_entries__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010015_Py_IDENTIFIER(encoding);
16_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020017_Py_IDENTIFIER(fileno);
18_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010019_Py_IDENTIFIER(metaclass);
20_Py_IDENTIFIER(sort);
21_Py_IDENTIFIER(stdin);
22_Py_IDENTIFIER(stdout);
23_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020024
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030025#include "clinic/bltinmodule.c.h"
26
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010027static PyObject*
Victor Stinner05d68a82018-01-18 11:15:25 +010028update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010029{
Victor Stinner05d68a82018-01-18 11:15:25 +010030 Py_ssize_t i, j;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010031 PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
32 PyObject *stack[1] = {bases};
33 assert(PyTuple_Check(bases));
34
35 for (i = 0; i < nargs; i++) {
36 base = args[i];
37 if (PyType_Check(base)) {
38 if (new_bases) {
39 /* If we already have made a replacement, then we append every normal base,
40 otherwise just skip it. */
41 if (PyList_Append(new_bases, base) < 0) {
42 goto error;
43 }
44 }
45 continue;
46 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020047 if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, &meth) < 0) {
48 goto error;
49 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010050 if (!meth) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010051 if (new_bases) {
52 if (PyList_Append(new_bases, base) < 0) {
53 goto error;
54 }
55 }
56 continue;
57 }
58 new_base = _PyObject_FastCall(meth, stack, 1);
59 Py_DECREF(meth);
60 if (!new_base) {
61 goto error;
62 }
63 if (!PyTuple_Check(new_base)) {
64 PyErr_SetString(PyExc_TypeError,
65 "__mro_entries__ must return a tuple");
66 Py_DECREF(new_base);
67 goto error;
68 }
69 if (!new_bases) {
70 /* If this is a first successful replacement, create new_bases list and
71 copy previously encountered bases. */
72 if (!(new_bases = PyList_New(i))) {
73 goto error;
74 }
75 for (j = 0; j < i; j++) {
76 base = args[j];
77 PyList_SET_ITEM(new_bases, j, base);
78 Py_INCREF(base);
79 }
80 }
81 j = PyList_GET_SIZE(new_bases);
82 if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
83 goto error;
84 }
85 Py_DECREF(new_base);
86 }
87 if (!new_bases) {
88 return bases;
89 }
90 result = PyList_AsTuple(new_bases);
91 Py_DECREF(new_bases);
92 return result;
93
94error:
95 Py_XDECREF(new_bases);
96 return NULL;
97}
98
Nick Coghlanf9e227e2014-08-17 14:01:19 +100099/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000100static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200101builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
Victor Stinner773dc6d2017-01-16 23:46:26 +0100102 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000103{
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100104 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *orig_bases;
Nick Coghlan19d24672016-12-05 16:47:55 +1000105 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +0100106 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000108 if (nargs < 2) {
109 PyErr_SetString(PyExc_TypeError,
110 "__build_class__: not enough arguments");
111 return NULL;
112 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100113 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -0500114 if (!PyFunction_Check(func)) {
115 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -0500116 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -0500117 return NULL;
118 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100119 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000120 if (!PyUnicode_Check(name)) {
121 PyErr_SetString(PyExc_TypeError,
122 "__build_class__: name is not a string");
123 return NULL;
124 }
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +0500125 orig_bases = _PyTuple_FromArray(args + 2, nargs - 2);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100126 if (orig_bases == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000128
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100129 bases = update_bases(orig_bases, args + 2, nargs - 2);
130 if (bases == NULL) {
131 Py_DECREF(orig_bases);
132 return NULL;
133 }
134
Victor Stinner773dc6d2017-01-16 23:46:26 +0100135 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000136 meta = NULL;
137 mkw = NULL;
138 }
139 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +0100140 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 if (mkw == NULL) {
142 Py_DECREF(bases);
143 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000144 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100145
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200146 meta = _PyDict_GetItemIdWithError(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 if (meta != NULL) {
148 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100149 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 Py_DECREF(meta);
151 Py_DECREF(mkw);
152 Py_DECREF(bases);
153 return NULL;
154 }
Nick Coghlande31b192011-10-23 22:04:16 +1000155 /* metaclass is explicitly given, check if it's indeed a class */
156 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000157 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200158 else if (PyErr_Occurred()) {
159 Py_DECREF(mkw);
160 Py_DECREF(bases);
161 return NULL;
162 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000163 }
164 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000165 /* if there are no bases, use type: */
166 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000168 }
169 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 else {
171 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
172 meta = (PyObject *) (base0->ob_type);
173 }
174 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000175 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000176 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000177
Nick Coghlande31b192011-10-23 22:04:16 +1000178 if (isclass) {
179 /* meta is really a class, so check for a more derived
180 metaclass, or possible metaclass conflicts: */
181 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
182 bases);
183 if (winner == NULL) {
184 Py_DECREF(meta);
185 Py_XDECREF(mkw);
186 Py_DECREF(bases);
187 return NULL;
188 }
189 if (winner != meta) {
190 Py_DECREF(meta);
191 meta = winner;
192 Py_INCREF(meta);
193 }
194 }
195 /* else: meta is not a class, so we cannot do the metaclass
196 calculation, so we will use the explicitly given object as it is */
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200197 if (_PyObject_LookupAttrId(meta, &PyId___prepare__, &prep) < 0) {
198 ns = NULL;
199 }
200 else if (prep == NULL) {
201 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 }
203 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200204 PyObject *pargs[2] = {name, bases};
205 ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 Py_DECREF(prep);
207 }
208 if (ns == NULL) {
209 Py_DECREF(meta);
210 Py_XDECREF(mkw);
211 Py_DECREF(bases);
212 return NULL;
213 }
Oren Milman5837d042017-09-27 17:04:37 +0300214 if (!PyMapping_Check(ns)) {
215 PyErr_Format(PyExc_TypeError,
216 "%.200s.__prepare__() must return a mapping, not %.200s",
217 isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
218 Py_TYPE(ns)->tp_name);
219 goto error;
220 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000221 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
Benjamin Petersone8e14592013-05-16 14:37:25 -0500222 NULL, 0, NULL, 0, NULL, 0, NULL,
223 PyFunction_GET_CLOSURE(func));
Nick Coghlan19d24672016-12-05 16:47:55 +1000224 if (cell != NULL) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100225 if (bases != orig_bases) {
226 if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
227 goto error;
228 }
229 }
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200230 PyObject *margs[3] = {name, bases, ns};
231 cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000232 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
233 PyObject *cell_cls = PyCell_GET(cell);
234 if (cell_cls != cls) {
Nick Coghlan19d24672016-12-05 16:47:55 +1000235 if (cell_cls == NULL) {
236 const char *msg =
237 "__class__ not set defining %.200R as %.200R. "
238 "Was __classcell__ propagated to type.__new__?";
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300239 PyErr_Format(PyExc_RuntimeError, msg, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000240 } else {
241 const char *msg =
242 "__class__ set to %.200R defining %.200R as %.200R";
243 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000244 }
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300245 Py_DECREF(cls);
246 cls = NULL;
247 goto error;
Nick Coghlan19d24672016-12-05 16:47:55 +1000248 }
249 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000251error:
252 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 Py_DECREF(ns);
254 Py_DECREF(meta);
255 Py_XDECREF(mkw);
256 Py_DECREF(bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100257 if (bases != orig_bases) {
258 Py_DECREF(orig_bases);
259 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000261}
262
263PyDoc_STRVAR(build_class_doc,
264"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
265\n\
266Internal helper function used by the class statement.");
267
268static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000269builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
272 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400273 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400274 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000275
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400276 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 kwlist, &name, &globals, &locals, &fromlist, &level))
278 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400279 return PyImport_ImportModuleLevelObject(name, globals, locals,
280 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281}
282
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000283PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400284"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000285\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000286Import a module. Because this function is meant for use by the Python\n\
oldk461d2252018-02-02 12:20:00 +0800287interpreter and not for general use, it is better to use\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000288importlib.import_module() to programmatically import a module.\n\
289\n\
290The globals argument is only used to determine the context;\n\
291they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000292should be a list of names to emulate ``from name import ...'', or an\n\
293empty list to emulate ``import name''.\n\
294When importing a module from a package, note that __import__('A.B', ...)\n\
295returns package A when fromlist is empty, but its submodule B when\n\
oldk461d2252018-02-02 12:20:00 +0800296fromlist is not empty. The level argument is used to determine whether to\n\
297perform absolute or relative imports: 0 is absolute, while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000298is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000299
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000300
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000301/*[clinic input]
302abs as builtin_abs
303
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300304 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000305 /
306
307Return the absolute value of the argument.
308[clinic start generated code]*/
309
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300311builtin_abs(PyObject *module, PyObject *x)
312/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000313{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000314 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000315}
316
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000317/*[clinic input]
318all as builtin_all
319
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300320 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000321 /
322
323Return True if bool(x) is True for all values x in the iterable.
324
325If the iterable is empty, return True.
326[clinic start generated code]*/
327
Raymond Hettinger96229b12005-03-11 06:49:40 +0000328static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300329builtin_all(PyObject *module, PyObject *iterable)
330/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000331{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 PyObject *it, *item;
333 PyObject *(*iternext)(PyObject *);
334 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000335
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000336 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 if (it == NULL)
338 return NULL;
339 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000340
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000341 for (;;) {
342 item = iternext(it);
343 if (item == NULL)
344 break;
345 cmp = PyObject_IsTrue(item);
346 Py_DECREF(item);
347 if (cmp < 0) {
348 Py_DECREF(it);
349 return NULL;
350 }
351 if (cmp == 0) {
352 Py_DECREF(it);
353 Py_RETURN_FALSE;
354 }
355 }
356 Py_DECREF(it);
357 if (PyErr_Occurred()) {
358 if (PyErr_ExceptionMatches(PyExc_StopIteration))
359 PyErr_Clear();
360 else
361 return NULL;
362 }
363 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000364}
365
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000366/*[clinic input]
367any as builtin_any
368
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300369 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000370 /
371
372Return True if bool(x) is True for any x in the iterable.
373
374If the iterable is empty, return False.
375[clinic start generated code]*/
376
Raymond Hettinger96229b12005-03-11 06:49:40 +0000377static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300378builtin_any(PyObject *module, PyObject *iterable)
379/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000381 PyObject *it, *item;
382 PyObject *(*iternext)(PyObject *);
383 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000384
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000385 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 if (it == NULL)
387 return NULL;
388 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000390 for (;;) {
391 item = iternext(it);
392 if (item == NULL)
393 break;
394 cmp = PyObject_IsTrue(item);
395 Py_DECREF(item);
396 if (cmp < 0) {
397 Py_DECREF(it);
398 return NULL;
399 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400400 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 Py_DECREF(it);
402 Py_RETURN_TRUE;
403 }
404 }
405 Py_DECREF(it);
406 if (PyErr_Occurred()) {
407 if (PyErr_ExceptionMatches(PyExc_StopIteration))
408 PyErr_Clear();
409 else
410 return NULL;
411 }
412 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000413}
414
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000415/*[clinic input]
416ascii as builtin_ascii
417
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300418 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000419 /
420
421Return an ASCII-only representation of an object.
422
423As repr(), return a string containing a printable representation of an
424object, but escape the non-ASCII characters in the string returned by
425repr() using \\x, \\u or \\U escapes. This generates a string similar
426to that returned by repr() in Python 2.
427[clinic start generated code]*/
428
Georg Brandl559e5d72008-06-11 18:37:52 +0000429static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300430builtin_ascii(PyObject *module, PyObject *obj)
431/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000432{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000433 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000434}
435
Georg Brandl559e5d72008-06-11 18:37:52 +0000436
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000437/*[clinic input]
438bin as builtin_bin
439
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300440 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000441 /
442
443Return the binary representation of an integer.
444
445 >>> bin(2796202)
446 '0b1010101010101010101010'
447[clinic start generated code]*/
448
Guido van Rossum79f25d91997-04-29 20:08:16 +0000449static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300450builtin_bin(PyObject *module, PyObject *number)
451/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000452{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000453 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000454}
455
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000456
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000457/*[clinic input]
458callable as builtin_callable
459
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300460 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000461 /
462
463Return whether the object is callable (i.e., some kind of function).
464
465Note that classes are callable, as are instances of classes with a
466__call__() method.
467[clinic start generated code]*/
468
Antoine Pitroue71362d2010-11-27 22:00:11 +0000469static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300470builtin_callable(PyObject *module, PyObject *obj)
471/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000472{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000473 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000474}
475
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400476static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200477builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400478{
479 PyObject *hook = PySys_GetObject("breakpointhook");
480
481 if (hook == NULL) {
482 PyErr_SetString(PyExc_RuntimeError, "lost sys.breakpointhook");
483 return NULL;
484 }
485 Py_INCREF(hook);
Jeroen Demeyeraacc77f2019-05-29 20:31:52 +0200486 PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400487 Py_DECREF(hook);
488 return retval;
489}
490
491PyDoc_STRVAR(breakpoint_doc,
492"breakpoint(*args, **kws)\n\
493\n\
494Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
495whatever arguments are passed.\n\
496\n\
497By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000498
Raymond Hettinger17301e92008-03-13 00:19:26 +0000499typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000500 PyObject_HEAD
501 PyObject *func;
502 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000503} filterobject;
504
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000505static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000506filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508 PyObject *func, *seq;
509 PyObject *it;
510 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000511
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300512 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
516 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 /* Get iterator. */
519 it = PyObject_GetIter(seq);
520 if (it == NULL)
521 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 /* create filterobject structure */
524 lz = (filterobject *)type->tp_alloc(type, 0);
525 if (lz == NULL) {
526 Py_DECREF(it);
527 return NULL;
528 }
529 Py_INCREF(func);
530 lz->func = func;
531 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000534}
535
536static void
537filter_dealloc(filterobject *lz)
538{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 PyObject_GC_UnTrack(lz);
540 Py_XDECREF(lz->func);
541 Py_XDECREF(lz->it);
542 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000543}
544
545static int
546filter_traverse(filterobject *lz, visitproc visit, void *arg)
547{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 Py_VISIT(lz->it);
549 Py_VISIT(lz->func);
550 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000551}
552
553static PyObject *
554filter_next(filterobject *lz)
555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 PyObject *item;
557 PyObject *it = lz->it;
558 long ok;
559 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400560 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 iternext = *Py_TYPE(it)->tp_iternext;
563 for (;;) {
564 item = iternext(it);
565 if (item == NULL)
566 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000567
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400568 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569 ok = PyObject_IsTrue(item);
570 } else {
571 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100572 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 if (good == NULL) {
574 Py_DECREF(item);
575 return NULL;
576 }
577 ok = PyObject_IsTrue(good);
578 Py_DECREF(good);
579 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200580 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return item;
582 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200583 if (ok < 0)
584 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000585 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000586}
587
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000588static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530589filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000590{
591 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
592}
593
594PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
595
596static PyMethodDef filter_methods[] = {
597 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
598 {NULL, NULL} /* sentinel */
599};
600
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000601PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000602"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000603\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000604Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000605is true. If function is None, return the items that are true.");
606
607PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 PyVarObject_HEAD_INIT(&PyType_Type, 0)
609 "filter", /* tp_name */
610 sizeof(filterobject), /* tp_basicsize */
611 0, /* tp_itemsize */
612 /* methods */
613 (destructor)filter_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200614 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000615 0, /* tp_getattr */
616 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200617 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 0, /* tp_repr */
619 0, /* tp_as_number */
620 0, /* tp_as_sequence */
621 0, /* tp_as_mapping */
622 0, /* tp_hash */
623 0, /* tp_call */
624 0, /* tp_str */
625 PyObject_GenericGetAttr, /* tp_getattro */
626 0, /* tp_setattro */
627 0, /* tp_as_buffer */
628 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
629 Py_TPFLAGS_BASETYPE, /* tp_flags */
630 filter_doc, /* tp_doc */
631 (traverseproc)filter_traverse, /* tp_traverse */
632 0, /* tp_clear */
633 0, /* tp_richcompare */
634 0, /* tp_weaklistoffset */
635 PyObject_SelfIter, /* tp_iter */
636 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000637 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 0, /* tp_members */
639 0, /* tp_getset */
640 0, /* tp_base */
641 0, /* tp_dict */
642 0, /* tp_descr_get */
643 0, /* tp_descr_set */
644 0, /* tp_dictoffset */
645 0, /* tp_init */
646 PyType_GenericAlloc, /* tp_alloc */
647 filter_new, /* tp_new */
648 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000649};
650
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000651
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000652/*[clinic input]
653format as builtin_format
654
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300655 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000656 format_spec: unicode(c_default="NULL") = ''
657 /
658
659Return value.__format__(format_spec)
660
Amit Kumar2e6bb442017-05-29 06:32:26 +0530661format_spec defaults to the empty string.
662See the Format Specification Mini-Language section of help('FORMATTING') for
663details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000664[clinic start generated code]*/
665
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000666static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300667builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530668/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000669{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000670 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000671}
672
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000673/*[clinic input]
674chr as builtin_chr
675
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300676 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000677 /
678
679Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
680[clinic start generated code]*/
681
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000682static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300683builtin_chr_impl(PyObject *module, int i)
684/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000685{
686 return PyUnicode_FromOrdinal(i);
687}
Guido van Rossum09095f32000-03-10 23:00:52 +0000688
689
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000690/*[clinic input]
691compile as builtin_compile
692
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300693 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000694 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300695 mode: str
696 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200697 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300698 optimize: int = -1
Guido van Rossum495da292019-03-07 12:38:08 -0800699 feature_version: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000700
701Compile source into a code object that can be executed by exec() or eval().
702
703The source code may represent a Python module, statement or expression.
704The filename will be used for run-time error messages.
705The mode must be 'exec' to compile a module, 'single' to compile a
706single (interactive) statement, or 'eval' to compile an expression.
707The flags argument, if present, controls which future statements influence
708the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300709The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000710the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300711compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000712in addition to any features explicitly specified.
713[clinic start generated code]*/
714
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000715static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300716builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
717 const char *mode, int flags, int dont_inherit,
Guido van Rossum495da292019-03-07 12:38:08 -0800718 int optimize, int feature_version)
719/*[clinic end generated code: output=b0c09c84f116d3d7 input=5fcc30651a6acaa9]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000720{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000721 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200722 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000723 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 int is_ast;
725 PyCompilerFlags cf;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800726 int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000727 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000729 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -0800730 cf.cf_feature_version = PY_MINOR_VERSION;
731 if (feature_version >= 0 && (flags & PyCF_ONLY_AST)) {
732 cf.cf_feature_version = feature_version;
733 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000734
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000735 if (flags &
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800736 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST | PyCF_TYPE_COMMENTS))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 {
738 PyErr_SetString(PyExc_ValueError,
739 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000740 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 }
742 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000743
Georg Brandl8334fd92010-12-04 10:26:46 +0000744 if (optimize < -1 || optimize > 2) {
745 PyErr_SetString(PyExc_ValueError,
746 "compile(): invalid optimize value");
747 goto error;
748 }
749
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000750 if (!dont_inherit) {
751 PyEval_MergeCompilerFlags(&cf);
752 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000753
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000754 if (strcmp(mode, "exec") == 0)
755 compile_mode = 0;
756 else if (strcmp(mode, "eval") == 0)
757 compile_mode = 1;
758 else if (strcmp(mode, "single") == 0)
759 compile_mode = 2;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800760 else if (strcmp(mode, "func_type") == 0) {
761 if (!(flags & PyCF_ONLY_AST)) {
762 PyErr_SetString(PyExc_ValueError,
763 "compile() mode 'func_type' requires flag PyCF_ONLY_AST");
764 goto error;
765 }
766 compile_mode = 3;
767 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 else {
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800769 const char *msg;
770 if (flags & PyCF_ONLY_AST)
771 msg = "compile() mode must be 'exec', 'eval', 'single' or 'func_type'";
772 else
773 msg = "compile() mode must be 'exec', 'eval' or 'single'";
774 PyErr_SetString(PyExc_ValueError, msg);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000775 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000776 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000777
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000778 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000779 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000780 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000782 if (flags & PyCF_ONLY_AST) {
783 Py_INCREF(source);
784 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 }
786 else {
787 PyArena *arena;
788 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200791 if (arena == NULL)
792 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000793 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 if (mod == NULL) {
795 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000796 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500798 if (!PyAST_Validate(mod)) {
799 PyArena_Free(arena);
800 goto error;
801 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200802 result = (PyObject*)PyAST_CompileObject(mod, filename,
803 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000804 PyArena_Free(arena);
805 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000806 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000807 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000808
Dino Viehland41540692019-05-28 16:21:17 -0700809 str = _Py_SourceAsString(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000810 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000811 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000812
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000813 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000814 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000815 goto finally;
816
817error:
818 result = NULL;
819finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200820 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000821 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000822}
823
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000824/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000825static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000826builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000827{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000828 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
831 return NULL;
832 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000833}
834
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000835PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000836"dir([object]) -> list of strings\n"
837"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000838"If called without an argument, return the names in the current scope.\n"
839"Else, return an alphabetized list of names comprising (some of) the attributes\n"
840"of the given object, and of attributes reachable from it.\n"
841"If the object supplies a method named __dir__, it will be used; otherwise\n"
842"the default dir() logic is used and returns:\n"
843" for a module object: the module's attributes.\n"
844" for a class object: its attributes, and recursively the attributes\n"
845" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000846" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000847" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000848
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000849/*[clinic input]
850divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000851
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300852 x: object
853 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000854 /
855
Zachary Ware7f227d92016-04-28 14:39:50 -0500856Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000857[clinic start generated code]*/
858
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000859static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300860builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
861/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000862{
863 return PyNumber_Divmod(x, y);
864}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865
866
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000867/*[clinic input]
868eval as builtin_eval
869
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300870 source: object
871 globals: object = None
872 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000873 /
874
875Evaluate the given source in the context of globals and locals.
876
877The source may be a string representing a Python expression
878or a code object as returned by compile().
879The globals must be a dictionary and locals can be any mapping,
880defaulting to the current globals and locals.
881If only globals is given, locals defaults to it.
882[clinic start generated code]*/
883
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000884static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300885builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400886 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300887/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000888{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000889 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200890 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 if (locals != Py_None && !PyMapping_Check(locals)) {
894 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
895 return NULL;
896 }
897 if (globals != Py_None && !PyDict_Check(globals)) {
898 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
899 "globals must be a real dict; try eval(expr, {}, mapping)"
900 : "globals must be a dict");
901 return NULL;
902 }
903 if (globals == Py_None) {
904 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100905 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100907 if (locals == NULL)
908 return NULL;
909 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 }
911 else if (locals == Py_None)
912 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 if (globals == NULL || locals == NULL) {
915 PyErr_SetString(PyExc_TypeError,
916 "eval must be given globals and locals "
917 "when called without a frame");
918 return NULL;
919 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000920
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200921 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +0100922 if (_PyDict_SetItemId(globals, &PyId___builtins__,
923 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 return NULL;
925 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200926 else if (PyErr_Occurred()) {
927 return NULL;
928 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000929
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000930 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -0700931 if (PySys_Audit("exec", "O", source) < 0) {
932 return NULL;
933 }
934
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000935 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 PyErr_SetString(PyExc_TypeError,
Steve Dowerb82e17e2019-05-23 08:45:22 -0700937 "code object passed to eval() may not contain free variables");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000938 return NULL;
939 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000940 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000942
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -0800944 cf.cf_feature_version = PY_MINOR_VERSION;
Dino Viehland41540692019-05-28 16:21:17 -0700945 str = _Py_SourceAsString(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 if (str == NULL)
947 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000948
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 while (*str == ' ' || *str == '\t')
950 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 (void)PyEval_MergeCompilerFlags(&cf);
953 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000954 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000956}
957
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000958/*[clinic input]
959exec as builtin_exec
960
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300961 source: object
962 globals: object = None
963 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000964 /
965
966Execute the given source in the context of globals and locals.
967
968The source may be a string representing one or more Python statements
969or a code object as returned by compile().
970The globals must be a dictionary and locals can be any mapping,
971defaulting to the current globals and locals.
972If only globals is given, locals defaults to it.
973[clinic start generated code]*/
974
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000975static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300976builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400977 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300978/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +0000979{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 if (globals == Py_None) {
983 globals = PyEval_GetGlobals();
984 if (locals == Py_None) {
985 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100986 if (locals == NULL)
987 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000988 }
989 if (!globals || !locals) {
990 PyErr_SetString(PyExc_SystemError,
991 "globals and locals cannot be NULL");
992 return NULL;
993 }
994 }
995 else if (locals == Py_None)
996 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000997
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000998 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000999 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 globals->ob_type->tp_name);
1001 return NULL;
1002 }
1003 if (!PyMapping_Check(locals)) {
1004 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001005 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001006 locals->ob_type->tp_name);
1007 return NULL;
1008 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001009 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +01001010 if (_PyDict_SetItemId(globals, &PyId___builtins__,
1011 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 return NULL;
1013 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001014 else if (PyErr_Occurred()) {
1015 return NULL;
1016 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001018 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -07001019 if (PySys_Audit("exec", "O", source) < 0) {
1020 return NULL;
1021 }
1022
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001023 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 PyErr_SetString(PyExc_TypeError,
1025 "code object passed to exec() may not "
1026 "contain free variables");
1027 return NULL;
1028 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001029 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 }
1031 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001032 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001033 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 PyCompilerFlags cf;
1035 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -08001036 cf.cf_feature_version = PY_MINOR_VERSION;
Dino Viehland41540692019-05-28 16:21:17 -07001037 str = _Py_SourceAsString(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001038 "string, bytes or code", &cf,
1039 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 if (str == NULL)
1041 return NULL;
1042 if (PyEval_MergeCompilerFlags(&cf))
1043 v = PyRun_StringFlags(str, Py_file_input, globals,
1044 locals, &cf);
1045 else
1046 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001047 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001048 }
1049 if (v == NULL)
1050 return NULL;
1051 Py_DECREF(v);
1052 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001053}
1054
Georg Brandl7cae87c2006-09-06 06:51:57 +00001055
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001056/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001057static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001058builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001059{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001060 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061
Serhiy Storchaka79342662019-01-12 08:25:41 +02001062 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001063 return NULL;
1064
Serhiy Storchaka79342662019-01-12 08:25:41 +02001065 v = args[0];
1066 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 if (!PyUnicode_Check(name)) {
1068 PyErr_SetString(PyExc_TypeError,
1069 "getattr(): attribute name must be string");
1070 return NULL;
1071 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001072 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001073 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001074 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001075 Py_INCREF(dflt);
1076 return dflt;
1077 }
1078 }
1079 else {
1080 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 }
1082 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001083}
1084
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001085PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001086"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001087\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001088Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1089When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001090exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001091
1092
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001093/*[clinic input]
1094globals as builtin_globals
1095
1096Return the dictionary containing the current scope's global variables.
1097
1098NOTE: Updates to this dictionary *will* affect name lookups in the current
1099global scope and vice-versa.
1100[clinic start generated code]*/
1101
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001102static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001103builtin_globals_impl(PyObject *module)
1104/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001105{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 d = PyEval_GetGlobals();
1109 Py_XINCREF(d);
1110 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001111}
1112
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001113
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001114/*[clinic input]
1115hasattr as builtin_hasattr
1116
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001117 obj: object
1118 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001119 /
1120
1121Return whether the object has an attribute with the given name.
1122
1123This is done by calling getattr(obj, name) and catching AttributeError.
1124[clinic start generated code]*/
1125
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001126static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001127builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1128/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001129{
1130 PyObject *v;
1131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 if (!PyUnicode_Check(name)) {
1133 PyErr_SetString(PyExc_TypeError,
1134 "hasattr(): attribute name must be string");
1135 return NULL;
1136 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001137 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001138 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001140 if (v == NULL) {
1141 Py_RETURN_FALSE;
1142 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001143 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001144 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001145}
1146
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001147
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001148/* AC: gdb's integration with CPython relies on builtin_id having
1149 * the *exact* parameter names of "self" and "v", so we ensure we
1150 * preserve those name rather than using the AC defaults.
1151 */
1152/*[clinic input]
1153id as builtin_id
1154
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001155 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001156 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001157 /
1158
1159Return the identity of an object.
1160
1161This is guaranteed to be unique among simultaneously existing objects.
1162(CPython uses the object's memory address.)
1163[clinic start generated code]*/
1164
Guido van Rossum79f25d91997-04-29 20:08:16 +00001165static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001166builtin_id(PyModuleDef *self, PyObject *v)
1167/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001168{
Steve Dowerb82e17e2019-05-23 08:45:22 -07001169 PyObject *id = PyLong_FromVoidPtr(v);
1170
1171 if (id && PySys_Audit("builtins.id", "O", id) < 0) {
1172 Py_DECREF(id);
1173 return NULL;
1174 }
1175
1176 return id;
Guido van Rossum5b722181993-03-30 17:46:03 +00001177}
1178
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001179
Raymond Hettingera6c60372008-03-13 01:26:19 +00001180/* map object ************************************************************/
1181
1182typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 PyObject_HEAD
1184 PyObject *iters;
1185 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001186} mapobject;
1187
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001189map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 PyObject *it, *iters, *func;
1192 mapobject *lz;
1193 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001194
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001195 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001197
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 numargs = PyTuple_Size(args);
1199 if (numargs < 2) {
1200 PyErr_SetString(PyExc_TypeError,
1201 "map() must have at least two arguments.");
1202 return NULL;
1203 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 iters = PyTuple_New(numargs-1);
1206 if (iters == NULL)
1207 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001208
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 for (i=1 ; i<numargs ; i++) {
1210 /* Get iterator. */
1211 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1212 if (it == NULL) {
1213 Py_DECREF(iters);
1214 return NULL;
1215 }
1216 PyTuple_SET_ITEM(iters, i-1, it);
1217 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001218
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001219 /* create mapobject structure */
1220 lz = (mapobject *)type->tp_alloc(type, 0);
1221 if (lz == NULL) {
1222 Py_DECREF(iters);
1223 return NULL;
1224 }
1225 lz->iters = iters;
1226 func = PyTuple_GET_ITEM(args, 0);
1227 Py_INCREF(func);
1228 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001229
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001231}
1232
1233static void
1234map_dealloc(mapobject *lz)
1235{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001236 PyObject_GC_UnTrack(lz);
1237 Py_XDECREF(lz->iters);
1238 Py_XDECREF(lz->func);
1239 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001240}
1241
1242static int
1243map_traverse(mapobject *lz, visitproc visit, void *arg)
1244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 Py_VISIT(lz->iters);
1246 Py_VISIT(lz->func);
1247 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001248}
1249
1250static PyObject *
1251map_next(mapobject *lz)
1252{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001253 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001254 PyObject **stack;
1255 Py_ssize_t niters, nargs, i;
1256 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001257
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001258 niters = PyTuple_GET_SIZE(lz->iters);
1259 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1260 stack = small_stack;
1261 }
1262 else {
1263 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1264 if (stack == NULL) {
1265 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 return NULL;
1267 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001268 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001269
1270 nargs = 0;
1271 for (i=0; i < niters; i++) {
1272 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1273 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1274 if (val == NULL) {
1275 goto exit;
1276 }
1277 stack[i] = val;
1278 nargs++;
1279 }
1280
1281 result = _PyObject_FastCall(lz->func, stack, nargs);
1282
1283exit:
1284 for (i=0; i < nargs; i++) {
1285 Py_DECREF(stack[i]);
1286 }
1287 if (stack != small_stack) {
1288 PyMem_Free(stack);
1289 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001291}
1292
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001293static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301294map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001295{
1296 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1297 PyObject *args = PyTuple_New(numargs+1);
1298 Py_ssize_t i;
1299 if (args == NULL)
1300 return NULL;
1301 Py_INCREF(lz->func);
1302 PyTuple_SET_ITEM(args, 0, lz->func);
1303 for (i = 0; i<numargs; i++){
1304 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1305 Py_INCREF(it);
1306 PyTuple_SET_ITEM(args, i+1, it);
1307 }
1308
1309 return Py_BuildValue("ON", Py_TYPE(lz), args);
1310}
1311
1312static PyMethodDef map_methods[] = {
1313 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1314 {NULL, NULL} /* sentinel */
1315};
1316
1317
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001318PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001319"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001320\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001321Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001322each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001323
Raymond Hettingera6c60372008-03-13 01:26:19 +00001324PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1326 "map", /* tp_name */
1327 sizeof(mapobject), /* tp_basicsize */
1328 0, /* tp_itemsize */
1329 /* methods */
1330 (destructor)map_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001331 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001332 0, /* tp_getattr */
1333 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001334 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 0, /* tp_repr */
1336 0, /* tp_as_number */
1337 0, /* tp_as_sequence */
1338 0, /* tp_as_mapping */
1339 0, /* tp_hash */
1340 0, /* tp_call */
1341 0, /* tp_str */
1342 PyObject_GenericGetAttr, /* tp_getattro */
1343 0, /* tp_setattro */
1344 0, /* tp_as_buffer */
1345 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1346 Py_TPFLAGS_BASETYPE, /* tp_flags */
1347 map_doc, /* tp_doc */
1348 (traverseproc)map_traverse, /* tp_traverse */
1349 0, /* tp_clear */
1350 0, /* tp_richcompare */
1351 0, /* tp_weaklistoffset */
1352 PyObject_SelfIter, /* tp_iter */
1353 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001354 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 0, /* tp_members */
1356 0, /* tp_getset */
1357 0, /* tp_base */
1358 0, /* tp_dict */
1359 0, /* tp_descr_get */
1360 0, /* tp_descr_set */
1361 0, /* tp_dictoffset */
1362 0, /* tp_init */
1363 PyType_GenericAlloc, /* tp_alloc */
1364 map_new, /* tp_new */
1365 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001366};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001367
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001368
1369/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001370static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001371builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001372{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001373 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001374
Serhiy Storchaka79342662019-01-12 08:25:41 +02001375 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001376 return NULL;
1377
Serhiy Storchaka79342662019-01-12 08:25:41 +02001378 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 if (!PyIter_Check(it)) {
1380 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001381 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001382 it->ob_type->tp_name);
1383 return NULL;
1384 }
1385
1386 res = (*it->ob_type->tp_iternext)(it);
1387 if (res != NULL) {
1388 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001389 } else if (nargs > 1) {
1390 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 if (PyErr_Occurred()) {
1392 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1393 return NULL;
1394 PyErr_Clear();
1395 }
1396 Py_INCREF(def);
1397 return def;
1398 } else if (PyErr_Occurred()) {
1399 return NULL;
1400 } else {
1401 PyErr_SetNone(PyExc_StopIteration);
1402 return NULL;
1403 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001404}
1405
1406PyDoc_STRVAR(next_doc,
1407"next(iterator[, default])\n\
1408\n\
1409Return the next item from the iterator. If default is given and the iterator\n\
1410is exhausted, it is returned instead of raising StopIteration.");
1411
1412
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001413/*[clinic input]
1414setattr as builtin_setattr
1415
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001416 obj: object
1417 name: object
1418 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001419 /
1420
1421Sets the named attribute on the given object to the specified value.
1422
1423setattr(x, 'y', v) is equivalent to ``x.y = v''
1424[clinic start generated code]*/
1425
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001426static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001427builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001428 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001429/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001430{
1431 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001432 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001433 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001434}
1435
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001436
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001437/*[clinic input]
1438delattr as builtin_delattr
1439
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001440 obj: object
1441 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001442 /
1443
1444Deletes the named attribute from the given object.
1445
1446delattr(x, 'y') is equivalent to ``del x.y''
1447[clinic start generated code]*/
1448
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001449static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001450builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1451/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001452{
1453 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001454 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001455 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001456}
1457
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001458
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001459/*[clinic input]
1460hash as builtin_hash
1461
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001462 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001463 /
1464
1465Return the hash value for the given object.
1466
1467Two objects that compare equal must also have the same hash value, but the
1468reverse is not necessarily true.
1469[clinic start generated code]*/
1470
Guido van Rossum79f25d91997-04-29 20:08:16 +00001471static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001472builtin_hash(PyObject *module, PyObject *obj)
1473/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001474{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001475 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001476
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001477 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 if (x == -1)
1479 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001480 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001481}
1482
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001483
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001484/*[clinic input]
1485hex as builtin_hex
1486
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001487 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001488 /
1489
1490Return the hexadecimal representation of an integer.
1491
1492 >>> hex(12648430)
1493 '0xc0ffee'
1494[clinic start generated code]*/
1495
Guido van Rossum79f25d91997-04-29 20:08:16 +00001496static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001497builtin_hex(PyObject *module, PyObject *number)
1498/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001499{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001500 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001501}
1502
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001503
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001504/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001506builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001507{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001508 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001509
Serhiy Storchaka79342662019-01-12 08:25:41 +02001510 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001511 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001512 v = args[0];
1513 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 return PyObject_GetIter(v);
1515 if (!PyCallable_Check(v)) {
1516 PyErr_SetString(PyExc_TypeError,
1517 "iter(v, w): v must be callable");
1518 return NULL;
1519 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001520 PyObject *sentinel = args[1];
1521 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001522}
1523
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001524PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001525"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001526iter(callable, sentinel) -> iterator\n\
1527\n\
1528Get an iterator from an object. In the first form, the argument must\n\
1529supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001530In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001531
1532
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001533/*[clinic input]
1534len as builtin_len
1535
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001536 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001537 /
1538
1539Return the number of items in a container.
1540[clinic start generated code]*/
1541
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001542static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001543builtin_len(PyObject *module, PyObject *obj)
1544/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001545{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001547
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001548 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001549 if (res < 0) {
1550 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001551 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001552 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001553 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001554}
1555
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001556
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001557/*[clinic input]
1558locals as builtin_locals
1559
1560Return a dictionary containing the current scope's local variables.
1561
1562NOTE: Whether or not updates to this dictionary will affect name lookups in
1563the local scope and vice-versa is *implementation dependent* and not
1564covered by any backwards compatibility guarantees.
1565[clinic start generated code]*/
1566
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001567static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001568builtin_locals_impl(PyObject *module)
1569/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 d = PyEval_GetLocals();
1574 Py_XINCREF(d);
1575 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001576}
1577
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001578
Guido van Rossum79f25d91997-04-29 20:08:16 +00001579static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001580min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001581{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001582 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001583 PyObject *emptytuple, *defaultval = NULL;
1584 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001586 const int positional = PyTuple_Size(args) > 1;
1587 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001588
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001589 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001590 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001591 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001592 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001593
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001594 emptytuple = PyTuple_New(0);
1595 if (emptytuple == NULL)
1596 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001597 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1598 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1599 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001600 Py_DECREF(emptytuple);
1601 if (!ret)
1602 return NULL;
1603
1604 if (positional && defaultval != NULL) {
1605 PyErr_Format(PyExc_TypeError,
1606 "Cannot specify a default for %s() with multiple "
1607 "positional arguments", name);
1608 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001611 it = PyObject_GetIter(v);
1612 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001613 return NULL;
1614 }
Tim Petersc3074532001-05-03 07:00:32 +00001615
Alexander Marshalove22072f2018-07-24 10:58:21 +07001616 if (keyfunc == Py_None) {
1617 keyfunc = NULL;
1618 }
1619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 maxitem = NULL; /* the result */
1621 maxval = NULL; /* the value associated with the result */
1622 while (( item = PyIter_Next(it) )) {
1623 /* get the value from the key function */
1624 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001625 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 if (val == NULL)
1627 goto Fail_it_item;
1628 }
1629 /* no key function; the value is the item */
1630 else {
1631 val = item;
1632 Py_INCREF(val);
1633 }
Tim Petersc3074532001-05-03 07:00:32 +00001634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 /* maximum value and item are unset; set them */
1636 if (maxval == NULL) {
1637 maxitem = item;
1638 maxval = val;
1639 }
1640 /* maximum value and item are set; update them as necessary */
1641 else {
1642 int cmp = PyObject_RichCompareBool(val, maxval, op);
1643 if (cmp < 0)
1644 goto Fail_it_item_and_val;
1645 else if (cmp > 0) {
1646 Py_DECREF(maxval);
1647 Py_DECREF(maxitem);
1648 maxval = val;
1649 maxitem = item;
1650 }
1651 else {
1652 Py_DECREF(item);
1653 Py_DECREF(val);
1654 }
1655 }
1656 }
1657 if (PyErr_Occurred())
1658 goto Fail_it;
1659 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001660 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001661 if (defaultval != NULL) {
1662 Py_INCREF(defaultval);
1663 maxitem = defaultval;
1664 } else {
1665 PyErr_Format(PyExc_ValueError,
1666 "%s() arg is an empty sequence", name);
1667 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001668 }
1669 else
1670 Py_DECREF(maxval);
1671 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001673
1674Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001676Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001677 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001678Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 Py_XDECREF(maxval);
1680 Py_XDECREF(maxitem);
1681 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001683}
1684
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001685/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001686static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001687builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001688{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001690}
1691
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001692PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001693"min(iterable, *[, default=obj, key=func]) -> value\n\
1694min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001695\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001696With a single iterable argument, return its smallest item. The\n\
1697default keyword-only argument specifies an object to return if\n\
1698the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001699With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001700
1701
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001702/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001703static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001704builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001705{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001707}
1708
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001709PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001710"max(iterable, *[, default=obj, key=func]) -> value\n\
1711max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001712\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001713With a single iterable argument, return its biggest item. The\n\
1714default keyword-only argument specifies an object to return if\n\
1715the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001716With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001717
1718
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001719/*[clinic input]
1720oct as builtin_oct
1721
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001722 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001723 /
1724
1725Return the octal representation of an integer.
1726
1727 >>> oct(342391)
1728 '0o1234567'
1729[clinic start generated code]*/
1730
Guido van Rossum79f25d91997-04-29 20:08:16 +00001731static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001732builtin_oct(PyObject *module, PyObject *number)
1733/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001734{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001735 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001736}
1737
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001738
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001739/*[clinic input]
1740ord as builtin_ord
1741
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001742 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001743 /
1744
1745Return the Unicode code point for a one-character string.
1746[clinic start generated code]*/
1747
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001749builtin_ord(PyObject *module, PyObject *c)
1750/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001751{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001752 long ord;
1753 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001754
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001755 if (PyBytes_Check(c)) {
1756 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001758 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 return PyLong_FromLong(ord);
1760 }
1761 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001762 else if (PyUnicode_Check(c)) {
1763 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001764 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001765 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001767 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001768 return PyLong_FromLong(ord);
1769 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001771 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001773 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001775 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001776 return PyLong_FromLong(ord);
1777 }
1778 }
1779 else {
1780 PyErr_Format(PyExc_TypeError,
1781 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001782 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001783 return NULL;
1784 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001785
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 PyErr_Format(PyExc_TypeError,
1787 "ord() expected a character, "
1788 "but string of length %zd found",
1789 size);
1790 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001791}
1792
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001793
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001794/*[clinic input]
1795pow as builtin_pow
1796
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001797 x: object
1798 y: object
1799 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001800 /
1801
1802Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1803
1804Some types, such as ints, are able to use a more efficient algorithm when
1805invoked using the three argument form.
1806[clinic start generated code]*/
1807
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001808static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001809builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1810/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001811{
1812 return PyNumber_Power(x, y, z);
1813}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001814
1815
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001816/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001817static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001818builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001819{
INADA Naokibd584f12017-01-19 12:50:34 +01001820 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1821 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001822 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001823 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001824
INADA Naokibd584f12017-01-19 12:50:34 +01001825 if (kwnames != NULL &&
1826 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1827 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001828 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001829 }
1830
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001831 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001832 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001833 if (file == NULL) {
1834 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1835 return NULL;
1836 }
1837
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001838 /* sys.stdout may be None when FILE* stdout isn't connected */
1839 if (file == Py_None)
1840 Py_RETURN_NONE;
1841 }
Guido van Rossum34343512006-11-30 22:13:52 +00001842
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 if (sep == Py_None) {
1844 sep = NULL;
1845 }
1846 else if (sep && !PyUnicode_Check(sep)) {
1847 PyErr_Format(PyExc_TypeError,
1848 "sep must be None or a string, not %.200s",
1849 sep->ob_type->tp_name);
1850 return NULL;
1851 }
1852 if (end == Py_None) {
1853 end = NULL;
1854 }
1855 else if (end && !PyUnicode_Check(end)) {
1856 PyErr_Format(PyExc_TypeError,
1857 "end must be None or a string, not %.200s",
1858 end->ob_type->tp_name);
1859 return NULL;
1860 }
Guido van Rossum34343512006-11-30 22:13:52 +00001861
INADA Naokibd584f12017-01-19 12:50:34 +01001862 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 if (i > 0) {
1864 if (sep == NULL)
1865 err = PyFile_WriteString(" ", file);
1866 else
1867 err = PyFile_WriteObject(sep, file,
1868 Py_PRINT_RAW);
1869 if (err)
1870 return NULL;
1871 }
INADA Naokibd584f12017-01-19 12:50:34 +01001872 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 if (err)
1874 return NULL;
1875 }
Guido van Rossum34343512006-11-30 22:13:52 +00001876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 if (end == NULL)
1878 err = PyFile_WriteString("\n", file);
1879 else
1880 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1881 if (err)
1882 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001883
Georg Brandlbc3b6822012-01-13 19:41:25 +01001884 if (flush != NULL) {
1885 PyObject *tmp;
1886 int do_flush = PyObject_IsTrue(flush);
1887 if (do_flush == -1)
1888 return NULL;
1889 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001890 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001891 if (tmp == NULL)
1892 return NULL;
1893 else
1894 Py_DECREF(tmp);
1895 }
1896 }
1897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001899}
1900
1901PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001902"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001903\n\
1904Prints the values to a stream, or to sys.stdout by default.\n\
1905Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001906file: a file-like object (stream); defaults to the current sys.stdout.\n\
1907sep: string inserted between values, default a space.\n\
1908end: string appended after the last value, default a newline.\n\
1909flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001910
1911
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001912/*[clinic input]
1913input as builtin_input
1914
1915 prompt: object(c_default="NULL") = None
1916 /
1917
1918Read a string from standard input. The trailing newline is stripped.
1919
1920The prompt string, if given, is printed to standard output without a
1921trailing newline before reading input.
1922
1923If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1924On *nix systems, readline is used if available.
1925[clinic start generated code]*/
1926
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001927static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001928builtin_input_impl(PyObject *module, PyObject *prompt)
1929/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001930{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001931 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1932 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1933 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 PyObject *tmp;
1935 long fd;
1936 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001937
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001938 /* Check that stdin/out/err are intact */
1939 if (fin == NULL || fin == Py_None) {
1940 PyErr_SetString(PyExc_RuntimeError,
1941 "input(): lost sys.stdin");
1942 return NULL;
1943 }
1944 if (fout == NULL || fout == Py_None) {
1945 PyErr_SetString(PyExc_RuntimeError,
1946 "input(): lost sys.stdout");
1947 return NULL;
1948 }
1949 if (ferr == NULL || ferr == Py_None) {
1950 PyErr_SetString(PyExc_RuntimeError,
1951 "input(): lost sys.stderr");
1952 return NULL;
1953 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001954
Steve Dowerb82e17e2019-05-23 08:45:22 -07001955 if (PySys_Audit("builtins.input", "O", prompt ? prompt : Py_None) < 0) {
1956 return NULL;
1957 }
1958
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001959 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001960 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 if (tmp == NULL)
1962 PyErr_Clear();
1963 else
1964 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001966 /* We should only use (GNU) readline if Python's sys.stdin and
1967 sys.stdout are the same as C's stdin and stdout, because we
1968 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001969 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001970 if (tmp == NULL) {
1971 PyErr_Clear();
1972 tty = 0;
1973 }
1974 else {
1975 fd = PyLong_AsLong(tmp);
1976 Py_DECREF(tmp);
1977 if (fd < 0 && PyErr_Occurred())
1978 return NULL;
1979 tty = fd == fileno(stdin) && isatty(fd);
1980 }
1981 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001982 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00001983 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001984 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001985 tty = 0;
1986 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001987 else {
1988 fd = PyLong_AsLong(tmp);
1989 Py_DECREF(tmp);
1990 if (fd < 0 && PyErr_Occurred())
1991 return NULL;
1992 tty = fd == fileno(stdout) && isatty(fd);
1993 }
1994 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001995
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 /* If we're interactive, use (GNU) readline */
1997 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001998 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02001999 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002000 char *s = NULL;
2001 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2002 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002003 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002004 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002005 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002006
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002007 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002008 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002009 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002010 if (!stdin_encoding || !stdin_errors ||
2011 !PyUnicode_Check(stdin_encoding) ||
2012 !PyUnicode_Check(stdin_errors)) {
2013 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002014 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002015 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002016 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2017 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002018 if (!stdin_encoding_str || !stdin_errors_str)
2019 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07002020 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002021 if (tmp == NULL)
2022 PyErr_Clear();
2023 else
2024 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002025 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002026 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002027 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002028 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002029 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002030 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002031 if (!stdout_encoding || !stdout_errors ||
2032 !PyUnicode_Check(stdout_encoding) ||
2033 !PyUnicode_Check(stdout_errors)) {
2034 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002035 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002036 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002037 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2038 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002039 if (!stdout_encoding_str || !stdout_errors_str)
2040 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002041 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002042 if (stringpo == NULL)
2043 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002044 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002045 stdout_encoding_str, stdout_errors_str);
2046 Py_CLEAR(stdout_encoding);
2047 Py_CLEAR(stdout_errors);
2048 Py_CLEAR(stringpo);
2049 if (po == NULL)
2050 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002051 assert(PyBytes_Check(po));
2052 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002053 }
2054 else {
2055 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002056 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002057 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002058 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002059 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002060 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002061 if (!PyErr_Occurred())
2062 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002063 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002064 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002065
2066 len = strlen(s);
2067 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002068 PyErr_SetNone(PyExc_EOFError);
2069 result = NULL;
2070 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002071 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002072 if (len > PY_SSIZE_T_MAX) {
2073 PyErr_SetString(PyExc_OverflowError,
2074 "input: input too long");
2075 result = NULL;
2076 }
2077 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002078 len--; /* strip trailing '\n' */
2079 if (len != 0 && s[len-1] == '\r')
2080 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002081 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2082 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002083 }
2084 }
2085 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002086 Py_DECREF(stdin_errors);
2087 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002088 PyMem_FREE(s);
Steve Dowerb82e17e2019-05-23 08:45:22 -07002089
2090 if (result != NULL) {
2091 if (PySys_Audit("builtins.input/result", "O", result) < 0) {
2092 return NULL;
2093 }
2094 }
2095
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002096 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002097
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002098 _readline_errors:
2099 Py_XDECREF(stdin_encoding);
2100 Py_XDECREF(stdout_encoding);
2101 Py_XDECREF(stdin_errors);
2102 Py_XDECREF(stdout_errors);
2103 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002104 if (tty)
2105 return NULL;
2106
2107 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002110 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002111 if (prompt != NULL) {
2112 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 return NULL;
2114 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002115 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002116 if (tmp == NULL)
2117 PyErr_Clear();
2118 else
2119 Py_DECREF(tmp);
2120 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002121}
2122
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002123
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002124/*[clinic input]
2125repr as builtin_repr
2126
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002127 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002128 /
2129
2130Return the canonical string representation of the object.
2131
2132For many object types, including most builtins, eval(repr(obj)) == obj.
2133[clinic start generated code]*/
2134
Guido van Rossum79f25d91997-04-29 20:08:16 +00002135static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002136builtin_repr(PyObject *module, PyObject *obj)
2137/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002138{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002139 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002140}
2141
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002142
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002143/*[clinic input]
2144round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002145
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002146 number: object
2147 ndigits: object = NULL
2148
2149Round a number to a given precision in decimal digits.
2150
2151The return value is an integer if ndigits is omitted or None. Otherwise
2152the return value has the same type as the number. ndigits may be negative.
2153[clinic start generated code]*/
2154
2155static PyObject *
2156builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
2157/*[clinic end generated code: output=ff0d9dd176c02ede input=854bc3a217530c3d]*/
2158{
2159 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 if (Py_TYPE(number)->tp_dict == NULL) {
2162 if (PyType_Ready(Py_TYPE(number)) < 0)
2163 return NULL;
2164 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002165
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002166 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002167 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002168 if (!PyErr_Occurred())
2169 PyErr_Format(PyExc_TypeError,
2170 "type %.100s doesn't define __round__ method",
2171 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 return NULL;
2173 }
Alex Martelliae211f92007-08-22 23:21:33 +00002174
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002175 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002176 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002177 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002178 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002179 Py_DECREF(round);
2180 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002181}
2182
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002183
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002184/*AC: we need to keep the kwds dict intact to easily call into the
2185 * list.sort method, which isn't currently supported in AC. So we just use
2186 * the initially generated signature with a custom implementation.
2187 */
2188/* [disabled clinic input]
2189sorted as builtin_sorted
2190
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002191 iterable as seq: object
2192 key as keyfunc: object = None
2193 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002194
2195Return a new list containing all items from the iterable in ascending order.
2196
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002197A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002198reverse flag can be set to request the result in descending order.
2199[end disabled clinic input]*/
2200
2201PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002202"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002203"--\n"
2204"\n"
2205"Return a new list containing all items from the iterable in ascending order.\n"
2206"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002207"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002208"reverse flag can be set to request the result in descending order.");
2209
2210#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002211 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002212
Raymond Hettinger64958a12003-12-17 20:43:33 +00002213static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002214builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002215{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002216 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002217
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002218 /* Keyword arguments are passed through list.sort() which will check
2219 them. */
2220 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002221 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002222
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002223 newlist = PySequence_List(seq);
2224 if (newlist == NULL)
2225 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002226
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002227 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 if (callable == NULL) {
2229 Py_DECREF(newlist);
2230 return NULL;
2231 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002232
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002233 assert(nargs >= 1);
Jeroen Demeyeraacc77f2019-05-29 20:31:52 +02002234 v = _PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002235 Py_DECREF(callable);
2236 if (v == NULL) {
2237 Py_DECREF(newlist);
2238 return NULL;
2239 }
2240 Py_DECREF(v);
2241 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002242}
2243
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002244
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002245/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002246static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002247builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002248{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002249 PyObject *v = NULL;
2250 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002252 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2253 return NULL;
2254 if (v == NULL) {
2255 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002256 if (d == NULL)
2257 return NULL;
2258 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002259 }
2260 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002261 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002262 if (d == NULL) {
2263 PyErr_SetString(PyExc_TypeError,
2264 "vars() argument must have __dict__ attribute");
2265 return NULL;
2266 }
2267 }
2268 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002269}
2270
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002271PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002272"vars([object]) -> dictionary\n\
2273\n\
2274Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002275With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002276
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002277
2278/*[clinic input]
2279sum as builtin_sum
2280
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002281 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002282 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002283 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002284
2285Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2286
2287When the iterable is empty, return the start value.
2288This function is intended specifically for use with numeric values and may
2289reject non-numeric types.
2290[clinic start generated code]*/
2291
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002292static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002293builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002294/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002295{
2296 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002297 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002298
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002299 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002300 if (iter == NULL)
2301 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 if (result == NULL) {
2304 result = PyLong_FromLong(0);
2305 if (result == NULL) {
2306 Py_DECREF(iter);
2307 return NULL;
2308 }
2309 } else {
2310 /* reject string values for 'start' parameter */
2311 if (PyUnicode_Check(result)) {
2312 PyErr_SetString(PyExc_TypeError,
2313 "sum() can't sum strings [use ''.join(seq) instead]");
2314 Py_DECREF(iter);
2315 return NULL;
2316 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002317 if (PyBytes_Check(result)) {
2318 PyErr_SetString(PyExc_TypeError,
2319 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002320 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002321 return NULL;
2322 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002323 if (PyByteArray_Check(result)) {
2324 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002325 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002326 Py_DECREF(iter);
2327 return NULL;
2328 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002329 Py_INCREF(result);
2330 }
Alex Martellia70b1912003-04-22 08:12:33 +00002331
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002332#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002333 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2334 Assumes all inputs are the same type. If the assumption fails, default
2335 to the more general routine.
2336 */
2337 if (PyLong_CheckExact(result)) {
2338 int overflow;
2339 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2340 /* If this already overflowed, don't even enter the loop. */
2341 if (overflow == 0) {
2342 Py_DECREF(result);
2343 result = NULL;
2344 }
2345 while(result == NULL) {
2346 item = PyIter_Next(iter);
2347 if (item == NULL) {
2348 Py_DECREF(iter);
2349 if (PyErr_Occurred())
2350 return NULL;
2351 return PyLong_FromLong(i_result);
2352 }
2353 if (PyLong_CheckExact(item)) {
2354 long b = PyLong_AsLongAndOverflow(item, &overflow);
Serhiy Storchaka29500732019-05-05 14:26:23 +03002355 if (overflow == 0 &&
2356 (i_result >= 0 ? (b <= LONG_MAX - i_result)
2357 : (b >= LONG_MIN - i_result)))
2358 {
2359 i_result += b;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002360 Py_DECREF(item);
2361 continue;
2362 }
2363 }
2364 /* Either overflowed or is not an int. Restore real objects and process normally */
2365 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002366 if (result == NULL) {
2367 Py_DECREF(item);
2368 Py_DECREF(iter);
2369 return NULL;
2370 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 temp = PyNumber_Add(result, item);
2372 Py_DECREF(result);
2373 Py_DECREF(item);
2374 result = temp;
2375 if (result == NULL) {
2376 Py_DECREF(iter);
2377 return NULL;
2378 }
2379 }
2380 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002381
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002382 if (PyFloat_CheckExact(result)) {
2383 double f_result = PyFloat_AS_DOUBLE(result);
2384 Py_DECREF(result);
2385 result = NULL;
2386 while(result == NULL) {
2387 item = PyIter_Next(iter);
2388 if (item == NULL) {
2389 Py_DECREF(iter);
2390 if (PyErr_Occurred())
2391 return NULL;
2392 return PyFloat_FromDouble(f_result);
2393 }
2394 if (PyFloat_CheckExact(item)) {
2395 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2396 f_result += PyFloat_AS_DOUBLE(item);
2397 PyFPE_END_PROTECT(f_result)
2398 Py_DECREF(item);
2399 continue;
2400 }
2401 if (PyLong_CheckExact(item)) {
2402 long value;
2403 int overflow;
2404 value = PyLong_AsLongAndOverflow(item, &overflow);
2405 if (!overflow) {
2406 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2407 f_result += (double)value;
2408 PyFPE_END_PROTECT(f_result)
2409 Py_DECREF(item);
2410 continue;
2411 }
2412 }
2413 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002414 if (result == NULL) {
2415 Py_DECREF(item);
2416 Py_DECREF(iter);
2417 return NULL;
2418 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002419 temp = PyNumber_Add(result, item);
2420 Py_DECREF(result);
2421 Py_DECREF(item);
2422 result = temp;
2423 if (result == NULL) {
2424 Py_DECREF(iter);
2425 return NULL;
2426 }
2427 }
2428 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002429#endif
2430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 for(;;) {
2432 item = PyIter_Next(iter);
2433 if (item == NULL) {
2434 /* error, or end-of-sequence */
2435 if (PyErr_Occurred()) {
2436 Py_DECREF(result);
2437 result = NULL;
2438 }
2439 break;
2440 }
2441 /* It's tempting to use PyNumber_InPlaceAdd instead of
2442 PyNumber_Add here, to avoid quadratic running time
2443 when doing 'sum(list_of_lists, [])'. However, this
2444 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002445
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 empty = []
2447 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 would change the value of empty. */
2450 temp = PyNumber_Add(result, item);
2451 Py_DECREF(result);
2452 Py_DECREF(item);
2453 result = temp;
2454 if (result == NULL)
2455 break;
2456 }
2457 Py_DECREF(iter);
2458 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002459}
2460
Alex Martellia70b1912003-04-22 08:12:33 +00002461
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002462/*[clinic input]
2463isinstance as builtin_isinstance
2464
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002465 obj: object
2466 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002467 /
2468
2469Return whether an object is an instance of a class or of a subclass thereof.
2470
2471A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2472check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2473or ...`` etc.
2474[clinic start generated code]*/
2475
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002476static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002477builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002478 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002479/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002481 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002482
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002483 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002484 if (retval < 0)
2485 return NULL;
2486 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002487}
2488
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002489
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002490/*[clinic input]
2491issubclass as builtin_issubclass
2492
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002493 cls: object
2494 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002495 /
2496
2497Return whether 'cls' is a derived from another class or is the same class.
2498
2499A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2500check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2501or ...`` etc.
2502[clinic start generated code]*/
2503
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002504static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002505builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002506 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002507/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002510
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002511 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002512 if (retval < 0)
2513 return NULL;
2514 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002515}
2516
2517
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002518typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002519 PyObject_HEAD
2520 Py_ssize_t tuplesize;
2521 PyObject *ittuple; /* tuple of iterators */
2522 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002523} zipobject;
2524
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002525static PyObject *
2526zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002527{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 zipobject *lz;
2529 Py_ssize_t i;
2530 PyObject *ittuple; /* tuple of iterators */
2531 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002532 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002533
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002534 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002536
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002537 /* args must be a tuple */
2538 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002539 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002541 /* obtain iterators */
2542 ittuple = PyTuple_New(tuplesize);
2543 if (ittuple == NULL)
2544 return NULL;
2545 for (i=0; i < tuplesize; ++i) {
2546 PyObject *item = PyTuple_GET_ITEM(args, i);
2547 PyObject *it = PyObject_GetIter(item);
2548 if (it == NULL) {
2549 if (PyErr_ExceptionMatches(PyExc_TypeError))
2550 PyErr_Format(PyExc_TypeError,
2551 "zip argument #%zd must support iteration",
2552 i+1);
2553 Py_DECREF(ittuple);
2554 return NULL;
2555 }
2556 PyTuple_SET_ITEM(ittuple, i, it);
2557 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002558
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002559 /* create a result holder */
2560 result = PyTuple_New(tuplesize);
2561 if (result == NULL) {
2562 Py_DECREF(ittuple);
2563 return NULL;
2564 }
2565 for (i=0 ; i < tuplesize ; i++) {
2566 Py_INCREF(Py_None);
2567 PyTuple_SET_ITEM(result, i, Py_None);
2568 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002570 /* create zipobject structure */
2571 lz = (zipobject *)type->tp_alloc(type, 0);
2572 if (lz == NULL) {
2573 Py_DECREF(ittuple);
2574 Py_DECREF(result);
2575 return NULL;
2576 }
2577 lz->ittuple = ittuple;
2578 lz->tuplesize = tuplesize;
2579 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002581 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002582}
2583
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002584static void
2585zip_dealloc(zipobject *lz)
2586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002587 PyObject_GC_UnTrack(lz);
2588 Py_XDECREF(lz->ittuple);
2589 Py_XDECREF(lz->result);
2590 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002591}
2592
2593static int
2594zip_traverse(zipobject *lz, visitproc visit, void *arg)
2595{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002596 Py_VISIT(lz->ittuple);
2597 Py_VISIT(lz->result);
2598 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002599}
2600
2601static PyObject *
2602zip_next(zipobject *lz)
2603{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 Py_ssize_t i;
2605 Py_ssize_t tuplesize = lz->tuplesize;
2606 PyObject *result = lz->result;
2607 PyObject *it;
2608 PyObject *item;
2609 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 if (tuplesize == 0)
2612 return NULL;
2613 if (Py_REFCNT(result) == 1) {
2614 Py_INCREF(result);
2615 for (i=0 ; i < tuplesize ; i++) {
2616 it = PyTuple_GET_ITEM(lz->ittuple, i);
2617 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002618 if (item == NULL) {
2619 Py_DECREF(result);
2620 return NULL;
2621 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002622 olditem = PyTuple_GET_ITEM(result, i);
2623 PyTuple_SET_ITEM(result, i, item);
2624 Py_DECREF(olditem);
2625 }
2626 } else {
2627 result = PyTuple_New(tuplesize);
2628 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002629 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002630 for (i=0 ; i < tuplesize ; i++) {
2631 it = PyTuple_GET_ITEM(lz->ittuple, i);
2632 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002633 if (item == NULL) {
2634 Py_DECREF(result);
2635 return NULL;
2636 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 PyTuple_SET_ITEM(result, i, item);
2638 }
2639 }
2640 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002641}
Barry Warsawbd599b52000-08-03 15:45:29 +00002642
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002643static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302644zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002645{
2646 /* Just recreate the zip with the internal iterator tuple */
2647 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2648}
2649
2650static PyMethodDef zip_methods[] = {
2651 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2652 {NULL, NULL} /* sentinel */
2653};
2654
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002655PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002656"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002657\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002658Return a zip object whose .__next__() method returns a tuple where\n\
2659the i-th element comes from the i-th iterable argument. The .__next__()\n\
2660method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002661is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002662
2663PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002664 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2665 "zip", /* tp_name */
2666 sizeof(zipobject), /* tp_basicsize */
2667 0, /* tp_itemsize */
2668 /* methods */
2669 (destructor)zip_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002670 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002671 0, /* tp_getattr */
2672 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002673 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 0, /* tp_repr */
2675 0, /* tp_as_number */
2676 0, /* tp_as_sequence */
2677 0, /* tp_as_mapping */
2678 0, /* tp_hash */
2679 0, /* tp_call */
2680 0, /* tp_str */
2681 PyObject_GenericGetAttr, /* tp_getattro */
2682 0, /* tp_setattro */
2683 0, /* tp_as_buffer */
2684 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2685 Py_TPFLAGS_BASETYPE, /* tp_flags */
2686 zip_doc, /* tp_doc */
2687 (traverseproc)zip_traverse, /* tp_traverse */
2688 0, /* tp_clear */
2689 0, /* tp_richcompare */
2690 0, /* tp_weaklistoffset */
2691 PyObject_SelfIter, /* tp_iter */
2692 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002693 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002694 0, /* tp_members */
2695 0, /* tp_getset */
2696 0, /* tp_base */
2697 0, /* tp_dict */
2698 0, /* tp_descr_get */
2699 0, /* tp_descr_set */
2700 0, /* tp_dictoffset */
2701 0, /* tp_init */
2702 PyType_GenericAlloc, /* tp_alloc */
2703 zip_new, /* tp_new */
2704 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002705};
Barry Warsawbd599b52000-08-03 15:45:29 +00002706
2707
Guido van Rossum79f25d91997-04-29 20:08:16 +00002708static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002709 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002710 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002711 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002712 BUILTIN_ABS_METHODDEF
2713 BUILTIN_ALL_METHODDEF
2714 BUILTIN_ANY_METHODDEF
2715 BUILTIN_ASCII_METHODDEF
2716 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002717 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002718 BUILTIN_CALLABLE_METHODDEF
2719 BUILTIN_CHR_METHODDEF
2720 BUILTIN_COMPILE_METHODDEF
2721 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002722 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002723 BUILTIN_DIVMOD_METHODDEF
2724 BUILTIN_EVAL_METHODDEF
2725 BUILTIN_EXEC_METHODDEF
2726 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002727 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002728 BUILTIN_GLOBALS_METHODDEF
2729 BUILTIN_HASATTR_METHODDEF
2730 BUILTIN_HASH_METHODDEF
2731 BUILTIN_HEX_METHODDEF
2732 BUILTIN_ID_METHODDEF
2733 BUILTIN_INPUT_METHODDEF
2734 BUILTIN_ISINSTANCE_METHODDEF
2735 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002736 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002737 BUILTIN_LEN_METHODDEF
2738 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002739 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2740 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2741 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002742 BUILTIN_OCT_METHODDEF
2743 BUILTIN_ORD_METHODDEF
2744 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002745 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002746 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002747 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002748 BUILTIN_SETATTR_METHODDEF
2749 BUILTIN_SORTED_METHODDEF
2750 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002751 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2752 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002753};
2754
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002755PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002756"Built-in functions, exceptions, and other objects.\n\
2757\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002758Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002759
Martin v. Löwis1a214512008-06-11 05:26:20 +00002760static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002761 PyModuleDef_HEAD_INIT,
2762 "builtins",
2763 builtin_doc,
2764 -1, /* multiple "initialization" just copies the module dict. */
2765 builtin_methods,
2766 NULL,
2767 NULL,
2768 NULL,
2769 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002770};
2771
2772
Guido van Rossum25ce5661997-08-02 03:10:38 +00002773PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002774_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002775{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002776 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002777
Victor Stinner331a6a52019-05-27 16:39:22 +02002778 const PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
Victor Stinnerfbca9082018-08-30 00:50:45 +02002779
Benjamin Peterson42124a72012-10-30 23:41:54 -04002780 if (PyType_Ready(&PyFilter_Type) < 0 ||
2781 PyType_Ready(&PyMap_Type) < 0 ||
2782 PyType_Ready(&PyZip_Type) < 0)
2783 return NULL;
2784
Eric Snowd393c1b2017-09-14 12:18:12 -06002785 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 if (mod == NULL)
2787 return NULL;
2788 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002789
Tim Peters7571a0f2003-03-23 17:52:28 +00002790#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002791 /* "builtins" exposes a number of statically allocated objects
2792 * that, before this code was added in 2.3, never showed up in
2793 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2794 * result, programs leaking references to None and False (etc)
2795 * couldn't be diagnosed by examining sys.getobjects(0).
2796 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002797#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2798#else
2799#define ADD_TO_ALL(OBJECT) (void)0
2800#endif
2801
Tim Peters4b7625e2001-09-13 21:37:17 +00002802#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002803 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2804 return NULL; \
2805 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002807 SETBUILTIN("None", Py_None);
2808 SETBUILTIN("Ellipsis", Py_Ellipsis);
2809 SETBUILTIN("NotImplemented", Py_NotImplemented);
2810 SETBUILTIN("False", Py_False);
2811 SETBUILTIN("True", Py_True);
2812 SETBUILTIN("bool", &PyBool_Type);
2813 SETBUILTIN("memoryview", &PyMemoryView_Type);
2814 SETBUILTIN("bytearray", &PyByteArray_Type);
2815 SETBUILTIN("bytes", &PyBytes_Type);
2816 SETBUILTIN("classmethod", &PyClassMethod_Type);
2817 SETBUILTIN("complex", &PyComplex_Type);
2818 SETBUILTIN("dict", &PyDict_Type);
2819 SETBUILTIN("enumerate", &PyEnum_Type);
2820 SETBUILTIN("filter", &PyFilter_Type);
2821 SETBUILTIN("float", &PyFloat_Type);
2822 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2823 SETBUILTIN("property", &PyProperty_Type);
2824 SETBUILTIN("int", &PyLong_Type);
2825 SETBUILTIN("list", &PyList_Type);
2826 SETBUILTIN("map", &PyMap_Type);
2827 SETBUILTIN("object", &PyBaseObject_Type);
2828 SETBUILTIN("range", &PyRange_Type);
2829 SETBUILTIN("reversed", &PyReversed_Type);
2830 SETBUILTIN("set", &PySet_Type);
2831 SETBUILTIN("slice", &PySlice_Type);
2832 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2833 SETBUILTIN("str", &PyUnicode_Type);
2834 SETBUILTIN("super", &PySuper_Type);
2835 SETBUILTIN("tuple", &PyTuple_Type);
2836 SETBUILTIN("type", &PyType_Type);
2837 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002838 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002839 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002840 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002841 return NULL;
2842 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002843 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002844
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002845 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002846#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002847#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002848}