blob: a19b8b8ddc86cefa8c6218d11dcadae8c7971740 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00004#include <ctype.h>
Victor Stinner5f2df882018-11-12 00:56:19 +01005#include "ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinner621cebe2018-11-12 16:53:38 +01007#include "pycore_pystate.h"
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +05008#include "pycore_tupleobject.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009
Victor Stinnerbd303c12013-11-07 23:07:29 +010010_Py_IDENTIFIER(__builtins__);
11_Py_IDENTIFIER(__dict__);
12_Py_IDENTIFIER(__prepare__);
13_Py_IDENTIFIER(__round__);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010014_Py_IDENTIFIER(__mro_entries__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010015_Py_IDENTIFIER(encoding);
16_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020017_Py_IDENTIFIER(fileno);
18_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010019_Py_IDENTIFIER(metaclass);
20_Py_IDENTIFIER(sort);
21_Py_IDENTIFIER(stdin);
22_Py_IDENTIFIER(stdout);
23_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020024
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030025#include "clinic/bltinmodule.c.h"
26
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010027static PyObject*
Victor Stinner05d68a82018-01-18 11:15:25 +010028update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010029{
Victor Stinner05d68a82018-01-18 11:15:25 +010030 Py_ssize_t i, j;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010031 PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
32 PyObject *stack[1] = {bases};
33 assert(PyTuple_Check(bases));
34
35 for (i = 0; i < nargs; i++) {
36 base = args[i];
37 if (PyType_Check(base)) {
38 if (new_bases) {
39 /* If we already have made a replacement, then we append every normal base,
40 otherwise just skip it. */
41 if (PyList_Append(new_bases, base) < 0) {
42 goto error;
43 }
44 }
45 continue;
46 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020047 if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, &meth) < 0) {
48 goto error;
49 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010050 if (!meth) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010051 if (new_bases) {
52 if (PyList_Append(new_bases, base) < 0) {
53 goto error;
54 }
55 }
56 continue;
57 }
58 new_base = _PyObject_FastCall(meth, stack, 1);
59 Py_DECREF(meth);
60 if (!new_base) {
61 goto error;
62 }
63 if (!PyTuple_Check(new_base)) {
64 PyErr_SetString(PyExc_TypeError,
65 "__mro_entries__ must return a tuple");
66 Py_DECREF(new_base);
67 goto error;
68 }
69 if (!new_bases) {
70 /* If this is a first successful replacement, create new_bases list and
71 copy previously encountered bases. */
72 if (!(new_bases = PyList_New(i))) {
73 goto error;
74 }
75 for (j = 0; j < i; j++) {
76 base = args[j];
77 PyList_SET_ITEM(new_bases, j, base);
78 Py_INCREF(base);
79 }
80 }
81 j = PyList_GET_SIZE(new_bases);
82 if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
83 goto error;
84 }
85 Py_DECREF(new_base);
86 }
87 if (!new_bases) {
88 return bases;
89 }
90 result = PyList_AsTuple(new_bases);
91 Py_DECREF(new_bases);
92 return result;
93
94error:
95 Py_XDECREF(new_bases);
96 return NULL;
97}
98
Nick Coghlanf9e227e2014-08-17 14:01:19 +100099/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000100static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200101builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
Victor Stinner773dc6d2017-01-16 23:46:26 +0100102 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000103{
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100104 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *orig_bases;
Nick Coghlan19d24672016-12-05 16:47:55 +1000105 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +0100106 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000108 if (nargs < 2) {
109 PyErr_SetString(PyExc_TypeError,
110 "__build_class__: not enough arguments");
111 return NULL;
112 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100113 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -0500114 if (!PyFunction_Check(func)) {
115 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -0500116 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -0500117 return NULL;
118 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100119 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000120 if (!PyUnicode_Check(name)) {
121 PyErr_SetString(PyExc_TypeError,
122 "__build_class__: name is not a string");
123 return NULL;
124 }
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +0500125 orig_bases = _PyTuple_FromArray(args + 2, nargs - 2);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100126 if (orig_bases == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000128
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100129 bases = update_bases(orig_bases, args + 2, nargs - 2);
130 if (bases == NULL) {
131 Py_DECREF(orig_bases);
132 return NULL;
133 }
134
Victor Stinner773dc6d2017-01-16 23:46:26 +0100135 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000136 meta = NULL;
137 mkw = NULL;
138 }
139 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +0100140 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 if (mkw == NULL) {
142 Py_DECREF(bases);
143 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000144 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100145
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200146 meta = _PyDict_GetItemIdWithError(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 if (meta != NULL) {
148 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100149 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 Py_DECREF(meta);
151 Py_DECREF(mkw);
152 Py_DECREF(bases);
153 return NULL;
154 }
Nick Coghlande31b192011-10-23 22:04:16 +1000155 /* metaclass is explicitly given, check if it's indeed a class */
156 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000157 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200158 else if (PyErr_Occurred()) {
159 Py_DECREF(mkw);
160 Py_DECREF(bases);
161 return NULL;
162 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000163 }
164 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000165 /* if there are no bases, use type: */
166 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000168 }
169 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 else {
171 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
172 meta = (PyObject *) (base0->ob_type);
173 }
174 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000175 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000176 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000177
Nick Coghlande31b192011-10-23 22:04:16 +1000178 if (isclass) {
179 /* meta is really a class, so check for a more derived
180 metaclass, or possible metaclass conflicts: */
181 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
182 bases);
183 if (winner == NULL) {
184 Py_DECREF(meta);
185 Py_XDECREF(mkw);
186 Py_DECREF(bases);
187 return NULL;
188 }
189 if (winner != meta) {
190 Py_DECREF(meta);
191 meta = winner;
192 Py_INCREF(meta);
193 }
194 }
195 /* else: meta is not a class, so we cannot do the metaclass
196 calculation, so we will use the explicitly given object as it is */
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200197 if (_PyObject_LookupAttrId(meta, &PyId___prepare__, &prep) < 0) {
198 ns = NULL;
199 }
200 else if (prep == NULL) {
201 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 }
203 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200204 PyObject *pargs[2] = {name, bases};
205 ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 Py_DECREF(prep);
207 }
208 if (ns == NULL) {
209 Py_DECREF(meta);
210 Py_XDECREF(mkw);
211 Py_DECREF(bases);
212 return NULL;
213 }
Oren Milman5837d042017-09-27 17:04:37 +0300214 if (!PyMapping_Check(ns)) {
215 PyErr_Format(PyExc_TypeError,
216 "%.200s.__prepare__() must return a mapping, not %.200s",
217 isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
218 Py_TYPE(ns)->tp_name);
219 goto error;
220 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000221 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
Benjamin Petersone8e14592013-05-16 14:37:25 -0500222 NULL, 0, NULL, 0, NULL, 0, NULL,
223 PyFunction_GET_CLOSURE(func));
Nick Coghlan19d24672016-12-05 16:47:55 +1000224 if (cell != NULL) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100225 if (bases != orig_bases) {
226 if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
227 goto error;
228 }
229 }
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200230 PyObject *margs[3] = {name, bases, ns};
231 cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000232 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
233 PyObject *cell_cls = PyCell_GET(cell);
234 if (cell_cls != cls) {
Nick Coghlan19d24672016-12-05 16:47:55 +1000235 if (cell_cls == NULL) {
236 const char *msg =
237 "__class__ not set defining %.200R as %.200R. "
238 "Was __classcell__ propagated to type.__new__?";
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300239 PyErr_Format(PyExc_RuntimeError, msg, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000240 } else {
241 const char *msg =
242 "__class__ set to %.200R defining %.200R as %.200R";
243 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000244 }
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300245 Py_DECREF(cls);
246 cls = NULL;
247 goto error;
Nick Coghlan19d24672016-12-05 16:47:55 +1000248 }
249 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000251error:
252 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 Py_DECREF(ns);
254 Py_DECREF(meta);
255 Py_XDECREF(mkw);
256 Py_DECREF(bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100257 if (bases != orig_bases) {
258 Py_DECREF(orig_bases);
259 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000261}
262
263PyDoc_STRVAR(build_class_doc,
264"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
265\n\
266Internal helper function used by the class statement.");
267
268static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000269builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
272 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400273 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400274 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000275
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400276 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 kwlist, &name, &globals, &locals, &fromlist, &level))
278 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400279 return PyImport_ImportModuleLevelObject(name, globals, locals,
280 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281}
282
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000283PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400284"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000285\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000286Import a module. Because this function is meant for use by the Python\n\
oldk461d2252018-02-02 12:20:00 +0800287interpreter and not for general use, it is better to use\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000288importlib.import_module() to programmatically import a module.\n\
289\n\
290The globals argument is only used to determine the context;\n\
291they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000292should be a list of names to emulate ``from name import ...'', or an\n\
293empty list to emulate ``import name''.\n\
294When importing a module from a package, note that __import__('A.B', ...)\n\
295returns package A when fromlist is empty, but its submodule B when\n\
oldk461d2252018-02-02 12:20:00 +0800296fromlist is not empty. The level argument is used to determine whether to\n\
297perform absolute or relative imports: 0 is absolute, while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000298is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000299
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000300
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000301/*[clinic input]
302abs as builtin_abs
303
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300304 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000305 /
306
307Return the absolute value of the argument.
308[clinic start generated code]*/
309
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300311builtin_abs(PyObject *module, PyObject *x)
312/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000313{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000314 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000315}
316
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000317/*[clinic input]
318all as builtin_all
319
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300320 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000321 /
322
323Return True if bool(x) is True for all values x in the iterable.
324
325If the iterable is empty, return True.
326[clinic start generated code]*/
327
Raymond Hettinger96229b12005-03-11 06:49:40 +0000328static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300329builtin_all(PyObject *module, PyObject *iterable)
330/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000331{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 PyObject *it, *item;
333 PyObject *(*iternext)(PyObject *);
334 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000335
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000336 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 if (it == NULL)
338 return NULL;
339 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000340
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000341 for (;;) {
342 item = iternext(it);
343 if (item == NULL)
344 break;
345 cmp = PyObject_IsTrue(item);
346 Py_DECREF(item);
347 if (cmp < 0) {
348 Py_DECREF(it);
349 return NULL;
350 }
351 if (cmp == 0) {
352 Py_DECREF(it);
353 Py_RETURN_FALSE;
354 }
355 }
356 Py_DECREF(it);
357 if (PyErr_Occurred()) {
358 if (PyErr_ExceptionMatches(PyExc_StopIteration))
359 PyErr_Clear();
360 else
361 return NULL;
362 }
363 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000364}
365
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000366/*[clinic input]
367any as builtin_any
368
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300369 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000370 /
371
372Return True if bool(x) is True for any x in the iterable.
373
374If the iterable is empty, return False.
375[clinic start generated code]*/
376
Raymond Hettinger96229b12005-03-11 06:49:40 +0000377static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300378builtin_any(PyObject *module, PyObject *iterable)
379/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000381 PyObject *it, *item;
382 PyObject *(*iternext)(PyObject *);
383 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000384
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000385 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 if (it == NULL)
387 return NULL;
388 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000390 for (;;) {
391 item = iternext(it);
392 if (item == NULL)
393 break;
394 cmp = PyObject_IsTrue(item);
395 Py_DECREF(item);
396 if (cmp < 0) {
397 Py_DECREF(it);
398 return NULL;
399 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400400 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 Py_DECREF(it);
402 Py_RETURN_TRUE;
403 }
404 }
405 Py_DECREF(it);
406 if (PyErr_Occurred()) {
407 if (PyErr_ExceptionMatches(PyExc_StopIteration))
408 PyErr_Clear();
409 else
410 return NULL;
411 }
412 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000413}
414
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000415/*[clinic input]
416ascii as builtin_ascii
417
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300418 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000419 /
420
421Return an ASCII-only representation of an object.
422
423As repr(), return a string containing a printable representation of an
424object, but escape the non-ASCII characters in the string returned by
425repr() using \\x, \\u or \\U escapes. This generates a string similar
426to that returned by repr() in Python 2.
427[clinic start generated code]*/
428
Georg Brandl559e5d72008-06-11 18:37:52 +0000429static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300430builtin_ascii(PyObject *module, PyObject *obj)
431/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000432{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000433 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000434}
435
Georg Brandl559e5d72008-06-11 18:37:52 +0000436
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000437/*[clinic input]
438bin as builtin_bin
439
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300440 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000441 /
442
443Return the binary representation of an integer.
444
445 >>> bin(2796202)
446 '0b1010101010101010101010'
447[clinic start generated code]*/
448
Guido van Rossum79f25d91997-04-29 20:08:16 +0000449static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300450builtin_bin(PyObject *module, PyObject *number)
451/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000452{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000453 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000454}
455
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000456
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000457/*[clinic input]
458callable as builtin_callable
459
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300460 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000461 /
462
463Return whether the object is callable (i.e., some kind of function).
464
465Note that classes are callable, as are instances of classes with a
466__call__() method.
467[clinic start generated code]*/
468
Antoine Pitroue71362d2010-11-27 22:00:11 +0000469static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300470builtin_callable(PyObject *module, PyObject *obj)
471/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000472{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000473 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000474}
475
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400476static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200477builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400478{
479 PyObject *hook = PySys_GetObject("breakpointhook");
480
481 if (hook == NULL) {
482 PyErr_SetString(PyExc_RuntimeError, "lost sys.breakpointhook");
483 return NULL;
484 }
485 Py_INCREF(hook);
486 PyObject *retval = _PyObject_FastCallKeywords(hook, args, nargs, keywords);
487 Py_DECREF(hook);
488 return retval;
489}
490
491PyDoc_STRVAR(breakpoint_doc,
492"breakpoint(*args, **kws)\n\
493\n\
494Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
495whatever arguments are passed.\n\
496\n\
497By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000498
Raymond Hettinger17301e92008-03-13 00:19:26 +0000499typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000500 PyObject_HEAD
501 PyObject *func;
502 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000503} filterobject;
504
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000505static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000506filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508 PyObject *func, *seq;
509 PyObject *it;
510 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000511
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300512 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
516 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 /* Get iterator. */
519 it = PyObject_GetIter(seq);
520 if (it == NULL)
521 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 /* create filterobject structure */
524 lz = (filterobject *)type->tp_alloc(type, 0);
525 if (lz == NULL) {
526 Py_DECREF(it);
527 return NULL;
528 }
529 Py_INCREF(func);
530 lz->func = func;
531 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000534}
535
536static void
537filter_dealloc(filterobject *lz)
538{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 PyObject_GC_UnTrack(lz);
540 Py_XDECREF(lz->func);
541 Py_XDECREF(lz->it);
542 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000543}
544
545static int
546filter_traverse(filterobject *lz, visitproc visit, void *arg)
547{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 Py_VISIT(lz->it);
549 Py_VISIT(lz->func);
550 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000551}
552
553static PyObject *
554filter_next(filterobject *lz)
555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 PyObject *item;
557 PyObject *it = lz->it;
558 long ok;
559 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400560 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 iternext = *Py_TYPE(it)->tp_iternext;
563 for (;;) {
564 item = iternext(it);
565 if (item == NULL)
566 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000567
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400568 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569 ok = PyObject_IsTrue(item);
570 } else {
571 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100572 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 if (good == NULL) {
574 Py_DECREF(item);
575 return NULL;
576 }
577 ok = PyObject_IsTrue(good);
578 Py_DECREF(good);
579 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200580 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return item;
582 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200583 if (ok < 0)
584 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000585 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000586}
587
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000588static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530589filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000590{
591 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
592}
593
594PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
595
596static PyMethodDef filter_methods[] = {
597 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
598 {NULL, NULL} /* sentinel */
599};
600
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000601PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000602"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000603\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000604Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000605is true. If function is None, return the items that are true.");
606
607PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 PyVarObject_HEAD_INIT(&PyType_Type, 0)
609 "filter", /* tp_name */
610 sizeof(filterobject), /* tp_basicsize */
611 0, /* tp_itemsize */
612 /* methods */
613 (destructor)filter_dealloc, /* tp_dealloc */
614 0, /* tp_print */
615 0, /* tp_getattr */
616 0, /* tp_setattr */
617 0, /* tp_reserved */
618 0, /* tp_repr */
619 0, /* tp_as_number */
620 0, /* tp_as_sequence */
621 0, /* tp_as_mapping */
622 0, /* tp_hash */
623 0, /* tp_call */
624 0, /* tp_str */
625 PyObject_GenericGetAttr, /* tp_getattro */
626 0, /* tp_setattro */
627 0, /* tp_as_buffer */
628 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
629 Py_TPFLAGS_BASETYPE, /* tp_flags */
630 filter_doc, /* tp_doc */
631 (traverseproc)filter_traverse, /* tp_traverse */
632 0, /* tp_clear */
633 0, /* tp_richcompare */
634 0, /* tp_weaklistoffset */
635 PyObject_SelfIter, /* tp_iter */
636 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000637 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 0, /* tp_members */
639 0, /* tp_getset */
640 0, /* tp_base */
641 0, /* tp_dict */
642 0, /* tp_descr_get */
643 0, /* tp_descr_set */
644 0, /* tp_dictoffset */
645 0, /* tp_init */
646 PyType_GenericAlloc, /* tp_alloc */
647 filter_new, /* tp_new */
648 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000649};
650
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000651
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000652/*[clinic input]
653format as builtin_format
654
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300655 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000656 format_spec: unicode(c_default="NULL") = ''
657 /
658
659Return value.__format__(format_spec)
660
Amit Kumar2e6bb442017-05-29 06:32:26 +0530661format_spec defaults to the empty string.
662See the Format Specification Mini-Language section of help('FORMATTING') for
663details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000664[clinic start generated code]*/
665
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000666static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300667builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530668/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000669{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000670 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000671}
672
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000673/*[clinic input]
674chr as builtin_chr
675
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300676 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000677 /
678
679Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
680[clinic start generated code]*/
681
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000682static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300683builtin_chr_impl(PyObject *module, int i)
684/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000685{
686 return PyUnicode_FromOrdinal(i);
687}
Guido van Rossum09095f32000-03-10 23:00:52 +0000688
689
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200690static const char *
Martin Pantereeb896c2015-11-07 02:32:21 +0000691source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000692{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200693 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 Py_ssize_t size;
Martin Pantereeb896c2015-11-07 02:32:21 +0000695 Py_buffer view;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000696
Martin Pantereeb896c2015-11-07 02:32:21 +0000697 *cmd_copy = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 if (PyUnicode_Check(cmd)) {
699 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200700 str = PyUnicode_AsUTF8AndSize(cmd, &size);
701 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 return NULL;
703 }
Martin Pantereeb896c2015-11-07 02:32:21 +0000704 else if (PyBytes_Check(cmd)) {
705 str = PyBytes_AS_STRING(cmd);
706 size = PyBytes_GET_SIZE(cmd);
707 }
708 else if (PyByteArray_Check(cmd)) {
709 str = PyByteArray_AS_STRING(cmd);
710 size = PyByteArray_GET_SIZE(cmd);
711 }
712 else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
713 /* Copy to NUL-terminated buffer. */
714 *cmd_copy = PyBytes_FromStringAndSize(
715 (const char *)view.buf, view.len);
716 PyBuffer_Release(&view);
717 if (*cmd_copy == NULL) {
718 return NULL;
719 }
720 str = PyBytes_AS_STRING(*cmd_copy);
721 size = PyBytes_GET_SIZE(*cmd_copy);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200722 }
723 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 PyErr_Format(PyExc_TypeError,
725 "%s() arg 1 must be a %s object",
726 funcname, what);
727 return NULL;
728 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200729
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200730 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300731 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 "source code string cannot contain null bytes");
Martin Pantereeb896c2015-11-07 02:32:21 +0000733 Py_CLEAR(*cmd_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 return NULL;
735 }
736 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000737}
738
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000739/*[clinic input]
740compile as builtin_compile
741
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300742 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000743 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300744 mode: str
745 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200746 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300747 optimize: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000748
749Compile source into a code object that can be executed by exec() or eval().
750
751The source code may represent a Python module, statement or expression.
752The filename will be used for run-time error messages.
753The mode must be 'exec' to compile a module, 'single' to compile a
754single (interactive) statement, or 'eval' to compile an expression.
755The flags argument, if present, controls which future statements influence
756the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300757The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000758the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300759compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000760in addition to any features explicitly specified.
761[clinic start generated code]*/
762
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000763static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300764builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
765 const char *mode, int flags, int dont_inherit,
766 int optimize)
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200767/*[clinic end generated code: output=1fa176e33452bb63 input=0ff726f595eb9fcd]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000768{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000769 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200770 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000771 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000772 int is_ast;
773 PyCompilerFlags cf;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800774 int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000775 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000776
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000777 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Tim Peters6cd6a822001-08-17 22:11:27 +0000778
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000779 if (flags &
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800780 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST | PyCF_TYPE_COMMENTS))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 {
782 PyErr_SetString(PyExc_ValueError,
783 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000784 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 }
786 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000787
Georg Brandl8334fd92010-12-04 10:26:46 +0000788 if (optimize < -1 || optimize > 2) {
789 PyErr_SetString(PyExc_ValueError,
790 "compile(): invalid optimize value");
791 goto error;
792 }
793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 if (!dont_inherit) {
795 PyEval_MergeCompilerFlags(&cf);
796 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000797
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000798 if (strcmp(mode, "exec") == 0)
799 compile_mode = 0;
800 else if (strcmp(mode, "eval") == 0)
801 compile_mode = 1;
802 else if (strcmp(mode, "single") == 0)
803 compile_mode = 2;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800804 else if (strcmp(mode, "func_type") == 0) {
805 if (!(flags & PyCF_ONLY_AST)) {
806 PyErr_SetString(PyExc_ValueError,
807 "compile() mode 'func_type' requires flag PyCF_ONLY_AST");
808 goto error;
809 }
810 compile_mode = 3;
811 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 else {
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800813 const char *msg;
814 if (flags & PyCF_ONLY_AST)
815 msg = "compile() mode must be 'exec', 'eval', 'single' or 'func_type'";
816 else
817 msg = "compile() mode must be 'exec', 'eval' or 'single'";
818 PyErr_SetString(PyExc_ValueError, msg);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000819 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000820 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000821
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000822 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000824 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000825 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000826 if (flags & PyCF_ONLY_AST) {
827 Py_INCREF(source);
828 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 }
830 else {
831 PyArena *arena;
832 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200835 if (arena == NULL)
836 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000837 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000838 if (mod == NULL) {
839 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000840 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500842 if (!PyAST_Validate(mod)) {
843 PyArena_Free(arena);
844 goto error;
845 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200846 result = (PyObject*)PyAST_CompileObject(mod, filename,
847 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000848 PyArena_Free(arena);
849 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000850 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000852
Martin Panter61d6e4a2015-11-07 02:56:11 +0000853 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000855 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000856
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000857 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000858 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000859 goto finally;
860
861error:
862 result = NULL;
863finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200864 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000865 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000866}
867
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000868/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000869static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000870builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000871{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000873
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000874 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
875 return NULL;
876 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000877}
878
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000879PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000880"dir([object]) -> list of strings\n"
881"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000882"If called without an argument, return the names in the current scope.\n"
883"Else, return an alphabetized list of names comprising (some of) the attributes\n"
884"of the given object, and of attributes reachable from it.\n"
885"If the object supplies a method named __dir__, it will be used; otherwise\n"
886"the default dir() logic is used and returns:\n"
887" for a module object: the module's attributes.\n"
888" for a class object: its attributes, and recursively the attributes\n"
889" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000890" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000891" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000892
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000893/*[clinic input]
894divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000895
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300896 x: object
897 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000898 /
899
Zachary Ware7f227d92016-04-28 14:39:50 -0500900Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000901[clinic start generated code]*/
902
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000903static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300904builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
905/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000906{
907 return PyNumber_Divmod(x, y);
908}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000909
910
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000911/*[clinic input]
912eval as builtin_eval
913
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300914 source: object
915 globals: object = None
916 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000917 /
918
919Evaluate the given source in the context of globals and locals.
920
921The source may be a string representing a Python expression
922or a code object as returned by compile().
923The globals must be a dictionary and locals can be any mapping,
924defaulting to the current globals and locals.
925If only globals is given, locals defaults to it.
926[clinic start generated code]*/
927
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000928static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300929builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400930 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300931/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000932{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000933 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200934 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000935 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000936
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 if (locals != Py_None && !PyMapping_Check(locals)) {
938 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
939 return NULL;
940 }
941 if (globals != Py_None && !PyDict_Check(globals)) {
942 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
943 "globals must be a real dict; try eval(expr, {}, mapping)"
944 : "globals must be a dict");
945 return NULL;
946 }
947 if (globals == Py_None) {
948 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100949 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100951 if (locals == NULL)
952 return NULL;
953 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 }
955 else if (locals == Py_None)
956 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 if (globals == NULL || locals == NULL) {
959 PyErr_SetString(PyExc_TypeError,
960 "eval must be given globals and locals "
961 "when called without a frame");
962 return NULL;
963 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000964
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200965 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +0100966 if (_PyDict_SetItemId(globals, &PyId___builtins__,
967 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 return NULL;
969 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200970 else if (PyErr_Occurred()) {
971 return NULL;
972 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000973
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000974 if (PyCode_Check(source)) {
975 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 PyErr_SetString(PyExc_TypeError,
977 "code object passed to eval() may not contain free variables");
978 return NULL;
979 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000980 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000983 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Martin Panter61d6e4a2015-11-07 02:56:11 +0000984 str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 if (str == NULL)
986 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000988 while (*str == ' ' || *str == '\t')
989 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 (void)PyEval_MergeCompilerFlags(&cf);
992 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000993 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000995}
996
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000997/*[clinic input]
998exec as builtin_exec
999
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001000 source: object
1001 globals: object = None
1002 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001003 /
1004
1005Execute the given source in the context of globals and locals.
1006
1007The source may be a string representing one or more Python statements
1008or a code object as returned by compile().
1009The globals must be a dictionary and locals can be any mapping,
1010defaulting to the current globals and locals.
1011If only globals is given, locals defaults to it.
1012[clinic start generated code]*/
1013
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001014static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001015builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -04001016 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001017/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +00001018{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001019 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +00001020
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001021 if (globals == Py_None) {
1022 globals = PyEval_GetGlobals();
1023 if (locals == Py_None) {
1024 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01001025 if (locals == NULL)
1026 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 }
1028 if (!globals || !locals) {
1029 PyErr_SetString(PyExc_SystemError,
1030 "globals and locals cannot be NULL");
1031 return NULL;
1032 }
1033 }
1034 else if (locals == Py_None)
1035 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001036
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001037 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001038 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 globals->ob_type->tp_name);
1040 return NULL;
1041 }
1042 if (!PyMapping_Check(locals)) {
1043 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001044 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 locals->ob_type->tp_name);
1046 return NULL;
1047 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001048 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +01001049 if (_PyDict_SetItemId(globals, &PyId___builtins__,
1050 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 return NULL;
1052 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001053 else if (PyErr_Occurred()) {
1054 return NULL;
1055 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001056
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001057 if (PyCode_Check(source)) {
1058 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 PyErr_SetString(PyExc_TypeError,
1060 "code object passed to exec() may not "
1061 "contain free variables");
1062 return NULL;
1063 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001064 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 }
1066 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001067 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001068 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 PyCompilerFlags cf;
1070 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001071 str = source_as_string(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001072 "string, bytes or code", &cf,
1073 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001074 if (str == NULL)
1075 return NULL;
1076 if (PyEval_MergeCompilerFlags(&cf))
1077 v = PyRun_StringFlags(str, Py_file_input, globals,
1078 locals, &cf);
1079 else
1080 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001081 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 }
1083 if (v == NULL)
1084 return NULL;
1085 Py_DECREF(v);
1086 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001087}
1088
Georg Brandl7cae87c2006-09-06 06:51:57 +00001089
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001090/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001092builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001093{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001094 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095
Serhiy Storchaka79342662019-01-12 08:25:41 +02001096 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001097 return NULL;
1098
Serhiy Storchaka79342662019-01-12 08:25:41 +02001099 v = args[0];
1100 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 if (!PyUnicode_Check(name)) {
1102 PyErr_SetString(PyExc_TypeError,
1103 "getattr(): attribute name must be string");
1104 return NULL;
1105 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001106 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001107 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001108 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001109 Py_INCREF(dflt);
1110 return dflt;
1111 }
1112 }
1113 else {
1114 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 }
1116 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001117}
1118
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001119PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001120"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001121\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001122Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1123When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001124exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001125
1126
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001127/*[clinic input]
1128globals as builtin_globals
1129
1130Return the dictionary containing the current scope's global variables.
1131
1132NOTE: Updates to this dictionary *will* affect name lookups in the current
1133global scope and vice-versa.
1134[clinic start generated code]*/
1135
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001136static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001137builtin_globals_impl(PyObject *module)
1138/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001139{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001140 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 d = PyEval_GetGlobals();
1143 Py_XINCREF(d);
1144 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001145}
1146
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001147
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001148/*[clinic input]
1149hasattr as builtin_hasattr
1150
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001151 obj: object
1152 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001153 /
1154
1155Return whether the object has an attribute with the given name.
1156
1157This is done by calling getattr(obj, name) and catching AttributeError.
1158[clinic start generated code]*/
1159
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001160static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001161builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1162/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001163{
1164 PyObject *v;
1165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 if (!PyUnicode_Check(name)) {
1167 PyErr_SetString(PyExc_TypeError,
1168 "hasattr(): attribute name must be string");
1169 return NULL;
1170 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001171 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001172 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001174 if (v == NULL) {
1175 Py_RETURN_FALSE;
1176 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001178 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001179}
1180
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001181
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001182/* AC: gdb's integration with CPython relies on builtin_id having
1183 * the *exact* parameter names of "self" and "v", so we ensure we
1184 * preserve those name rather than using the AC defaults.
1185 */
1186/*[clinic input]
1187id as builtin_id
1188
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001189 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001190 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001191 /
1192
1193Return the identity of an object.
1194
1195This is guaranteed to be unique among simultaneously existing objects.
1196(CPython uses the object's memory address.)
1197[clinic start generated code]*/
1198
Guido van Rossum79f25d91997-04-29 20:08:16 +00001199static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001200builtin_id(PyModuleDef *self, PyObject *v)
1201/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001202{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001204}
1205
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001206
Raymond Hettingera6c60372008-03-13 01:26:19 +00001207/* map object ************************************************************/
1208
1209typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 PyObject_HEAD
1211 PyObject *iters;
1212 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001213} mapobject;
1214
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001216map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001217{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 PyObject *it, *iters, *func;
1219 mapobject *lz;
1220 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001221
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001222 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001224
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 numargs = PyTuple_Size(args);
1226 if (numargs < 2) {
1227 PyErr_SetString(PyExc_TypeError,
1228 "map() must have at least two arguments.");
1229 return NULL;
1230 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 iters = PyTuple_New(numargs-1);
1233 if (iters == NULL)
1234 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001235
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001236 for (i=1 ; i<numargs ; i++) {
1237 /* Get iterator. */
1238 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1239 if (it == NULL) {
1240 Py_DECREF(iters);
1241 return NULL;
1242 }
1243 PyTuple_SET_ITEM(iters, i-1, it);
1244 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001245
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001246 /* create mapobject structure */
1247 lz = (mapobject *)type->tp_alloc(type, 0);
1248 if (lz == NULL) {
1249 Py_DECREF(iters);
1250 return NULL;
1251 }
1252 lz->iters = iters;
1253 func = PyTuple_GET_ITEM(args, 0);
1254 Py_INCREF(func);
1255 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001256
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001257 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001258}
1259
1260static void
1261map_dealloc(mapobject *lz)
1262{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001263 PyObject_GC_UnTrack(lz);
1264 Py_XDECREF(lz->iters);
1265 Py_XDECREF(lz->func);
1266 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001267}
1268
1269static int
1270map_traverse(mapobject *lz, visitproc visit, void *arg)
1271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 Py_VISIT(lz->iters);
1273 Py_VISIT(lz->func);
1274 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001275}
1276
1277static PyObject *
1278map_next(mapobject *lz)
1279{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001280 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001281 PyObject **stack;
1282 Py_ssize_t niters, nargs, i;
1283 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001284
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001285 niters = PyTuple_GET_SIZE(lz->iters);
1286 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1287 stack = small_stack;
1288 }
1289 else {
1290 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1291 if (stack == NULL) {
1292 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 return NULL;
1294 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001296
1297 nargs = 0;
1298 for (i=0; i < niters; i++) {
1299 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1300 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1301 if (val == NULL) {
1302 goto exit;
1303 }
1304 stack[i] = val;
1305 nargs++;
1306 }
1307
1308 result = _PyObject_FastCall(lz->func, stack, nargs);
1309
1310exit:
1311 for (i=0; i < nargs; i++) {
1312 Py_DECREF(stack[i]);
1313 }
1314 if (stack != small_stack) {
1315 PyMem_Free(stack);
1316 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001317 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001318}
1319
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001320static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301321map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001322{
1323 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1324 PyObject *args = PyTuple_New(numargs+1);
1325 Py_ssize_t i;
1326 if (args == NULL)
1327 return NULL;
1328 Py_INCREF(lz->func);
1329 PyTuple_SET_ITEM(args, 0, lz->func);
1330 for (i = 0; i<numargs; i++){
1331 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1332 Py_INCREF(it);
1333 PyTuple_SET_ITEM(args, i+1, it);
1334 }
1335
1336 return Py_BuildValue("ON", Py_TYPE(lz), args);
1337}
1338
1339static PyMethodDef map_methods[] = {
1340 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1341 {NULL, NULL} /* sentinel */
1342};
1343
1344
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001345PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001346"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001347\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001348Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001349each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001350
Raymond Hettingera6c60372008-03-13 01:26:19 +00001351PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1353 "map", /* tp_name */
1354 sizeof(mapobject), /* tp_basicsize */
1355 0, /* tp_itemsize */
1356 /* methods */
1357 (destructor)map_dealloc, /* tp_dealloc */
1358 0, /* tp_print */
1359 0, /* tp_getattr */
1360 0, /* tp_setattr */
1361 0, /* tp_reserved */
1362 0, /* tp_repr */
1363 0, /* tp_as_number */
1364 0, /* tp_as_sequence */
1365 0, /* tp_as_mapping */
1366 0, /* tp_hash */
1367 0, /* tp_call */
1368 0, /* tp_str */
1369 PyObject_GenericGetAttr, /* tp_getattro */
1370 0, /* tp_setattro */
1371 0, /* tp_as_buffer */
1372 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1373 Py_TPFLAGS_BASETYPE, /* tp_flags */
1374 map_doc, /* tp_doc */
1375 (traverseproc)map_traverse, /* tp_traverse */
1376 0, /* tp_clear */
1377 0, /* tp_richcompare */
1378 0, /* tp_weaklistoffset */
1379 PyObject_SelfIter, /* tp_iter */
1380 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001381 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001382 0, /* tp_members */
1383 0, /* tp_getset */
1384 0, /* tp_base */
1385 0, /* tp_dict */
1386 0, /* tp_descr_get */
1387 0, /* tp_descr_set */
1388 0, /* tp_dictoffset */
1389 0, /* tp_init */
1390 PyType_GenericAlloc, /* tp_alloc */
1391 map_new, /* tp_new */
1392 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001393};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001394
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001395
1396/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001397static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001398builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001400 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001401
Serhiy Storchaka79342662019-01-12 08:25:41 +02001402 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001403 return NULL;
1404
Serhiy Storchaka79342662019-01-12 08:25:41 +02001405 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001406 if (!PyIter_Check(it)) {
1407 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001408 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001409 it->ob_type->tp_name);
1410 return NULL;
1411 }
1412
1413 res = (*it->ob_type->tp_iternext)(it);
1414 if (res != NULL) {
1415 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001416 } else if (nargs > 1) {
1417 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001418 if (PyErr_Occurred()) {
1419 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1420 return NULL;
1421 PyErr_Clear();
1422 }
1423 Py_INCREF(def);
1424 return def;
1425 } else if (PyErr_Occurred()) {
1426 return NULL;
1427 } else {
1428 PyErr_SetNone(PyExc_StopIteration);
1429 return NULL;
1430 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001431}
1432
1433PyDoc_STRVAR(next_doc,
1434"next(iterator[, default])\n\
1435\n\
1436Return the next item from the iterator. If default is given and the iterator\n\
1437is exhausted, it is returned instead of raising StopIteration.");
1438
1439
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001440/*[clinic input]
1441setattr as builtin_setattr
1442
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001443 obj: object
1444 name: object
1445 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001446 /
1447
1448Sets the named attribute on the given object to the specified value.
1449
1450setattr(x, 'y', v) is equivalent to ``x.y = v''
1451[clinic start generated code]*/
1452
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001453static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001454builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001455 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001456/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001457{
1458 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001460 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001461}
1462
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001463
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001464/*[clinic input]
1465delattr as builtin_delattr
1466
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001467 obj: object
1468 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001469 /
1470
1471Deletes the named attribute from the given object.
1472
1473delattr(x, 'y') is equivalent to ``del x.y''
1474[clinic start generated code]*/
1475
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001476static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001477builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1478/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001479{
1480 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001482 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001483}
1484
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001485
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001486/*[clinic input]
1487hash as builtin_hash
1488
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001489 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001490 /
1491
1492Return the hash value for the given object.
1493
1494Two objects that compare equal must also have the same hash value, but the
1495reverse is not necessarily true.
1496[clinic start generated code]*/
1497
Guido van Rossum79f25d91997-04-29 20:08:16 +00001498static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001499builtin_hash(PyObject *module, PyObject *obj)
1500/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001501{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001502 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001503
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001504 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 if (x == -1)
1506 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001507 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001508}
1509
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001510
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001511/*[clinic input]
1512hex as builtin_hex
1513
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001514 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001515 /
1516
1517Return the hexadecimal representation of an integer.
1518
1519 >>> hex(12648430)
1520 '0xc0ffee'
1521[clinic start generated code]*/
1522
Guido van Rossum79f25d91997-04-29 20:08:16 +00001523static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001524builtin_hex(PyObject *module, PyObject *number)
1525/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001526{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001527 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001528}
1529
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001530
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001531/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001532static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001533builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001534{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001535 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001536
Serhiy Storchaka79342662019-01-12 08:25:41 +02001537 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001538 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001539 v = args[0];
1540 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001541 return PyObject_GetIter(v);
1542 if (!PyCallable_Check(v)) {
1543 PyErr_SetString(PyExc_TypeError,
1544 "iter(v, w): v must be callable");
1545 return NULL;
1546 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001547 PyObject *sentinel = args[1];
1548 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001549}
1550
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001551PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001552"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001553iter(callable, sentinel) -> iterator\n\
1554\n\
1555Get an iterator from an object. In the first form, the argument must\n\
1556supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001557In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001558
1559
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001560/*[clinic input]
1561len as builtin_len
1562
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001563 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001564 /
1565
1566Return the number of items in a container.
1567[clinic start generated code]*/
1568
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001569static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001570builtin_len(PyObject *module, PyObject *obj)
1571/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001572{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001574
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001575 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001576 if (res < 0) {
1577 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001578 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001579 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001580 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001581}
1582
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001583
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001584/*[clinic input]
1585locals as builtin_locals
1586
1587Return a dictionary containing the current scope's local variables.
1588
1589NOTE: Whether or not updates to this dictionary will affect name lookups in
1590the local scope and vice-versa is *implementation dependent* and not
1591covered by any backwards compatibility guarantees.
1592[clinic start generated code]*/
1593
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001594static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001595builtin_locals_impl(PyObject *module)
1596/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001597{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001598 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001599
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 d = PyEval_GetLocals();
1601 Py_XINCREF(d);
1602 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001603}
1604
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001605
Guido van Rossum79f25d91997-04-29 20:08:16 +00001606static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001607min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001608{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001610 PyObject *emptytuple, *defaultval = NULL;
1611 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001613 const int positional = PyTuple_Size(args) > 1;
1614 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001615
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001616 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001618 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001619 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001620
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001621 emptytuple = PyTuple_New(0);
1622 if (emptytuple == NULL)
1623 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001624 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1625 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1626 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001627 Py_DECREF(emptytuple);
1628 if (!ret)
1629 return NULL;
1630
1631 if (positional && defaultval != NULL) {
1632 PyErr_Format(PyExc_TypeError,
1633 "Cannot specify a default for %s() with multiple "
1634 "positional arguments", name);
1635 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001638 it = PyObject_GetIter(v);
1639 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001640 return NULL;
1641 }
Tim Petersc3074532001-05-03 07:00:32 +00001642
Alexander Marshalove22072f2018-07-24 10:58:21 +07001643 if (keyfunc == Py_None) {
1644 keyfunc = NULL;
1645 }
1646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 maxitem = NULL; /* the result */
1648 maxval = NULL; /* the value associated with the result */
1649 while (( item = PyIter_Next(it) )) {
1650 /* get the value from the key function */
1651 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001652 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001653 if (val == NULL)
1654 goto Fail_it_item;
1655 }
1656 /* no key function; the value is the item */
1657 else {
1658 val = item;
1659 Py_INCREF(val);
1660 }
Tim Petersc3074532001-05-03 07:00:32 +00001661
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 /* maximum value and item are unset; set them */
1663 if (maxval == NULL) {
1664 maxitem = item;
1665 maxval = val;
1666 }
1667 /* maximum value and item are set; update them as necessary */
1668 else {
1669 int cmp = PyObject_RichCompareBool(val, maxval, op);
1670 if (cmp < 0)
1671 goto Fail_it_item_and_val;
1672 else if (cmp > 0) {
1673 Py_DECREF(maxval);
1674 Py_DECREF(maxitem);
1675 maxval = val;
1676 maxitem = item;
1677 }
1678 else {
1679 Py_DECREF(item);
1680 Py_DECREF(val);
1681 }
1682 }
1683 }
1684 if (PyErr_Occurred())
1685 goto Fail_it;
1686 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001688 if (defaultval != NULL) {
1689 Py_INCREF(defaultval);
1690 maxitem = defaultval;
1691 } else {
1692 PyErr_Format(PyExc_ValueError,
1693 "%s() arg is an empty sequence", name);
1694 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001695 }
1696 else
1697 Py_DECREF(maxval);
1698 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001699 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001700
1701Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001703Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001704 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001705Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 Py_XDECREF(maxval);
1707 Py_XDECREF(maxitem);
1708 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001710}
1711
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001712/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001713static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001714builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001715{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001717}
1718
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001719PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001720"min(iterable, *[, default=obj, key=func]) -> value\n\
1721min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001722\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001723With a single iterable argument, return its smallest item. The\n\
1724default keyword-only argument specifies an object to return if\n\
1725the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001726With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001727
1728
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001729/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001731builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001732{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001734}
1735
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001736PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001737"max(iterable, *[, default=obj, key=func]) -> value\n\
1738max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001739\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001740With a single iterable argument, return its biggest item. The\n\
1741default keyword-only argument specifies an object to return if\n\
1742the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001743With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001744
1745
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001746/*[clinic input]
1747oct as builtin_oct
1748
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001749 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001750 /
1751
1752Return the octal representation of an integer.
1753
1754 >>> oct(342391)
1755 '0o1234567'
1756[clinic start generated code]*/
1757
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001759builtin_oct(PyObject *module, PyObject *number)
1760/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001761{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001762 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001763}
1764
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001765
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001766/*[clinic input]
1767ord as builtin_ord
1768
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001769 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001770 /
1771
1772Return the Unicode code point for a one-character string.
1773[clinic start generated code]*/
1774
Guido van Rossum79f25d91997-04-29 20:08:16 +00001775static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001776builtin_ord(PyObject *module, PyObject *c)
1777/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001778{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001779 long ord;
1780 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001781
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001782 if (PyBytes_Check(c)) {
1783 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001785 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 return PyLong_FromLong(ord);
1787 }
1788 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001789 else if (PyUnicode_Check(c)) {
1790 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001791 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001792 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001794 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001795 return PyLong_FromLong(ord);
1796 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001798 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001800 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001802 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 return PyLong_FromLong(ord);
1804 }
1805 }
1806 else {
1807 PyErr_Format(PyExc_TypeError,
1808 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001809 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 return NULL;
1811 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001812
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001813 PyErr_Format(PyExc_TypeError,
1814 "ord() expected a character, "
1815 "but string of length %zd found",
1816 size);
1817 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001818}
1819
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001820
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001821/*[clinic input]
1822pow as builtin_pow
1823
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001824 x: object
1825 y: object
1826 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001827 /
1828
1829Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1830
1831Some types, such as ints, are able to use a more efficient algorithm when
1832invoked using the three argument form.
1833[clinic start generated code]*/
1834
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001835static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001836builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1837/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001838{
1839 return PyNumber_Power(x, y, z);
1840}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001841
1842
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001843/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001844static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001845builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001846{
INADA Naokibd584f12017-01-19 12:50:34 +01001847 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1848 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001849 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001850 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001851
INADA Naokibd584f12017-01-19 12:50:34 +01001852 if (kwnames != NULL &&
1853 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1854 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001855 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001856 }
1857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001859 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001860 if (file == NULL) {
1861 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1862 return NULL;
1863 }
1864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001865 /* sys.stdout may be None when FILE* stdout isn't connected */
1866 if (file == Py_None)
1867 Py_RETURN_NONE;
1868 }
Guido van Rossum34343512006-11-30 22:13:52 +00001869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001870 if (sep == Py_None) {
1871 sep = NULL;
1872 }
1873 else if (sep && !PyUnicode_Check(sep)) {
1874 PyErr_Format(PyExc_TypeError,
1875 "sep must be None or a string, not %.200s",
1876 sep->ob_type->tp_name);
1877 return NULL;
1878 }
1879 if (end == Py_None) {
1880 end = NULL;
1881 }
1882 else if (end && !PyUnicode_Check(end)) {
1883 PyErr_Format(PyExc_TypeError,
1884 "end must be None or a string, not %.200s",
1885 end->ob_type->tp_name);
1886 return NULL;
1887 }
Guido van Rossum34343512006-11-30 22:13:52 +00001888
INADA Naokibd584f12017-01-19 12:50:34 +01001889 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 if (i > 0) {
1891 if (sep == NULL)
1892 err = PyFile_WriteString(" ", file);
1893 else
1894 err = PyFile_WriteObject(sep, file,
1895 Py_PRINT_RAW);
1896 if (err)
1897 return NULL;
1898 }
INADA Naokibd584f12017-01-19 12:50:34 +01001899 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 if (err)
1901 return NULL;
1902 }
Guido van Rossum34343512006-11-30 22:13:52 +00001903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 if (end == NULL)
1905 err = PyFile_WriteString("\n", file);
1906 else
1907 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1908 if (err)
1909 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001910
Georg Brandlbc3b6822012-01-13 19:41:25 +01001911 if (flush != NULL) {
1912 PyObject *tmp;
1913 int do_flush = PyObject_IsTrue(flush);
1914 if (do_flush == -1)
1915 return NULL;
1916 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001917 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001918 if (tmp == NULL)
1919 return NULL;
1920 else
1921 Py_DECREF(tmp);
1922 }
1923 }
1924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001925 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001926}
1927
1928PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001929"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001930\n\
1931Prints the values to a stream, or to sys.stdout by default.\n\
1932Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001933file: a file-like object (stream); defaults to the current sys.stdout.\n\
1934sep: string inserted between values, default a space.\n\
1935end: string appended after the last value, default a newline.\n\
1936flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001937
1938
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001939/*[clinic input]
1940input as builtin_input
1941
1942 prompt: object(c_default="NULL") = None
1943 /
1944
1945Read a string from standard input. The trailing newline is stripped.
1946
1947The prompt string, if given, is printed to standard output without a
1948trailing newline before reading input.
1949
1950If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1951On *nix systems, readline is used if available.
1952[clinic start generated code]*/
1953
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001954static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001955builtin_input_impl(PyObject *module, PyObject *prompt)
1956/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001957{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001958 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1959 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1960 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 PyObject *tmp;
1962 long fd;
1963 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001964
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001965 /* Check that stdin/out/err are intact */
1966 if (fin == NULL || fin == Py_None) {
1967 PyErr_SetString(PyExc_RuntimeError,
1968 "input(): lost sys.stdin");
1969 return NULL;
1970 }
1971 if (fout == NULL || fout == Py_None) {
1972 PyErr_SetString(PyExc_RuntimeError,
1973 "input(): lost sys.stdout");
1974 return NULL;
1975 }
1976 if (ferr == NULL || ferr == Py_None) {
1977 PyErr_SetString(PyExc_RuntimeError,
1978 "input(): lost sys.stderr");
1979 return NULL;
1980 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001982 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001983 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001984 if (tmp == NULL)
1985 PyErr_Clear();
1986 else
1987 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001988
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 /* We should only use (GNU) readline if Python's sys.stdin and
1990 sys.stdout are the same as C's stdin and stdout, because we
1991 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001992 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 if (tmp == NULL) {
1994 PyErr_Clear();
1995 tty = 0;
1996 }
1997 else {
1998 fd = PyLong_AsLong(tmp);
1999 Py_DECREF(tmp);
2000 if (fd < 0 && PyErr_Occurred())
2001 return NULL;
2002 tty = fd == fileno(stdin) && isatty(fd);
2003 }
2004 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07002005 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00002006 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002007 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00002008 tty = 0;
2009 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002010 else {
2011 fd = PyLong_AsLong(tmp);
2012 Py_DECREF(tmp);
2013 if (fd < 0 && PyErr_Occurred())
2014 return NULL;
2015 tty = fd == fileno(stdout) && isatty(fd);
2016 }
2017 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002018
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002019 /* If we're interactive, use (GNU) readline */
2020 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002021 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02002022 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002023 char *s = NULL;
2024 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2025 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002026 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002028 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002029
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002030 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002031 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002032 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002033 if (!stdin_encoding || !stdin_errors ||
2034 !PyUnicode_Check(stdin_encoding) ||
2035 !PyUnicode_Check(stdin_errors)) {
2036 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002037 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002038 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002039 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2040 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002041 if (!stdin_encoding_str || !stdin_errors_str)
2042 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07002043 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002044 if (tmp == NULL)
2045 PyErr_Clear();
2046 else
2047 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002048 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002049 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002050 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002051 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002052 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002053 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002054 if (!stdout_encoding || !stdout_errors ||
2055 !PyUnicode_Check(stdout_encoding) ||
2056 !PyUnicode_Check(stdout_errors)) {
2057 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002058 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002059 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002060 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2061 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002062 if (!stdout_encoding_str || !stdout_errors_str)
2063 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002064 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002065 if (stringpo == NULL)
2066 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002068 stdout_encoding_str, stdout_errors_str);
2069 Py_CLEAR(stdout_encoding);
2070 Py_CLEAR(stdout_errors);
2071 Py_CLEAR(stringpo);
2072 if (po == NULL)
2073 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002074 assert(PyBytes_Check(po));
2075 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002076 }
2077 else {
2078 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002079 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002080 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002081 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002083 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002084 if (!PyErr_Occurred())
2085 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002086 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002088
2089 len = strlen(s);
2090 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 PyErr_SetNone(PyExc_EOFError);
2092 result = NULL;
2093 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002094 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002095 if (len > PY_SSIZE_T_MAX) {
2096 PyErr_SetString(PyExc_OverflowError,
2097 "input: input too long");
2098 result = NULL;
2099 }
2100 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002101 len--; /* strip trailing '\n' */
2102 if (len != 0 && s[len-1] == '\r')
2103 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002104 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2105 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002106 }
2107 }
2108 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002109 Py_DECREF(stdin_errors);
2110 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 PyMem_FREE(s);
2112 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002113
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002114 _readline_errors:
2115 Py_XDECREF(stdin_encoding);
2116 Py_XDECREF(stdout_encoding);
2117 Py_XDECREF(stdin_errors);
2118 Py_XDECREF(stdout_errors);
2119 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002120 if (tty)
2121 return NULL;
2122
2123 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002124 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002126 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002127 if (prompt != NULL) {
2128 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002129 return NULL;
2130 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002131 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 if (tmp == NULL)
2133 PyErr_Clear();
2134 else
2135 Py_DECREF(tmp);
2136 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002137}
2138
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002139
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002140/*[clinic input]
2141repr as builtin_repr
2142
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002143 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002144 /
2145
2146Return the canonical string representation of the object.
2147
2148For many object types, including most builtins, eval(repr(obj)) == obj.
2149[clinic start generated code]*/
2150
Guido van Rossum79f25d91997-04-29 20:08:16 +00002151static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002152builtin_repr(PyObject *module, PyObject *obj)
2153/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002154{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002155 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002156}
2157
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002158
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002159/*[clinic input]
2160round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002161
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002162 number: object
2163 ndigits: object = NULL
2164
2165Round a number to a given precision in decimal digits.
2166
2167The return value is an integer if ndigits is omitted or None. Otherwise
2168the return value has the same type as the number. ndigits may be negative.
2169[clinic start generated code]*/
2170
2171static PyObject *
2172builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
2173/*[clinic end generated code: output=ff0d9dd176c02ede input=854bc3a217530c3d]*/
2174{
2175 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002177 if (Py_TYPE(number)->tp_dict == NULL) {
2178 if (PyType_Ready(Py_TYPE(number)) < 0)
2179 return NULL;
2180 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002181
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002182 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002183 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002184 if (!PyErr_Occurred())
2185 PyErr_Format(PyExc_TypeError,
2186 "type %.100s doesn't define __round__ method",
2187 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002188 return NULL;
2189 }
Alex Martelliae211f92007-08-22 23:21:33 +00002190
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002191 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002192 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002194 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002195 Py_DECREF(round);
2196 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002197}
2198
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002199
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002200/*AC: we need to keep the kwds dict intact to easily call into the
2201 * list.sort method, which isn't currently supported in AC. So we just use
2202 * the initially generated signature with a custom implementation.
2203 */
2204/* [disabled clinic input]
2205sorted as builtin_sorted
2206
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002207 iterable as seq: object
2208 key as keyfunc: object = None
2209 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002210
2211Return a new list containing all items from the iterable in ascending order.
2212
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002213A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002214reverse flag can be set to request the result in descending order.
2215[end disabled clinic input]*/
2216
2217PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002218"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002219"--\n"
2220"\n"
2221"Return a new list containing all items from the iterable in ascending order.\n"
2222"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002223"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002224"reverse flag can be set to request the result in descending order.");
2225
2226#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002227 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002228
Raymond Hettinger64958a12003-12-17 20:43:33 +00002229static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002230builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002231{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002232 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002233
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002234 /* Keyword arguments are passed through list.sort() which will check
2235 them. */
2236 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002237 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002239 newlist = PySequence_List(seq);
2240 if (newlist == NULL)
2241 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002242
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002243 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002244 if (callable == NULL) {
2245 Py_DECREF(newlist);
2246 return NULL;
2247 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002248
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002249 assert(nargs >= 1);
Victor Stinner5a60eca2017-01-17 15:17:49 +01002250 v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002251 Py_DECREF(callable);
2252 if (v == NULL) {
2253 Py_DECREF(newlist);
2254 return NULL;
2255 }
2256 Py_DECREF(v);
2257 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002258}
2259
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002260
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002261/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002262static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002263builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 PyObject *v = NULL;
2266 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002267
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002268 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2269 return NULL;
2270 if (v == NULL) {
2271 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002272 if (d == NULL)
2273 return NULL;
2274 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002275 }
2276 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002277 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002278 if (d == NULL) {
2279 PyErr_SetString(PyExc_TypeError,
2280 "vars() argument must have __dict__ attribute");
2281 return NULL;
2282 }
2283 }
2284 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002285}
2286
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002287PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002288"vars([object]) -> dictionary\n\
2289\n\
2290Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002291With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002292
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002293
2294/*[clinic input]
2295sum as builtin_sum
2296
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002297 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002298 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002299 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002300
2301Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2302
2303When the iterable is empty, return the start value.
2304This function is intended specifically for use with numeric values and may
2305reject non-numeric types.
2306[clinic start generated code]*/
2307
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002308static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002309builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002310/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002311{
2312 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002313 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002314
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002315 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002316 if (iter == NULL)
2317 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002318
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002319 if (result == NULL) {
2320 result = PyLong_FromLong(0);
2321 if (result == NULL) {
2322 Py_DECREF(iter);
2323 return NULL;
2324 }
2325 } else {
2326 /* reject string values for 'start' parameter */
2327 if (PyUnicode_Check(result)) {
2328 PyErr_SetString(PyExc_TypeError,
2329 "sum() can't sum strings [use ''.join(seq) instead]");
2330 Py_DECREF(iter);
2331 return NULL;
2332 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002333 if (PyBytes_Check(result)) {
2334 PyErr_SetString(PyExc_TypeError,
2335 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002336 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002337 return NULL;
2338 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002339 if (PyByteArray_Check(result)) {
2340 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002341 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002342 Py_DECREF(iter);
2343 return NULL;
2344 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 Py_INCREF(result);
2346 }
Alex Martellia70b1912003-04-22 08:12:33 +00002347
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002348#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2350 Assumes all inputs are the same type. If the assumption fails, default
2351 to the more general routine.
2352 */
2353 if (PyLong_CheckExact(result)) {
2354 int overflow;
2355 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2356 /* If this already overflowed, don't even enter the loop. */
2357 if (overflow == 0) {
2358 Py_DECREF(result);
2359 result = NULL;
2360 }
2361 while(result == NULL) {
2362 item = PyIter_Next(iter);
2363 if (item == NULL) {
2364 Py_DECREF(iter);
2365 if (PyErr_Occurred())
2366 return NULL;
2367 return PyLong_FromLong(i_result);
2368 }
2369 if (PyLong_CheckExact(item)) {
2370 long b = PyLong_AsLongAndOverflow(item, &overflow);
2371 long x = i_result + b;
2372 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2373 i_result = x;
2374 Py_DECREF(item);
2375 continue;
2376 }
2377 }
2378 /* Either overflowed or is not an int. Restore real objects and process normally */
2379 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002380 if (result == NULL) {
2381 Py_DECREF(item);
2382 Py_DECREF(iter);
2383 return NULL;
2384 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002385 temp = PyNumber_Add(result, item);
2386 Py_DECREF(result);
2387 Py_DECREF(item);
2388 result = temp;
2389 if (result == NULL) {
2390 Py_DECREF(iter);
2391 return NULL;
2392 }
2393 }
2394 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002395
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002396 if (PyFloat_CheckExact(result)) {
2397 double f_result = PyFloat_AS_DOUBLE(result);
2398 Py_DECREF(result);
2399 result = NULL;
2400 while(result == NULL) {
2401 item = PyIter_Next(iter);
2402 if (item == NULL) {
2403 Py_DECREF(iter);
2404 if (PyErr_Occurred())
2405 return NULL;
2406 return PyFloat_FromDouble(f_result);
2407 }
2408 if (PyFloat_CheckExact(item)) {
2409 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2410 f_result += PyFloat_AS_DOUBLE(item);
2411 PyFPE_END_PROTECT(f_result)
2412 Py_DECREF(item);
2413 continue;
2414 }
2415 if (PyLong_CheckExact(item)) {
2416 long value;
2417 int overflow;
2418 value = PyLong_AsLongAndOverflow(item, &overflow);
2419 if (!overflow) {
2420 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2421 f_result += (double)value;
2422 PyFPE_END_PROTECT(f_result)
2423 Py_DECREF(item);
2424 continue;
2425 }
2426 }
2427 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002428 if (result == NULL) {
2429 Py_DECREF(item);
2430 Py_DECREF(iter);
2431 return NULL;
2432 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 temp = PyNumber_Add(result, item);
2434 Py_DECREF(result);
2435 Py_DECREF(item);
2436 result = temp;
2437 if (result == NULL) {
2438 Py_DECREF(iter);
2439 return NULL;
2440 }
2441 }
2442 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002443#endif
2444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002445 for(;;) {
2446 item = PyIter_Next(iter);
2447 if (item == NULL) {
2448 /* error, or end-of-sequence */
2449 if (PyErr_Occurred()) {
2450 Py_DECREF(result);
2451 result = NULL;
2452 }
2453 break;
2454 }
2455 /* It's tempting to use PyNumber_InPlaceAdd instead of
2456 PyNumber_Add here, to avoid quadratic running time
2457 when doing 'sum(list_of_lists, [])'. However, this
2458 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 empty = []
2461 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002463 would change the value of empty. */
2464 temp = PyNumber_Add(result, item);
2465 Py_DECREF(result);
2466 Py_DECREF(item);
2467 result = temp;
2468 if (result == NULL)
2469 break;
2470 }
2471 Py_DECREF(iter);
2472 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002473}
2474
Alex Martellia70b1912003-04-22 08:12:33 +00002475
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002476/*[clinic input]
2477isinstance as builtin_isinstance
2478
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002479 obj: object
2480 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002481 /
2482
2483Return whether an object is an instance of a class or of a subclass thereof.
2484
2485A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2486check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2487or ...`` etc.
2488[clinic start generated code]*/
2489
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002490static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002491builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002492 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002493/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002494{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002495 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002496
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002497 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002498 if (retval < 0)
2499 return NULL;
2500 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002501}
2502
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002503
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002504/*[clinic input]
2505issubclass as builtin_issubclass
2506
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002507 cls: object
2508 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002509 /
2510
2511Return whether 'cls' is a derived from another class or is the same class.
2512
2513A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2514check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2515or ...`` etc.
2516[clinic start generated code]*/
2517
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002518static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002519builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002520 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002521/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002522{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002523 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002524
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002525 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 if (retval < 0)
2527 return NULL;
2528 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002529}
2530
2531
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002532typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 PyObject_HEAD
2534 Py_ssize_t tuplesize;
2535 PyObject *ittuple; /* tuple of iterators */
2536 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002537} zipobject;
2538
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002539static PyObject *
2540zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 zipobject *lz;
2543 Py_ssize_t i;
2544 PyObject *ittuple; /* tuple of iterators */
2545 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002546 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002547
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002548 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002549 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002550
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002551 /* args must be a tuple */
2552 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002553 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002555 /* obtain iterators */
2556 ittuple = PyTuple_New(tuplesize);
2557 if (ittuple == NULL)
2558 return NULL;
2559 for (i=0; i < tuplesize; ++i) {
2560 PyObject *item = PyTuple_GET_ITEM(args, i);
2561 PyObject *it = PyObject_GetIter(item);
2562 if (it == NULL) {
2563 if (PyErr_ExceptionMatches(PyExc_TypeError))
2564 PyErr_Format(PyExc_TypeError,
2565 "zip argument #%zd must support iteration",
2566 i+1);
2567 Py_DECREF(ittuple);
2568 return NULL;
2569 }
2570 PyTuple_SET_ITEM(ittuple, i, it);
2571 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002573 /* create a result holder */
2574 result = PyTuple_New(tuplesize);
2575 if (result == NULL) {
2576 Py_DECREF(ittuple);
2577 return NULL;
2578 }
2579 for (i=0 ; i < tuplesize ; i++) {
2580 Py_INCREF(Py_None);
2581 PyTuple_SET_ITEM(result, i, Py_None);
2582 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002584 /* create zipobject structure */
2585 lz = (zipobject *)type->tp_alloc(type, 0);
2586 if (lz == NULL) {
2587 Py_DECREF(ittuple);
2588 Py_DECREF(result);
2589 return NULL;
2590 }
2591 lz->ittuple = ittuple;
2592 lz->tuplesize = tuplesize;
2593 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002594
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002595 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002596}
2597
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002598static void
2599zip_dealloc(zipobject *lz)
2600{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002601 PyObject_GC_UnTrack(lz);
2602 Py_XDECREF(lz->ittuple);
2603 Py_XDECREF(lz->result);
2604 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002605}
2606
2607static int
2608zip_traverse(zipobject *lz, visitproc visit, void *arg)
2609{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002610 Py_VISIT(lz->ittuple);
2611 Py_VISIT(lz->result);
2612 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002613}
2614
2615static PyObject *
2616zip_next(zipobject *lz)
2617{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002618 Py_ssize_t i;
2619 Py_ssize_t tuplesize = lz->tuplesize;
2620 PyObject *result = lz->result;
2621 PyObject *it;
2622 PyObject *item;
2623 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002624
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002625 if (tuplesize == 0)
2626 return NULL;
2627 if (Py_REFCNT(result) == 1) {
2628 Py_INCREF(result);
2629 for (i=0 ; i < tuplesize ; i++) {
2630 it = PyTuple_GET_ITEM(lz->ittuple, i);
2631 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002632 if (item == NULL) {
2633 Py_DECREF(result);
2634 return NULL;
2635 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002636 olditem = PyTuple_GET_ITEM(result, i);
2637 PyTuple_SET_ITEM(result, i, item);
2638 Py_DECREF(olditem);
2639 }
2640 } else {
2641 result = PyTuple_New(tuplesize);
2642 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002643 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002644 for (i=0 ; i < tuplesize ; i++) {
2645 it = PyTuple_GET_ITEM(lz->ittuple, i);
2646 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002647 if (item == NULL) {
2648 Py_DECREF(result);
2649 return NULL;
2650 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 PyTuple_SET_ITEM(result, i, item);
2652 }
2653 }
2654 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002655}
Barry Warsawbd599b52000-08-03 15:45:29 +00002656
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002657static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302658zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002659{
2660 /* Just recreate the zip with the internal iterator tuple */
2661 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2662}
2663
2664static PyMethodDef zip_methods[] = {
2665 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2666 {NULL, NULL} /* sentinel */
2667};
2668
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002669PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002670"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002671\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002672Return a zip object whose .__next__() method returns a tuple where\n\
2673the i-th element comes from the i-th iterable argument. The .__next__()\n\
2674method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002675is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002676
2677PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002678 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2679 "zip", /* tp_name */
2680 sizeof(zipobject), /* tp_basicsize */
2681 0, /* tp_itemsize */
2682 /* methods */
2683 (destructor)zip_dealloc, /* tp_dealloc */
2684 0, /* tp_print */
2685 0, /* tp_getattr */
2686 0, /* tp_setattr */
2687 0, /* tp_reserved */
2688 0, /* tp_repr */
2689 0, /* tp_as_number */
2690 0, /* tp_as_sequence */
2691 0, /* tp_as_mapping */
2692 0, /* tp_hash */
2693 0, /* tp_call */
2694 0, /* tp_str */
2695 PyObject_GenericGetAttr, /* tp_getattro */
2696 0, /* tp_setattro */
2697 0, /* tp_as_buffer */
2698 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2699 Py_TPFLAGS_BASETYPE, /* tp_flags */
2700 zip_doc, /* tp_doc */
2701 (traverseproc)zip_traverse, /* tp_traverse */
2702 0, /* tp_clear */
2703 0, /* tp_richcompare */
2704 0, /* tp_weaklistoffset */
2705 PyObject_SelfIter, /* tp_iter */
2706 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002707 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002708 0, /* tp_members */
2709 0, /* tp_getset */
2710 0, /* tp_base */
2711 0, /* tp_dict */
2712 0, /* tp_descr_get */
2713 0, /* tp_descr_set */
2714 0, /* tp_dictoffset */
2715 0, /* tp_init */
2716 PyType_GenericAlloc, /* tp_alloc */
2717 zip_new, /* tp_new */
2718 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002719};
Barry Warsawbd599b52000-08-03 15:45:29 +00002720
2721
Guido van Rossum79f25d91997-04-29 20:08:16 +00002722static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002723 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002724 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002725 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002726 BUILTIN_ABS_METHODDEF
2727 BUILTIN_ALL_METHODDEF
2728 BUILTIN_ANY_METHODDEF
2729 BUILTIN_ASCII_METHODDEF
2730 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002731 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002732 BUILTIN_CALLABLE_METHODDEF
2733 BUILTIN_CHR_METHODDEF
2734 BUILTIN_COMPILE_METHODDEF
2735 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002736 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002737 BUILTIN_DIVMOD_METHODDEF
2738 BUILTIN_EVAL_METHODDEF
2739 BUILTIN_EXEC_METHODDEF
2740 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002741 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002742 BUILTIN_GLOBALS_METHODDEF
2743 BUILTIN_HASATTR_METHODDEF
2744 BUILTIN_HASH_METHODDEF
2745 BUILTIN_HEX_METHODDEF
2746 BUILTIN_ID_METHODDEF
2747 BUILTIN_INPUT_METHODDEF
2748 BUILTIN_ISINSTANCE_METHODDEF
2749 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002750 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002751 BUILTIN_LEN_METHODDEF
2752 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002753 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2754 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2755 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002756 BUILTIN_OCT_METHODDEF
2757 BUILTIN_ORD_METHODDEF
2758 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002759 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002760 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002761 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002762 BUILTIN_SETATTR_METHODDEF
2763 BUILTIN_SORTED_METHODDEF
2764 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002765 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2766 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002767};
2768
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002769PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002770"Built-in functions, exceptions, and other objects.\n\
2771\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002772Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002773
Martin v. Löwis1a214512008-06-11 05:26:20 +00002774static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002775 PyModuleDef_HEAD_INIT,
2776 "builtins",
2777 builtin_doc,
2778 -1, /* multiple "initialization" just copies the module dict. */
2779 builtin_methods,
2780 NULL,
2781 NULL,
2782 NULL,
2783 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002784};
2785
2786
Guido van Rossum25ce5661997-08-02 03:10:38 +00002787PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002788_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002789{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002790 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002791
Victor Stinnerfbca9082018-08-30 00:50:45 +02002792 const _PyCoreConfig *config = &_PyInterpreterState_GET_UNSAFE()->core_config;
2793
Benjamin Peterson42124a72012-10-30 23:41:54 -04002794 if (PyType_Ready(&PyFilter_Type) < 0 ||
2795 PyType_Ready(&PyMap_Type) < 0 ||
2796 PyType_Ready(&PyZip_Type) < 0)
2797 return NULL;
2798
Eric Snowd393c1b2017-09-14 12:18:12 -06002799 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002800 if (mod == NULL)
2801 return NULL;
2802 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002803
Tim Peters7571a0f2003-03-23 17:52:28 +00002804#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002805 /* "builtins" exposes a number of statically allocated objects
2806 * that, before this code was added in 2.3, never showed up in
2807 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2808 * result, programs leaking references to None and False (etc)
2809 * couldn't be diagnosed by examining sys.getobjects(0).
2810 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002811#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2812#else
2813#define ADD_TO_ALL(OBJECT) (void)0
2814#endif
2815
Tim Peters4b7625e2001-09-13 21:37:17 +00002816#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002817 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2818 return NULL; \
2819 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002821 SETBUILTIN("None", Py_None);
2822 SETBUILTIN("Ellipsis", Py_Ellipsis);
2823 SETBUILTIN("NotImplemented", Py_NotImplemented);
2824 SETBUILTIN("False", Py_False);
2825 SETBUILTIN("True", Py_True);
2826 SETBUILTIN("bool", &PyBool_Type);
2827 SETBUILTIN("memoryview", &PyMemoryView_Type);
2828 SETBUILTIN("bytearray", &PyByteArray_Type);
2829 SETBUILTIN("bytes", &PyBytes_Type);
2830 SETBUILTIN("classmethod", &PyClassMethod_Type);
2831 SETBUILTIN("complex", &PyComplex_Type);
2832 SETBUILTIN("dict", &PyDict_Type);
2833 SETBUILTIN("enumerate", &PyEnum_Type);
2834 SETBUILTIN("filter", &PyFilter_Type);
2835 SETBUILTIN("float", &PyFloat_Type);
2836 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2837 SETBUILTIN("property", &PyProperty_Type);
2838 SETBUILTIN("int", &PyLong_Type);
2839 SETBUILTIN("list", &PyList_Type);
2840 SETBUILTIN("map", &PyMap_Type);
2841 SETBUILTIN("object", &PyBaseObject_Type);
2842 SETBUILTIN("range", &PyRange_Type);
2843 SETBUILTIN("reversed", &PyReversed_Type);
2844 SETBUILTIN("set", &PySet_Type);
2845 SETBUILTIN("slice", &PySlice_Type);
2846 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2847 SETBUILTIN("str", &PyUnicode_Type);
2848 SETBUILTIN("super", &PySuper_Type);
2849 SETBUILTIN("tuple", &PyTuple_Type);
2850 SETBUILTIN("type", &PyType_Type);
2851 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002852 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002853 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002854 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002855 return NULL;
2856 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002857 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002858
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002859 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002860#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002861#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002862}