blob: 332142fc6ffc2ac37810eb9ce37e6b0f85d9d555 [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00004#include <ctype.h>
Victor Stinner5f2df882018-11-12 00:56:19 +01005#include "ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinner621cebe2018-11-12 16:53:38 +01007#include "pycore_pystate.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00008
Victor Stinnerbd303c12013-11-07 23:07:29 +01009_Py_IDENTIFIER(__builtins__);
10_Py_IDENTIFIER(__dict__);
11_Py_IDENTIFIER(__prepare__);
12_Py_IDENTIFIER(__round__);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010013_Py_IDENTIFIER(__mro_entries__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010014_Py_IDENTIFIER(encoding);
15_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020016_Py_IDENTIFIER(fileno);
17_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010018_Py_IDENTIFIER(metaclass);
19_Py_IDENTIFIER(sort);
20_Py_IDENTIFIER(stdin);
21_Py_IDENTIFIER(stdout);
22_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020023
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030024#include "clinic/bltinmodule.c.h"
25
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010026static PyObject*
Victor Stinner05d68a82018-01-18 11:15:25 +010027update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010028{
Victor Stinner05d68a82018-01-18 11:15:25 +010029 Py_ssize_t i, j;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010030 PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
31 PyObject *stack[1] = {bases};
32 assert(PyTuple_Check(bases));
33
34 for (i = 0; i < nargs; i++) {
35 base = args[i];
36 if (PyType_Check(base)) {
37 if (new_bases) {
38 /* If we already have made a replacement, then we append every normal base,
39 otherwise just skip it. */
40 if (PyList_Append(new_bases, base) < 0) {
41 goto error;
42 }
43 }
44 continue;
45 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020046 if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, &meth) < 0) {
47 goto error;
48 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010049 if (!meth) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010050 if (new_bases) {
51 if (PyList_Append(new_bases, base) < 0) {
52 goto error;
53 }
54 }
55 continue;
56 }
57 new_base = _PyObject_FastCall(meth, stack, 1);
58 Py_DECREF(meth);
59 if (!new_base) {
60 goto error;
61 }
62 if (!PyTuple_Check(new_base)) {
63 PyErr_SetString(PyExc_TypeError,
64 "__mro_entries__ must return a tuple");
65 Py_DECREF(new_base);
66 goto error;
67 }
68 if (!new_bases) {
69 /* If this is a first successful replacement, create new_bases list and
70 copy previously encountered bases. */
71 if (!(new_bases = PyList_New(i))) {
72 goto error;
73 }
74 for (j = 0; j < i; j++) {
75 base = args[j];
76 PyList_SET_ITEM(new_bases, j, base);
77 Py_INCREF(base);
78 }
79 }
80 j = PyList_GET_SIZE(new_bases);
81 if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
82 goto error;
83 }
84 Py_DECREF(new_base);
85 }
86 if (!new_bases) {
87 return bases;
88 }
89 result = PyList_AsTuple(new_bases);
90 Py_DECREF(new_bases);
91 return result;
92
93error:
94 Py_XDECREF(new_bases);
95 return NULL;
96}
97
Nick Coghlanf9e227e2014-08-17 14:01:19 +100098/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +000099static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200100builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
Victor Stinner773dc6d2017-01-16 23:46:26 +0100101 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000102{
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100103 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *orig_bases;
Nick Coghlan19d24672016-12-05 16:47:55 +1000104 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +0100105 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000107 if (nargs < 2) {
108 PyErr_SetString(PyExc_TypeError,
109 "__build_class__: not enough arguments");
110 return NULL;
111 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100112 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -0500113 if (!PyFunction_Check(func)) {
114 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -0500115 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -0500116 return NULL;
117 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100118 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000119 if (!PyUnicode_Check(name)) {
120 PyErr_SetString(PyExc_TypeError,
121 "__build_class__: name is not a string");
122 return NULL;
123 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100124 orig_bases = _PyStack_AsTupleSlice(args, nargs, 2, nargs);
125 if (orig_bases == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000126 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000127
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100128 bases = update_bases(orig_bases, args + 2, nargs - 2);
129 if (bases == NULL) {
130 Py_DECREF(orig_bases);
131 return NULL;
132 }
133
Victor Stinner773dc6d2017-01-16 23:46:26 +0100134 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000135 meta = NULL;
136 mkw = NULL;
137 }
138 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +0100139 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000140 if (mkw == NULL) {
141 Py_DECREF(bases);
142 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000143 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100144
Victor Stinnerae9f1612013-11-06 22:46:51 +0100145 meta = _PyDict_GetItemId(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000146 if (meta != NULL) {
147 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100148 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 Py_DECREF(meta);
150 Py_DECREF(mkw);
151 Py_DECREF(bases);
152 return NULL;
153 }
Nick Coghlande31b192011-10-23 22:04:16 +1000154 /* metaclass is explicitly given, check if it's indeed a class */
155 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 }
157 }
158 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000159 /* if there are no bases, use type: */
160 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000161 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000162 }
163 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000164 else {
165 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
166 meta = (PyObject *) (base0->ob_type);
167 }
168 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000169 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000171
Nick Coghlande31b192011-10-23 22:04:16 +1000172 if (isclass) {
173 /* meta is really a class, so check for a more derived
174 metaclass, or possible metaclass conflicts: */
175 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
176 bases);
177 if (winner == NULL) {
178 Py_DECREF(meta);
179 Py_XDECREF(mkw);
180 Py_DECREF(bases);
181 return NULL;
182 }
183 if (winner != meta) {
184 Py_DECREF(meta);
185 meta = winner;
186 Py_INCREF(meta);
187 }
188 }
189 /* else: meta is not a class, so we cannot do the metaclass
190 calculation, so we will use the explicitly given object as it is */
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200191 if (_PyObject_LookupAttrId(meta, &PyId___prepare__, &prep) < 0) {
192 ns = NULL;
193 }
194 else if (prep == NULL) {
195 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 }
197 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200198 PyObject *pargs[2] = {name, bases};
199 ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 Py_DECREF(prep);
201 }
202 if (ns == NULL) {
203 Py_DECREF(meta);
204 Py_XDECREF(mkw);
205 Py_DECREF(bases);
206 return NULL;
207 }
Oren Milman5837d042017-09-27 17:04:37 +0300208 if (!PyMapping_Check(ns)) {
209 PyErr_Format(PyExc_TypeError,
210 "%.200s.__prepare__() must return a mapping, not %.200s",
211 isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
212 Py_TYPE(ns)->tp_name);
213 goto error;
214 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000215 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
Benjamin Petersone8e14592013-05-16 14:37:25 -0500216 NULL, 0, NULL, 0, NULL, 0, NULL,
217 PyFunction_GET_CLOSURE(func));
Nick Coghlan19d24672016-12-05 16:47:55 +1000218 if (cell != NULL) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100219 if (bases != orig_bases) {
220 if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
221 goto error;
222 }
223 }
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200224 PyObject *margs[3] = {name, bases, ns};
225 cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000226 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
227 PyObject *cell_cls = PyCell_GET(cell);
228 if (cell_cls != cls) {
Nick Coghlan19d24672016-12-05 16:47:55 +1000229 if (cell_cls == NULL) {
230 const char *msg =
231 "__class__ not set defining %.200R as %.200R. "
232 "Was __classcell__ propagated to type.__new__?";
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300233 PyErr_Format(PyExc_RuntimeError, msg, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000234 } else {
235 const char *msg =
236 "__class__ set to %.200R defining %.200R as %.200R";
237 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000238 }
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300239 Py_DECREF(cls);
240 cls = NULL;
241 goto error;
Nick Coghlan19d24672016-12-05 16:47:55 +1000242 }
243 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000245error:
246 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 Py_DECREF(ns);
248 Py_DECREF(meta);
249 Py_XDECREF(mkw);
250 Py_DECREF(bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100251 if (bases != orig_bases) {
252 Py_DECREF(orig_bases);
253 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000254 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000255}
256
257PyDoc_STRVAR(build_class_doc,
258"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
259\n\
260Internal helper function used by the class statement.");
261
262static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000263builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000265 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
266 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400267 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400268 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000269
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400270 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 kwlist, &name, &globals, &locals, &fromlist, &level))
272 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400273 return PyImport_ImportModuleLevelObject(name, globals, locals,
274 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000275}
276
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000277PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400278"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000279\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000280Import a module. Because this function is meant for use by the Python\n\
oldk461d2252018-02-02 12:20:00 +0800281interpreter and not for general use, it is better to use\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000282importlib.import_module() to programmatically import a module.\n\
283\n\
284The globals argument is only used to determine the context;\n\
285they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000286should be a list of names to emulate ``from name import ...'', or an\n\
287empty list to emulate ``import name''.\n\
288When importing a module from a package, note that __import__('A.B', ...)\n\
289returns package A when fromlist is empty, but its submodule B when\n\
oldk461d2252018-02-02 12:20:00 +0800290fromlist is not empty. The level argument is used to determine whether to\n\
291perform absolute or relative imports: 0 is absolute, while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000292is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000293
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000294
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000295/*[clinic input]
296abs as builtin_abs
297
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300298 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000299 /
300
301Return the absolute value of the argument.
302[clinic start generated code]*/
303
Guido van Rossum79f25d91997-04-29 20:08:16 +0000304static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300305builtin_abs(PyObject *module, PyObject *x)
306/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000307{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000308 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000309}
310
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000311/*[clinic input]
312all as builtin_all
313
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300314 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000315 /
316
317Return True if bool(x) is True for all values x in the iterable.
318
319If the iterable is empty, return True.
320[clinic start generated code]*/
321
Raymond Hettinger96229b12005-03-11 06:49:40 +0000322static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300323builtin_all(PyObject *module, PyObject *iterable)
324/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000325{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 PyObject *it, *item;
327 PyObject *(*iternext)(PyObject *);
328 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000329
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000330 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 if (it == NULL)
332 return NULL;
333 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000335 for (;;) {
336 item = iternext(it);
337 if (item == NULL)
338 break;
339 cmp = PyObject_IsTrue(item);
340 Py_DECREF(item);
341 if (cmp < 0) {
342 Py_DECREF(it);
343 return NULL;
344 }
345 if (cmp == 0) {
346 Py_DECREF(it);
347 Py_RETURN_FALSE;
348 }
349 }
350 Py_DECREF(it);
351 if (PyErr_Occurred()) {
352 if (PyErr_ExceptionMatches(PyExc_StopIteration))
353 PyErr_Clear();
354 else
355 return NULL;
356 }
357 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000358}
359
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000360/*[clinic input]
361any as builtin_any
362
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300363 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000364 /
365
366Return True if bool(x) is True for any x in the iterable.
367
368If the iterable is empty, return False.
369[clinic start generated code]*/
370
Raymond Hettinger96229b12005-03-11 06:49:40 +0000371static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300372builtin_any(PyObject *module, PyObject *iterable)
373/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 PyObject *it, *item;
376 PyObject *(*iternext)(PyObject *);
377 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000378
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000379 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 if (it == NULL)
381 return NULL;
382 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 for (;;) {
385 item = iternext(it);
386 if (item == NULL)
387 break;
388 cmp = PyObject_IsTrue(item);
389 Py_DECREF(item);
390 if (cmp < 0) {
391 Py_DECREF(it);
392 return NULL;
393 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400394 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 Py_DECREF(it);
396 Py_RETURN_TRUE;
397 }
398 }
399 Py_DECREF(it);
400 if (PyErr_Occurred()) {
401 if (PyErr_ExceptionMatches(PyExc_StopIteration))
402 PyErr_Clear();
403 else
404 return NULL;
405 }
406 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000407}
408
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000409/*[clinic input]
410ascii as builtin_ascii
411
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300412 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000413 /
414
415Return an ASCII-only representation of an object.
416
417As repr(), return a string containing a printable representation of an
418object, but escape the non-ASCII characters in the string returned by
419repr() using \\x, \\u or \\U escapes. This generates a string similar
420to that returned by repr() in Python 2.
421[clinic start generated code]*/
422
Georg Brandl559e5d72008-06-11 18:37:52 +0000423static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300424builtin_ascii(PyObject *module, PyObject *obj)
425/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000426{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000427 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000428}
429
Georg Brandl559e5d72008-06-11 18:37:52 +0000430
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000431/*[clinic input]
432bin as builtin_bin
433
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300434 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000435 /
436
437Return the binary representation of an integer.
438
439 >>> bin(2796202)
440 '0b1010101010101010101010'
441[clinic start generated code]*/
442
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300444builtin_bin(PyObject *module, PyObject *number)
445/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000446{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000447 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000448}
449
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000450
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000451/*[clinic input]
452callable as builtin_callable
453
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300454 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000455 /
456
457Return whether the object is callable (i.e., some kind of function).
458
459Note that classes are callable, as are instances of classes with a
460__call__() method.
461[clinic start generated code]*/
462
Antoine Pitroue71362d2010-11-27 22:00:11 +0000463static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300464builtin_callable(PyObject *module, PyObject *obj)
465/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000466{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000467 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000468}
469
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400470static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200471builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400472{
473 PyObject *hook = PySys_GetObject("breakpointhook");
474
475 if (hook == NULL) {
476 PyErr_SetString(PyExc_RuntimeError, "lost sys.breakpointhook");
477 return NULL;
478 }
479 Py_INCREF(hook);
480 PyObject *retval = _PyObject_FastCallKeywords(hook, args, nargs, keywords);
481 Py_DECREF(hook);
482 return retval;
483}
484
485PyDoc_STRVAR(breakpoint_doc,
486"breakpoint(*args, **kws)\n\
487\n\
488Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
489whatever arguments are passed.\n\
490\n\
491By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000492
Raymond Hettinger17301e92008-03-13 00:19:26 +0000493typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 PyObject_HEAD
495 PyObject *func;
496 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000497} filterobject;
498
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000499static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000500filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 PyObject *func, *seq;
503 PyObject *it;
504 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000505
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300506 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
510 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000511
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 /* Get iterator. */
513 it = PyObject_GetIter(seq);
514 if (it == NULL)
515 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000517 /* create filterobject structure */
518 lz = (filterobject *)type->tp_alloc(type, 0);
519 if (lz == NULL) {
520 Py_DECREF(it);
521 return NULL;
522 }
523 Py_INCREF(func);
524 lz->func = func;
525 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000528}
529
530static void
531filter_dealloc(filterobject *lz)
532{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 PyObject_GC_UnTrack(lz);
534 Py_XDECREF(lz->func);
535 Py_XDECREF(lz->it);
536 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000537}
538
539static int
540filter_traverse(filterobject *lz, visitproc visit, void *arg)
541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 Py_VISIT(lz->it);
543 Py_VISIT(lz->func);
544 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000545}
546
547static PyObject *
548filter_next(filterobject *lz)
549{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 PyObject *item;
551 PyObject *it = lz->it;
552 long ok;
553 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400554 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 iternext = *Py_TYPE(it)->tp_iternext;
557 for (;;) {
558 item = iternext(it);
559 if (item == NULL)
560 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000561
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400562 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 ok = PyObject_IsTrue(item);
564 } else {
565 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100566 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 if (good == NULL) {
568 Py_DECREF(item);
569 return NULL;
570 }
571 ok = PyObject_IsTrue(good);
572 Py_DECREF(good);
573 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200574 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 return item;
576 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200577 if (ok < 0)
578 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000579 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000580}
581
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000582static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530583filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000584{
585 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
586}
587
588PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
589
590static PyMethodDef filter_methods[] = {
591 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
592 {NULL, NULL} /* sentinel */
593};
594
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000595PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000596"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000597\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000598Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000599is true. If function is None, return the items that are true.");
600
601PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000602 PyVarObject_HEAD_INIT(&PyType_Type, 0)
603 "filter", /* tp_name */
604 sizeof(filterobject), /* tp_basicsize */
605 0, /* tp_itemsize */
606 /* methods */
607 (destructor)filter_dealloc, /* tp_dealloc */
608 0, /* tp_print */
609 0, /* tp_getattr */
610 0, /* tp_setattr */
611 0, /* tp_reserved */
612 0, /* tp_repr */
613 0, /* tp_as_number */
614 0, /* tp_as_sequence */
615 0, /* tp_as_mapping */
616 0, /* tp_hash */
617 0, /* tp_call */
618 0, /* tp_str */
619 PyObject_GenericGetAttr, /* tp_getattro */
620 0, /* tp_setattro */
621 0, /* tp_as_buffer */
622 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
623 Py_TPFLAGS_BASETYPE, /* tp_flags */
624 filter_doc, /* tp_doc */
625 (traverseproc)filter_traverse, /* tp_traverse */
626 0, /* tp_clear */
627 0, /* tp_richcompare */
628 0, /* tp_weaklistoffset */
629 PyObject_SelfIter, /* tp_iter */
630 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000631 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000632 0, /* tp_members */
633 0, /* tp_getset */
634 0, /* tp_base */
635 0, /* tp_dict */
636 0, /* tp_descr_get */
637 0, /* tp_descr_set */
638 0, /* tp_dictoffset */
639 0, /* tp_init */
640 PyType_GenericAlloc, /* tp_alloc */
641 filter_new, /* tp_new */
642 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000643};
644
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000645
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000646/*[clinic input]
647format as builtin_format
648
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300649 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000650 format_spec: unicode(c_default="NULL") = ''
651 /
652
653Return value.__format__(format_spec)
654
Amit Kumar2e6bb442017-05-29 06:32:26 +0530655format_spec defaults to the empty string.
656See the Format Specification Mini-Language section of help('FORMATTING') for
657details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000658[clinic start generated code]*/
659
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000660static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300661builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530662/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000663{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000664 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000665}
666
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000667/*[clinic input]
668chr as builtin_chr
669
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300670 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000671 /
672
673Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
674[clinic start generated code]*/
675
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000676static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300677builtin_chr_impl(PyObject *module, int i)
678/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000679{
680 return PyUnicode_FromOrdinal(i);
681}
Guido van Rossum09095f32000-03-10 23:00:52 +0000682
683
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200684static const char *
Martin Pantereeb896c2015-11-07 02:32:21 +0000685source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000686{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200687 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 Py_ssize_t size;
Martin Pantereeb896c2015-11-07 02:32:21 +0000689 Py_buffer view;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000690
Martin Pantereeb896c2015-11-07 02:32:21 +0000691 *cmd_copy = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 if (PyUnicode_Check(cmd)) {
693 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200694 str = PyUnicode_AsUTF8AndSize(cmd, &size);
695 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 return NULL;
697 }
Martin Pantereeb896c2015-11-07 02:32:21 +0000698 else if (PyBytes_Check(cmd)) {
699 str = PyBytes_AS_STRING(cmd);
700 size = PyBytes_GET_SIZE(cmd);
701 }
702 else if (PyByteArray_Check(cmd)) {
703 str = PyByteArray_AS_STRING(cmd);
704 size = PyByteArray_GET_SIZE(cmd);
705 }
706 else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
707 /* Copy to NUL-terminated buffer. */
708 *cmd_copy = PyBytes_FromStringAndSize(
709 (const char *)view.buf, view.len);
710 PyBuffer_Release(&view);
711 if (*cmd_copy == NULL) {
712 return NULL;
713 }
714 str = PyBytes_AS_STRING(*cmd_copy);
715 size = PyBytes_GET_SIZE(*cmd_copy);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200716 }
717 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 PyErr_Format(PyExc_TypeError,
719 "%s() arg 1 must be a %s object",
720 funcname, what);
721 return NULL;
722 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200723
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200724 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300725 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 "source code string cannot contain null bytes");
Martin Pantereeb896c2015-11-07 02:32:21 +0000727 Py_CLEAR(*cmd_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 return NULL;
729 }
730 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000731}
732
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000733/*[clinic input]
734compile as builtin_compile
735
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300736 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000737 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300738 mode: str
739 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200740 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300741 optimize: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000742
743Compile source into a code object that can be executed by exec() or eval().
744
745The source code may represent a Python module, statement or expression.
746The filename will be used for run-time error messages.
747The mode must be 'exec' to compile a module, 'single' to compile a
748single (interactive) statement, or 'eval' to compile an expression.
749The flags argument, if present, controls which future statements influence
750the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300751The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000752the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300753compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000754in addition to any features explicitly specified.
755[clinic start generated code]*/
756
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000757static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300758builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
759 const char *mode, int flags, int dont_inherit,
760 int optimize)
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200761/*[clinic end generated code: output=1fa176e33452bb63 input=0ff726f595eb9fcd]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000762{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000763 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200764 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000765 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 int is_ast;
767 PyCompilerFlags cf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000769 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000770
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000771 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Tim Peters6cd6a822001-08-17 22:11:27 +0000772
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000773 if (flags &
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
775 {
776 PyErr_SetString(PyExc_ValueError,
777 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000778 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000779 }
780 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000781
Georg Brandl8334fd92010-12-04 10:26:46 +0000782 if (optimize < -1 || optimize > 2) {
783 PyErr_SetString(PyExc_ValueError,
784 "compile(): invalid optimize value");
785 goto error;
786 }
787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (!dont_inherit) {
789 PyEval_MergeCompilerFlags(&cf);
790 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000791
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000792 if (strcmp(mode, "exec") == 0)
793 compile_mode = 0;
794 else if (strcmp(mode, "eval") == 0)
795 compile_mode = 1;
796 else if (strcmp(mode, "single") == 0)
797 compile_mode = 2;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000798 else {
799 PyErr_SetString(PyExc_ValueError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000800 "compile() mode must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000801 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000803
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000804 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000805 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000806 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000807 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000808 if (flags & PyCF_ONLY_AST) {
809 Py_INCREF(source);
810 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000811 }
812 else {
813 PyArena *arena;
814 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200817 if (arena == NULL)
818 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000819 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000820 if (mod == NULL) {
821 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000822 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500824 if (!PyAST_Validate(mod)) {
825 PyArena_Free(arena);
826 goto error;
827 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200828 result = (PyObject*)PyAST_CompileObject(mod, filename,
829 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 PyArena_Free(arena);
831 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000832 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000834
Martin Panter61d6e4a2015-11-07 02:56:11 +0000835 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000837 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000838
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000839 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000840 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000841 goto finally;
842
843error:
844 result = NULL;
845finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200846 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000847 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000848}
849
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000850/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000851static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000852builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000853{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000855
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000856 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
857 return NULL;
858 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000859}
860
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000861PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000862"dir([object]) -> list of strings\n"
863"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000864"If called without an argument, return the names in the current scope.\n"
865"Else, return an alphabetized list of names comprising (some of) the attributes\n"
866"of the given object, and of attributes reachable from it.\n"
867"If the object supplies a method named __dir__, it will be used; otherwise\n"
868"the default dir() logic is used and returns:\n"
869" for a module object: the module's attributes.\n"
870" for a class object: its attributes, and recursively the attributes\n"
871" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000872" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000873" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000874
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000875/*[clinic input]
876divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000877
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300878 x: object
879 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000880 /
881
Zachary Ware7f227d92016-04-28 14:39:50 -0500882Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000883[clinic start generated code]*/
884
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000885static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300886builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
887/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000888{
889 return PyNumber_Divmod(x, y);
890}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000891
892
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000893/*[clinic input]
894eval as builtin_eval
895
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300896 source: object
897 globals: object = None
898 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000899 /
900
901Evaluate the given source in the context of globals and locals.
902
903The source may be a string representing a Python expression
904or a code object as returned by compile().
905The globals must be a dictionary and locals can be any mapping,
906defaulting to the current globals and locals.
907If only globals is given, locals defaults to it.
908[clinic start generated code]*/
909
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000910static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300911builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400912 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300913/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000914{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000915 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200916 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000918
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 if (locals != Py_None && !PyMapping_Check(locals)) {
920 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
921 return NULL;
922 }
923 if (globals != Py_None && !PyDict_Check(globals)) {
924 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
925 "globals must be a real dict; try eval(expr, {}, mapping)"
926 : "globals must be a dict");
927 return NULL;
928 }
929 if (globals == Py_None) {
930 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100931 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100933 if (locals == NULL)
934 return NULL;
935 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 }
937 else if (locals == Py_None)
938 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000939
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 if (globals == NULL || locals == NULL) {
941 PyErr_SetString(PyExc_TypeError,
942 "eval must be given globals and locals "
943 "when called without a frame");
944 return NULL;
945 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000946
Victor Stinnerb44562b2013-11-06 19:03:11 +0100947 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
948 if (_PyDict_SetItemId(globals, &PyId___builtins__,
949 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 return NULL;
951 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000952
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000953 if (PyCode_Check(source)) {
954 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 PyErr_SetString(PyExc_TypeError,
956 "code object passed to eval() may not contain free variables");
957 return NULL;
958 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000959 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000960 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Martin Panter61d6e4a2015-11-07 02:56:11 +0000963 str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 if (str == NULL)
965 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 while (*str == ' ' || *str == '\t')
968 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 (void)PyEval_MergeCompilerFlags(&cf);
971 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000972 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000974}
975
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000976/*[clinic input]
977exec as builtin_exec
978
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300979 source: object
980 globals: object = None
981 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000982 /
983
984Execute the given source in the context of globals and locals.
985
986The source may be a string representing one or more Python statements
987or a code object as returned by compile().
988The globals must be a dictionary and locals can be any mapping,
989defaulting to the current globals and locals.
990If only globals is given, locals defaults to it.
991[clinic start generated code]*/
992
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000993static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300994builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400995 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300996/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +0000997{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000998 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +0000999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 if (globals == Py_None) {
1001 globals = PyEval_GetGlobals();
1002 if (locals == Py_None) {
1003 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01001004 if (locals == NULL)
1005 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001006 }
1007 if (!globals || !locals) {
1008 PyErr_SetString(PyExc_SystemError,
1009 "globals and locals cannot be NULL");
1010 return NULL;
1011 }
1012 }
1013 else if (locals == Py_None)
1014 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001016 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001017 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 globals->ob_type->tp_name);
1019 return NULL;
1020 }
1021 if (!PyMapping_Check(locals)) {
1022 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001023 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 locals->ob_type->tp_name);
1025 return NULL;
1026 }
Victor Stinnerb44562b2013-11-06 19:03:11 +01001027 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
1028 if (_PyDict_SetItemId(globals, &PyId___builtins__,
1029 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 return NULL;
1031 }
1032
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001033 if (PyCode_Check(source)) {
1034 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 PyErr_SetString(PyExc_TypeError,
1036 "code object passed to exec() may not "
1037 "contain free variables");
1038 return NULL;
1039 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001040 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 }
1042 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001043 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001044 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 PyCompilerFlags cf;
1046 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001047 str = source_as_string(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001048 "string, bytes or code", &cf,
1049 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001050 if (str == NULL)
1051 return NULL;
1052 if (PyEval_MergeCompilerFlags(&cf))
1053 v = PyRun_StringFlags(str, Py_file_input, globals,
1054 locals, &cf);
1055 else
1056 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001057 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001058 }
1059 if (v == NULL)
1060 return NULL;
1061 Py_DECREF(v);
1062 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001063}
1064
Georg Brandl7cae87c2006-09-06 06:51:57 +00001065
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001066/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001067static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001068builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001069{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001070 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001071
Serhiy Storchaka79342662019-01-12 08:25:41 +02001072 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001073 return NULL;
1074
Serhiy Storchaka79342662019-01-12 08:25:41 +02001075 v = args[0];
1076 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 if (!PyUnicode_Check(name)) {
1078 PyErr_SetString(PyExc_TypeError,
1079 "getattr(): attribute name must be string");
1080 return NULL;
1081 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001082 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001083 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001084 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001085 Py_INCREF(dflt);
1086 return dflt;
1087 }
1088 }
1089 else {
1090 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001091 }
1092 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001093}
1094
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001095PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001096"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001097\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001098Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1099When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001100exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001101
1102
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001103/*[clinic input]
1104globals as builtin_globals
1105
1106Return the dictionary containing the current scope's global variables.
1107
1108NOTE: Updates to this dictionary *will* affect name lookups in the current
1109global scope and vice-versa.
1110[clinic start generated code]*/
1111
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001112static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001113builtin_globals_impl(PyObject *module)
1114/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001115{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 d = PyEval_GetGlobals();
1119 Py_XINCREF(d);
1120 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001121}
1122
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001123
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001124/*[clinic input]
1125hasattr as builtin_hasattr
1126
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001127 obj: object
1128 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001129 /
1130
1131Return whether the object has an attribute with the given name.
1132
1133This is done by calling getattr(obj, name) and catching AttributeError.
1134[clinic start generated code]*/
1135
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001136static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001137builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1138/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001139{
1140 PyObject *v;
1141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 if (!PyUnicode_Check(name)) {
1143 PyErr_SetString(PyExc_TypeError,
1144 "hasattr(): attribute name must be string");
1145 return NULL;
1146 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001147 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001148 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001150 if (v == NULL) {
1151 Py_RETURN_FALSE;
1152 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001153 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001154 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001155}
1156
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001157
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001158/* AC: gdb's integration with CPython relies on builtin_id having
1159 * the *exact* parameter names of "self" and "v", so we ensure we
1160 * preserve those name rather than using the AC defaults.
1161 */
1162/*[clinic input]
1163id as builtin_id
1164
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001165 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001166 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001167 /
1168
1169Return the identity of an object.
1170
1171This is guaranteed to be unique among simultaneously existing objects.
1172(CPython uses the object's memory address.)
1173[clinic start generated code]*/
1174
Guido van Rossum79f25d91997-04-29 20:08:16 +00001175static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001176builtin_id(PyModuleDef *self, PyObject *v)
1177/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001178{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001180}
1181
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182
Raymond Hettingera6c60372008-03-13 01:26:19 +00001183/* map object ************************************************************/
1184
1185typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001186 PyObject_HEAD
1187 PyObject *iters;
1188 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001189} mapobject;
1190
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001192map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001193{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 PyObject *it, *iters, *func;
1195 mapobject *lz;
1196 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001197
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001198 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 numargs = PyTuple_Size(args);
1202 if (numargs < 2) {
1203 PyErr_SetString(PyExc_TypeError,
1204 "map() must have at least two arguments.");
1205 return NULL;
1206 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 iters = PyTuple_New(numargs-1);
1209 if (iters == NULL)
1210 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 for (i=1 ; i<numargs ; i++) {
1213 /* Get iterator. */
1214 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1215 if (it == NULL) {
1216 Py_DECREF(iters);
1217 return NULL;
1218 }
1219 PyTuple_SET_ITEM(iters, i-1, it);
1220 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 /* create mapobject structure */
1223 lz = (mapobject *)type->tp_alloc(type, 0);
1224 if (lz == NULL) {
1225 Py_DECREF(iters);
1226 return NULL;
1227 }
1228 lz->iters = iters;
1229 func = PyTuple_GET_ITEM(args, 0);
1230 Py_INCREF(func);
1231 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001232
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001233 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001234}
1235
1236static void
1237map_dealloc(mapobject *lz)
1238{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 PyObject_GC_UnTrack(lz);
1240 Py_XDECREF(lz->iters);
1241 Py_XDECREF(lz->func);
1242 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001243}
1244
1245static int
1246map_traverse(mapobject *lz, visitproc visit, void *arg)
1247{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 Py_VISIT(lz->iters);
1249 Py_VISIT(lz->func);
1250 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001251}
1252
1253static PyObject *
1254map_next(mapobject *lz)
1255{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001256 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001257 PyObject **stack;
1258 Py_ssize_t niters, nargs, i;
1259 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001260
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001261 niters = PyTuple_GET_SIZE(lz->iters);
1262 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1263 stack = small_stack;
1264 }
1265 else {
1266 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1267 if (stack == NULL) {
1268 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 return NULL;
1270 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001272
1273 nargs = 0;
1274 for (i=0; i < niters; i++) {
1275 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1276 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1277 if (val == NULL) {
1278 goto exit;
1279 }
1280 stack[i] = val;
1281 nargs++;
1282 }
1283
1284 result = _PyObject_FastCall(lz->func, stack, nargs);
1285
1286exit:
1287 for (i=0; i < nargs; i++) {
1288 Py_DECREF(stack[i]);
1289 }
1290 if (stack != small_stack) {
1291 PyMem_Free(stack);
1292 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001294}
1295
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001296static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301297map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001298{
1299 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1300 PyObject *args = PyTuple_New(numargs+1);
1301 Py_ssize_t i;
1302 if (args == NULL)
1303 return NULL;
1304 Py_INCREF(lz->func);
1305 PyTuple_SET_ITEM(args, 0, lz->func);
1306 for (i = 0; i<numargs; i++){
1307 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1308 Py_INCREF(it);
1309 PyTuple_SET_ITEM(args, i+1, it);
1310 }
1311
1312 return Py_BuildValue("ON", Py_TYPE(lz), args);
1313}
1314
1315static PyMethodDef map_methods[] = {
1316 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1317 {NULL, NULL} /* sentinel */
1318};
1319
1320
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001321PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001322"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001323\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001324Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326
Raymond Hettingera6c60372008-03-13 01:26:19 +00001327PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1329 "map", /* tp_name */
1330 sizeof(mapobject), /* tp_basicsize */
1331 0, /* tp_itemsize */
1332 /* methods */
1333 (destructor)map_dealloc, /* tp_dealloc */
1334 0, /* tp_print */
1335 0, /* tp_getattr */
1336 0, /* tp_setattr */
1337 0, /* tp_reserved */
1338 0, /* tp_repr */
1339 0, /* tp_as_number */
1340 0, /* tp_as_sequence */
1341 0, /* tp_as_mapping */
1342 0, /* tp_hash */
1343 0, /* tp_call */
1344 0, /* tp_str */
1345 PyObject_GenericGetAttr, /* tp_getattro */
1346 0, /* tp_setattro */
1347 0, /* tp_as_buffer */
1348 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1349 Py_TPFLAGS_BASETYPE, /* tp_flags */
1350 map_doc, /* tp_doc */
1351 (traverseproc)map_traverse, /* tp_traverse */
1352 0, /* tp_clear */
1353 0, /* tp_richcompare */
1354 0, /* tp_weaklistoffset */
1355 PyObject_SelfIter, /* tp_iter */
1356 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001357 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001358 0, /* tp_members */
1359 0, /* tp_getset */
1360 0, /* tp_base */
1361 0, /* tp_dict */
1362 0, /* tp_descr_get */
1363 0, /* tp_descr_set */
1364 0, /* tp_dictoffset */
1365 0, /* tp_init */
1366 PyType_GenericAlloc, /* tp_alloc */
1367 map_new, /* tp_new */
1368 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001369};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001370
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001371
1372/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001374builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001375{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001377
Serhiy Storchaka79342662019-01-12 08:25:41 +02001378 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001379 return NULL;
1380
Serhiy Storchaka79342662019-01-12 08:25:41 +02001381 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001382 if (!PyIter_Check(it)) {
1383 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001384 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001385 it->ob_type->tp_name);
1386 return NULL;
1387 }
1388
1389 res = (*it->ob_type->tp_iternext)(it);
1390 if (res != NULL) {
1391 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001392 } else if (nargs > 1) {
1393 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 if (PyErr_Occurred()) {
1395 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1396 return NULL;
1397 PyErr_Clear();
1398 }
1399 Py_INCREF(def);
1400 return def;
1401 } else if (PyErr_Occurred()) {
1402 return NULL;
1403 } else {
1404 PyErr_SetNone(PyExc_StopIteration);
1405 return NULL;
1406 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001407}
1408
1409PyDoc_STRVAR(next_doc,
1410"next(iterator[, default])\n\
1411\n\
1412Return the next item from the iterator. If default is given and the iterator\n\
1413is exhausted, it is returned instead of raising StopIteration.");
1414
1415
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001416/*[clinic input]
1417setattr as builtin_setattr
1418
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001419 obj: object
1420 name: object
1421 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001422 /
1423
1424Sets the named attribute on the given object to the specified value.
1425
1426setattr(x, 'y', v) is equivalent to ``x.y = v''
1427[clinic start generated code]*/
1428
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001429static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001430builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001431 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001432/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001433{
1434 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001436 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001437}
1438
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001439
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001440/*[clinic input]
1441delattr as builtin_delattr
1442
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001443 obj: object
1444 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001445 /
1446
1447Deletes the named attribute from the given object.
1448
1449delattr(x, 'y') is equivalent to ``del x.y''
1450[clinic start generated code]*/
1451
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001452static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001453builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1454/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001455{
1456 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001457 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001458 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001459}
1460
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001461
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001462/*[clinic input]
1463hash as builtin_hash
1464
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001465 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001466 /
1467
1468Return the hash value for the given object.
1469
1470Two objects that compare equal must also have the same hash value, but the
1471reverse is not necessarily true.
1472[clinic start generated code]*/
1473
Guido van Rossum79f25d91997-04-29 20:08:16 +00001474static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001475builtin_hash(PyObject *module, PyObject *obj)
1476/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001477{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001478 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001479
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001480 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 if (x == -1)
1482 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001483 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001484}
1485
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001486
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001487/*[clinic input]
1488hex as builtin_hex
1489
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001490 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001491 /
1492
1493Return the hexadecimal representation of an integer.
1494
1495 >>> hex(12648430)
1496 '0xc0ffee'
1497[clinic start generated code]*/
1498
Guido van Rossum79f25d91997-04-29 20:08:16 +00001499static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001500builtin_hex(PyObject *module, PyObject *number)
1501/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001502{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001503 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001504}
1505
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001506
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001507/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001508static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001509builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001510{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001511 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001512
Serhiy Storchaka79342662019-01-12 08:25:41 +02001513 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001515 v = args[0];
1516 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 return PyObject_GetIter(v);
1518 if (!PyCallable_Check(v)) {
1519 PyErr_SetString(PyExc_TypeError,
1520 "iter(v, w): v must be callable");
1521 return NULL;
1522 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001523 PyObject *sentinel = args[1];
1524 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001525}
1526
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001527PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001528"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001529iter(callable, sentinel) -> iterator\n\
1530\n\
1531Get an iterator from an object. In the first form, the argument must\n\
1532supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001533In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001534
1535
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001536/*[clinic input]
1537len as builtin_len
1538
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001539 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001540 /
1541
1542Return the number of items in a container.
1543[clinic start generated code]*/
1544
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001545static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001546builtin_len(PyObject *module, PyObject *obj)
1547/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001548{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001549 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001550
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001551 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001552 if (res < 0) {
1553 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001555 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001556 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001557}
1558
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001559
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001560/*[clinic input]
1561locals as builtin_locals
1562
1563Return a dictionary containing the current scope's local variables.
1564
1565NOTE: Whether or not updates to this dictionary will affect name lookups in
1566the local scope and vice-versa is *implementation dependent* and not
1567covered by any backwards compatibility guarantees.
1568[clinic start generated code]*/
1569
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001570static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001571builtin_locals_impl(PyObject *module)
1572/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001573{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 d = PyEval_GetLocals();
1577 Py_XINCREF(d);
1578 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001579}
1580
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001581
Guido van Rossum79f25d91997-04-29 20:08:16 +00001582static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001583min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001584{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001586 PyObject *emptytuple, *defaultval = NULL;
1587 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001589 const int positional = PyTuple_Size(args) > 1;
1590 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001591
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001592 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001594 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001595 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001596
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001597 emptytuple = PyTuple_New(0);
1598 if (emptytuple == NULL)
1599 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001600 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1601 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1602 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001603 Py_DECREF(emptytuple);
1604 if (!ret)
1605 return NULL;
1606
1607 if (positional && defaultval != NULL) {
1608 PyErr_Format(PyExc_TypeError,
1609 "Cannot specify a default for %s() with multiple "
1610 "positional arguments", name);
1611 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 it = PyObject_GetIter(v);
1615 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 return NULL;
1617 }
Tim Petersc3074532001-05-03 07:00:32 +00001618
Alexander Marshalove22072f2018-07-24 10:58:21 +07001619 if (keyfunc == Py_None) {
1620 keyfunc = NULL;
1621 }
1622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001623 maxitem = NULL; /* the result */
1624 maxval = NULL; /* the value associated with the result */
1625 while (( item = PyIter_Next(it) )) {
1626 /* get the value from the key function */
1627 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001628 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001629 if (val == NULL)
1630 goto Fail_it_item;
1631 }
1632 /* no key function; the value is the item */
1633 else {
1634 val = item;
1635 Py_INCREF(val);
1636 }
Tim Petersc3074532001-05-03 07:00:32 +00001637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001638 /* maximum value and item are unset; set them */
1639 if (maxval == NULL) {
1640 maxitem = item;
1641 maxval = val;
1642 }
1643 /* maximum value and item are set; update them as necessary */
1644 else {
1645 int cmp = PyObject_RichCompareBool(val, maxval, op);
1646 if (cmp < 0)
1647 goto Fail_it_item_and_val;
1648 else if (cmp > 0) {
1649 Py_DECREF(maxval);
1650 Py_DECREF(maxitem);
1651 maxval = val;
1652 maxitem = item;
1653 }
1654 else {
1655 Py_DECREF(item);
1656 Py_DECREF(val);
1657 }
1658 }
1659 }
1660 if (PyErr_Occurred())
1661 goto Fail_it;
1662 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001664 if (defaultval != NULL) {
1665 Py_INCREF(defaultval);
1666 maxitem = defaultval;
1667 } else {
1668 PyErr_Format(PyExc_ValueError,
1669 "%s() arg is an empty sequence", name);
1670 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 }
1672 else
1673 Py_DECREF(maxval);
1674 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001676
1677Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001679Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001681Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 Py_XDECREF(maxval);
1683 Py_XDECREF(maxitem);
1684 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001686}
1687
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001688/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001690builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001691{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001693}
1694
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001695PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001696"min(iterable, *[, default=obj, key=func]) -> value\n\
1697min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001698\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001699With a single iterable argument, return its smallest item. The\n\
1700default keyword-only argument specifies an object to return if\n\
1701the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001702With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001703
1704
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001705/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001706static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001707builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001708{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001710}
1711
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001712PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001713"max(iterable, *[, default=obj, key=func]) -> value\n\
1714max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001715\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001716With a single iterable argument, return its biggest item. The\n\
1717default keyword-only argument specifies an object to return if\n\
1718the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001719With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001720
1721
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001722/*[clinic input]
1723oct as builtin_oct
1724
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001725 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001726 /
1727
1728Return the octal representation of an integer.
1729
1730 >>> oct(342391)
1731 '0o1234567'
1732[clinic start generated code]*/
1733
Guido van Rossum79f25d91997-04-29 20:08:16 +00001734static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001735builtin_oct(PyObject *module, PyObject *number)
1736/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001737{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001738 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001739}
1740
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001741
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001742/*[clinic input]
1743ord as builtin_ord
1744
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001745 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001746 /
1747
1748Return the Unicode code point for a one-character string.
1749[clinic start generated code]*/
1750
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001752builtin_ord(PyObject *module, PyObject *c)
1753/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001754{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001755 long ord;
1756 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001757
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001758 if (PyBytes_Check(c)) {
1759 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001761 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 return PyLong_FromLong(ord);
1763 }
1764 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001765 else if (PyUnicode_Check(c)) {
1766 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001767 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001768 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001770 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001771 return PyLong_FromLong(ord);
1772 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001774 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001775 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001776 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001777 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001778 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001779 return PyLong_FromLong(ord);
1780 }
1781 }
1782 else {
1783 PyErr_Format(PyExc_TypeError,
1784 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001785 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 return NULL;
1787 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 PyErr_Format(PyExc_TypeError,
1790 "ord() expected a character, "
1791 "but string of length %zd found",
1792 size);
1793 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001794}
1795
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001796
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001797/*[clinic input]
1798pow as builtin_pow
1799
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001800 x: object
1801 y: object
1802 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001803 /
1804
1805Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1806
1807Some types, such as ints, are able to use a more efficient algorithm when
1808invoked using the three argument form.
1809[clinic start generated code]*/
1810
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001811static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001812builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1813/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001814{
1815 return PyNumber_Power(x, y, z);
1816}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001817
1818
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001819/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001820static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001821builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001822{
INADA Naokibd584f12017-01-19 12:50:34 +01001823 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1824 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001825 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001827
INADA Naokibd584f12017-01-19 12:50:34 +01001828 if (kwnames != NULL &&
1829 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1830 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001831 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001832 }
1833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001834 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001835 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001836 if (file == NULL) {
1837 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1838 return NULL;
1839 }
1840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001841 /* sys.stdout may be None when FILE* stdout isn't connected */
1842 if (file == Py_None)
1843 Py_RETURN_NONE;
1844 }
Guido van Rossum34343512006-11-30 22:13:52 +00001845
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 if (sep == Py_None) {
1847 sep = NULL;
1848 }
1849 else if (sep && !PyUnicode_Check(sep)) {
1850 PyErr_Format(PyExc_TypeError,
1851 "sep must be None or a string, not %.200s",
1852 sep->ob_type->tp_name);
1853 return NULL;
1854 }
1855 if (end == Py_None) {
1856 end = NULL;
1857 }
1858 else if (end && !PyUnicode_Check(end)) {
1859 PyErr_Format(PyExc_TypeError,
1860 "end must be None or a string, not %.200s",
1861 end->ob_type->tp_name);
1862 return NULL;
1863 }
Guido van Rossum34343512006-11-30 22:13:52 +00001864
INADA Naokibd584f12017-01-19 12:50:34 +01001865 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 if (i > 0) {
1867 if (sep == NULL)
1868 err = PyFile_WriteString(" ", file);
1869 else
1870 err = PyFile_WriteObject(sep, file,
1871 Py_PRINT_RAW);
1872 if (err)
1873 return NULL;
1874 }
INADA Naokibd584f12017-01-19 12:50:34 +01001875 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 if (err)
1877 return NULL;
1878 }
Guido van Rossum34343512006-11-30 22:13:52 +00001879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001880 if (end == NULL)
1881 err = PyFile_WriteString("\n", file);
1882 else
1883 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1884 if (err)
1885 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001886
Georg Brandlbc3b6822012-01-13 19:41:25 +01001887 if (flush != NULL) {
1888 PyObject *tmp;
1889 int do_flush = PyObject_IsTrue(flush);
1890 if (do_flush == -1)
1891 return NULL;
1892 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001893 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001894 if (tmp == NULL)
1895 return NULL;
1896 else
1897 Py_DECREF(tmp);
1898 }
1899 }
1900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001902}
1903
1904PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001905"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001906\n\
1907Prints the values to a stream, or to sys.stdout by default.\n\
1908Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001909file: a file-like object (stream); defaults to the current sys.stdout.\n\
1910sep: string inserted between values, default a space.\n\
1911end: string appended after the last value, default a newline.\n\
1912flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001913
1914
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001915/*[clinic input]
1916input as builtin_input
1917
1918 prompt: object(c_default="NULL") = None
1919 /
1920
1921Read a string from standard input. The trailing newline is stripped.
1922
1923The prompt string, if given, is printed to standard output without a
1924trailing newline before reading input.
1925
1926If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1927On *nix systems, readline is used if available.
1928[clinic start generated code]*/
1929
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001930static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001931builtin_input_impl(PyObject *module, PyObject *prompt)
1932/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001933{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001934 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1935 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1936 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 PyObject *tmp;
1938 long fd;
1939 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001941 /* Check that stdin/out/err are intact */
1942 if (fin == NULL || fin == Py_None) {
1943 PyErr_SetString(PyExc_RuntimeError,
1944 "input(): lost sys.stdin");
1945 return NULL;
1946 }
1947 if (fout == NULL || fout == Py_None) {
1948 PyErr_SetString(PyExc_RuntimeError,
1949 "input(): lost sys.stdout");
1950 return NULL;
1951 }
1952 if (ferr == NULL || ferr == Py_None) {
1953 PyErr_SetString(PyExc_RuntimeError,
1954 "input(): lost sys.stderr");
1955 return NULL;
1956 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001958 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001959 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001960 if (tmp == NULL)
1961 PyErr_Clear();
1962 else
1963 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001964
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001965 /* We should only use (GNU) readline if Python's sys.stdin and
1966 sys.stdout are the same as C's stdin and stdout, because we
1967 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001968 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 if (tmp == NULL) {
1970 PyErr_Clear();
1971 tty = 0;
1972 }
1973 else {
1974 fd = PyLong_AsLong(tmp);
1975 Py_DECREF(tmp);
1976 if (fd < 0 && PyErr_Occurred())
1977 return NULL;
1978 tty = fd == fileno(stdin) && isatty(fd);
1979 }
1980 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001981 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00001982 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001984 tty = 0;
1985 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001986 else {
1987 fd = PyLong_AsLong(tmp);
1988 Py_DECREF(tmp);
1989 if (fd < 0 && PyErr_Occurred())
1990 return NULL;
1991 tty = fd == fileno(stdout) && isatty(fd);
1992 }
1993 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001994
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001995 /* If we're interactive, use (GNU) readline */
1996 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001997 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02001998 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001999 char *s = NULL;
2000 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2001 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002002 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002003 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002004 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002005
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002006 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002007 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002008 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002009 if (!stdin_encoding || !stdin_errors ||
2010 !PyUnicode_Check(stdin_encoding) ||
2011 !PyUnicode_Check(stdin_errors)) {
2012 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002013 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002014 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002015 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2016 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002017 if (!stdin_encoding_str || !stdin_errors_str)
2018 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07002019 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002020 if (tmp == NULL)
2021 PyErr_Clear();
2022 else
2023 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002024 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002025 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002026 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002028 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002029 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002030 if (!stdout_encoding || !stdout_errors ||
2031 !PyUnicode_Check(stdout_encoding) ||
2032 !PyUnicode_Check(stdout_errors)) {
2033 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002034 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002035 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002036 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2037 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002038 if (!stdout_encoding_str || !stdout_errors_str)
2039 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002040 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002041 if (stringpo == NULL)
2042 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002043 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002044 stdout_encoding_str, stdout_errors_str);
2045 Py_CLEAR(stdout_encoding);
2046 Py_CLEAR(stdout_errors);
2047 Py_CLEAR(stringpo);
2048 if (po == NULL)
2049 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002050 assert(PyBytes_Check(po));
2051 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002052 }
2053 else {
2054 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002055 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002056 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002057 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002059 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002060 if (!PyErr_Occurred())
2061 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002062 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002064
2065 len = strlen(s);
2066 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 PyErr_SetNone(PyExc_EOFError);
2068 result = NULL;
2069 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002070 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002071 if (len > PY_SSIZE_T_MAX) {
2072 PyErr_SetString(PyExc_OverflowError,
2073 "input: input too long");
2074 result = NULL;
2075 }
2076 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002077 len--; /* strip trailing '\n' */
2078 if (len != 0 && s[len-1] == '\r')
2079 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002080 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2081 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 }
2083 }
2084 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002085 Py_DECREF(stdin_errors);
2086 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 PyMem_FREE(s);
2088 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002089
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002090 _readline_errors:
2091 Py_XDECREF(stdin_encoding);
2092 Py_XDECREF(stdout_encoding);
2093 Py_XDECREF(stdin_errors);
2094 Py_XDECREF(stdout_errors);
2095 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002096 if (tty)
2097 return NULL;
2098
2099 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002102 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002103 if (prompt != NULL) {
2104 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002105 return NULL;
2106 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002107 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 if (tmp == NULL)
2109 PyErr_Clear();
2110 else
2111 Py_DECREF(tmp);
2112 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002113}
2114
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002115
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002116/*[clinic input]
2117repr as builtin_repr
2118
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002119 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002120 /
2121
2122Return the canonical string representation of the object.
2123
2124For many object types, including most builtins, eval(repr(obj)) == obj.
2125[clinic start generated code]*/
2126
Guido van Rossum79f25d91997-04-29 20:08:16 +00002127static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002128builtin_repr(PyObject *module, PyObject *obj)
2129/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002130{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002131 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002132}
2133
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002134
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002135/*[clinic input]
2136round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002137
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002138 number: object
2139 ndigits: object = NULL
2140
2141Round a number to a given precision in decimal digits.
2142
2143The return value is an integer if ndigits is omitted or None. Otherwise
2144the return value has the same type as the number. ndigits may be negative.
2145[clinic start generated code]*/
2146
2147static PyObject *
2148builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
2149/*[clinic end generated code: output=ff0d9dd176c02ede input=854bc3a217530c3d]*/
2150{
2151 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002152
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002153 if (Py_TYPE(number)->tp_dict == NULL) {
2154 if (PyType_Ready(Py_TYPE(number)) < 0)
2155 return NULL;
2156 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002157
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002158 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002159 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002160 if (!PyErr_Occurred())
2161 PyErr_Format(PyExc_TypeError,
2162 "type %.100s doesn't define __round__ method",
2163 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 return NULL;
2165 }
Alex Martelliae211f92007-08-22 23:21:33 +00002166
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002167 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002168 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002169 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002170 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002171 Py_DECREF(round);
2172 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002173}
2174
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002175
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002176/*AC: we need to keep the kwds dict intact to easily call into the
2177 * list.sort method, which isn't currently supported in AC. So we just use
2178 * the initially generated signature with a custom implementation.
2179 */
2180/* [disabled clinic input]
2181sorted as builtin_sorted
2182
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002183 iterable as seq: object
2184 key as keyfunc: object = None
2185 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002186
2187Return a new list containing all items from the iterable in ascending order.
2188
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002189A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002190reverse flag can be set to request the result in descending order.
2191[end disabled clinic input]*/
2192
2193PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002194"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002195"--\n"
2196"\n"
2197"Return a new list containing all items from the iterable in ascending order.\n"
2198"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002199"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002200"reverse flag can be set to request the result in descending order.");
2201
2202#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002203 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002204
Raymond Hettinger64958a12003-12-17 20:43:33 +00002205static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002206builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002207{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002208 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002209
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002210 /* Keyword arguments are passed through list.sort() which will check
2211 them. */
2212 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002213 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 newlist = PySequence_List(seq);
2216 if (newlist == NULL)
2217 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002218
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002219 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002220 if (callable == NULL) {
2221 Py_DECREF(newlist);
2222 return NULL;
2223 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002224
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002225 assert(nargs >= 1);
Victor Stinner5a60eca2017-01-17 15:17:49 +01002226 v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 Py_DECREF(callable);
2228 if (v == NULL) {
2229 Py_DECREF(newlist);
2230 return NULL;
2231 }
2232 Py_DECREF(v);
2233 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002234}
2235
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002236
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002237/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002238static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002239builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 PyObject *v = NULL;
2242 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002244 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2245 return NULL;
2246 if (v == NULL) {
2247 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002248 if (d == NULL)
2249 return NULL;
2250 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002251 }
2252 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002253 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002254 if (d == NULL) {
2255 PyErr_SetString(PyExc_TypeError,
2256 "vars() argument must have __dict__ attribute");
2257 return NULL;
2258 }
2259 }
2260 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002261}
2262
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002263PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002264"vars([object]) -> dictionary\n\
2265\n\
2266Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002267With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002268
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002269
2270/*[clinic input]
2271sum as builtin_sum
2272
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002273 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002274 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002275 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002276
2277Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2278
2279When the iterable is empty, return the start value.
2280This function is intended specifically for use with numeric values and may
2281reject non-numeric types.
2282[clinic start generated code]*/
2283
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002284static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002285builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002286/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002287{
2288 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002289 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002290
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002291 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002292 if (iter == NULL)
2293 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002295 if (result == NULL) {
2296 result = PyLong_FromLong(0);
2297 if (result == NULL) {
2298 Py_DECREF(iter);
2299 return NULL;
2300 }
2301 } else {
2302 /* reject string values for 'start' parameter */
2303 if (PyUnicode_Check(result)) {
2304 PyErr_SetString(PyExc_TypeError,
2305 "sum() can't sum strings [use ''.join(seq) instead]");
2306 Py_DECREF(iter);
2307 return NULL;
2308 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002309 if (PyBytes_Check(result)) {
2310 PyErr_SetString(PyExc_TypeError,
2311 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002312 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002313 return NULL;
2314 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002315 if (PyByteArray_Check(result)) {
2316 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002317 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002318 Py_DECREF(iter);
2319 return NULL;
2320 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002321 Py_INCREF(result);
2322 }
Alex Martellia70b1912003-04-22 08:12:33 +00002323
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002324#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002325 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2326 Assumes all inputs are the same type. If the assumption fails, default
2327 to the more general routine.
2328 */
2329 if (PyLong_CheckExact(result)) {
2330 int overflow;
2331 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2332 /* If this already overflowed, don't even enter the loop. */
2333 if (overflow == 0) {
2334 Py_DECREF(result);
2335 result = NULL;
2336 }
2337 while(result == NULL) {
2338 item = PyIter_Next(iter);
2339 if (item == NULL) {
2340 Py_DECREF(iter);
2341 if (PyErr_Occurred())
2342 return NULL;
2343 return PyLong_FromLong(i_result);
2344 }
2345 if (PyLong_CheckExact(item)) {
2346 long b = PyLong_AsLongAndOverflow(item, &overflow);
2347 long x = i_result + b;
2348 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2349 i_result = x;
2350 Py_DECREF(item);
2351 continue;
2352 }
2353 }
2354 /* Either overflowed or is not an int. Restore real objects and process normally */
2355 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002356 if (result == NULL) {
2357 Py_DECREF(item);
2358 Py_DECREF(iter);
2359 return NULL;
2360 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 temp = PyNumber_Add(result, item);
2362 Py_DECREF(result);
2363 Py_DECREF(item);
2364 result = temp;
2365 if (result == NULL) {
2366 Py_DECREF(iter);
2367 return NULL;
2368 }
2369 }
2370 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002372 if (PyFloat_CheckExact(result)) {
2373 double f_result = PyFloat_AS_DOUBLE(result);
2374 Py_DECREF(result);
2375 result = NULL;
2376 while(result == NULL) {
2377 item = PyIter_Next(iter);
2378 if (item == NULL) {
2379 Py_DECREF(iter);
2380 if (PyErr_Occurred())
2381 return NULL;
2382 return PyFloat_FromDouble(f_result);
2383 }
2384 if (PyFloat_CheckExact(item)) {
2385 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2386 f_result += PyFloat_AS_DOUBLE(item);
2387 PyFPE_END_PROTECT(f_result)
2388 Py_DECREF(item);
2389 continue;
2390 }
2391 if (PyLong_CheckExact(item)) {
2392 long value;
2393 int overflow;
2394 value = PyLong_AsLongAndOverflow(item, &overflow);
2395 if (!overflow) {
2396 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2397 f_result += (double)value;
2398 PyFPE_END_PROTECT(f_result)
2399 Py_DECREF(item);
2400 continue;
2401 }
2402 }
2403 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002404 if (result == NULL) {
2405 Py_DECREF(item);
2406 Py_DECREF(iter);
2407 return NULL;
2408 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 temp = PyNumber_Add(result, item);
2410 Py_DECREF(result);
2411 Py_DECREF(item);
2412 result = temp;
2413 if (result == NULL) {
2414 Py_DECREF(iter);
2415 return NULL;
2416 }
2417 }
2418 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002419#endif
2420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002421 for(;;) {
2422 item = PyIter_Next(iter);
2423 if (item == NULL) {
2424 /* error, or end-of-sequence */
2425 if (PyErr_Occurred()) {
2426 Py_DECREF(result);
2427 result = NULL;
2428 }
2429 break;
2430 }
2431 /* It's tempting to use PyNumber_InPlaceAdd instead of
2432 PyNumber_Add here, to avoid quadratic running time
2433 when doing 'sum(list_of_lists, [])'. However, this
2434 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002435
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 empty = []
2437 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 would change the value of empty. */
2440 temp = PyNumber_Add(result, item);
2441 Py_DECREF(result);
2442 Py_DECREF(item);
2443 result = temp;
2444 if (result == NULL)
2445 break;
2446 }
2447 Py_DECREF(iter);
2448 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002449}
2450
Alex Martellia70b1912003-04-22 08:12:33 +00002451
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002452/*[clinic input]
2453isinstance as builtin_isinstance
2454
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002455 obj: object
2456 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002457 /
2458
2459Return whether an object is an instance of a class or of a subclass thereof.
2460
2461A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2462check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2463or ...`` etc.
2464[clinic start generated code]*/
2465
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002466static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002467builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002468 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002469/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002470{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002471 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002472
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002473 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 if (retval < 0)
2475 return NULL;
2476 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002477}
2478
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002479
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002480/*[clinic input]
2481issubclass as builtin_issubclass
2482
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002483 cls: object
2484 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002485 /
2486
2487Return whether 'cls' is a derived from another class or is the same class.
2488
2489A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2490check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2491or ...`` etc.
2492[clinic start generated code]*/
2493
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002494static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002495builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002496 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002497/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002498{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002499 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002500
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002501 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 if (retval < 0)
2503 return NULL;
2504 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002505}
2506
2507
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002508typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 PyObject_HEAD
2510 Py_ssize_t tuplesize;
2511 PyObject *ittuple; /* tuple of iterators */
2512 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002513} zipobject;
2514
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002515static PyObject *
2516zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002517{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002518 zipobject *lz;
2519 Py_ssize_t i;
2520 PyObject *ittuple; /* tuple of iterators */
2521 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002522 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002523
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002524 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002525 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 /* args must be a tuple */
2528 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002529 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 /* obtain iterators */
2532 ittuple = PyTuple_New(tuplesize);
2533 if (ittuple == NULL)
2534 return NULL;
2535 for (i=0; i < tuplesize; ++i) {
2536 PyObject *item = PyTuple_GET_ITEM(args, i);
2537 PyObject *it = PyObject_GetIter(item);
2538 if (it == NULL) {
2539 if (PyErr_ExceptionMatches(PyExc_TypeError))
2540 PyErr_Format(PyExc_TypeError,
2541 "zip argument #%zd must support iteration",
2542 i+1);
2543 Py_DECREF(ittuple);
2544 return NULL;
2545 }
2546 PyTuple_SET_ITEM(ittuple, i, it);
2547 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002548
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002549 /* create a result holder */
2550 result = PyTuple_New(tuplesize);
2551 if (result == NULL) {
2552 Py_DECREF(ittuple);
2553 return NULL;
2554 }
2555 for (i=0 ; i < tuplesize ; i++) {
2556 Py_INCREF(Py_None);
2557 PyTuple_SET_ITEM(result, i, Py_None);
2558 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 /* create zipobject structure */
2561 lz = (zipobject *)type->tp_alloc(type, 0);
2562 if (lz == NULL) {
2563 Py_DECREF(ittuple);
2564 Py_DECREF(result);
2565 return NULL;
2566 }
2567 lz->ittuple = ittuple;
2568 lz->tuplesize = tuplesize;
2569 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002570
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002571 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002572}
2573
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002574static void
2575zip_dealloc(zipobject *lz)
2576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 PyObject_GC_UnTrack(lz);
2578 Py_XDECREF(lz->ittuple);
2579 Py_XDECREF(lz->result);
2580 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002581}
2582
2583static int
2584zip_traverse(zipobject *lz, visitproc visit, void *arg)
2585{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002586 Py_VISIT(lz->ittuple);
2587 Py_VISIT(lz->result);
2588 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002589}
2590
2591static PyObject *
2592zip_next(zipobject *lz)
2593{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002594 Py_ssize_t i;
2595 Py_ssize_t tuplesize = lz->tuplesize;
2596 PyObject *result = lz->result;
2597 PyObject *it;
2598 PyObject *item;
2599 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002601 if (tuplesize == 0)
2602 return NULL;
2603 if (Py_REFCNT(result) == 1) {
2604 Py_INCREF(result);
2605 for (i=0 ; i < tuplesize ; i++) {
2606 it = PyTuple_GET_ITEM(lz->ittuple, i);
2607 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002608 if (item == NULL) {
2609 Py_DECREF(result);
2610 return NULL;
2611 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002612 olditem = PyTuple_GET_ITEM(result, i);
2613 PyTuple_SET_ITEM(result, i, item);
2614 Py_DECREF(olditem);
2615 }
2616 } else {
2617 result = PyTuple_New(tuplesize);
2618 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002619 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002620 for (i=0 ; i < tuplesize ; i++) {
2621 it = PyTuple_GET_ITEM(lz->ittuple, i);
2622 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002623 if (item == NULL) {
2624 Py_DECREF(result);
2625 return NULL;
2626 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002627 PyTuple_SET_ITEM(result, i, item);
2628 }
2629 }
2630 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002631}
Barry Warsawbd599b52000-08-03 15:45:29 +00002632
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002633static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302634zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002635{
2636 /* Just recreate the zip with the internal iterator tuple */
2637 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2638}
2639
2640static PyMethodDef zip_methods[] = {
2641 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2642 {NULL, NULL} /* sentinel */
2643};
2644
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002645PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002646"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002647\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002648Return a zip object whose .__next__() method returns a tuple where\n\
2649the i-th element comes from the i-th iterable argument. The .__next__()\n\
2650method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002651is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002652
2653PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002654 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2655 "zip", /* tp_name */
2656 sizeof(zipobject), /* tp_basicsize */
2657 0, /* tp_itemsize */
2658 /* methods */
2659 (destructor)zip_dealloc, /* tp_dealloc */
2660 0, /* tp_print */
2661 0, /* tp_getattr */
2662 0, /* tp_setattr */
2663 0, /* tp_reserved */
2664 0, /* tp_repr */
2665 0, /* tp_as_number */
2666 0, /* tp_as_sequence */
2667 0, /* tp_as_mapping */
2668 0, /* tp_hash */
2669 0, /* tp_call */
2670 0, /* tp_str */
2671 PyObject_GenericGetAttr, /* tp_getattro */
2672 0, /* tp_setattro */
2673 0, /* tp_as_buffer */
2674 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2675 Py_TPFLAGS_BASETYPE, /* tp_flags */
2676 zip_doc, /* tp_doc */
2677 (traverseproc)zip_traverse, /* tp_traverse */
2678 0, /* tp_clear */
2679 0, /* tp_richcompare */
2680 0, /* tp_weaklistoffset */
2681 PyObject_SelfIter, /* tp_iter */
2682 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002683 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002684 0, /* tp_members */
2685 0, /* tp_getset */
2686 0, /* tp_base */
2687 0, /* tp_dict */
2688 0, /* tp_descr_get */
2689 0, /* tp_descr_set */
2690 0, /* tp_dictoffset */
2691 0, /* tp_init */
2692 PyType_GenericAlloc, /* tp_alloc */
2693 zip_new, /* tp_new */
2694 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002695};
Barry Warsawbd599b52000-08-03 15:45:29 +00002696
2697
Guido van Rossum79f25d91997-04-29 20:08:16 +00002698static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002699 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002700 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002701 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002702 BUILTIN_ABS_METHODDEF
2703 BUILTIN_ALL_METHODDEF
2704 BUILTIN_ANY_METHODDEF
2705 BUILTIN_ASCII_METHODDEF
2706 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002707 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002708 BUILTIN_CALLABLE_METHODDEF
2709 BUILTIN_CHR_METHODDEF
2710 BUILTIN_COMPILE_METHODDEF
2711 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002712 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002713 BUILTIN_DIVMOD_METHODDEF
2714 BUILTIN_EVAL_METHODDEF
2715 BUILTIN_EXEC_METHODDEF
2716 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002717 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002718 BUILTIN_GLOBALS_METHODDEF
2719 BUILTIN_HASATTR_METHODDEF
2720 BUILTIN_HASH_METHODDEF
2721 BUILTIN_HEX_METHODDEF
2722 BUILTIN_ID_METHODDEF
2723 BUILTIN_INPUT_METHODDEF
2724 BUILTIN_ISINSTANCE_METHODDEF
2725 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002726 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002727 BUILTIN_LEN_METHODDEF
2728 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002729 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2730 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2731 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002732 BUILTIN_OCT_METHODDEF
2733 BUILTIN_ORD_METHODDEF
2734 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002735 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002736 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002737 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002738 BUILTIN_SETATTR_METHODDEF
2739 BUILTIN_SORTED_METHODDEF
2740 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2742 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002743};
2744
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002745PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002746"Built-in functions, exceptions, and other objects.\n\
2747\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002748Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002749
Martin v. Löwis1a214512008-06-11 05:26:20 +00002750static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002751 PyModuleDef_HEAD_INIT,
2752 "builtins",
2753 builtin_doc,
2754 -1, /* multiple "initialization" just copies the module dict. */
2755 builtin_methods,
2756 NULL,
2757 NULL,
2758 NULL,
2759 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002760};
2761
2762
Guido van Rossum25ce5661997-08-02 03:10:38 +00002763PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002764_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002765{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002766 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002767
Victor Stinnerfbca9082018-08-30 00:50:45 +02002768 const _PyCoreConfig *config = &_PyInterpreterState_GET_UNSAFE()->core_config;
2769
Benjamin Peterson42124a72012-10-30 23:41:54 -04002770 if (PyType_Ready(&PyFilter_Type) < 0 ||
2771 PyType_Ready(&PyMap_Type) < 0 ||
2772 PyType_Ready(&PyZip_Type) < 0)
2773 return NULL;
2774
Eric Snowd393c1b2017-09-14 12:18:12 -06002775 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002776 if (mod == NULL)
2777 return NULL;
2778 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002779
Tim Peters7571a0f2003-03-23 17:52:28 +00002780#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002781 /* "builtins" exposes a number of statically allocated objects
2782 * that, before this code was added in 2.3, never showed up in
2783 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2784 * result, programs leaking references to None and False (etc)
2785 * couldn't be diagnosed by examining sys.getobjects(0).
2786 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002787#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2788#else
2789#define ADD_TO_ALL(OBJECT) (void)0
2790#endif
2791
Tim Peters4b7625e2001-09-13 21:37:17 +00002792#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002793 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2794 return NULL; \
2795 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002797 SETBUILTIN("None", Py_None);
2798 SETBUILTIN("Ellipsis", Py_Ellipsis);
2799 SETBUILTIN("NotImplemented", Py_NotImplemented);
2800 SETBUILTIN("False", Py_False);
2801 SETBUILTIN("True", Py_True);
2802 SETBUILTIN("bool", &PyBool_Type);
2803 SETBUILTIN("memoryview", &PyMemoryView_Type);
2804 SETBUILTIN("bytearray", &PyByteArray_Type);
2805 SETBUILTIN("bytes", &PyBytes_Type);
2806 SETBUILTIN("classmethod", &PyClassMethod_Type);
2807 SETBUILTIN("complex", &PyComplex_Type);
2808 SETBUILTIN("dict", &PyDict_Type);
2809 SETBUILTIN("enumerate", &PyEnum_Type);
2810 SETBUILTIN("filter", &PyFilter_Type);
2811 SETBUILTIN("float", &PyFloat_Type);
2812 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2813 SETBUILTIN("property", &PyProperty_Type);
2814 SETBUILTIN("int", &PyLong_Type);
2815 SETBUILTIN("list", &PyList_Type);
2816 SETBUILTIN("map", &PyMap_Type);
2817 SETBUILTIN("object", &PyBaseObject_Type);
2818 SETBUILTIN("range", &PyRange_Type);
2819 SETBUILTIN("reversed", &PyReversed_Type);
2820 SETBUILTIN("set", &PySet_Type);
2821 SETBUILTIN("slice", &PySlice_Type);
2822 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2823 SETBUILTIN("str", &PyUnicode_Type);
2824 SETBUILTIN("super", &PySuper_Type);
2825 SETBUILTIN("tuple", &PyTuple_Type);
2826 SETBUILTIN("type", &PyType_Type);
2827 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002828 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002829 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002830 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002831 return NULL;
2832 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002833 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002835 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002836#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002837#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002838}