blob: f9b901f7e59fb99d647550ba24e71e0d7eec4bc2 [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"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00008
Victor Stinnerbd303c12013-11-07 23:07:29 +01009_Py_IDENTIFIER(__builtins__);
10_Py_IDENTIFIER(__dict__);
11_Py_IDENTIFIER(__prepare__);
12_Py_IDENTIFIER(__round__);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010013_Py_IDENTIFIER(__mro_entries__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010014_Py_IDENTIFIER(encoding);
15_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020016_Py_IDENTIFIER(fileno);
17_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010018_Py_IDENTIFIER(metaclass);
19_Py_IDENTIFIER(sort);
20_Py_IDENTIFIER(stdin);
21_Py_IDENTIFIER(stdout);
22_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020023
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030024#include "clinic/bltinmodule.c.h"
25
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010026static PyObject*
Victor Stinner05d68a82018-01-18 11:15:25 +010027update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010028{
Victor Stinner05d68a82018-01-18 11:15:25 +010029 Py_ssize_t i, j;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010030 PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
31 PyObject *stack[1] = {bases};
32 assert(PyTuple_Check(bases));
33
34 for (i = 0; i < nargs; i++) {
35 base = args[i];
36 if (PyType_Check(base)) {
37 if (new_bases) {
38 /* If we already have made a replacement, then we append every normal base,
39 otherwise just skip it. */
40 if (PyList_Append(new_bases, base) < 0) {
41 goto error;
42 }
43 }
44 continue;
45 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020046 if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, &meth) < 0) {
47 goto error;
48 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010049 if (!meth) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010050 if (new_bases) {
51 if (PyList_Append(new_bases, base) < 0) {
52 goto error;
53 }
54 }
55 continue;
56 }
57 new_base = _PyObject_FastCall(meth, stack, 1);
58 Py_DECREF(meth);
59 if (!new_base) {
60 goto error;
61 }
62 if (!PyTuple_Check(new_base)) {
63 PyErr_SetString(PyExc_TypeError,
64 "__mro_entries__ must return a tuple");
65 Py_DECREF(new_base);
66 goto error;
67 }
68 if (!new_bases) {
69 /* If this is a first successful replacement, create new_bases list and
70 copy previously encountered bases. */
71 if (!(new_bases = PyList_New(i))) {
72 goto error;
73 }
74 for (j = 0; j < i; j++) {
75 base = args[j];
76 PyList_SET_ITEM(new_bases, j, base);
77 Py_INCREF(base);
78 }
79 }
80 j = PyList_GET_SIZE(new_bases);
81 if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
82 goto error;
83 }
84 Py_DECREF(new_base);
85 }
86 if (!new_bases) {
87 return bases;
88 }
89 result = PyList_AsTuple(new_bases);
90 Py_DECREF(new_bases);
91 return result;
92
93error:
94 Py_XDECREF(new_bases);
95 return NULL;
96}
97
Nick Coghlanf9e227e2014-08-17 14:01:19 +100098/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +000099static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200100builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
Victor Stinner773dc6d2017-01-16 23:46:26 +0100101 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000102{
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100103 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *orig_bases;
Nick Coghlan19d24672016-12-05 16:47:55 +1000104 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +0100105 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000107 if (nargs < 2) {
108 PyErr_SetString(PyExc_TypeError,
109 "__build_class__: not enough arguments");
110 return NULL;
111 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100112 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -0500113 if (!PyFunction_Check(func)) {
114 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -0500115 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -0500116 return NULL;
117 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100118 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000119 if (!PyUnicode_Check(name)) {
120 PyErr_SetString(PyExc_TypeError,
121 "__build_class__: name is not a string");
122 return NULL;
123 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100124 orig_bases = _PyStack_AsTupleSlice(args, nargs, 2, nargs);
125 if (orig_bases == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000126 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000127
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100128 bases = update_bases(orig_bases, args + 2, nargs - 2);
129 if (bases == NULL) {
130 Py_DECREF(orig_bases);
131 return NULL;
132 }
133
Victor Stinner773dc6d2017-01-16 23:46:26 +0100134 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000135 meta = NULL;
136 mkw = NULL;
137 }
138 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +0100139 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000140 if (mkw == NULL) {
141 Py_DECREF(bases);
142 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000143 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100144
Victor Stinnerae9f1612013-11-06 22:46:51 +0100145 meta = _PyDict_GetItemId(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000146 if (meta != NULL) {
147 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100148 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 Py_DECREF(meta);
150 Py_DECREF(mkw);
151 Py_DECREF(bases);
152 return NULL;
153 }
Nick Coghlande31b192011-10-23 22:04:16 +1000154 /* metaclass is explicitly given, check if it's indeed a class */
155 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 }
157 }
158 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000159 /* if there are no bases, use type: */
160 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000161 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000162 }
163 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000164 else {
165 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
166 meta = (PyObject *) (base0->ob_type);
167 }
168 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000169 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000171
Nick Coghlande31b192011-10-23 22:04:16 +1000172 if (isclass) {
173 /* meta is really a class, so check for a more derived
174 metaclass, or possible metaclass conflicts: */
175 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
176 bases);
177 if (winner == NULL) {
178 Py_DECREF(meta);
179 Py_XDECREF(mkw);
180 Py_DECREF(bases);
181 return NULL;
182 }
183 if (winner != meta) {
184 Py_DECREF(meta);
185 meta = winner;
186 Py_INCREF(meta);
187 }
188 }
189 /* else: meta is not a class, so we cannot do the metaclass
190 calculation, so we will use the explicitly given object as it is */
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200191 if (_PyObject_LookupAttrId(meta, &PyId___prepare__, &prep) < 0) {
192 ns = NULL;
193 }
194 else if (prep == NULL) {
195 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 }
197 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200198 PyObject *pargs[2] = {name, bases};
199 ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 Py_DECREF(prep);
201 }
202 if (ns == NULL) {
203 Py_DECREF(meta);
204 Py_XDECREF(mkw);
205 Py_DECREF(bases);
206 return NULL;
207 }
Oren Milman5837d042017-09-27 17:04:37 +0300208 if (!PyMapping_Check(ns)) {
209 PyErr_Format(PyExc_TypeError,
210 "%.200s.__prepare__() must return a mapping, not %.200s",
211 isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
212 Py_TYPE(ns)->tp_name);
213 goto error;
214 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000215 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
Benjamin Petersone8e14592013-05-16 14:37:25 -0500216 NULL, 0, NULL, 0, NULL, 0, NULL,
217 PyFunction_GET_CLOSURE(func));
Nick Coghlan19d24672016-12-05 16:47:55 +1000218 if (cell != NULL) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100219 if (bases != orig_bases) {
220 if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
221 goto error;
222 }
223 }
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200224 PyObject *margs[3] = {name, bases, ns};
225 cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000226 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
227 PyObject *cell_cls = PyCell_GET(cell);
228 if (cell_cls != cls) {
Nick Coghlan19d24672016-12-05 16:47:55 +1000229 if (cell_cls == NULL) {
230 const char *msg =
231 "__class__ not set defining %.200R as %.200R. "
232 "Was __classcell__ propagated to type.__new__?";
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300233 PyErr_Format(PyExc_RuntimeError, msg, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000234 } else {
235 const char *msg =
236 "__class__ set to %.200R defining %.200R as %.200R";
237 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000238 }
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300239 Py_DECREF(cls);
240 cls = NULL;
241 goto error;
Nick Coghlan19d24672016-12-05 16:47:55 +1000242 }
243 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000245error:
246 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 Py_DECREF(ns);
248 Py_DECREF(meta);
249 Py_XDECREF(mkw);
250 Py_DECREF(bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100251 if (bases != orig_bases) {
252 Py_DECREF(orig_bases);
253 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000254 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000255}
256
257PyDoc_STRVAR(build_class_doc,
258"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
259\n\
260Internal helper function used by the class statement.");
261
262static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000263builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000265 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
266 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400267 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400268 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000269
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400270 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 kwlist, &name, &globals, &locals, &fromlist, &level))
272 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400273 return PyImport_ImportModuleLevelObject(name, globals, locals,
274 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000275}
276
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000277PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400278"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000279\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000280Import a module. Because this function is meant for use by the Python\n\
oldk461d2252018-02-02 12:20:00 +0800281interpreter and not for general use, it is better to use\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000282importlib.import_module() to programmatically import a module.\n\
283\n\
284The globals argument is only used to determine the context;\n\
285they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000286should be a list of names to emulate ``from name import ...'', or an\n\
287empty list to emulate ``import name''.\n\
288When importing a module from a package, note that __import__('A.B', ...)\n\
289returns package A when fromlist is empty, but its submodule B when\n\
oldk461d2252018-02-02 12:20:00 +0800290fromlist is not empty. The level argument is used to determine whether to\n\
291perform absolute or relative imports: 0 is absolute, while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000292is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000293
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000294
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000295/*[clinic input]
296abs as builtin_abs
297
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300298 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000299 /
300
301Return the absolute value of the argument.
302[clinic start generated code]*/
303
Guido van Rossum79f25d91997-04-29 20:08:16 +0000304static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300305builtin_abs(PyObject *module, PyObject *x)
306/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000307{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000308 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000309}
310
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000311/*[clinic input]
312all as builtin_all
313
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300314 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000315 /
316
317Return True if bool(x) is True for all values x in the iterable.
318
319If the iterable is empty, return True.
320[clinic start generated code]*/
321
Raymond Hettinger96229b12005-03-11 06:49:40 +0000322static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300323builtin_all(PyObject *module, PyObject *iterable)
324/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000325{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 PyObject *it, *item;
327 PyObject *(*iternext)(PyObject *);
328 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000329
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000330 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 if (it == NULL)
332 return NULL;
333 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000335 for (;;) {
336 item = iternext(it);
337 if (item == NULL)
338 break;
339 cmp = PyObject_IsTrue(item);
340 Py_DECREF(item);
341 if (cmp < 0) {
342 Py_DECREF(it);
343 return NULL;
344 }
345 if (cmp == 0) {
346 Py_DECREF(it);
347 Py_RETURN_FALSE;
348 }
349 }
350 Py_DECREF(it);
351 if (PyErr_Occurred()) {
352 if (PyErr_ExceptionMatches(PyExc_StopIteration))
353 PyErr_Clear();
354 else
355 return NULL;
356 }
357 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000358}
359
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000360/*[clinic input]
361any as builtin_any
362
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300363 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000364 /
365
366Return True if bool(x) is True for any x in the iterable.
367
368If the iterable is empty, return False.
369[clinic start generated code]*/
370
Raymond Hettinger96229b12005-03-11 06:49:40 +0000371static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300372builtin_any(PyObject *module, PyObject *iterable)
373/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 PyObject *it, *item;
376 PyObject *(*iternext)(PyObject *);
377 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000378
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000379 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 if (it == NULL)
381 return NULL;
382 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 for (;;) {
385 item = iternext(it);
386 if (item == NULL)
387 break;
388 cmp = PyObject_IsTrue(item);
389 Py_DECREF(item);
390 if (cmp < 0) {
391 Py_DECREF(it);
392 return NULL;
393 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400394 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 Py_DECREF(it);
396 Py_RETURN_TRUE;
397 }
398 }
399 Py_DECREF(it);
400 if (PyErr_Occurred()) {
401 if (PyErr_ExceptionMatches(PyExc_StopIteration))
402 PyErr_Clear();
403 else
404 return NULL;
405 }
406 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000407}
408
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000409/*[clinic input]
410ascii as builtin_ascii
411
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300412 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000413 /
414
415Return an ASCII-only representation of an object.
416
417As repr(), return a string containing a printable representation of an
418object, but escape the non-ASCII characters in the string returned by
419repr() using \\x, \\u or \\U escapes. This generates a string similar
420to that returned by repr() in Python 2.
421[clinic start generated code]*/
422
Georg Brandl559e5d72008-06-11 18:37:52 +0000423static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300424builtin_ascii(PyObject *module, PyObject *obj)
425/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000426{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000427 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000428}
429
Georg Brandl559e5d72008-06-11 18:37:52 +0000430
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000431/*[clinic input]
432bin as builtin_bin
433
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300434 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000435 /
436
437Return the binary representation of an integer.
438
439 >>> bin(2796202)
440 '0b1010101010101010101010'
441[clinic start generated code]*/
442
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300444builtin_bin(PyObject *module, PyObject *number)
445/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000446{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000447 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000448}
449
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000450
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000451/*[clinic input]
452callable as builtin_callable
453
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300454 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000455 /
456
457Return whether the object is callable (i.e., some kind of function).
458
459Note that classes are callable, as are instances of classes with a
460__call__() method.
461[clinic start generated code]*/
462
Antoine Pitroue71362d2010-11-27 22:00:11 +0000463static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300464builtin_callable(PyObject *module, PyObject *obj)
465/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000466{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000467 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000468}
469
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400470static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200471builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400472{
473 PyObject *hook = PySys_GetObject("breakpointhook");
474
475 if (hook == NULL) {
476 PyErr_SetString(PyExc_RuntimeError, "lost sys.breakpointhook");
477 return NULL;
478 }
479 Py_INCREF(hook);
480 PyObject *retval = _PyObject_FastCallKeywords(hook, args, nargs, keywords);
481 Py_DECREF(hook);
482 return retval;
483}
484
485PyDoc_STRVAR(breakpoint_doc,
486"breakpoint(*args, **kws)\n\
487\n\
488Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
489whatever arguments are passed.\n\
490\n\
491By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000492
Raymond Hettinger17301e92008-03-13 00:19:26 +0000493typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 PyObject_HEAD
495 PyObject *func;
496 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000497} filterobject;
498
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000499static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000500filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 PyObject *func, *seq;
503 PyObject *it;
504 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000505
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300506 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
510 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000511
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 /* Get iterator. */
513 it = PyObject_GetIter(seq);
514 if (it == NULL)
515 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000517 /* create filterobject structure */
518 lz = (filterobject *)type->tp_alloc(type, 0);
519 if (lz == NULL) {
520 Py_DECREF(it);
521 return NULL;
522 }
523 Py_INCREF(func);
524 lz->func = func;
525 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000528}
529
530static void
531filter_dealloc(filterobject *lz)
532{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 PyObject_GC_UnTrack(lz);
534 Py_XDECREF(lz->func);
535 Py_XDECREF(lz->it);
536 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000537}
538
539static int
540filter_traverse(filterobject *lz, visitproc visit, void *arg)
541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 Py_VISIT(lz->it);
543 Py_VISIT(lz->func);
544 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000545}
546
547static PyObject *
548filter_next(filterobject *lz)
549{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 PyObject *item;
551 PyObject *it = lz->it;
552 long ok;
553 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400554 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 iternext = *Py_TYPE(it)->tp_iternext;
557 for (;;) {
558 item = iternext(it);
559 if (item == NULL)
560 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000561
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400562 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 ok = PyObject_IsTrue(item);
564 } else {
565 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100566 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 if (good == NULL) {
568 Py_DECREF(item);
569 return NULL;
570 }
571 ok = PyObject_IsTrue(good);
572 Py_DECREF(good);
573 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200574 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 return item;
576 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200577 if (ok < 0)
578 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000579 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000580}
581
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000582static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530583filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000584{
585 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
586}
587
588PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
589
590static PyMethodDef filter_methods[] = {
591 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
592 {NULL, NULL} /* sentinel */
593};
594
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000595PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000596"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000597\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000598Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000599is true. If function is None, return the items that are true.");
600
601PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000602 PyVarObject_HEAD_INIT(&PyType_Type, 0)
603 "filter", /* tp_name */
604 sizeof(filterobject), /* tp_basicsize */
605 0, /* tp_itemsize */
606 /* methods */
607 (destructor)filter_dealloc, /* tp_dealloc */
608 0, /* tp_print */
609 0, /* tp_getattr */
610 0, /* tp_setattr */
611 0, /* tp_reserved */
612 0, /* tp_repr */
613 0, /* tp_as_number */
614 0, /* tp_as_sequence */
615 0, /* tp_as_mapping */
616 0, /* tp_hash */
617 0, /* tp_call */
618 0, /* tp_str */
619 PyObject_GenericGetAttr, /* tp_getattro */
620 0, /* tp_setattro */
621 0, /* tp_as_buffer */
622 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
623 Py_TPFLAGS_BASETYPE, /* tp_flags */
624 filter_doc, /* tp_doc */
625 (traverseproc)filter_traverse, /* tp_traverse */
626 0, /* tp_clear */
627 0, /* tp_richcompare */
628 0, /* tp_weaklistoffset */
629 PyObject_SelfIter, /* tp_iter */
630 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000631 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000632 0, /* tp_members */
633 0, /* tp_getset */
634 0, /* tp_base */
635 0, /* tp_dict */
636 0, /* tp_descr_get */
637 0, /* tp_descr_set */
638 0, /* tp_dictoffset */
639 0, /* tp_init */
640 PyType_GenericAlloc, /* tp_alloc */
641 filter_new, /* tp_new */
642 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000643};
644
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000645
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000646/*[clinic input]
647format as builtin_format
648
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300649 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000650 format_spec: unicode(c_default="NULL") = ''
651 /
652
653Return value.__format__(format_spec)
654
Amit Kumar2e6bb442017-05-29 06:32:26 +0530655format_spec defaults to the empty string.
656See the Format Specification Mini-Language section of help('FORMATTING') for
657details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000658[clinic start generated code]*/
659
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000660static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300661builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530662/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000663{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000664 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000665}
666
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000667/*[clinic input]
668chr as builtin_chr
669
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300670 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000671 /
672
673Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
674[clinic start generated code]*/
675
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000676static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300677builtin_chr_impl(PyObject *module, int i)
678/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000679{
680 return PyUnicode_FromOrdinal(i);
681}
Guido van Rossum09095f32000-03-10 23:00:52 +0000682
683
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200684static const char *
Martin Pantereeb896c2015-11-07 02:32:21 +0000685source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000686{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200687 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 Py_ssize_t size;
Martin Pantereeb896c2015-11-07 02:32:21 +0000689 Py_buffer view;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000690
Martin Pantereeb896c2015-11-07 02:32:21 +0000691 *cmd_copy = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 if (PyUnicode_Check(cmd)) {
693 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200694 str = PyUnicode_AsUTF8AndSize(cmd, &size);
695 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 return NULL;
697 }
Martin Pantereeb896c2015-11-07 02:32:21 +0000698 else if (PyBytes_Check(cmd)) {
699 str = PyBytes_AS_STRING(cmd);
700 size = PyBytes_GET_SIZE(cmd);
701 }
702 else if (PyByteArray_Check(cmd)) {
703 str = PyByteArray_AS_STRING(cmd);
704 size = PyByteArray_GET_SIZE(cmd);
705 }
706 else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
707 /* Copy to NUL-terminated buffer. */
708 *cmd_copy = PyBytes_FromStringAndSize(
709 (const char *)view.buf, view.len);
710 PyBuffer_Release(&view);
711 if (*cmd_copy == NULL) {
712 return NULL;
713 }
714 str = PyBytes_AS_STRING(*cmd_copy);
715 size = PyBytes_GET_SIZE(*cmd_copy);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200716 }
717 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 PyErr_Format(PyExc_TypeError,
719 "%s() arg 1 must be a %s object",
720 funcname, what);
721 return NULL;
722 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200723
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200724 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300725 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 "source code string cannot contain null bytes");
Martin Pantereeb896c2015-11-07 02:32:21 +0000727 Py_CLEAR(*cmd_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 return NULL;
729 }
730 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000731}
732
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000733/*[clinic input]
734compile as builtin_compile
735
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300736 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000737 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300738 mode: str
739 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200740 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300741 optimize: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000742
743Compile source into a code object that can be executed by exec() or eval().
744
745The source code may represent a Python module, statement or expression.
746The filename will be used for run-time error messages.
747The mode must be 'exec' to compile a module, 'single' to compile a
748single (interactive) statement, or 'eval' to compile an expression.
749The flags argument, if present, controls which future statements influence
750the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300751The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000752the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300753compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000754in addition to any features explicitly specified.
755[clinic start generated code]*/
756
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000757static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300758builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
759 const char *mode, int flags, int dont_inherit,
760 int optimize)
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200761/*[clinic end generated code: output=1fa176e33452bb63 input=0ff726f595eb9fcd]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000762{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000763 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200764 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000765 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 int is_ast;
767 PyCompilerFlags cf;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800768 int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000769 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000771 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Tim Peters6cd6a822001-08-17 22:11:27 +0000772
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000773 if (flags &
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800774 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST | PyCF_TYPE_COMMENTS))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 {
776 PyErr_SetString(PyExc_ValueError,
777 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000778 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000779 }
780 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000781
Georg Brandl8334fd92010-12-04 10:26:46 +0000782 if (optimize < -1 || optimize > 2) {
783 PyErr_SetString(PyExc_ValueError,
784 "compile(): invalid optimize value");
785 goto error;
786 }
787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (!dont_inherit) {
789 PyEval_MergeCompilerFlags(&cf);
790 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000791
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000792 if (strcmp(mode, "exec") == 0)
793 compile_mode = 0;
794 else if (strcmp(mode, "eval") == 0)
795 compile_mode = 1;
796 else if (strcmp(mode, "single") == 0)
797 compile_mode = 2;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800798 else if (strcmp(mode, "func_type") == 0) {
799 if (!(flags & PyCF_ONLY_AST)) {
800 PyErr_SetString(PyExc_ValueError,
801 "compile() mode 'func_type' requires flag PyCF_ONLY_AST");
802 goto error;
803 }
804 compile_mode = 3;
805 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000806 else {
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800807 const char *msg;
808 if (flags & PyCF_ONLY_AST)
809 msg = "compile() mode must be 'exec', 'eval', 'single' or 'func_type'";
810 else
811 msg = "compile() mode must be 'exec', 'eval' or 'single'";
812 PyErr_SetString(PyExc_ValueError, msg);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000813 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000815
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000816 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000817 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000818 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000820 if (flags & PyCF_ONLY_AST) {
821 Py_INCREF(source);
822 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 }
824 else {
825 PyArena *arena;
826 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000827
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000828 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200829 if (arena == NULL)
830 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000831 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000832 if (mod == NULL) {
833 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000834 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500836 if (!PyAST_Validate(mod)) {
837 PyArena_Free(arena);
838 goto error;
839 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200840 result = (PyObject*)PyAST_CompileObject(mod, filename,
841 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000842 PyArena_Free(arena);
843 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000844 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000845 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000846
Martin Panter61d6e4a2015-11-07 02:56:11 +0000847 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000848 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000849 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000850
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000851 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000852 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000853 goto finally;
854
855error:
856 result = NULL;
857finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200858 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000859 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000860}
861
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000862/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000864builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000865{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
869 return NULL;
870 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000871}
872
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000873PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000874"dir([object]) -> list of strings\n"
875"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000876"If called without an argument, return the names in the current scope.\n"
877"Else, return an alphabetized list of names comprising (some of) the attributes\n"
878"of the given object, and of attributes reachable from it.\n"
879"If the object supplies a method named __dir__, it will be used; otherwise\n"
880"the default dir() logic is used and returns:\n"
881" for a module object: the module's attributes.\n"
882" for a class object: its attributes, and recursively the attributes\n"
883" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000884" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000885" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000886
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000887/*[clinic input]
888divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000889
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300890 x: object
891 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000892 /
893
Zachary Ware7f227d92016-04-28 14:39:50 -0500894Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000895[clinic start generated code]*/
896
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000897static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300898builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
899/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000900{
901 return PyNumber_Divmod(x, y);
902}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000903
904
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000905/*[clinic input]
906eval as builtin_eval
907
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300908 source: object
909 globals: object = None
910 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000911 /
912
913Evaluate the given source in the context of globals and locals.
914
915The source may be a string representing a Python expression
916or a code object as returned by compile().
917The globals must be a dictionary and locals can be any mapping,
918defaulting to the current globals and locals.
919If only globals is given, locals defaults to it.
920[clinic start generated code]*/
921
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000922static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300923builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400924 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300925/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000926{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000927 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200928 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000931 if (locals != Py_None && !PyMapping_Check(locals)) {
932 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
933 return NULL;
934 }
935 if (globals != Py_None && !PyDict_Check(globals)) {
936 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
937 "globals must be a real dict; try eval(expr, {}, mapping)"
938 : "globals must be a dict");
939 return NULL;
940 }
941 if (globals == Py_None) {
942 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100943 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100945 if (locals == NULL)
946 return NULL;
947 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 }
949 else if (locals == Py_None)
950 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 if (globals == NULL || locals == NULL) {
953 PyErr_SetString(PyExc_TypeError,
954 "eval must be given globals and locals "
955 "when called without a frame");
956 return NULL;
957 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000958
Victor Stinnerb44562b2013-11-06 19:03:11 +0100959 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
960 if (_PyDict_SetItemId(globals, &PyId___builtins__,
961 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 return NULL;
963 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000964
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000965 if (PyCode_Check(source)) {
966 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 PyErr_SetString(PyExc_TypeError,
968 "code object passed to eval() may not contain free variables");
969 return NULL;
970 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000971 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Martin Panter61d6e4a2015-11-07 02:56:11 +0000975 str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 if (str == NULL)
977 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 while (*str == ' ' || *str == '\t')
980 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 (void)PyEval_MergeCompilerFlags(&cf);
983 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000984 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000986}
987
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000988/*[clinic input]
989exec as builtin_exec
990
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300991 source: object
992 globals: object = None
993 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000994 /
995
996Execute the given source in the context of globals and locals.
997
998The source may be a string representing one or more Python statements
999or a code object as returned by compile().
1000The globals must be a dictionary and locals can be any mapping,
1001defaulting to the current globals and locals.
1002If only globals is given, locals defaults to it.
1003[clinic start generated code]*/
1004
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001005static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001006builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -04001007 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001008/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +00001009{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +00001011
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 if (globals == Py_None) {
1013 globals = PyEval_GetGlobals();
1014 if (locals == Py_None) {
1015 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01001016 if (locals == NULL)
1017 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 }
1019 if (!globals || !locals) {
1020 PyErr_SetString(PyExc_SystemError,
1021 "globals and locals cannot be NULL");
1022 return NULL;
1023 }
1024 }
1025 else if (locals == Py_None)
1026 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001029 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 globals->ob_type->tp_name);
1031 return NULL;
1032 }
1033 if (!PyMapping_Check(locals)) {
1034 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001035 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 locals->ob_type->tp_name);
1037 return NULL;
1038 }
Victor Stinnerb44562b2013-11-06 19:03:11 +01001039 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
1040 if (_PyDict_SetItemId(globals, &PyId___builtins__,
1041 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001042 return NULL;
1043 }
1044
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001045 if (PyCode_Check(source)) {
1046 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 PyErr_SetString(PyExc_TypeError,
1048 "code object passed to exec() may not "
1049 "contain free variables");
1050 return NULL;
1051 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001052 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 }
1054 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001055 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001056 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 PyCompilerFlags cf;
1058 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001059 str = source_as_string(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001060 "string, bytes or code", &cf,
1061 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 if (str == NULL)
1063 return NULL;
1064 if (PyEval_MergeCompilerFlags(&cf))
1065 v = PyRun_StringFlags(str, Py_file_input, globals,
1066 locals, &cf);
1067 else
1068 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001069 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 }
1071 if (v == NULL)
1072 return NULL;
1073 Py_DECREF(v);
1074 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001075}
1076
Georg Brandl7cae87c2006-09-06 06:51:57 +00001077
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001078/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001079static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001080builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001081{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001082 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001083
Serhiy Storchaka79342662019-01-12 08:25:41 +02001084 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001085 return NULL;
1086
Serhiy Storchaka79342662019-01-12 08:25:41 +02001087 v = args[0];
1088 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 if (!PyUnicode_Check(name)) {
1090 PyErr_SetString(PyExc_TypeError,
1091 "getattr(): attribute name must be string");
1092 return NULL;
1093 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001094 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001095 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001096 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001097 Py_INCREF(dflt);
1098 return dflt;
1099 }
1100 }
1101 else {
1102 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 }
1104 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001105}
1106
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001107PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001108"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001109\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001110Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1111When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001112exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001113
1114
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001115/*[clinic input]
1116globals as builtin_globals
1117
1118Return the dictionary containing the current scope's global variables.
1119
1120NOTE: Updates to this dictionary *will* affect name lookups in the current
1121global scope and vice-versa.
1122[clinic start generated code]*/
1123
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001124static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001125builtin_globals_impl(PyObject *module)
1126/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001127{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001128 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001129
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001130 d = PyEval_GetGlobals();
1131 Py_XINCREF(d);
1132 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001133}
1134
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001135
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001136/*[clinic input]
1137hasattr as builtin_hasattr
1138
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001139 obj: object
1140 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001141 /
1142
1143Return whether the object has an attribute with the given name.
1144
1145This is done by calling getattr(obj, name) and catching AttributeError.
1146[clinic start generated code]*/
1147
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001148static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001149builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1150/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001151{
1152 PyObject *v;
1153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 if (!PyUnicode_Check(name)) {
1155 PyErr_SetString(PyExc_TypeError,
1156 "hasattr(): attribute name must be string");
1157 return NULL;
1158 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001159 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001160 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001162 if (v == NULL) {
1163 Py_RETURN_FALSE;
1164 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001165 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001166 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001167}
1168
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001169
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001170/* AC: gdb's integration with CPython relies on builtin_id having
1171 * the *exact* parameter names of "self" and "v", so we ensure we
1172 * preserve those name rather than using the AC defaults.
1173 */
1174/*[clinic input]
1175id as builtin_id
1176
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001177 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001178 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001179 /
1180
1181Return the identity of an object.
1182
1183This is guaranteed to be unique among simultaneously existing objects.
1184(CPython uses the object's memory address.)
1185[clinic start generated code]*/
1186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001188builtin_id(PyModuleDef *self, PyObject *v)
1189/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001192}
1193
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001194
Raymond Hettingera6c60372008-03-13 01:26:19 +00001195/* map object ************************************************************/
1196
1197typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 PyObject_HEAD
1199 PyObject *iters;
1200 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001201} mapobject;
1202
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001204map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001205{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001206 PyObject *it, *iters, *func;
1207 mapobject *lz;
1208 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001209
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001210 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001211 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 numargs = PyTuple_Size(args);
1214 if (numargs < 2) {
1215 PyErr_SetString(PyExc_TypeError,
1216 "map() must have at least two arguments.");
1217 return NULL;
1218 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 iters = PyTuple_New(numargs-1);
1221 if (iters == NULL)
1222 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001223
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 for (i=1 ; i<numargs ; i++) {
1225 /* Get iterator. */
1226 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1227 if (it == NULL) {
1228 Py_DECREF(iters);
1229 return NULL;
1230 }
1231 PyTuple_SET_ITEM(iters, i-1, it);
1232 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001233
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001234 /* create mapobject structure */
1235 lz = (mapobject *)type->tp_alloc(type, 0);
1236 if (lz == NULL) {
1237 Py_DECREF(iters);
1238 return NULL;
1239 }
1240 lz->iters = iters;
1241 func = PyTuple_GET_ITEM(args, 0);
1242 Py_INCREF(func);
1243 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001246}
1247
1248static void
1249map_dealloc(mapobject *lz)
1250{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 PyObject_GC_UnTrack(lz);
1252 Py_XDECREF(lz->iters);
1253 Py_XDECREF(lz->func);
1254 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001255}
1256
1257static int
1258map_traverse(mapobject *lz, visitproc visit, void *arg)
1259{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001260 Py_VISIT(lz->iters);
1261 Py_VISIT(lz->func);
1262 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001263}
1264
1265static PyObject *
1266map_next(mapobject *lz)
1267{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001268 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001269 PyObject **stack;
1270 Py_ssize_t niters, nargs, i;
1271 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001272
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001273 niters = PyTuple_GET_SIZE(lz->iters);
1274 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1275 stack = small_stack;
1276 }
1277 else {
1278 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1279 if (stack == NULL) {
1280 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001281 return NULL;
1282 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001284
1285 nargs = 0;
1286 for (i=0; i < niters; i++) {
1287 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1288 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1289 if (val == NULL) {
1290 goto exit;
1291 }
1292 stack[i] = val;
1293 nargs++;
1294 }
1295
1296 result = _PyObject_FastCall(lz->func, stack, nargs);
1297
1298exit:
1299 for (i=0; i < nargs; i++) {
1300 Py_DECREF(stack[i]);
1301 }
1302 if (stack != small_stack) {
1303 PyMem_Free(stack);
1304 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001306}
1307
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001308static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301309map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001310{
1311 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1312 PyObject *args = PyTuple_New(numargs+1);
1313 Py_ssize_t i;
1314 if (args == NULL)
1315 return NULL;
1316 Py_INCREF(lz->func);
1317 PyTuple_SET_ITEM(args, 0, lz->func);
1318 for (i = 0; i<numargs; i++){
1319 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1320 Py_INCREF(it);
1321 PyTuple_SET_ITEM(args, i+1, it);
1322 }
1323
1324 return Py_BuildValue("ON", Py_TYPE(lz), args);
1325}
1326
1327static PyMethodDef map_methods[] = {
1328 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1329 {NULL, NULL} /* sentinel */
1330};
1331
1332
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001333PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001334"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001335\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001336Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001338
Raymond Hettingera6c60372008-03-13 01:26:19 +00001339PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001340 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1341 "map", /* tp_name */
1342 sizeof(mapobject), /* tp_basicsize */
1343 0, /* tp_itemsize */
1344 /* methods */
1345 (destructor)map_dealloc, /* tp_dealloc */
1346 0, /* tp_print */
1347 0, /* tp_getattr */
1348 0, /* tp_setattr */
1349 0, /* tp_reserved */
1350 0, /* tp_repr */
1351 0, /* tp_as_number */
1352 0, /* tp_as_sequence */
1353 0, /* tp_as_mapping */
1354 0, /* tp_hash */
1355 0, /* tp_call */
1356 0, /* tp_str */
1357 PyObject_GenericGetAttr, /* tp_getattro */
1358 0, /* tp_setattro */
1359 0, /* tp_as_buffer */
1360 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1361 Py_TPFLAGS_BASETYPE, /* tp_flags */
1362 map_doc, /* tp_doc */
1363 (traverseproc)map_traverse, /* tp_traverse */
1364 0, /* tp_clear */
1365 0, /* tp_richcompare */
1366 0, /* tp_weaklistoffset */
1367 PyObject_SelfIter, /* tp_iter */
1368 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001369 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001370 0, /* tp_members */
1371 0, /* tp_getset */
1372 0, /* tp_base */
1373 0, /* tp_dict */
1374 0, /* tp_descr_get */
1375 0, /* tp_descr_set */
1376 0, /* tp_dictoffset */
1377 0, /* tp_init */
1378 PyType_GenericAlloc, /* tp_alloc */
1379 map_new, /* tp_new */
1380 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001381};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001382
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001383
1384/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001385static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001386builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001387{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001388 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001389
Serhiy Storchaka79342662019-01-12 08:25:41 +02001390 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001391 return NULL;
1392
Serhiy Storchaka79342662019-01-12 08:25:41 +02001393 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 if (!PyIter_Check(it)) {
1395 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001396 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001397 it->ob_type->tp_name);
1398 return NULL;
1399 }
1400
1401 res = (*it->ob_type->tp_iternext)(it);
1402 if (res != NULL) {
1403 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001404 } else if (nargs > 1) {
1405 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001406 if (PyErr_Occurred()) {
1407 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1408 return NULL;
1409 PyErr_Clear();
1410 }
1411 Py_INCREF(def);
1412 return def;
1413 } else if (PyErr_Occurred()) {
1414 return NULL;
1415 } else {
1416 PyErr_SetNone(PyExc_StopIteration);
1417 return NULL;
1418 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001419}
1420
1421PyDoc_STRVAR(next_doc,
1422"next(iterator[, default])\n\
1423\n\
1424Return the next item from the iterator. If default is given and the iterator\n\
1425is exhausted, it is returned instead of raising StopIteration.");
1426
1427
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001428/*[clinic input]
1429setattr as builtin_setattr
1430
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001431 obj: object
1432 name: object
1433 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001434 /
1435
1436Sets the named attribute on the given object to the specified value.
1437
1438setattr(x, 'y', v) is equivalent to ``x.y = v''
1439[clinic start generated code]*/
1440
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001441static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001442builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001443 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001444/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001445{
1446 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001448 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001449}
1450
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001451
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001452/*[clinic input]
1453delattr as builtin_delattr
1454
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001455 obj: object
1456 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001457 /
1458
1459Deletes the named attribute from the given object.
1460
1461delattr(x, 'y') is equivalent to ``del x.y''
1462[clinic start generated code]*/
1463
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001464static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001465builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1466/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001467{
1468 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001470 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001471}
1472
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001473
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001474/*[clinic input]
1475hash as builtin_hash
1476
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001477 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001478 /
1479
1480Return the hash value for the given object.
1481
1482Two objects that compare equal must also have the same hash value, but the
1483reverse is not necessarily true.
1484[clinic start generated code]*/
1485
Guido van Rossum79f25d91997-04-29 20:08:16 +00001486static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001487builtin_hash(PyObject *module, PyObject *obj)
1488/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001489{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001490 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001491
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001492 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 if (x == -1)
1494 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001495 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001496}
1497
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001498
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001499/*[clinic input]
1500hex as builtin_hex
1501
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001502 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001503 /
1504
1505Return the hexadecimal representation of an integer.
1506
1507 >>> hex(12648430)
1508 '0xc0ffee'
1509[clinic start generated code]*/
1510
Guido van Rossum79f25d91997-04-29 20:08:16 +00001511static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001512builtin_hex(PyObject *module, PyObject *number)
1513/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001514{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001515 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001516}
1517
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001518
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001519/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001520static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001521builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001522{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001523 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001524
Serhiy Storchaka79342662019-01-12 08:25:41 +02001525 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001526 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001527 v = args[0];
1528 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 return PyObject_GetIter(v);
1530 if (!PyCallable_Check(v)) {
1531 PyErr_SetString(PyExc_TypeError,
1532 "iter(v, w): v must be callable");
1533 return NULL;
1534 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001535 PyObject *sentinel = args[1];
1536 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001537}
1538
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001539PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001540"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001541iter(callable, sentinel) -> iterator\n\
1542\n\
1543Get an iterator from an object. In the first form, the argument must\n\
1544supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001545In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001546
1547
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001548/*[clinic input]
1549len as builtin_len
1550
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001551 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001552 /
1553
1554Return the number of items in a container.
1555[clinic start generated code]*/
1556
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001557static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001558builtin_len(PyObject *module, PyObject *obj)
1559/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001561 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001562
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001563 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001564 if (res < 0) {
1565 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001566 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001567 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001569}
1570
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001571
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001572/*[clinic input]
1573locals as builtin_locals
1574
1575Return a dictionary containing the current scope's local variables.
1576
1577NOTE: Whether or not updates to this dictionary will affect name lookups in
1578the local scope and vice-versa is *implementation dependent* and not
1579covered by any backwards compatibility guarantees.
1580[clinic start generated code]*/
1581
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001582static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001583builtin_locals_impl(PyObject *module)
1584/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001585{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001586 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001587
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 d = PyEval_GetLocals();
1589 Py_XINCREF(d);
1590 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001591}
1592
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001593
Guido van Rossum79f25d91997-04-29 20:08:16 +00001594static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001595min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001596{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001597 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001598 PyObject *emptytuple, *defaultval = NULL;
1599 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001601 const int positional = PyTuple_Size(args) > 1;
1602 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001603
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001604 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001606 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001608
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001609 emptytuple = PyTuple_New(0);
1610 if (emptytuple == NULL)
1611 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001612 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1613 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1614 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001615 Py_DECREF(emptytuple);
1616 if (!ret)
1617 return NULL;
1618
1619 if (positional && defaultval != NULL) {
1620 PyErr_Format(PyExc_TypeError,
1621 "Cannot specify a default for %s() with multiple "
1622 "positional arguments", name);
1623 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001625
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 it = PyObject_GetIter(v);
1627 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 return NULL;
1629 }
Tim Petersc3074532001-05-03 07:00:32 +00001630
Alexander Marshalove22072f2018-07-24 10:58:21 +07001631 if (keyfunc == Py_None) {
1632 keyfunc = NULL;
1633 }
1634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 maxitem = NULL; /* the result */
1636 maxval = NULL; /* the value associated with the result */
1637 while (( item = PyIter_Next(it) )) {
1638 /* get the value from the key function */
1639 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001640 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001641 if (val == NULL)
1642 goto Fail_it_item;
1643 }
1644 /* no key function; the value is the item */
1645 else {
1646 val = item;
1647 Py_INCREF(val);
1648 }
Tim Petersc3074532001-05-03 07:00:32 +00001649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001650 /* maximum value and item are unset; set them */
1651 if (maxval == NULL) {
1652 maxitem = item;
1653 maxval = val;
1654 }
1655 /* maximum value and item are set; update them as necessary */
1656 else {
1657 int cmp = PyObject_RichCompareBool(val, maxval, op);
1658 if (cmp < 0)
1659 goto Fail_it_item_and_val;
1660 else if (cmp > 0) {
1661 Py_DECREF(maxval);
1662 Py_DECREF(maxitem);
1663 maxval = val;
1664 maxitem = item;
1665 }
1666 else {
1667 Py_DECREF(item);
1668 Py_DECREF(val);
1669 }
1670 }
1671 }
1672 if (PyErr_Occurred())
1673 goto Fail_it;
1674 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001676 if (defaultval != NULL) {
1677 Py_INCREF(defaultval);
1678 maxitem = defaultval;
1679 } else {
1680 PyErr_Format(PyExc_ValueError,
1681 "%s() arg is an empty sequence", name);
1682 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 }
1684 else
1685 Py_DECREF(maxval);
1686 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001688
1689Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001690 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001691Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001693Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 Py_XDECREF(maxval);
1695 Py_XDECREF(maxitem);
1696 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001698}
1699
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001700/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001702builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001703{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001704 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001705}
1706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001707PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001708"min(iterable, *[, default=obj, key=func]) -> value\n\
1709min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001710\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001711With a single iterable argument, return its smallest item. The\n\
1712default keyword-only argument specifies an object to return if\n\
1713the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001714With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001715
1716
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001717/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001718static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001719builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001720{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001721 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001722}
1723
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001724PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001725"max(iterable, *[, default=obj, key=func]) -> value\n\
1726max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001727\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001728With a single iterable argument, return its biggest item. The\n\
1729default keyword-only argument specifies an object to return if\n\
1730the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001731With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001732
1733
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001734/*[clinic input]
1735oct as builtin_oct
1736
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001737 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001738 /
1739
1740Return the octal representation of an integer.
1741
1742 >>> oct(342391)
1743 '0o1234567'
1744[clinic start generated code]*/
1745
Guido van Rossum79f25d91997-04-29 20:08:16 +00001746static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001747builtin_oct(PyObject *module, PyObject *number)
1748/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001749{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001750 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001751}
1752
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001753
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001754/*[clinic input]
1755ord as builtin_ord
1756
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001757 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001758 /
1759
1760Return the Unicode code point for a one-character string.
1761[clinic start generated code]*/
1762
Guido van Rossum79f25d91997-04-29 20:08:16 +00001763static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001764builtin_ord(PyObject *module, PyObject *c)
1765/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001766{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 long ord;
1768 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001769
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001770 if (PyBytes_Check(c)) {
1771 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001773 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 return PyLong_FromLong(ord);
1775 }
1776 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001777 else if (PyUnicode_Check(c)) {
1778 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001779 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001780 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001781 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001782 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001783 return PyLong_FromLong(ord);
1784 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001785 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001786 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001787 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001788 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001790 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001791 return PyLong_FromLong(ord);
1792 }
1793 }
1794 else {
1795 PyErr_Format(PyExc_TypeError,
1796 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001797 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001798 return NULL;
1799 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001800
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 PyErr_Format(PyExc_TypeError,
1802 "ord() expected a character, "
1803 "but string of length %zd found",
1804 size);
1805 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001806}
1807
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001808
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001809/*[clinic input]
1810pow as builtin_pow
1811
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001812 x: object
1813 y: object
1814 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001815 /
1816
1817Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1818
1819Some types, such as ints, are able to use a more efficient algorithm when
1820invoked using the three argument form.
1821[clinic start generated code]*/
1822
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001823static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001824builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1825/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001826{
1827 return PyNumber_Power(x, y, z);
1828}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001829
1830
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001831/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001832static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001833builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001834{
INADA Naokibd584f12017-01-19 12:50:34 +01001835 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1836 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001837 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001838 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001839
INADA Naokibd584f12017-01-19 12:50:34 +01001840 if (kwnames != NULL &&
1841 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1842 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001843 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001844 }
1845
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001847 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001848 if (file == NULL) {
1849 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1850 return NULL;
1851 }
1852
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001853 /* sys.stdout may be None when FILE* stdout isn't connected */
1854 if (file == Py_None)
1855 Py_RETURN_NONE;
1856 }
Guido van Rossum34343512006-11-30 22:13:52 +00001857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 if (sep == Py_None) {
1859 sep = NULL;
1860 }
1861 else if (sep && !PyUnicode_Check(sep)) {
1862 PyErr_Format(PyExc_TypeError,
1863 "sep must be None or a string, not %.200s",
1864 sep->ob_type->tp_name);
1865 return NULL;
1866 }
1867 if (end == Py_None) {
1868 end = NULL;
1869 }
1870 else if (end && !PyUnicode_Check(end)) {
1871 PyErr_Format(PyExc_TypeError,
1872 "end must be None or a string, not %.200s",
1873 end->ob_type->tp_name);
1874 return NULL;
1875 }
Guido van Rossum34343512006-11-30 22:13:52 +00001876
INADA Naokibd584f12017-01-19 12:50:34 +01001877 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 if (i > 0) {
1879 if (sep == NULL)
1880 err = PyFile_WriteString(" ", file);
1881 else
1882 err = PyFile_WriteObject(sep, file,
1883 Py_PRINT_RAW);
1884 if (err)
1885 return NULL;
1886 }
INADA Naokibd584f12017-01-19 12:50:34 +01001887 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001888 if (err)
1889 return NULL;
1890 }
Guido van Rossum34343512006-11-30 22:13:52 +00001891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001892 if (end == NULL)
1893 err = PyFile_WriteString("\n", file);
1894 else
1895 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1896 if (err)
1897 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001898
Georg Brandlbc3b6822012-01-13 19:41:25 +01001899 if (flush != NULL) {
1900 PyObject *tmp;
1901 int do_flush = PyObject_IsTrue(flush);
1902 if (do_flush == -1)
1903 return NULL;
1904 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001905 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001906 if (tmp == NULL)
1907 return NULL;
1908 else
1909 Py_DECREF(tmp);
1910 }
1911 }
1912
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001914}
1915
1916PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001917"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001918\n\
1919Prints the values to a stream, or to sys.stdout by default.\n\
1920Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001921file: a file-like object (stream); defaults to the current sys.stdout.\n\
1922sep: string inserted between values, default a space.\n\
1923end: string appended after the last value, default a newline.\n\
1924flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001925
1926
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001927/*[clinic input]
1928input as builtin_input
1929
1930 prompt: object(c_default="NULL") = None
1931 /
1932
1933Read a string from standard input. The trailing newline is stripped.
1934
1935The prompt string, if given, is printed to standard output without a
1936trailing newline before reading input.
1937
1938If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1939On *nix systems, readline is used if available.
1940[clinic start generated code]*/
1941
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001942static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001943builtin_input_impl(PyObject *module, PyObject *prompt)
1944/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001945{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001946 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1947 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1948 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 PyObject *tmp;
1950 long fd;
1951 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001952
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001953 /* Check that stdin/out/err are intact */
1954 if (fin == NULL || fin == Py_None) {
1955 PyErr_SetString(PyExc_RuntimeError,
1956 "input(): lost sys.stdin");
1957 return NULL;
1958 }
1959 if (fout == NULL || fout == Py_None) {
1960 PyErr_SetString(PyExc_RuntimeError,
1961 "input(): lost sys.stdout");
1962 return NULL;
1963 }
1964 if (ferr == NULL || ferr == Py_None) {
1965 PyErr_SetString(PyExc_RuntimeError,
1966 "input(): lost sys.stderr");
1967 return NULL;
1968 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001970 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001971 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 if (tmp == NULL)
1973 PyErr_Clear();
1974 else
1975 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 /* We should only use (GNU) readline if Python's sys.stdin and
1978 sys.stdout are the same as C's stdin and stdout, because we
1979 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001980 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001981 if (tmp == NULL) {
1982 PyErr_Clear();
1983 tty = 0;
1984 }
1985 else {
1986 fd = PyLong_AsLong(tmp);
1987 Py_DECREF(tmp);
1988 if (fd < 0 && PyErr_Occurred())
1989 return NULL;
1990 tty = fd == fileno(stdin) && isatty(fd);
1991 }
1992 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001993 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00001994 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001995 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001996 tty = 0;
1997 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 else {
1999 fd = PyLong_AsLong(tmp);
2000 Py_DECREF(tmp);
2001 if (fd < 0 && PyErr_Occurred())
2002 return NULL;
2003 tty = fd == fileno(stdout) && isatty(fd);
2004 }
2005 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002007 /* If we're interactive, use (GNU) readline */
2008 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002009 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02002010 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002011 char *s = NULL;
2012 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2013 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002014 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002016 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002017
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002018 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002019 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002020 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002021 if (!stdin_encoding || !stdin_errors ||
2022 !PyUnicode_Check(stdin_encoding) ||
2023 !PyUnicode_Check(stdin_errors)) {
2024 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002025 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002026 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002027 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2028 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002029 if (!stdin_encoding_str || !stdin_errors_str)
2030 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07002031 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 if (tmp == NULL)
2033 PyErr_Clear();
2034 else
2035 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002036 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002037 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002038 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002040 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002041 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002042 if (!stdout_encoding || !stdout_errors ||
2043 !PyUnicode_Check(stdout_encoding) ||
2044 !PyUnicode_Check(stdout_errors)) {
2045 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002046 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002047 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002048 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2049 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002050 if (!stdout_encoding_str || !stdout_errors_str)
2051 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002052 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002053 if (stringpo == NULL)
2054 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002055 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002056 stdout_encoding_str, stdout_errors_str);
2057 Py_CLEAR(stdout_encoding);
2058 Py_CLEAR(stdout_errors);
2059 Py_CLEAR(stringpo);
2060 if (po == NULL)
2061 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002062 assert(PyBytes_Check(po));
2063 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002064 }
2065 else {
2066 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002067 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002068 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002069 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002070 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002071 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002072 if (!PyErr_Occurred())
2073 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002074 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002075 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002076
2077 len = strlen(s);
2078 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002079 PyErr_SetNone(PyExc_EOFError);
2080 result = NULL;
2081 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002082 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002083 if (len > PY_SSIZE_T_MAX) {
2084 PyErr_SetString(PyExc_OverflowError,
2085 "input: input too long");
2086 result = NULL;
2087 }
2088 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002089 len--; /* strip trailing '\n' */
2090 if (len != 0 && s[len-1] == '\r')
2091 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002092 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2093 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 }
2095 }
2096 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002097 Py_DECREF(stdin_errors);
2098 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002099 PyMem_FREE(s);
2100 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002101
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002102 _readline_errors:
2103 Py_XDECREF(stdin_encoding);
2104 Py_XDECREF(stdout_encoding);
2105 Py_XDECREF(stdin_errors);
2106 Py_XDECREF(stdout_errors);
2107 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002108 if (tty)
2109 return NULL;
2110
2111 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002112 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002113
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002114 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002115 if (prompt != NULL) {
2116 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002117 return NULL;
2118 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002119 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002120 if (tmp == NULL)
2121 PyErr_Clear();
2122 else
2123 Py_DECREF(tmp);
2124 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002125}
2126
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002127
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002128/*[clinic input]
2129repr as builtin_repr
2130
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002131 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002132 /
2133
2134Return the canonical string representation of the object.
2135
2136For many object types, including most builtins, eval(repr(obj)) == obj.
2137[clinic start generated code]*/
2138
Guido van Rossum79f25d91997-04-29 20:08:16 +00002139static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002140builtin_repr(PyObject *module, PyObject *obj)
2141/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002142{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002143 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002144}
2145
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002146
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002147/*[clinic input]
2148round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002149
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002150 number: object
2151 ndigits: object = NULL
2152
2153Round a number to a given precision in decimal digits.
2154
2155The return value is an integer if ndigits is omitted or None. Otherwise
2156the return value has the same type as the number. ndigits may be negative.
2157[clinic start generated code]*/
2158
2159static PyObject *
2160builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
2161/*[clinic end generated code: output=ff0d9dd176c02ede input=854bc3a217530c3d]*/
2162{
2163 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002164
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002165 if (Py_TYPE(number)->tp_dict == NULL) {
2166 if (PyType_Ready(Py_TYPE(number)) < 0)
2167 return NULL;
2168 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002169
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002170 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002172 if (!PyErr_Occurred())
2173 PyErr_Format(PyExc_TypeError,
2174 "type %.100s doesn't define __round__ method",
2175 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 return NULL;
2177 }
Alex Martelliae211f92007-08-22 23:21:33 +00002178
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002179 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002180 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002181 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002182 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002183 Py_DECREF(round);
2184 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002185}
2186
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002187
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002188/*AC: we need to keep the kwds dict intact to easily call into the
2189 * list.sort method, which isn't currently supported in AC. So we just use
2190 * the initially generated signature with a custom implementation.
2191 */
2192/* [disabled clinic input]
2193sorted as builtin_sorted
2194
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002195 iterable as seq: object
2196 key as keyfunc: object = None
2197 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002198
2199Return a new list containing all items from the iterable in ascending order.
2200
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002201A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002202reverse flag can be set to request the result in descending order.
2203[end disabled clinic input]*/
2204
2205PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002206"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002207"--\n"
2208"\n"
2209"Return a new list containing all items from the iterable in ascending order.\n"
2210"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002211"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002212"reverse flag can be set to request the result in descending order.");
2213
2214#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002215 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002216
Raymond Hettinger64958a12003-12-17 20:43:33 +00002217static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002218builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002219{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002220 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002221
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002222 /* Keyword arguments are passed through list.sort() which will check
2223 them. */
2224 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002225 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 newlist = PySequence_List(seq);
2228 if (newlist == NULL)
2229 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002230
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002231 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002232 if (callable == NULL) {
2233 Py_DECREF(newlist);
2234 return NULL;
2235 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002236
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002237 assert(nargs >= 1);
Victor Stinner5a60eca2017-01-17 15:17:49 +01002238 v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002239 Py_DECREF(callable);
2240 if (v == NULL) {
2241 Py_DECREF(newlist);
2242 return NULL;
2243 }
2244 Py_DECREF(v);
2245 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002246}
2247
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002248
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002249/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002250static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002251builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002252{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002253 PyObject *v = NULL;
2254 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002255
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002256 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2257 return NULL;
2258 if (v == NULL) {
2259 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002260 if (d == NULL)
2261 return NULL;
2262 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002263 }
2264 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002265 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002266 if (d == NULL) {
2267 PyErr_SetString(PyExc_TypeError,
2268 "vars() argument must have __dict__ attribute");
2269 return NULL;
2270 }
2271 }
2272 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002273}
2274
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002275PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002276"vars([object]) -> dictionary\n\
2277\n\
2278Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002279With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002280
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002281
2282/*[clinic input]
2283sum as builtin_sum
2284
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002285 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002286 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002287 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002288
2289Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2290
2291When the iterable is empty, return the start value.
2292This function is intended specifically for use with numeric values and may
2293reject non-numeric types.
2294[clinic start generated code]*/
2295
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002296static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002297builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002298/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002299{
2300 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002301 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002302
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002303 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002304 if (iter == NULL)
2305 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002307 if (result == NULL) {
2308 result = PyLong_FromLong(0);
2309 if (result == NULL) {
2310 Py_DECREF(iter);
2311 return NULL;
2312 }
2313 } else {
2314 /* reject string values for 'start' parameter */
2315 if (PyUnicode_Check(result)) {
2316 PyErr_SetString(PyExc_TypeError,
2317 "sum() can't sum strings [use ''.join(seq) instead]");
2318 Py_DECREF(iter);
2319 return NULL;
2320 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002321 if (PyBytes_Check(result)) {
2322 PyErr_SetString(PyExc_TypeError,
2323 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002324 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002325 return NULL;
2326 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002327 if (PyByteArray_Check(result)) {
2328 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002329 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002330 Py_DECREF(iter);
2331 return NULL;
2332 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002333 Py_INCREF(result);
2334 }
Alex Martellia70b1912003-04-22 08:12:33 +00002335
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002336#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002337 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2338 Assumes all inputs are the same type. If the assumption fails, default
2339 to the more general routine.
2340 */
2341 if (PyLong_CheckExact(result)) {
2342 int overflow;
2343 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2344 /* If this already overflowed, don't even enter the loop. */
2345 if (overflow == 0) {
2346 Py_DECREF(result);
2347 result = NULL;
2348 }
2349 while(result == NULL) {
2350 item = PyIter_Next(iter);
2351 if (item == NULL) {
2352 Py_DECREF(iter);
2353 if (PyErr_Occurred())
2354 return NULL;
2355 return PyLong_FromLong(i_result);
2356 }
2357 if (PyLong_CheckExact(item)) {
2358 long b = PyLong_AsLongAndOverflow(item, &overflow);
2359 long x = i_result + b;
2360 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2361 i_result = x;
2362 Py_DECREF(item);
2363 continue;
2364 }
2365 }
2366 /* Either overflowed or is not an int. Restore real objects and process normally */
2367 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002368 if (result == NULL) {
2369 Py_DECREF(item);
2370 Py_DECREF(iter);
2371 return NULL;
2372 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002373 temp = PyNumber_Add(result, item);
2374 Py_DECREF(result);
2375 Py_DECREF(item);
2376 result = temp;
2377 if (result == NULL) {
2378 Py_DECREF(iter);
2379 return NULL;
2380 }
2381 }
2382 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 if (PyFloat_CheckExact(result)) {
2385 double f_result = PyFloat_AS_DOUBLE(result);
2386 Py_DECREF(result);
2387 result = NULL;
2388 while(result == NULL) {
2389 item = PyIter_Next(iter);
2390 if (item == NULL) {
2391 Py_DECREF(iter);
2392 if (PyErr_Occurred())
2393 return NULL;
2394 return PyFloat_FromDouble(f_result);
2395 }
2396 if (PyFloat_CheckExact(item)) {
2397 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2398 f_result += PyFloat_AS_DOUBLE(item);
2399 PyFPE_END_PROTECT(f_result)
2400 Py_DECREF(item);
2401 continue;
2402 }
2403 if (PyLong_CheckExact(item)) {
2404 long value;
2405 int overflow;
2406 value = PyLong_AsLongAndOverflow(item, &overflow);
2407 if (!overflow) {
2408 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2409 f_result += (double)value;
2410 PyFPE_END_PROTECT(f_result)
2411 Py_DECREF(item);
2412 continue;
2413 }
2414 }
2415 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002416 if (result == NULL) {
2417 Py_DECREF(item);
2418 Py_DECREF(iter);
2419 return NULL;
2420 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002421 temp = PyNumber_Add(result, item);
2422 Py_DECREF(result);
2423 Py_DECREF(item);
2424 result = temp;
2425 if (result == NULL) {
2426 Py_DECREF(iter);
2427 return NULL;
2428 }
2429 }
2430 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002431#endif
2432
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 for(;;) {
2434 item = PyIter_Next(iter);
2435 if (item == NULL) {
2436 /* error, or end-of-sequence */
2437 if (PyErr_Occurred()) {
2438 Py_DECREF(result);
2439 result = NULL;
2440 }
2441 break;
2442 }
2443 /* It's tempting to use PyNumber_InPlaceAdd instead of
2444 PyNumber_Add here, to avoid quadratic running time
2445 when doing 'sum(list_of_lists, [])'. However, this
2446 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002448 empty = []
2449 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002450
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 would change the value of empty. */
2452 temp = PyNumber_Add(result, item);
2453 Py_DECREF(result);
2454 Py_DECREF(item);
2455 result = temp;
2456 if (result == NULL)
2457 break;
2458 }
2459 Py_DECREF(iter);
2460 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002461}
2462
Alex Martellia70b1912003-04-22 08:12:33 +00002463
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002464/*[clinic input]
2465isinstance as builtin_isinstance
2466
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002467 obj: object
2468 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002469 /
2470
2471Return whether an object is an instance of a class or of a subclass thereof.
2472
2473A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2474check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2475or ...`` etc.
2476[clinic start generated code]*/
2477
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002478static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002479builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002480 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002481/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002482{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002483 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002484
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002485 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 if (retval < 0)
2487 return NULL;
2488 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002489}
2490
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002491
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002492/*[clinic input]
2493issubclass as builtin_issubclass
2494
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002495 cls: object
2496 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002497 /
2498
2499Return whether 'cls' is a derived from another class or is the same class.
2500
2501A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2502check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2503or ...`` etc.
2504[clinic start generated code]*/
2505
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002506static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002507builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002508 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002509/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002510{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002512
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002513 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002514 if (retval < 0)
2515 return NULL;
2516 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002517}
2518
2519
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002520typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002521 PyObject_HEAD
2522 Py_ssize_t tuplesize;
2523 PyObject *ittuple; /* tuple of iterators */
2524 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002525} zipobject;
2526
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002527static PyObject *
2528zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002529{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002530 zipobject *lz;
2531 Py_ssize_t i;
2532 PyObject *ittuple; /* tuple of iterators */
2533 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002534 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002535
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002536 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002537 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002539 /* args must be a tuple */
2540 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002541 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 /* obtain iterators */
2544 ittuple = PyTuple_New(tuplesize);
2545 if (ittuple == NULL)
2546 return NULL;
2547 for (i=0; i < tuplesize; ++i) {
2548 PyObject *item = PyTuple_GET_ITEM(args, i);
2549 PyObject *it = PyObject_GetIter(item);
2550 if (it == NULL) {
2551 if (PyErr_ExceptionMatches(PyExc_TypeError))
2552 PyErr_Format(PyExc_TypeError,
2553 "zip argument #%zd must support iteration",
2554 i+1);
2555 Py_DECREF(ittuple);
2556 return NULL;
2557 }
2558 PyTuple_SET_ITEM(ittuple, i, it);
2559 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002561 /* create a result holder */
2562 result = PyTuple_New(tuplesize);
2563 if (result == NULL) {
2564 Py_DECREF(ittuple);
2565 return NULL;
2566 }
2567 for (i=0 ; i < tuplesize ; i++) {
2568 Py_INCREF(Py_None);
2569 PyTuple_SET_ITEM(result, i, Py_None);
2570 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002572 /* create zipobject structure */
2573 lz = (zipobject *)type->tp_alloc(type, 0);
2574 if (lz == NULL) {
2575 Py_DECREF(ittuple);
2576 Py_DECREF(result);
2577 return NULL;
2578 }
2579 lz->ittuple = ittuple;
2580 lz->tuplesize = tuplesize;
2581 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002583 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002584}
2585
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002586static void
2587zip_dealloc(zipobject *lz)
2588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002589 PyObject_GC_UnTrack(lz);
2590 Py_XDECREF(lz->ittuple);
2591 Py_XDECREF(lz->result);
2592 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002593}
2594
2595static int
2596zip_traverse(zipobject *lz, visitproc visit, void *arg)
2597{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002598 Py_VISIT(lz->ittuple);
2599 Py_VISIT(lz->result);
2600 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002601}
2602
2603static PyObject *
2604zip_next(zipobject *lz)
2605{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002606 Py_ssize_t i;
2607 Py_ssize_t tuplesize = lz->tuplesize;
2608 PyObject *result = lz->result;
2609 PyObject *it;
2610 PyObject *item;
2611 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002612
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002613 if (tuplesize == 0)
2614 return NULL;
2615 if (Py_REFCNT(result) == 1) {
2616 Py_INCREF(result);
2617 for (i=0 ; i < tuplesize ; i++) {
2618 it = PyTuple_GET_ITEM(lz->ittuple, i);
2619 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002620 if (item == NULL) {
2621 Py_DECREF(result);
2622 return NULL;
2623 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002624 olditem = PyTuple_GET_ITEM(result, i);
2625 PyTuple_SET_ITEM(result, i, item);
2626 Py_DECREF(olditem);
2627 }
2628 } else {
2629 result = PyTuple_New(tuplesize);
2630 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002631 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002632 for (i=0 ; i < tuplesize ; i++) {
2633 it = PyTuple_GET_ITEM(lz->ittuple, i);
2634 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002635 if (item == NULL) {
2636 Py_DECREF(result);
2637 return NULL;
2638 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002639 PyTuple_SET_ITEM(result, i, item);
2640 }
2641 }
2642 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002643}
Barry Warsawbd599b52000-08-03 15:45:29 +00002644
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002645static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302646zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002647{
2648 /* Just recreate the zip with the internal iterator tuple */
2649 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2650}
2651
2652static PyMethodDef zip_methods[] = {
2653 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2654 {NULL, NULL} /* sentinel */
2655};
2656
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002657PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002658"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002659\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002660Return a zip object whose .__next__() method returns a tuple where\n\
2661the i-th element comes from the i-th iterable argument. The .__next__()\n\
2662method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002663is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002664
2665PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002666 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2667 "zip", /* tp_name */
2668 sizeof(zipobject), /* tp_basicsize */
2669 0, /* tp_itemsize */
2670 /* methods */
2671 (destructor)zip_dealloc, /* tp_dealloc */
2672 0, /* tp_print */
2673 0, /* tp_getattr */
2674 0, /* tp_setattr */
2675 0, /* tp_reserved */
2676 0, /* tp_repr */
2677 0, /* tp_as_number */
2678 0, /* tp_as_sequence */
2679 0, /* tp_as_mapping */
2680 0, /* tp_hash */
2681 0, /* tp_call */
2682 0, /* tp_str */
2683 PyObject_GenericGetAttr, /* tp_getattro */
2684 0, /* tp_setattro */
2685 0, /* tp_as_buffer */
2686 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2687 Py_TPFLAGS_BASETYPE, /* tp_flags */
2688 zip_doc, /* tp_doc */
2689 (traverseproc)zip_traverse, /* tp_traverse */
2690 0, /* tp_clear */
2691 0, /* tp_richcompare */
2692 0, /* tp_weaklistoffset */
2693 PyObject_SelfIter, /* tp_iter */
2694 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002695 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002696 0, /* tp_members */
2697 0, /* tp_getset */
2698 0, /* tp_base */
2699 0, /* tp_dict */
2700 0, /* tp_descr_get */
2701 0, /* tp_descr_set */
2702 0, /* tp_dictoffset */
2703 0, /* tp_init */
2704 PyType_GenericAlloc, /* tp_alloc */
2705 zip_new, /* tp_new */
2706 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002707};
Barry Warsawbd599b52000-08-03 15:45:29 +00002708
2709
Guido van Rossum79f25d91997-04-29 20:08:16 +00002710static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002711 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002712 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002713 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002714 BUILTIN_ABS_METHODDEF
2715 BUILTIN_ALL_METHODDEF
2716 BUILTIN_ANY_METHODDEF
2717 BUILTIN_ASCII_METHODDEF
2718 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002719 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002720 BUILTIN_CALLABLE_METHODDEF
2721 BUILTIN_CHR_METHODDEF
2722 BUILTIN_COMPILE_METHODDEF
2723 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002724 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002725 BUILTIN_DIVMOD_METHODDEF
2726 BUILTIN_EVAL_METHODDEF
2727 BUILTIN_EXEC_METHODDEF
2728 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002729 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002730 BUILTIN_GLOBALS_METHODDEF
2731 BUILTIN_HASATTR_METHODDEF
2732 BUILTIN_HASH_METHODDEF
2733 BUILTIN_HEX_METHODDEF
2734 BUILTIN_ID_METHODDEF
2735 BUILTIN_INPUT_METHODDEF
2736 BUILTIN_ISINSTANCE_METHODDEF
2737 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002738 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002739 BUILTIN_LEN_METHODDEF
2740 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002741 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2742 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2743 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002744 BUILTIN_OCT_METHODDEF
2745 BUILTIN_ORD_METHODDEF
2746 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002747 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002748 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002749 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002750 BUILTIN_SETATTR_METHODDEF
2751 BUILTIN_SORTED_METHODDEF
2752 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002753 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2754 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002755};
2756
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002757PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002758"Built-in functions, exceptions, and other objects.\n\
2759\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002760Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002761
Martin v. Löwis1a214512008-06-11 05:26:20 +00002762static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002763 PyModuleDef_HEAD_INIT,
2764 "builtins",
2765 builtin_doc,
2766 -1, /* multiple "initialization" just copies the module dict. */
2767 builtin_methods,
2768 NULL,
2769 NULL,
2770 NULL,
2771 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002772};
2773
2774
Guido van Rossum25ce5661997-08-02 03:10:38 +00002775PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002776_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002777{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002778 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002779
Victor Stinnerfbca9082018-08-30 00:50:45 +02002780 const _PyCoreConfig *config = &_PyInterpreterState_GET_UNSAFE()->core_config;
2781
Benjamin Peterson42124a72012-10-30 23:41:54 -04002782 if (PyType_Ready(&PyFilter_Type) < 0 ||
2783 PyType_Ready(&PyMap_Type) < 0 ||
2784 PyType_Ready(&PyZip_Type) < 0)
2785 return NULL;
2786
Eric Snowd393c1b2017-09-14 12:18:12 -06002787 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002788 if (mod == NULL)
2789 return NULL;
2790 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002791
Tim Peters7571a0f2003-03-23 17:52:28 +00002792#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002793 /* "builtins" exposes a number of statically allocated objects
2794 * that, before this code was added in 2.3, never showed up in
2795 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2796 * result, programs leaking references to None and False (etc)
2797 * couldn't be diagnosed by examining sys.getobjects(0).
2798 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002799#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2800#else
2801#define ADD_TO_ALL(OBJECT) (void)0
2802#endif
2803
Tim Peters4b7625e2001-09-13 21:37:17 +00002804#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002805 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2806 return NULL; \
2807 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002809 SETBUILTIN("None", Py_None);
2810 SETBUILTIN("Ellipsis", Py_Ellipsis);
2811 SETBUILTIN("NotImplemented", Py_NotImplemented);
2812 SETBUILTIN("False", Py_False);
2813 SETBUILTIN("True", Py_True);
2814 SETBUILTIN("bool", &PyBool_Type);
2815 SETBUILTIN("memoryview", &PyMemoryView_Type);
2816 SETBUILTIN("bytearray", &PyByteArray_Type);
2817 SETBUILTIN("bytes", &PyBytes_Type);
2818 SETBUILTIN("classmethod", &PyClassMethod_Type);
2819 SETBUILTIN("complex", &PyComplex_Type);
2820 SETBUILTIN("dict", &PyDict_Type);
2821 SETBUILTIN("enumerate", &PyEnum_Type);
2822 SETBUILTIN("filter", &PyFilter_Type);
2823 SETBUILTIN("float", &PyFloat_Type);
2824 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2825 SETBUILTIN("property", &PyProperty_Type);
2826 SETBUILTIN("int", &PyLong_Type);
2827 SETBUILTIN("list", &PyList_Type);
2828 SETBUILTIN("map", &PyMap_Type);
2829 SETBUILTIN("object", &PyBaseObject_Type);
2830 SETBUILTIN("range", &PyRange_Type);
2831 SETBUILTIN("reversed", &PyReversed_Type);
2832 SETBUILTIN("set", &PySet_Type);
2833 SETBUILTIN("slice", &PySlice_Type);
2834 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2835 SETBUILTIN("str", &PyUnicode_Type);
2836 SETBUILTIN("super", &PySuper_Type);
2837 SETBUILTIN("tuple", &PyTuple_Type);
2838 SETBUILTIN("type", &PyType_Type);
2839 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002840 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002841 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002842 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002843 return NULL;
2844 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002845 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002846
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002847 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002848#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002849#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002850}