blob: 33f969094e7d15994583abbae2a9cb8489e19737 [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,
Miss Islington (bot)a04c7eb2019-10-13 08:53:54 -0700264"__build_class__(func, name, /, *bases, [metaclass], **kwds) -> class\n\
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000265\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 }
Miss Islington (bot)8763d432019-06-24 09:09:47 -0700485
486 if (PySys_Audit("builtins.breakpoint", "O", hook) < 0) {
487 return NULL;
488 }
489
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400490 Py_INCREF(hook);
Jeroen Demeyeraacc77f2019-05-29 20:31:52 +0200491 PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400492 Py_DECREF(hook);
493 return retval;
494}
495
496PyDoc_STRVAR(breakpoint_doc,
497"breakpoint(*args, **kws)\n\
498\n\
499Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
500whatever arguments are passed.\n\
501\n\
502By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000503
Raymond Hettinger17301e92008-03-13 00:19:26 +0000504typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000505 PyObject_HEAD
506 PyObject *func;
507 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000508} filterobject;
509
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000510static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000511filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000512{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 PyObject *func, *seq;
514 PyObject *it;
515 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000516
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300517 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
521 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 /* Get iterator. */
524 it = PyObject_GetIter(seq);
525 if (it == NULL)
526 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 /* create filterobject structure */
529 lz = (filterobject *)type->tp_alloc(type, 0);
530 if (lz == NULL) {
531 Py_DECREF(it);
532 return NULL;
533 }
534 Py_INCREF(func);
535 lz->func = func;
536 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000539}
540
541static void
542filter_dealloc(filterobject *lz)
543{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 PyObject_GC_UnTrack(lz);
545 Py_XDECREF(lz->func);
546 Py_XDECREF(lz->it);
547 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000548}
549
550static int
551filter_traverse(filterobject *lz, visitproc visit, void *arg)
552{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000553 Py_VISIT(lz->it);
554 Py_VISIT(lz->func);
555 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000556}
557
558static PyObject *
559filter_next(filterobject *lz)
560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 PyObject *item;
562 PyObject *it = lz->it;
563 long ok;
564 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400565 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 iternext = *Py_TYPE(it)->tp_iternext;
568 for (;;) {
569 item = iternext(it);
570 if (item == NULL)
571 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000572
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400573 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000574 ok = PyObject_IsTrue(item);
575 } else {
576 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100577 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 if (good == NULL) {
579 Py_DECREF(item);
580 return NULL;
581 }
582 ok = PyObject_IsTrue(good);
583 Py_DECREF(good);
584 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200585 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000586 return item;
587 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200588 if (ok < 0)
589 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000590 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000591}
592
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000593static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530594filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000595{
596 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
597}
598
599PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
600
601static PyMethodDef filter_methods[] = {
602 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
603 {NULL, NULL} /* sentinel */
604};
605
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000606PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000607"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000608\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000609Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000610is true. If function is None, return the items that are true.");
611
612PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 PyVarObject_HEAD_INIT(&PyType_Type, 0)
614 "filter", /* tp_name */
615 sizeof(filterobject), /* tp_basicsize */
616 0, /* tp_itemsize */
617 /* methods */
618 (destructor)filter_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200619 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 0, /* tp_getattr */
621 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +0200622 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 0, /* tp_repr */
624 0, /* tp_as_number */
625 0, /* tp_as_sequence */
626 0, /* tp_as_mapping */
627 0, /* tp_hash */
628 0, /* tp_call */
629 0, /* tp_str */
630 PyObject_GenericGetAttr, /* tp_getattro */
631 0, /* tp_setattro */
632 0, /* tp_as_buffer */
633 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
634 Py_TPFLAGS_BASETYPE, /* tp_flags */
635 filter_doc, /* tp_doc */
636 (traverseproc)filter_traverse, /* tp_traverse */
637 0, /* tp_clear */
638 0, /* tp_richcompare */
639 0, /* tp_weaklistoffset */
640 PyObject_SelfIter, /* tp_iter */
641 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000642 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 0, /* tp_members */
644 0, /* tp_getset */
645 0, /* tp_base */
646 0, /* tp_dict */
647 0, /* tp_descr_get */
648 0, /* tp_descr_set */
649 0, /* tp_dictoffset */
650 0, /* tp_init */
651 PyType_GenericAlloc, /* tp_alloc */
652 filter_new, /* tp_new */
653 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000654};
655
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000656
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000657/*[clinic input]
658format as builtin_format
659
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300660 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000661 format_spec: unicode(c_default="NULL") = ''
662 /
663
664Return value.__format__(format_spec)
665
Amit Kumar2e6bb442017-05-29 06:32:26 +0530666format_spec defaults to the empty string.
667See the Format Specification Mini-Language section of help('FORMATTING') for
668details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000669[clinic start generated code]*/
670
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000671static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300672builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530673/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000674{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000675 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000676}
677
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000678/*[clinic input]
679chr as builtin_chr
680
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300681 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000682 /
683
684Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
685[clinic start generated code]*/
686
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000687static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300688builtin_chr_impl(PyObject *module, int i)
689/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000690{
691 return PyUnicode_FromOrdinal(i);
692}
Guido van Rossum09095f32000-03-10 23:00:52 +0000693
694
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000695/*[clinic input]
696compile as builtin_compile
697
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300698 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000699 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300700 mode: str
701 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200702 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300703 optimize: int = -1
Victor Stinnerb2fd32b2019-06-12 16:17:05 +0200704 *
705 _feature_version as feature_version: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000706
707Compile source into a code object that can be executed by exec() or eval().
708
709The source code may represent a Python module, statement or expression.
710The filename will be used for run-time error messages.
711The mode must be 'exec' to compile a module, 'single' to compile a
712single (interactive) statement, or 'eval' to compile an expression.
713The flags argument, if present, controls which future statements influence
714the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300715The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000716the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300717compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000718in addition to any features explicitly specified.
719[clinic start generated code]*/
720
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000721static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300722builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
723 const char *mode, int flags, int dont_inherit,
Guido van Rossum495da292019-03-07 12:38:08 -0800724 int optimize, int feature_version)
Victor Stinnerb2fd32b2019-06-12 16:17:05 +0200725/*[clinic end generated code: output=b0c09c84f116d3d7 input=40171fb92c1d580d]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000726{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000727 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200728 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000729 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 int is_ast;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800731 int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000732 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733
Miss Islington (bot)92e836c2019-06-12 17:36:03 -0700734 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000735 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -0800736 if (feature_version >= 0 && (flags & PyCF_ONLY_AST)) {
737 cf.cf_feature_version = feature_version;
738 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000739
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000740 if (flags &
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800741 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST | PyCF_TYPE_COMMENTS))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000742 {
743 PyErr_SetString(PyExc_ValueError,
744 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000745 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 }
747 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000748
Georg Brandl8334fd92010-12-04 10:26:46 +0000749 if (optimize < -1 || optimize > 2) {
750 PyErr_SetString(PyExc_ValueError,
751 "compile(): invalid optimize value");
752 goto error;
753 }
754
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000755 if (!dont_inherit) {
756 PyEval_MergeCompilerFlags(&cf);
757 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000758
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000759 if (strcmp(mode, "exec") == 0)
760 compile_mode = 0;
761 else if (strcmp(mode, "eval") == 0)
762 compile_mode = 1;
763 else if (strcmp(mode, "single") == 0)
764 compile_mode = 2;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800765 else if (strcmp(mode, "func_type") == 0) {
766 if (!(flags & PyCF_ONLY_AST)) {
767 PyErr_SetString(PyExc_ValueError,
768 "compile() mode 'func_type' requires flag PyCF_ONLY_AST");
769 goto error;
770 }
771 compile_mode = 3;
772 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 else {
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800774 const char *msg;
775 if (flags & PyCF_ONLY_AST)
776 msg = "compile() mode must be 'exec', 'eval', 'single' or 'func_type'";
777 else
778 msg = "compile() mode must be 'exec', 'eval' or 'single'";
779 PyErr_SetString(PyExc_ValueError, msg);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000780 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000782
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000783 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000785 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000787 if (flags & PyCF_ONLY_AST) {
788 Py_INCREF(source);
789 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 }
791 else {
792 PyArena *arena;
793 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200796 if (arena == NULL)
797 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000798 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 if (mod == NULL) {
800 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000801 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500803 if (!PyAST_Validate(mod)) {
804 PyArena_Free(arena);
805 goto error;
806 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200807 result = (PyObject*)PyAST_CompileObject(mod, filename,
808 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 PyArena_Free(arena);
810 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000811 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000813
Dino Viehland41540692019-05-28 16:21:17 -0700814 str = _Py_SourceAsString(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000816 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000817
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000818 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000819 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000820 goto finally;
821
822error:
823 result = NULL;
824finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200825 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000826 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000827}
828
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000829/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000830static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000831builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000832{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
836 return NULL;
837 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000838}
839
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000840PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000841"dir([object]) -> list of strings\n"
842"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000843"If called without an argument, return the names in the current scope.\n"
844"Else, return an alphabetized list of names comprising (some of) the attributes\n"
845"of the given object, and of attributes reachable from it.\n"
846"If the object supplies a method named __dir__, it will be used; otherwise\n"
847"the default dir() logic is used and returns:\n"
848" for a module object: the module's attributes.\n"
849" for a class object: its attributes, and recursively the attributes\n"
850" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000851" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000852" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000853
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000854/*[clinic input]
855divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000856
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300857 x: object
858 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000859 /
860
Zachary Ware7f227d92016-04-28 14:39:50 -0500861Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000862[clinic start generated code]*/
863
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000864static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300865builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
866/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000867{
868 return PyNumber_Divmod(x, y);
869}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000870
871
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000872/*[clinic input]
873eval as builtin_eval
874
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300875 source: object
876 globals: object = None
877 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000878 /
879
880Evaluate the given source in the context of globals and locals.
881
882The source may be a string representing a Python expression
883or a code object as returned by compile().
884The globals must be a dictionary and locals can be any mapping,
885defaulting to the current globals and locals.
886If only globals is given, locals defaults to it.
887[clinic start generated code]*/
888
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000889static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300890builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400891 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300892/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000893{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000894 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200895 const char *str;
Guido van Rossum590baa41993-11-30 13:40:46 +0000896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000897 if (locals != Py_None && !PyMapping_Check(locals)) {
898 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
899 return NULL;
900 }
901 if (globals != Py_None && !PyDict_Check(globals)) {
902 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
903 "globals must be a real dict; try eval(expr, {}, mapping)"
904 : "globals must be a dict");
905 return NULL;
906 }
907 if (globals == Py_None) {
908 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100909 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100911 if (locals == NULL)
912 return NULL;
913 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 }
915 else if (locals == Py_None)
916 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 if (globals == NULL || locals == NULL) {
919 PyErr_SetString(PyExc_TypeError,
920 "eval must be given globals and locals "
921 "when called without a frame");
922 return NULL;
923 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000924
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200925 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +0100926 if (_PyDict_SetItemId(globals, &PyId___builtins__,
927 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 return NULL;
929 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200930 else if (PyErr_Occurred()) {
931 return NULL;
932 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000933
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000934 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -0700935 if (PySys_Audit("exec", "O", source) < 0) {
936 return NULL;
937 }
938
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000939 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 PyErr_SetString(PyExc_TypeError,
Steve Dowerb82e17e2019-05-23 08:45:22 -0700941 "code object passed to eval() may not contain free variables");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 return NULL;
943 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000944 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000946
Miss Islington (bot)92e836c2019-06-12 17:36:03 -0700947 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Dino Viehland41540692019-05-28 16:21:17 -0700949 str = _Py_SourceAsString(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 if (str == NULL)
951 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000952
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000953 while (*str == ' ' || *str == '\t')
954 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000955
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 (void)PyEval_MergeCompilerFlags(&cf);
957 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000958 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000960}
961
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000962/*[clinic input]
963exec as builtin_exec
964
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300965 source: object
966 globals: object = None
967 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000968 /
969
970Execute the given source in the context of globals and locals.
971
972The source may be a string representing one or more Python statements
973or a code object as returned by compile().
974The globals must be a dictionary and locals can be any mapping,
975defaulting to the current globals and locals.
976If only globals is given, locals defaults to it.
977[clinic start generated code]*/
978
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000979static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300980builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400981 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300982/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +0000983{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +0000985
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 if (globals == Py_None) {
987 globals = PyEval_GetGlobals();
988 if (locals == Py_None) {
989 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100990 if (locals == NULL)
991 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 }
993 if (!globals || !locals) {
994 PyErr_SetString(PyExc_SystemError,
995 "globals and locals cannot be NULL");
996 return NULL;
997 }
998 }
999 else if (locals == Py_None)
1000 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001003 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 globals->ob_type->tp_name);
1005 return NULL;
1006 }
1007 if (!PyMapping_Check(locals)) {
1008 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001009 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 locals->ob_type->tp_name);
1011 return NULL;
1012 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001013 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +01001014 if (_PyDict_SetItemId(globals, &PyId___builtins__,
1015 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001016 return NULL;
1017 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001018 else if (PyErr_Occurred()) {
1019 return NULL;
1020 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001021
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001022 if (PyCode_Check(source)) {
Steve Dowerb82e17e2019-05-23 08:45:22 -07001023 if (PySys_Audit("exec", "O", source) < 0) {
1024 return NULL;
1025 }
1026
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001027 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 PyErr_SetString(PyExc_TypeError,
1029 "code object passed to exec() may not "
1030 "contain free variables");
1031 return NULL;
1032 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001033 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 }
1035 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001036 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001037 const char *str;
Miss Islington (bot)92e836c2019-06-12 17:36:03 -07001038 PyCompilerFlags cf = _PyCompilerFlags_INIT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Dino Viehland41540692019-05-28 16:21:17 -07001040 str = _Py_SourceAsString(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001041 "string, bytes or code", &cf,
1042 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 if (str == NULL)
1044 return NULL;
1045 if (PyEval_MergeCompilerFlags(&cf))
1046 v = PyRun_StringFlags(str, Py_file_input, globals,
1047 locals, &cf);
1048 else
1049 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001050 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 }
1052 if (v == NULL)
1053 return NULL;
1054 Py_DECREF(v);
1055 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001056}
1057
Georg Brandl7cae87c2006-09-06 06:51:57 +00001058
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001059/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001060static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001061builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001062{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001063 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001064
Serhiy Storchaka79342662019-01-12 08:25:41 +02001065 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001066 return NULL;
1067
Serhiy Storchaka79342662019-01-12 08:25:41 +02001068 v = args[0];
1069 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 if (!PyUnicode_Check(name)) {
1071 PyErr_SetString(PyExc_TypeError,
1072 "getattr(): attribute name must be string");
1073 return NULL;
1074 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001075 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001076 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001077 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001078 Py_INCREF(dflt);
1079 return dflt;
1080 }
1081 }
1082 else {
1083 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 }
1085 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001086}
1087
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001089"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001090\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001091Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1092When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001093exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001094
1095
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001096/*[clinic input]
1097globals as builtin_globals
1098
1099Return the dictionary containing the current scope's global variables.
1100
1101NOTE: Updates to this dictionary *will* affect name lookups in the current
1102global scope and vice-versa.
1103[clinic start generated code]*/
1104
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001105static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001106builtin_globals_impl(PyObject *module)
1107/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 d = PyEval_GetGlobals();
1112 Py_XINCREF(d);
1113 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001114}
1115
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001116
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001117/*[clinic input]
1118hasattr as builtin_hasattr
1119
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001120 obj: object
1121 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001122 /
1123
1124Return whether the object has an attribute with the given name.
1125
1126This is done by calling getattr(obj, name) and catching AttributeError.
1127[clinic start generated code]*/
1128
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001129static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001130builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1131/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001132{
1133 PyObject *v;
1134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 if (!PyUnicode_Check(name)) {
1136 PyErr_SetString(PyExc_TypeError,
1137 "hasattr(): attribute name must be string");
1138 return NULL;
1139 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001140 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001141 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001143 if (v == NULL) {
1144 Py_RETURN_FALSE;
1145 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001146 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001147 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001148}
1149
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001150
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001151/* AC: gdb's integration with CPython relies on builtin_id having
1152 * the *exact* parameter names of "self" and "v", so we ensure we
1153 * preserve those name rather than using the AC defaults.
1154 */
1155/*[clinic input]
1156id as builtin_id
1157
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001158 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001159 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001160 /
1161
1162Return the identity of an object.
1163
1164This is guaranteed to be unique among simultaneously existing objects.
1165(CPython uses the object's memory address.)
1166[clinic start generated code]*/
1167
Guido van Rossum79f25d91997-04-29 20:08:16 +00001168static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001169builtin_id(PyModuleDef *self, PyObject *v)
1170/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001171{
Steve Dowerb82e17e2019-05-23 08:45:22 -07001172 PyObject *id = PyLong_FromVoidPtr(v);
1173
1174 if (id && PySys_Audit("builtins.id", "O", id) < 0) {
1175 Py_DECREF(id);
1176 return NULL;
1177 }
1178
1179 return id;
Guido van Rossum5b722181993-03-30 17:46:03 +00001180}
1181
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182
Raymond Hettingera6c60372008-03-13 01:26:19 +00001183/* map object ************************************************************/
1184
1185typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001186 PyObject_HEAD
1187 PyObject *iters;
1188 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001189} mapobject;
1190
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001192map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001193{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 PyObject *it, *iters, *func;
1195 mapobject *lz;
1196 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001197
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001198 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 numargs = PyTuple_Size(args);
1202 if (numargs < 2) {
1203 PyErr_SetString(PyExc_TypeError,
1204 "map() must have at least two arguments.");
1205 return NULL;
1206 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 iters = PyTuple_New(numargs-1);
1209 if (iters == NULL)
1210 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 for (i=1 ; i<numargs ; i++) {
1213 /* Get iterator. */
1214 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1215 if (it == NULL) {
1216 Py_DECREF(iters);
1217 return NULL;
1218 }
1219 PyTuple_SET_ITEM(iters, i-1, it);
1220 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 /* create mapobject structure */
1223 lz = (mapobject *)type->tp_alloc(type, 0);
1224 if (lz == NULL) {
1225 Py_DECREF(iters);
1226 return NULL;
1227 }
1228 lz->iters = iters;
1229 func = PyTuple_GET_ITEM(args, 0);
1230 Py_INCREF(func);
1231 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001232
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001233 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001234}
1235
1236static void
1237map_dealloc(mapobject *lz)
1238{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 PyObject_GC_UnTrack(lz);
1240 Py_XDECREF(lz->iters);
1241 Py_XDECREF(lz->func);
1242 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001243}
1244
1245static int
1246map_traverse(mapobject *lz, visitproc visit, void *arg)
1247{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 Py_VISIT(lz->iters);
1249 Py_VISIT(lz->func);
1250 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001251}
1252
1253static PyObject *
1254map_next(mapobject *lz)
1255{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001256 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001257 PyObject **stack;
1258 Py_ssize_t niters, nargs, i;
1259 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001260
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001261 niters = PyTuple_GET_SIZE(lz->iters);
1262 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1263 stack = small_stack;
1264 }
1265 else {
1266 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1267 if (stack == NULL) {
1268 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 return NULL;
1270 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001272
1273 nargs = 0;
1274 for (i=0; i < niters; i++) {
1275 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1276 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1277 if (val == NULL) {
1278 goto exit;
1279 }
1280 stack[i] = val;
1281 nargs++;
1282 }
1283
1284 result = _PyObject_FastCall(lz->func, stack, nargs);
1285
1286exit:
1287 for (i=0; i < nargs; i++) {
1288 Py_DECREF(stack[i]);
1289 }
1290 if (stack != small_stack) {
1291 PyMem_Free(stack);
1292 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001294}
1295
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001296static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301297map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001298{
1299 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1300 PyObject *args = PyTuple_New(numargs+1);
1301 Py_ssize_t i;
1302 if (args == NULL)
1303 return NULL;
1304 Py_INCREF(lz->func);
1305 PyTuple_SET_ITEM(args, 0, lz->func);
1306 for (i = 0; i<numargs; i++){
1307 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1308 Py_INCREF(it);
1309 PyTuple_SET_ITEM(args, i+1, it);
1310 }
1311
1312 return Py_BuildValue("ON", Py_TYPE(lz), args);
1313}
1314
1315static PyMethodDef map_methods[] = {
1316 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1317 {NULL, NULL} /* sentinel */
1318};
1319
1320
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001321PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001322"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001323\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001324Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326
Raymond Hettingera6c60372008-03-13 01:26:19 +00001327PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1329 "map", /* tp_name */
1330 sizeof(mapobject), /* tp_basicsize */
1331 0, /* tp_itemsize */
1332 /* methods */
1333 (destructor)map_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001334 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 0, /* tp_getattr */
1336 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02001337 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 0, /* tp_repr */
1339 0, /* tp_as_number */
1340 0, /* tp_as_sequence */
1341 0, /* tp_as_mapping */
1342 0, /* tp_hash */
1343 0, /* tp_call */
1344 0, /* tp_str */
1345 PyObject_GenericGetAttr, /* tp_getattro */
1346 0, /* tp_setattro */
1347 0, /* tp_as_buffer */
1348 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1349 Py_TPFLAGS_BASETYPE, /* tp_flags */
1350 map_doc, /* tp_doc */
1351 (traverseproc)map_traverse, /* tp_traverse */
1352 0, /* tp_clear */
1353 0, /* tp_richcompare */
1354 0, /* tp_weaklistoffset */
1355 PyObject_SelfIter, /* tp_iter */
1356 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001357 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001358 0, /* tp_members */
1359 0, /* tp_getset */
1360 0, /* tp_base */
1361 0, /* tp_dict */
1362 0, /* tp_descr_get */
1363 0, /* tp_descr_set */
1364 0, /* tp_dictoffset */
1365 0, /* tp_init */
1366 PyType_GenericAlloc, /* tp_alloc */
1367 map_new, /* tp_new */
1368 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001369};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001370
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001371
1372/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001374builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001375{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001377
Serhiy Storchaka79342662019-01-12 08:25:41 +02001378 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001379 return NULL;
1380
Serhiy Storchaka79342662019-01-12 08:25:41 +02001381 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001382 if (!PyIter_Check(it)) {
1383 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001384 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001385 it->ob_type->tp_name);
1386 return NULL;
1387 }
1388
1389 res = (*it->ob_type->tp_iternext)(it);
1390 if (res != NULL) {
1391 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001392 } else if (nargs > 1) {
1393 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 if (PyErr_Occurred()) {
1395 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1396 return NULL;
1397 PyErr_Clear();
1398 }
1399 Py_INCREF(def);
1400 return def;
1401 } else if (PyErr_Occurred()) {
1402 return NULL;
1403 } else {
1404 PyErr_SetNone(PyExc_StopIteration);
1405 return NULL;
1406 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001407}
1408
1409PyDoc_STRVAR(next_doc,
1410"next(iterator[, default])\n\
1411\n\
1412Return the next item from the iterator. If default is given and the iterator\n\
1413is exhausted, it is returned instead of raising StopIteration.");
1414
1415
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001416/*[clinic input]
1417setattr as builtin_setattr
1418
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001419 obj: object
1420 name: object
1421 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001422 /
1423
1424Sets the named attribute on the given object to the specified value.
1425
1426setattr(x, 'y', v) is equivalent to ``x.y = v''
1427[clinic start generated code]*/
1428
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001429static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001430builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001431 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001432/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001433{
1434 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001436 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001437}
1438
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001439
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001440/*[clinic input]
1441delattr as builtin_delattr
1442
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001443 obj: object
1444 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001445 /
1446
1447Deletes the named attribute from the given object.
1448
1449delattr(x, 'y') is equivalent to ``del x.y''
1450[clinic start generated code]*/
1451
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001452static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001453builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1454/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001455{
1456 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001457 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001458 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001459}
1460
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001461
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001462/*[clinic input]
1463hash as builtin_hash
1464
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001465 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001466 /
1467
1468Return the hash value for the given object.
1469
1470Two objects that compare equal must also have the same hash value, but the
1471reverse is not necessarily true.
1472[clinic start generated code]*/
1473
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001475builtin_hash(PyObject *module, PyObject *obj)
1476/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001477{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001478 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001479
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001480 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 if (x == -1)
1482 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001483 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001484}
1485
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001486
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001487/*[clinic input]
1488hex as builtin_hex
1489
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001490 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001491 /
1492
1493Return the hexadecimal representation of an integer.
1494
1495 >>> hex(12648430)
1496 '0xc0ffee'
1497[clinic start generated code]*/
1498
Guido van Rossum79f25d91997-04-29 20:08:16 +00001499static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001500builtin_hex(PyObject *module, PyObject *number)
1501/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001502{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001503 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001504}
1505
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001506
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001507/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001508static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001509builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001510{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001511 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001512
Serhiy Storchaka79342662019-01-12 08:25:41 +02001513 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001515 v = args[0];
1516 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 return PyObject_GetIter(v);
1518 if (!PyCallable_Check(v)) {
1519 PyErr_SetString(PyExc_TypeError,
1520 "iter(v, w): v must be callable");
1521 return NULL;
1522 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001523 PyObject *sentinel = args[1];
1524 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001525}
1526
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001527PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001528"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001529iter(callable, sentinel) -> iterator\n\
1530\n\
1531Get an iterator from an object. In the first form, the argument must\n\
1532supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001533In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001534
1535
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001536/*[clinic input]
1537len as builtin_len
1538
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001539 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001540 /
1541
1542Return the number of items in a container.
1543[clinic start generated code]*/
1544
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001545static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001546builtin_len(PyObject *module, PyObject *obj)
1547/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001548{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001549 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001550
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001551 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001552 if (res < 0) {
1553 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001555 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001556 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001557}
1558
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001559
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001560/*[clinic input]
1561locals as builtin_locals
1562
1563Return a dictionary containing the current scope's local variables.
1564
1565NOTE: Whether or not updates to this dictionary will affect name lookups in
1566the local scope and vice-versa is *implementation dependent* and not
1567covered by any backwards compatibility guarantees.
1568[clinic start generated code]*/
1569
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001570static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001571builtin_locals_impl(PyObject *module)
1572/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001573{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 d = PyEval_GetLocals();
1577 Py_XINCREF(d);
1578 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001579}
1580
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001581
Guido van Rossum79f25d91997-04-29 20:08:16 +00001582static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001583min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001584{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001586 PyObject *emptytuple, *defaultval = NULL;
1587 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001589 const int positional = PyTuple_Size(args) > 1;
1590 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001591
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001592 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001594 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001595 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001596
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001597 emptytuple = PyTuple_New(0);
1598 if (emptytuple == NULL)
1599 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001600 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1601 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1602 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001603 Py_DECREF(emptytuple);
1604 if (!ret)
1605 return NULL;
1606
1607 if (positional && defaultval != NULL) {
1608 PyErr_Format(PyExc_TypeError,
1609 "Cannot specify a default for %s() with multiple "
1610 "positional arguments", name);
1611 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 it = PyObject_GetIter(v);
1615 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 return NULL;
1617 }
Tim Petersc3074532001-05-03 07:00:32 +00001618
Alexander Marshalove22072f2018-07-24 10:58:21 +07001619 if (keyfunc == Py_None) {
1620 keyfunc = NULL;
1621 }
1622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001623 maxitem = NULL; /* the result */
1624 maxval = NULL; /* the value associated with the result */
1625 while (( item = PyIter_Next(it) )) {
1626 /* get the value from the key function */
1627 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001628 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001629 if (val == NULL)
1630 goto Fail_it_item;
1631 }
1632 /* no key function; the value is the item */
1633 else {
1634 val = item;
1635 Py_INCREF(val);
1636 }
Tim Petersc3074532001-05-03 07:00:32 +00001637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001638 /* maximum value and item are unset; set them */
1639 if (maxval == NULL) {
1640 maxitem = item;
1641 maxval = val;
1642 }
1643 /* maximum value and item are set; update them as necessary */
1644 else {
1645 int cmp = PyObject_RichCompareBool(val, maxval, op);
1646 if (cmp < 0)
1647 goto Fail_it_item_and_val;
1648 else if (cmp > 0) {
1649 Py_DECREF(maxval);
1650 Py_DECREF(maxitem);
1651 maxval = val;
1652 maxitem = item;
1653 }
1654 else {
1655 Py_DECREF(item);
1656 Py_DECREF(val);
1657 }
1658 }
1659 }
1660 if (PyErr_Occurred())
1661 goto Fail_it;
1662 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001664 if (defaultval != NULL) {
1665 Py_INCREF(defaultval);
1666 maxitem = defaultval;
1667 } else {
1668 PyErr_Format(PyExc_ValueError,
1669 "%s() arg is an empty sequence", name);
1670 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 }
1672 else
1673 Py_DECREF(maxval);
1674 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001676
1677Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001679Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001681Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 Py_XDECREF(maxval);
1683 Py_XDECREF(maxitem);
1684 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686}
1687
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001688/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001690builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001691{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001693}
1694
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001695PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001696"min(iterable, *[, default=obj, key=func]) -> value\n\
1697min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001698\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001699With a single iterable argument, return its smallest item. The\n\
1700default keyword-only argument specifies an object to return if\n\
1701the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001702With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703
1704
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001705/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001707builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001708{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001710}
1711
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001712PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001713"max(iterable, *[, default=obj, key=func]) -> value\n\
1714max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001715\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001716With a single iterable argument, return its biggest item. The\n\
1717default keyword-only argument specifies an object to return if\n\
1718the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001719With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001720
1721
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001722/*[clinic input]
1723oct as builtin_oct
1724
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001725 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001726 /
1727
1728Return the octal representation of an integer.
1729
1730 >>> oct(342391)
1731 '0o1234567'
1732[clinic start generated code]*/
1733
Guido van Rossum79f25d91997-04-29 20:08:16 +00001734static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001735builtin_oct(PyObject *module, PyObject *number)
1736/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001737{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001738 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001739}
1740
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001741
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001742/*[clinic input]
1743ord as builtin_ord
1744
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001745 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001746 /
1747
1748Return the Unicode code point for a one-character string.
1749[clinic start generated code]*/
1750
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001752builtin_ord(PyObject *module, PyObject *c)
1753/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001754{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001755 long ord;
1756 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001757
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001758 if (PyBytes_Check(c)) {
1759 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001761 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 return PyLong_FromLong(ord);
1763 }
1764 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001765 else if (PyUnicode_Check(c)) {
1766 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001767 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001768 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001770 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001771 return PyLong_FromLong(ord);
1772 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001774 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001775 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001776 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001777 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001778 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001779 return PyLong_FromLong(ord);
1780 }
1781 }
1782 else {
1783 PyErr_Format(PyExc_TypeError,
1784 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001785 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 return NULL;
1787 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 PyErr_Format(PyExc_TypeError,
1790 "ord() expected a character, "
1791 "but string of length %zd found",
1792 size);
1793 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001794}
1795
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001796
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001797/*[clinic input]
1798pow as builtin_pow
1799
Miss Islington (bot)37bc9352019-09-21 01:22:29 -07001800 base: object
1801 exp: object
1802 mod: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001803
Miss Islington (bot)24231ca2019-09-21 13:32:07 -07001804Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001805
1806Some types, such as ints, are able to use a more efficient algorithm when
1807invoked using the three argument form.
1808[clinic start generated code]*/
1809
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001810static PyObject *
Miss Islington (bot)37bc9352019-09-21 01:22:29 -07001811builtin_pow_impl(PyObject *module, PyObject *base, PyObject *exp,
1812 PyObject *mod)
Miss Islington (bot)24231ca2019-09-21 13:32:07 -07001813/*[clinic end generated code: output=3ca1538221bbf15f input=435dbd48a12efb23]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001814{
Miss Islington (bot)37bc9352019-09-21 01:22:29 -07001815 return PyNumber_Power(base, exp, mod);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001816}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001817
1818
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001819/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001820static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001821builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001822{
INADA Naokibd584f12017-01-19 12:50:34 +01001823 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1824 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001825 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001827
INADA Naokibd584f12017-01-19 12:50:34 +01001828 if (kwnames != NULL &&
1829 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1830 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001831 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001832 }
1833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001834 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001835 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001836 if (file == NULL) {
1837 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1838 return NULL;
1839 }
1840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001841 /* sys.stdout may be None when FILE* stdout isn't connected */
1842 if (file == Py_None)
1843 Py_RETURN_NONE;
1844 }
Guido van Rossum34343512006-11-30 22:13:52 +00001845
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 if (sep == Py_None) {
1847 sep = NULL;
1848 }
1849 else if (sep && !PyUnicode_Check(sep)) {
1850 PyErr_Format(PyExc_TypeError,
1851 "sep must be None or a string, not %.200s",
1852 sep->ob_type->tp_name);
1853 return NULL;
1854 }
1855 if (end == Py_None) {
1856 end = NULL;
1857 }
1858 else if (end && !PyUnicode_Check(end)) {
1859 PyErr_Format(PyExc_TypeError,
1860 "end must be None or a string, not %.200s",
1861 end->ob_type->tp_name);
1862 return NULL;
1863 }
Guido van Rossum34343512006-11-30 22:13:52 +00001864
INADA Naokibd584f12017-01-19 12:50:34 +01001865 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 if (i > 0) {
1867 if (sep == NULL)
1868 err = PyFile_WriteString(" ", file);
1869 else
1870 err = PyFile_WriteObject(sep, file,
1871 Py_PRINT_RAW);
1872 if (err)
1873 return NULL;
1874 }
INADA Naokibd584f12017-01-19 12:50:34 +01001875 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 if (err)
1877 return NULL;
1878 }
Guido van Rossum34343512006-11-30 22:13:52 +00001879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001880 if (end == NULL)
1881 err = PyFile_WriteString("\n", file);
1882 else
1883 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1884 if (err)
1885 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001886
Georg Brandlbc3b6822012-01-13 19:41:25 +01001887 if (flush != NULL) {
1888 PyObject *tmp;
1889 int do_flush = PyObject_IsTrue(flush);
1890 if (do_flush == -1)
1891 return NULL;
1892 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001893 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001894 if (tmp == NULL)
1895 return NULL;
1896 else
1897 Py_DECREF(tmp);
1898 }
1899 }
1900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001902}
1903
1904PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001905"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001906\n\
1907Prints the values to a stream, or to sys.stdout by default.\n\
1908Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001909file: a file-like object (stream); defaults to the current sys.stdout.\n\
1910sep: string inserted between values, default a space.\n\
1911end: string appended after the last value, default a newline.\n\
1912flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001913
1914
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001915/*[clinic input]
1916input as builtin_input
1917
1918 prompt: object(c_default="NULL") = None
1919 /
1920
1921Read a string from standard input. The trailing newline is stripped.
1922
1923The prompt string, if given, is printed to standard output without a
1924trailing newline before reading input.
1925
1926If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1927On *nix systems, readline is used if available.
1928[clinic start generated code]*/
1929
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001930static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001931builtin_input_impl(PyObject *module, PyObject *prompt)
1932/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001933{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001934 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1935 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1936 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 PyObject *tmp;
1938 long fd;
1939 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001941 /* Check that stdin/out/err are intact */
1942 if (fin == NULL || fin == Py_None) {
1943 PyErr_SetString(PyExc_RuntimeError,
1944 "input(): lost sys.stdin");
1945 return NULL;
1946 }
1947 if (fout == NULL || fout == Py_None) {
1948 PyErr_SetString(PyExc_RuntimeError,
1949 "input(): lost sys.stdout");
1950 return NULL;
1951 }
1952 if (ferr == NULL || ferr == Py_None) {
1953 PyErr_SetString(PyExc_RuntimeError,
1954 "input(): lost sys.stderr");
1955 return NULL;
1956 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001957
Steve Dowerb82e17e2019-05-23 08:45:22 -07001958 if (PySys_Audit("builtins.input", "O", prompt ? prompt : Py_None) < 0) {
1959 return NULL;
1960 }
1961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001963 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001964 if (tmp == NULL)
1965 PyErr_Clear();
1966 else
1967 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 /* We should only use (GNU) readline if Python's sys.stdin and
1970 sys.stdout are the same as C's stdin and stdout, because we
1971 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001972 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001973 if (tmp == NULL) {
1974 PyErr_Clear();
1975 tty = 0;
1976 }
1977 else {
1978 fd = PyLong_AsLong(tmp);
1979 Py_DECREF(tmp);
1980 if (fd < 0 && PyErr_Occurred())
1981 return NULL;
1982 tty = fd == fileno(stdin) && isatty(fd);
1983 }
1984 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001985 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00001986 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001987 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001988 tty = 0;
1989 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001990 else {
1991 fd = PyLong_AsLong(tmp);
1992 Py_DECREF(tmp);
1993 if (fd < 0 && PyErr_Occurred())
1994 return NULL;
1995 tty = fd == fileno(stdout) && isatty(fd);
1996 }
1997 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001999 /* If we're interactive, use (GNU) readline */
2000 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002001 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02002002 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002003 char *s = NULL;
2004 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2005 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002006 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002007 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002008 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002009
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002010 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002011 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002012 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002013 if (!stdin_encoding || !stdin_errors ||
2014 !PyUnicode_Check(stdin_encoding) ||
2015 !PyUnicode_Check(stdin_errors)) {
2016 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002017 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002018 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002019 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2020 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002021 if (!stdin_encoding_str || !stdin_errors_str)
2022 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07002023 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002024 if (tmp == NULL)
2025 PyErr_Clear();
2026 else
2027 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002028 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002029 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002030 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002031 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002032 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002033 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002034 if (!stdout_encoding || !stdout_errors ||
2035 !PyUnicode_Check(stdout_encoding) ||
2036 !PyUnicode_Check(stdout_errors)) {
2037 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002038 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002039 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002040 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2041 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002042 if (!stdout_encoding_str || !stdout_errors_str)
2043 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002044 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002045 if (stringpo == NULL)
2046 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002047 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002048 stdout_encoding_str, stdout_errors_str);
2049 Py_CLEAR(stdout_encoding);
2050 Py_CLEAR(stdout_errors);
2051 Py_CLEAR(stringpo);
2052 if (po == NULL)
2053 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002054 assert(PyBytes_Check(po));
2055 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002056 }
2057 else {
2058 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002059 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002060 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002061 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002063 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002064 if (!PyErr_Occurred())
2065 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002066 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002068
2069 len = strlen(s);
2070 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002071 PyErr_SetNone(PyExc_EOFError);
2072 result = NULL;
2073 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002074 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002075 if (len > PY_SSIZE_T_MAX) {
2076 PyErr_SetString(PyExc_OverflowError,
2077 "input: input too long");
2078 result = NULL;
2079 }
2080 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002081 len--; /* strip trailing '\n' */
2082 if (len != 0 && s[len-1] == '\r')
2083 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002084 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2085 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002086 }
2087 }
2088 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002089 Py_DECREF(stdin_errors);
2090 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 PyMem_FREE(s);
Steve Dowerb82e17e2019-05-23 08:45:22 -07002092
2093 if (result != NULL) {
2094 if (PySys_Audit("builtins.input/result", "O", result) < 0) {
2095 return NULL;
2096 }
2097 }
2098
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002099 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002100
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002101 _readline_errors:
2102 Py_XDECREF(stdin_encoding);
2103 Py_XDECREF(stdout_encoding);
2104 Py_XDECREF(stdin_errors);
2105 Py_XDECREF(stdout_errors);
2106 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002107 if (tty)
2108 return NULL;
2109
2110 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002114 if (prompt != NULL) {
2115 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002116 return NULL;
2117 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002118 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 if (tmp == NULL)
2120 PyErr_Clear();
2121 else
2122 Py_DECREF(tmp);
2123 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002124}
2125
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002126
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002127/*[clinic input]
2128repr as builtin_repr
2129
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002130 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002131 /
2132
2133Return the canonical string representation of the object.
2134
2135For many object types, including most builtins, eval(repr(obj)) == obj.
2136[clinic start generated code]*/
2137
Guido van Rossum79f25d91997-04-29 20:08:16 +00002138static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002139builtin_repr(PyObject *module, PyObject *obj)
2140/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002141{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002142 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002143}
2144
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002145
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002146/*[clinic input]
2147round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002148
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002149 number: object
Serhiy Storchakad322abb2019-09-14 13:31:50 +03002150 ndigits: object = None
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002151
2152Round a number to a given precision in decimal digits.
2153
2154The return value is an integer if ndigits is omitted or None. Otherwise
2155the return value has the same type as the number. ndigits may be negative.
2156[clinic start generated code]*/
2157
2158static PyObject *
2159builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
Serhiy Storchakad322abb2019-09-14 13:31:50 +03002160/*[clinic end generated code: output=ff0d9dd176c02ede input=275678471d7aca15]*/
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002161{
2162 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 if (Py_TYPE(number)->tp_dict == NULL) {
2165 if (PyType_Ready(Py_TYPE(number)) < 0)
2166 return NULL;
2167 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002168
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002169 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002170 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002171 if (!PyErr_Occurred())
2172 PyErr_Format(PyExc_TypeError,
2173 "type %.100s doesn't define __round__ method",
2174 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002175 return NULL;
2176 }
Alex Martelliae211f92007-08-22 23:21:33 +00002177
Serhiy Storchakad322abb2019-09-14 13:31:50 +03002178 if (ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002179 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002181 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002182 Py_DECREF(round);
2183 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002184}
2185
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002186
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002187/*AC: we need to keep the kwds dict intact to easily call into the
2188 * list.sort method, which isn't currently supported in AC. So we just use
2189 * the initially generated signature with a custom implementation.
2190 */
2191/* [disabled clinic input]
2192sorted as builtin_sorted
2193
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002194 iterable as seq: object
2195 key as keyfunc: object = None
2196 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002197
2198Return a new list containing all items from the iterable in ascending order.
2199
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002200A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002201reverse flag can be set to request the result in descending order.
2202[end disabled clinic input]*/
2203
2204PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002205"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002206"--\n"
2207"\n"
2208"Return a new list containing all items from the iterable in ascending order.\n"
2209"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002210"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002211"reverse flag can be set to request the result in descending order.");
2212
2213#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002214 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002215
Raymond Hettinger64958a12003-12-17 20:43:33 +00002216static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002217builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002218{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002219 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002220
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002221 /* Keyword arguments are passed through list.sort() which will check
2222 them. */
2223 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002224 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002225
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002226 newlist = PySequence_List(seq);
2227 if (newlist == NULL)
2228 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002229
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002230 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002231 if (callable == NULL) {
2232 Py_DECREF(newlist);
2233 return NULL;
2234 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002235
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002236 assert(nargs >= 1);
Jeroen Demeyeraacc77f2019-05-29 20:31:52 +02002237 v = _PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002238 Py_DECREF(callable);
2239 if (v == NULL) {
2240 Py_DECREF(newlist);
2241 return NULL;
2242 }
2243 Py_DECREF(v);
2244 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002245}
2246
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002247
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002248/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002250builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002251{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002252 PyObject *v = NULL;
2253 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2256 return NULL;
2257 if (v == NULL) {
2258 d = PyEval_GetLocals();
Serhiy Storchaka353053d2019-09-01 14:01:05 +03002259 Py_XINCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002260 }
2261 else {
Serhiy Storchaka353053d2019-09-01 14:01:05 +03002262 if (_PyObject_LookupAttrId(v, &PyId___dict__, &d) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002263 PyErr_SetString(PyExc_TypeError,
2264 "vars() argument must have __dict__ attribute");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 }
2266 }
2267 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002268}
2269
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002270PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002271"vars([object]) -> dictionary\n\
2272\n\
2273Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002274With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002275
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002276
2277/*[clinic input]
2278sum as builtin_sum
2279
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002280 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002281 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002282 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002283
2284Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2285
2286When the iterable is empty, return the start value.
2287This function is intended specifically for use with numeric values and may
2288reject non-numeric types.
2289[clinic start generated code]*/
2290
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002291static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002292builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002293/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002294{
2295 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002297
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002298 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002299 if (iter == NULL)
2300 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002301
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002302 if (result == NULL) {
2303 result = PyLong_FromLong(0);
2304 if (result == NULL) {
2305 Py_DECREF(iter);
2306 return NULL;
2307 }
2308 } else {
2309 /* reject string values for 'start' parameter */
2310 if (PyUnicode_Check(result)) {
2311 PyErr_SetString(PyExc_TypeError,
2312 "sum() can't sum strings [use ''.join(seq) instead]");
2313 Py_DECREF(iter);
2314 return NULL;
2315 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002316 if (PyBytes_Check(result)) {
2317 PyErr_SetString(PyExc_TypeError,
2318 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002319 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002320 return NULL;
2321 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002322 if (PyByteArray_Check(result)) {
2323 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002324 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002325 Py_DECREF(iter);
2326 return NULL;
2327 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002328 Py_INCREF(result);
2329 }
Alex Martellia70b1912003-04-22 08:12:33 +00002330
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002331#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002332 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2333 Assumes all inputs are the same type. If the assumption fails, default
2334 to the more general routine.
2335 */
2336 if (PyLong_CheckExact(result)) {
2337 int overflow;
2338 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2339 /* If this already overflowed, don't even enter the loop. */
2340 if (overflow == 0) {
2341 Py_DECREF(result);
2342 result = NULL;
2343 }
2344 while(result == NULL) {
2345 item = PyIter_Next(iter);
2346 if (item == NULL) {
2347 Py_DECREF(iter);
2348 if (PyErr_Occurred())
2349 return NULL;
2350 return PyLong_FromLong(i_result);
2351 }
2352 if (PyLong_CheckExact(item)) {
2353 long b = PyLong_AsLongAndOverflow(item, &overflow);
Serhiy Storchaka29500732019-05-05 14:26:23 +03002354 if (overflow == 0 &&
2355 (i_result >= 0 ? (b <= LONG_MAX - i_result)
2356 : (b >= LONG_MIN - i_result)))
2357 {
2358 i_result += b;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002359 Py_DECREF(item);
2360 continue;
2361 }
2362 }
2363 /* Either overflowed or is not an int. Restore real objects and process normally */
2364 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002365 if (result == NULL) {
2366 Py_DECREF(item);
2367 Py_DECREF(iter);
2368 return NULL;
2369 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 temp = PyNumber_Add(result, item);
2371 Py_DECREF(result);
2372 Py_DECREF(item);
2373 result = temp;
2374 if (result == NULL) {
2375 Py_DECREF(iter);
2376 return NULL;
2377 }
2378 }
2379 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002380
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002381 if (PyFloat_CheckExact(result)) {
2382 double f_result = PyFloat_AS_DOUBLE(result);
2383 Py_DECREF(result);
2384 result = NULL;
2385 while(result == NULL) {
2386 item = PyIter_Next(iter);
2387 if (item == NULL) {
2388 Py_DECREF(iter);
2389 if (PyErr_Occurred())
2390 return NULL;
2391 return PyFloat_FromDouble(f_result);
2392 }
2393 if (PyFloat_CheckExact(item)) {
2394 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2395 f_result += PyFloat_AS_DOUBLE(item);
2396 PyFPE_END_PROTECT(f_result)
2397 Py_DECREF(item);
2398 continue;
2399 }
2400 if (PyLong_CheckExact(item)) {
2401 long value;
2402 int overflow;
2403 value = PyLong_AsLongAndOverflow(item, &overflow);
2404 if (!overflow) {
2405 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2406 f_result += (double)value;
2407 PyFPE_END_PROTECT(f_result)
2408 Py_DECREF(item);
2409 continue;
2410 }
2411 }
2412 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002413 if (result == NULL) {
2414 Py_DECREF(item);
2415 Py_DECREF(iter);
2416 return NULL;
2417 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002418 temp = PyNumber_Add(result, item);
2419 Py_DECREF(result);
2420 Py_DECREF(item);
2421 result = temp;
2422 if (result == NULL) {
2423 Py_DECREF(iter);
2424 return NULL;
2425 }
2426 }
2427 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002428#endif
2429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002430 for(;;) {
2431 item = PyIter_Next(iter);
2432 if (item == NULL) {
2433 /* error, or end-of-sequence */
2434 if (PyErr_Occurred()) {
2435 Py_DECREF(result);
2436 result = NULL;
2437 }
2438 break;
2439 }
2440 /* It's tempting to use PyNumber_InPlaceAdd instead of
2441 PyNumber_Add here, to avoid quadratic running time
2442 when doing 'sum(list_of_lists, [])'. However, this
2443 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002445 empty = []
2446 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002448 would change the value of empty. */
2449 temp = PyNumber_Add(result, item);
2450 Py_DECREF(result);
2451 Py_DECREF(item);
2452 result = temp;
2453 if (result == NULL)
2454 break;
2455 }
2456 Py_DECREF(iter);
2457 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002458}
2459
Alex Martellia70b1912003-04-22 08:12:33 +00002460
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002461/*[clinic input]
2462isinstance as builtin_isinstance
2463
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002464 obj: object
2465 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002466 /
2467
2468Return whether an object is an instance of a class or of a subclass thereof.
2469
2470A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2471check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2472or ...`` etc.
2473[clinic start generated code]*/
2474
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002475static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002476builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002477 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002478/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002479{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002480 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002481
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002482 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002483 if (retval < 0)
2484 return NULL;
2485 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002486}
2487
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002488
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002489/*[clinic input]
2490issubclass as builtin_issubclass
2491
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002492 cls: object
2493 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002494 /
2495
2496Return whether 'cls' is a derived from another class or is the same class.
2497
2498A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2499check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2500or ...`` etc.
2501[clinic start generated code]*/
2502
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002503static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002504builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002505 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002506/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002508 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002509
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002510 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 if (retval < 0)
2512 return NULL;
2513 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002514}
2515
2516
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002517typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002518 PyObject_HEAD
2519 Py_ssize_t tuplesize;
2520 PyObject *ittuple; /* tuple of iterators */
2521 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002522} zipobject;
2523
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002524static PyObject *
2525zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002526{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 zipobject *lz;
2528 Py_ssize_t i;
2529 PyObject *ittuple; /* tuple of iterators */
2530 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002531 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002532
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002533 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002534 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 /* args must be a tuple */
2537 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002538 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002540 /* obtain iterators */
2541 ittuple = PyTuple_New(tuplesize);
2542 if (ittuple == NULL)
2543 return NULL;
2544 for (i=0; i < tuplesize; ++i) {
2545 PyObject *item = PyTuple_GET_ITEM(args, i);
2546 PyObject *it = PyObject_GetIter(item);
2547 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002548 Py_DECREF(ittuple);
2549 return NULL;
2550 }
2551 PyTuple_SET_ITEM(ittuple, i, it);
2552 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002554 /* create a result holder */
2555 result = PyTuple_New(tuplesize);
2556 if (result == NULL) {
2557 Py_DECREF(ittuple);
2558 return NULL;
2559 }
2560 for (i=0 ; i < tuplesize ; i++) {
2561 Py_INCREF(Py_None);
2562 PyTuple_SET_ITEM(result, i, Py_None);
2563 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002565 /* create zipobject structure */
2566 lz = (zipobject *)type->tp_alloc(type, 0);
2567 if (lz == NULL) {
2568 Py_DECREF(ittuple);
2569 Py_DECREF(result);
2570 return NULL;
2571 }
2572 lz->ittuple = ittuple;
2573 lz->tuplesize = tuplesize;
2574 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002576 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002577}
2578
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002579static void
2580zip_dealloc(zipobject *lz)
2581{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 PyObject_GC_UnTrack(lz);
2583 Py_XDECREF(lz->ittuple);
2584 Py_XDECREF(lz->result);
2585 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002586}
2587
2588static int
2589zip_traverse(zipobject *lz, visitproc visit, void *arg)
2590{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002591 Py_VISIT(lz->ittuple);
2592 Py_VISIT(lz->result);
2593 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002594}
2595
2596static PyObject *
2597zip_next(zipobject *lz)
2598{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002599 Py_ssize_t i;
2600 Py_ssize_t tuplesize = lz->tuplesize;
2601 PyObject *result = lz->result;
2602 PyObject *it;
2603 PyObject *item;
2604 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002606 if (tuplesize == 0)
2607 return NULL;
2608 if (Py_REFCNT(result) == 1) {
2609 Py_INCREF(result);
2610 for (i=0 ; i < tuplesize ; i++) {
2611 it = PyTuple_GET_ITEM(lz->ittuple, i);
2612 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002613 if (item == NULL) {
2614 Py_DECREF(result);
2615 return NULL;
2616 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002617 olditem = PyTuple_GET_ITEM(result, i);
2618 PyTuple_SET_ITEM(result, i, item);
2619 Py_DECREF(olditem);
2620 }
2621 } else {
2622 result = PyTuple_New(tuplesize);
2623 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002624 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002625 for (i=0 ; i < tuplesize ; i++) {
2626 it = PyTuple_GET_ITEM(lz->ittuple, i);
2627 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002628 if (item == NULL) {
2629 Py_DECREF(result);
2630 return NULL;
2631 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002632 PyTuple_SET_ITEM(result, i, item);
2633 }
2634 }
2635 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002636}
Barry Warsawbd599b52000-08-03 15:45:29 +00002637
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002638static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302639zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002640{
2641 /* Just recreate the zip with the internal iterator tuple */
2642 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2643}
2644
2645static PyMethodDef zip_methods[] = {
2646 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2647 {NULL, NULL} /* sentinel */
2648};
2649
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002650PyDoc_STRVAR(zip_doc,
Miss Islington (bot)30151912019-07-19 11:29:58 -07002651"zip(*iterables) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002652\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002653Return a zip object whose .__next__() method returns a tuple where\n\
2654the i-th element comes from the i-th iterable argument. The .__next__()\n\
2655method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002656is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002657
2658PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002659 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2660 "zip", /* tp_name */
2661 sizeof(zipobject), /* tp_basicsize */
2662 0, /* tp_itemsize */
2663 /* methods */
2664 (destructor)zip_dealloc, /* tp_dealloc */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002665 0, /* tp_vectorcall_offset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002666 0, /* tp_getattr */
2667 0, /* tp_setattr */
Jeroen Demeyer530f5062019-05-31 04:13:39 +02002668 0, /* tp_as_async */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002669 0, /* tp_repr */
2670 0, /* tp_as_number */
2671 0, /* tp_as_sequence */
2672 0, /* tp_as_mapping */
2673 0, /* tp_hash */
2674 0, /* tp_call */
2675 0, /* tp_str */
2676 PyObject_GenericGetAttr, /* tp_getattro */
2677 0, /* tp_setattro */
2678 0, /* tp_as_buffer */
2679 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2680 Py_TPFLAGS_BASETYPE, /* tp_flags */
2681 zip_doc, /* tp_doc */
2682 (traverseproc)zip_traverse, /* tp_traverse */
2683 0, /* tp_clear */
2684 0, /* tp_richcompare */
2685 0, /* tp_weaklistoffset */
2686 PyObject_SelfIter, /* tp_iter */
2687 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002688 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002689 0, /* tp_members */
2690 0, /* tp_getset */
2691 0, /* tp_base */
2692 0, /* tp_dict */
2693 0, /* tp_descr_get */
2694 0, /* tp_descr_set */
2695 0, /* tp_dictoffset */
2696 0, /* tp_init */
2697 PyType_GenericAlloc, /* tp_alloc */
2698 zip_new, /* tp_new */
2699 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002700};
Barry Warsawbd599b52000-08-03 15:45:29 +00002701
2702
Guido van Rossum79f25d91997-04-29 20:08:16 +00002703static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002704 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002705 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002706 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002707 BUILTIN_ABS_METHODDEF
2708 BUILTIN_ALL_METHODDEF
2709 BUILTIN_ANY_METHODDEF
2710 BUILTIN_ASCII_METHODDEF
2711 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002712 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002713 BUILTIN_CALLABLE_METHODDEF
2714 BUILTIN_CHR_METHODDEF
2715 BUILTIN_COMPILE_METHODDEF
2716 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002717 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002718 BUILTIN_DIVMOD_METHODDEF
2719 BUILTIN_EVAL_METHODDEF
2720 BUILTIN_EXEC_METHODDEF
2721 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002722 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002723 BUILTIN_GLOBALS_METHODDEF
2724 BUILTIN_HASATTR_METHODDEF
2725 BUILTIN_HASH_METHODDEF
2726 BUILTIN_HEX_METHODDEF
2727 BUILTIN_ID_METHODDEF
2728 BUILTIN_INPUT_METHODDEF
2729 BUILTIN_ISINSTANCE_METHODDEF
2730 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002731 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002732 BUILTIN_LEN_METHODDEF
2733 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002734 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2735 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2736 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002737 BUILTIN_OCT_METHODDEF
2738 BUILTIN_ORD_METHODDEF
2739 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002740 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002741 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002742 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002743 BUILTIN_SETATTR_METHODDEF
2744 BUILTIN_SORTED_METHODDEF
2745 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002746 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2747 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002748};
2749
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002750PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002751"Built-in functions, exceptions, and other objects.\n\
2752\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002753Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002754
Martin v. Löwis1a214512008-06-11 05:26:20 +00002755static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002756 PyModuleDef_HEAD_INIT,
2757 "builtins",
2758 builtin_doc,
2759 -1, /* multiple "initialization" just copies the module dict. */
2760 builtin_methods,
2761 NULL,
2762 NULL,
2763 NULL,
2764 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002765};
2766
2767
Guido van Rossum25ce5661997-08-02 03:10:38 +00002768PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002769_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002771 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002772
Victor Stinner331a6a52019-05-27 16:39:22 +02002773 const PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
Victor Stinnerfbca9082018-08-30 00:50:45 +02002774
Benjamin Peterson42124a72012-10-30 23:41:54 -04002775 if (PyType_Ready(&PyFilter_Type) < 0 ||
2776 PyType_Ready(&PyMap_Type) < 0 ||
2777 PyType_Ready(&PyZip_Type) < 0)
2778 return NULL;
2779
Eric Snowd393c1b2017-09-14 12:18:12 -06002780 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002781 if (mod == NULL)
2782 return NULL;
2783 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002784
Tim Peters7571a0f2003-03-23 17:52:28 +00002785#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 /* "builtins" exposes a number of statically allocated objects
2787 * that, before this code was added in 2.3, never showed up in
2788 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2789 * result, programs leaking references to None and False (etc)
2790 * couldn't be diagnosed by examining sys.getobjects(0).
2791 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002792#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2793#else
2794#define ADD_TO_ALL(OBJECT) (void)0
2795#endif
2796
Tim Peters4b7625e2001-09-13 21:37:17 +00002797#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002798 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2799 return NULL; \
2800 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002801
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002802 SETBUILTIN("None", Py_None);
2803 SETBUILTIN("Ellipsis", Py_Ellipsis);
2804 SETBUILTIN("NotImplemented", Py_NotImplemented);
2805 SETBUILTIN("False", Py_False);
2806 SETBUILTIN("True", Py_True);
2807 SETBUILTIN("bool", &PyBool_Type);
2808 SETBUILTIN("memoryview", &PyMemoryView_Type);
2809 SETBUILTIN("bytearray", &PyByteArray_Type);
2810 SETBUILTIN("bytes", &PyBytes_Type);
2811 SETBUILTIN("classmethod", &PyClassMethod_Type);
2812 SETBUILTIN("complex", &PyComplex_Type);
2813 SETBUILTIN("dict", &PyDict_Type);
2814 SETBUILTIN("enumerate", &PyEnum_Type);
2815 SETBUILTIN("filter", &PyFilter_Type);
2816 SETBUILTIN("float", &PyFloat_Type);
2817 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2818 SETBUILTIN("property", &PyProperty_Type);
2819 SETBUILTIN("int", &PyLong_Type);
2820 SETBUILTIN("list", &PyList_Type);
2821 SETBUILTIN("map", &PyMap_Type);
2822 SETBUILTIN("object", &PyBaseObject_Type);
2823 SETBUILTIN("range", &PyRange_Type);
2824 SETBUILTIN("reversed", &PyReversed_Type);
2825 SETBUILTIN("set", &PySet_Type);
2826 SETBUILTIN("slice", &PySlice_Type);
2827 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2828 SETBUILTIN("str", &PyUnicode_Type);
2829 SETBUILTIN("super", &PySuper_Type);
2830 SETBUILTIN("tuple", &PyTuple_Type);
2831 SETBUILTIN("type", &PyType_Type);
2832 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002833 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002834 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002835 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002836 return NULL;
2837 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002838 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002840 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002841#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002842#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002843}