blob: 047cca057b41ae5c46cf8e4c7763b4e69c263ede [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00004#include <ctype.h>
Victor Stinner5f2df882018-11-12 00:56:19 +01005#include "ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinner621cebe2018-11-12 16:53:38 +01007#include "pycore_pystate.h"
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +05008#include "pycore_tupleobject.h"
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009
Victor Stinnerbd303c12013-11-07 23:07:29 +010010_Py_IDENTIFIER(__builtins__);
11_Py_IDENTIFIER(__dict__);
12_Py_IDENTIFIER(__prepare__);
13_Py_IDENTIFIER(__round__);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010014_Py_IDENTIFIER(__mro_entries__);
Victor Stinnerbd303c12013-11-07 23:07:29 +010015_Py_IDENTIFIER(encoding);
16_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020017_Py_IDENTIFIER(fileno);
18_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010019_Py_IDENTIFIER(metaclass);
20_Py_IDENTIFIER(sort);
21_Py_IDENTIFIER(stdin);
22_Py_IDENTIFIER(stdout);
23_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020024
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030025#include "clinic/bltinmodule.c.h"
26
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010027static PyObject*
Victor Stinner05d68a82018-01-18 11:15:25 +010028update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010029{
Victor Stinner05d68a82018-01-18 11:15:25 +010030 Py_ssize_t i, j;
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010031 PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
32 PyObject *stack[1] = {bases};
33 assert(PyTuple_Check(bases));
34
35 for (i = 0; i < nargs; i++) {
36 base = args[i];
37 if (PyType_Check(base)) {
38 if (new_bases) {
39 /* If we already have made a replacement, then we append every normal base,
40 otherwise just skip it. */
41 if (PyList_Append(new_bases, base) < 0) {
42 goto error;
43 }
44 }
45 continue;
46 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +020047 if (_PyObject_LookupAttrId(base, &PyId___mro_entries__, &meth) < 0) {
48 goto error;
49 }
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010050 if (!meth) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +010051 if (new_bases) {
52 if (PyList_Append(new_bases, base) < 0) {
53 goto error;
54 }
55 }
56 continue;
57 }
58 new_base = _PyObject_FastCall(meth, stack, 1);
59 Py_DECREF(meth);
60 if (!new_base) {
61 goto error;
62 }
63 if (!PyTuple_Check(new_base)) {
64 PyErr_SetString(PyExc_TypeError,
65 "__mro_entries__ must return a tuple");
66 Py_DECREF(new_base);
67 goto error;
68 }
69 if (!new_bases) {
70 /* If this is a first successful replacement, create new_bases list and
71 copy previously encountered bases. */
72 if (!(new_bases = PyList_New(i))) {
73 goto error;
74 }
75 for (j = 0; j < i; j++) {
76 base = args[j];
77 PyList_SET_ITEM(new_bases, j, base);
78 Py_INCREF(base);
79 }
80 }
81 j = PyList_GET_SIZE(new_bases);
82 if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
83 goto error;
84 }
85 Py_DECREF(new_base);
86 }
87 if (!new_bases) {
88 return bases;
89 }
90 result = PyList_AsTuple(new_bases);
91 Py_DECREF(new_bases);
92 return result;
93
94error:
95 Py_XDECREF(new_bases);
96 return NULL;
97}
98
Nick Coghlanf9e227e2014-08-17 14:01:19 +100099/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000100static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200101builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
Victor Stinner773dc6d2017-01-16 23:46:26 +0100102 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000103{
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100104 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *orig_bases;
Nick Coghlan19d24672016-12-05 16:47:55 +1000105 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +0100106 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000108 if (nargs < 2) {
109 PyErr_SetString(PyExc_TypeError,
110 "__build_class__: not enough arguments");
111 return NULL;
112 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100113 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -0500114 if (!PyFunction_Check(func)) {
115 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -0500116 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -0500117 return NULL;
118 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100119 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000120 if (!PyUnicode_Check(name)) {
121 PyErr_SetString(PyExc_TypeError,
122 "__build_class__: name is not a string");
123 return NULL;
124 }
Sergey Fedoseevf1b9abe2019-02-26 02:37:26 +0500125 orig_bases = _PyTuple_FromArray(args + 2, nargs - 2);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100126 if (orig_bases == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000128
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100129 bases = update_bases(orig_bases, args + 2, nargs - 2);
130 if (bases == NULL) {
131 Py_DECREF(orig_bases);
132 return NULL;
133 }
134
Victor Stinner773dc6d2017-01-16 23:46:26 +0100135 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000136 meta = NULL;
137 mkw = NULL;
138 }
139 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +0100140 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 if (mkw == NULL) {
142 Py_DECREF(bases);
143 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000144 }
Victor Stinner773dc6d2017-01-16 23:46:26 +0100145
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200146 meta = _PyDict_GetItemIdWithError(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 if (meta != NULL) {
148 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100149 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 Py_DECREF(meta);
151 Py_DECREF(mkw);
152 Py_DECREF(bases);
153 return NULL;
154 }
Nick Coghlande31b192011-10-23 22:04:16 +1000155 /* metaclass is explicitly given, check if it's indeed a class */
156 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000157 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200158 else if (PyErr_Occurred()) {
159 Py_DECREF(mkw);
160 Py_DECREF(bases);
161 return NULL;
162 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000163 }
164 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000165 /* if there are no bases, use type: */
166 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000168 }
169 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 else {
171 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
172 meta = (PyObject *) (base0->ob_type);
173 }
174 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000175 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000176 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000177
Nick Coghlande31b192011-10-23 22:04:16 +1000178 if (isclass) {
179 /* meta is really a class, so check for a more derived
180 metaclass, or possible metaclass conflicts: */
181 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
182 bases);
183 if (winner == NULL) {
184 Py_DECREF(meta);
185 Py_XDECREF(mkw);
186 Py_DECREF(bases);
187 return NULL;
188 }
189 if (winner != meta) {
190 Py_DECREF(meta);
191 meta = winner;
192 Py_INCREF(meta);
193 }
194 }
195 /* else: meta is not a class, so we cannot do the metaclass
196 calculation, so we will use the explicitly given object as it is */
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200197 if (_PyObject_LookupAttrId(meta, &PyId___prepare__, &prep) < 0) {
198 ns = NULL;
199 }
200 else if (prep == NULL) {
201 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 }
203 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200204 PyObject *pargs[2] = {name, bases};
205 ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 Py_DECREF(prep);
207 }
208 if (ns == NULL) {
209 Py_DECREF(meta);
210 Py_XDECREF(mkw);
211 Py_DECREF(bases);
212 return NULL;
213 }
Oren Milman5837d042017-09-27 17:04:37 +0300214 if (!PyMapping_Check(ns)) {
215 PyErr_Format(PyExc_TypeError,
216 "%.200s.__prepare__() must return a mapping, not %.200s",
217 isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
218 Py_TYPE(ns)->tp_name);
219 goto error;
220 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000221 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
Benjamin Petersone8e14592013-05-16 14:37:25 -0500222 NULL, 0, NULL, 0, NULL, 0, NULL,
223 PyFunction_GET_CLOSURE(func));
Nick Coghlan19d24672016-12-05 16:47:55 +1000224 if (cell != NULL) {
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100225 if (bases != orig_bases) {
226 if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
227 goto error;
228 }
229 }
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200230 PyObject *margs[3] = {name, bases, ns};
231 cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000232 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
233 PyObject *cell_cls = PyCell_GET(cell);
234 if (cell_cls != cls) {
Nick Coghlan19d24672016-12-05 16:47:55 +1000235 if (cell_cls == NULL) {
236 const char *msg =
237 "__class__ not set defining %.200R as %.200R. "
238 "Was __classcell__ propagated to type.__new__?";
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300239 PyErr_Format(PyExc_RuntimeError, msg, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000240 } else {
241 const char *msg =
242 "__class__ set to %.200R defining %.200R as %.200R";
243 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
Nick Coghlan19d24672016-12-05 16:47:55 +1000244 }
Serhiy Storchakaf5e7b192018-05-20 08:48:12 +0300245 Py_DECREF(cls);
246 cls = NULL;
247 goto error;
Nick Coghlan19d24672016-12-05 16:47:55 +1000248 }
249 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000251error:
252 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 Py_DECREF(ns);
254 Py_DECREF(meta);
255 Py_XDECREF(mkw);
256 Py_DECREF(bases);
Ivan Levkivskyi2b5fd1e2017-12-14 23:32:56 +0100257 if (bases != orig_bases) {
258 Py_DECREF(orig_bases);
259 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000261}
262
263PyDoc_STRVAR(build_class_doc,
264"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
265\n\
266Internal helper function used by the class statement.");
267
268static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000269builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
272 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400273 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400274 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000275
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400276 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 kwlist, &name, &globals, &locals, &fromlist, &level))
278 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400279 return PyImport_ImportModuleLevelObject(name, globals, locals,
280 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000281}
282
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000283PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400284"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000285\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000286Import a module. Because this function is meant for use by the Python\n\
oldk461d2252018-02-02 12:20:00 +0800287interpreter and not for general use, it is better to use\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000288importlib.import_module() to programmatically import a module.\n\
289\n\
290The globals argument is only used to determine the context;\n\
291they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000292should be a list of names to emulate ``from name import ...'', or an\n\
293empty list to emulate ``import name''.\n\
294When importing a module from a package, note that __import__('A.B', ...)\n\
295returns package A when fromlist is empty, but its submodule B when\n\
oldk461d2252018-02-02 12:20:00 +0800296fromlist is not empty. The level argument is used to determine whether to\n\
297perform absolute or relative imports: 0 is absolute, while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000298is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000299
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000300
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000301/*[clinic input]
302abs as builtin_abs
303
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300304 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000305 /
306
307Return the absolute value of the argument.
308[clinic start generated code]*/
309
Guido van Rossum79f25d91997-04-29 20:08:16 +0000310static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300311builtin_abs(PyObject *module, PyObject *x)
312/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000313{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000314 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000315}
316
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000317/*[clinic input]
318all as builtin_all
319
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300320 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000321 /
322
323Return True if bool(x) is True for all values x in the iterable.
324
325If the iterable is empty, return True.
326[clinic start generated code]*/
327
Raymond Hettinger96229b12005-03-11 06:49:40 +0000328static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300329builtin_all(PyObject *module, PyObject *iterable)
330/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000331{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 PyObject *it, *item;
333 PyObject *(*iternext)(PyObject *);
334 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000335
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000336 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 if (it == NULL)
338 return NULL;
339 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000340
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000341 for (;;) {
342 item = iternext(it);
343 if (item == NULL)
344 break;
345 cmp = PyObject_IsTrue(item);
346 Py_DECREF(item);
347 if (cmp < 0) {
348 Py_DECREF(it);
349 return NULL;
350 }
351 if (cmp == 0) {
352 Py_DECREF(it);
353 Py_RETURN_FALSE;
354 }
355 }
356 Py_DECREF(it);
357 if (PyErr_Occurred()) {
358 if (PyErr_ExceptionMatches(PyExc_StopIteration))
359 PyErr_Clear();
360 else
361 return NULL;
362 }
363 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000364}
365
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000366/*[clinic input]
367any as builtin_any
368
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300369 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000370 /
371
372Return True if bool(x) is True for any x in the iterable.
373
374If the iterable is empty, return False.
375[clinic start generated code]*/
376
Raymond Hettinger96229b12005-03-11 06:49:40 +0000377static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300378builtin_any(PyObject *module, PyObject *iterable)
379/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000381 PyObject *it, *item;
382 PyObject *(*iternext)(PyObject *);
383 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000384
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000385 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 if (it == NULL)
387 return NULL;
388 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000390 for (;;) {
391 item = iternext(it);
392 if (item == NULL)
393 break;
394 cmp = PyObject_IsTrue(item);
395 Py_DECREF(item);
396 if (cmp < 0) {
397 Py_DECREF(it);
398 return NULL;
399 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400400 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 Py_DECREF(it);
402 Py_RETURN_TRUE;
403 }
404 }
405 Py_DECREF(it);
406 if (PyErr_Occurred()) {
407 if (PyErr_ExceptionMatches(PyExc_StopIteration))
408 PyErr_Clear();
409 else
410 return NULL;
411 }
412 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000413}
414
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000415/*[clinic input]
416ascii as builtin_ascii
417
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300418 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000419 /
420
421Return an ASCII-only representation of an object.
422
423As repr(), return a string containing a printable representation of an
424object, but escape the non-ASCII characters in the string returned by
425repr() using \\x, \\u or \\U escapes. This generates a string similar
426to that returned by repr() in Python 2.
427[clinic start generated code]*/
428
Georg Brandl559e5d72008-06-11 18:37:52 +0000429static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300430builtin_ascii(PyObject *module, PyObject *obj)
431/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000432{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000433 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000434}
435
Georg Brandl559e5d72008-06-11 18:37:52 +0000436
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000437/*[clinic input]
438bin as builtin_bin
439
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300440 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000441 /
442
443Return the binary representation of an integer.
444
445 >>> bin(2796202)
446 '0b1010101010101010101010'
447[clinic start generated code]*/
448
Guido van Rossum79f25d91997-04-29 20:08:16 +0000449static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300450builtin_bin(PyObject *module, PyObject *number)
451/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000452{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000453 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000454}
455
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000456
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000457/*[clinic input]
458callable as builtin_callable
459
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300460 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000461 /
462
463Return whether the object is callable (i.e., some kind of function).
464
465Note that classes are callable, as are instances of classes with a
466__call__() method.
467[clinic start generated code]*/
468
Antoine Pitroue71362d2010-11-27 22:00:11 +0000469static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300470builtin_callable(PyObject *module, PyObject *obj)
471/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000472{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000473 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000474}
475
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400476static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200477builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
Barry Warsaw36c1d1f2017-10-05 12:11:18 -0400478{
479 PyObject *hook = PySys_GetObject("breakpointhook");
480
481 if (hook == NULL) {
482 PyErr_SetString(PyExc_RuntimeError, "lost sys.breakpointhook");
483 return NULL;
484 }
485 Py_INCREF(hook);
486 PyObject *retval = _PyObject_FastCallKeywords(hook, args, nargs, keywords);
487 Py_DECREF(hook);
488 return retval;
489}
490
491PyDoc_STRVAR(breakpoint_doc,
492"breakpoint(*args, **kws)\n\
493\n\
494Call sys.breakpointhook(*args, **kws). sys.breakpointhook() must accept\n\
495whatever arguments are passed.\n\
496\n\
497By default, this drops you into the pdb debugger.");
Antoine Pitroue71362d2010-11-27 22:00:11 +0000498
Raymond Hettinger17301e92008-03-13 00:19:26 +0000499typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000500 PyObject_HEAD
501 PyObject *func;
502 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000503} filterobject;
504
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000505static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000506filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508 PyObject *func, *seq;
509 PyObject *it;
510 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000511
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +0300512 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
516 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 /* Get iterator. */
519 it = PyObject_GetIter(seq);
520 if (it == NULL)
521 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 /* create filterobject structure */
524 lz = (filterobject *)type->tp_alloc(type, 0);
525 if (lz == NULL) {
526 Py_DECREF(it);
527 return NULL;
528 }
529 Py_INCREF(func);
530 lz->func = func;
531 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000532
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000534}
535
536static void
537filter_dealloc(filterobject *lz)
538{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 PyObject_GC_UnTrack(lz);
540 Py_XDECREF(lz->func);
541 Py_XDECREF(lz->it);
542 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000543}
544
545static int
546filter_traverse(filterobject *lz, visitproc visit, void *arg)
547{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 Py_VISIT(lz->it);
549 Py_VISIT(lz->func);
550 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000551}
552
553static PyObject *
554filter_next(filterobject *lz)
555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 PyObject *item;
557 PyObject *it = lz->it;
558 long ok;
559 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400560 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000561
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 iternext = *Py_TYPE(it)->tp_iternext;
563 for (;;) {
564 item = iternext(it);
565 if (item == NULL)
566 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000567
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400568 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569 ok = PyObject_IsTrue(item);
570 } else {
571 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100572 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 if (good == NULL) {
574 Py_DECREF(item);
575 return NULL;
576 }
577 ok = PyObject_IsTrue(good);
578 Py_DECREF(good);
579 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200580 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return item;
582 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200583 if (ok < 0)
584 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000585 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000586}
587
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000588static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +0530589filter_reduce(filterobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000590{
591 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
592}
593
594PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
595
596static PyMethodDef filter_methods[] = {
597 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
598 {NULL, NULL} /* sentinel */
599};
600
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000601PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000602"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000603\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000604Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000605is true. If function is None, return the items that are true.");
606
607PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 PyVarObject_HEAD_INIT(&PyType_Type, 0)
609 "filter", /* tp_name */
610 sizeof(filterobject), /* tp_basicsize */
611 0, /* tp_itemsize */
612 /* methods */
613 (destructor)filter_dealloc, /* tp_dealloc */
614 0, /* tp_print */
615 0, /* tp_getattr */
616 0, /* tp_setattr */
617 0, /* tp_reserved */
618 0, /* tp_repr */
619 0, /* tp_as_number */
620 0, /* tp_as_sequence */
621 0, /* tp_as_mapping */
622 0, /* tp_hash */
623 0, /* tp_call */
624 0, /* tp_str */
625 PyObject_GenericGetAttr, /* tp_getattro */
626 0, /* tp_setattro */
627 0, /* tp_as_buffer */
628 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
629 Py_TPFLAGS_BASETYPE, /* tp_flags */
630 filter_doc, /* tp_doc */
631 (traverseproc)filter_traverse, /* tp_traverse */
632 0, /* tp_clear */
633 0, /* tp_richcompare */
634 0, /* tp_weaklistoffset */
635 PyObject_SelfIter, /* tp_iter */
636 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000637 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 0, /* tp_members */
639 0, /* tp_getset */
640 0, /* tp_base */
641 0, /* tp_dict */
642 0, /* tp_descr_get */
643 0, /* tp_descr_set */
644 0, /* tp_dictoffset */
645 0, /* tp_init */
646 PyType_GenericAlloc, /* tp_alloc */
647 filter_new, /* tp_new */
648 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000649};
650
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000651
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000652/*[clinic input]
653format as builtin_format
654
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300655 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000656 format_spec: unicode(c_default="NULL") = ''
657 /
658
659Return value.__format__(format_spec)
660
Amit Kumar2e6bb442017-05-29 06:32:26 +0530661format_spec defaults to the empty string.
662See the Format Specification Mini-Language section of help('FORMATTING') for
663details.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000664[clinic start generated code]*/
665
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000666static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300667builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
Amit Kumar2e6bb442017-05-29 06:32:26 +0530668/*[clinic end generated code: output=2f40bdfa4954b077 input=88339c93ea522b33]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000669{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000670 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000671}
672
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000673/*[clinic input]
674chr as builtin_chr
675
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300676 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000677 /
678
679Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
680[clinic start generated code]*/
681
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000682static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300683builtin_chr_impl(PyObject *module, int i)
684/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000685{
686 return PyUnicode_FromOrdinal(i);
687}
Guido van Rossum09095f32000-03-10 23:00:52 +0000688
689
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200690static const char *
Martin Pantereeb896c2015-11-07 02:32:21 +0000691source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000692{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200693 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 Py_ssize_t size;
Martin Pantereeb896c2015-11-07 02:32:21 +0000695 Py_buffer view;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000696
Martin Pantereeb896c2015-11-07 02:32:21 +0000697 *cmd_copy = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 if (PyUnicode_Check(cmd)) {
699 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200700 str = PyUnicode_AsUTF8AndSize(cmd, &size);
701 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 return NULL;
703 }
Martin Pantereeb896c2015-11-07 02:32:21 +0000704 else if (PyBytes_Check(cmd)) {
705 str = PyBytes_AS_STRING(cmd);
706 size = PyBytes_GET_SIZE(cmd);
707 }
708 else if (PyByteArray_Check(cmd)) {
709 str = PyByteArray_AS_STRING(cmd);
710 size = PyByteArray_GET_SIZE(cmd);
711 }
712 else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
713 /* Copy to NUL-terminated buffer. */
714 *cmd_copy = PyBytes_FromStringAndSize(
715 (const char *)view.buf, view.len);
716 PyBuffer_Release(&view);
717 if (*cmd_copy == NULL) {
718 return NULL;
719 }
720 str = PyBytes_AS_STRING(*cmd_copy);
721 size = PyBytes_GET_SIZE(*cmd_copy);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200722 }
723 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 PyErr_Format(PyExc_TypeError,
725 "%s() arg 1 must be a %s object",
726 funcname, what);
727 return NULL;
728 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200729
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200730 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300731 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 "source code string cannot contain null bytes");
Martin Pantereeb896c2015-11-07 02:32:21 +0000733 Py_CLEAR(*cmd_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 return NULL;
735 }
736 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000737}
738
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000739/*[clinic input]
740compile as builtin_compile
741
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300742 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000743 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300744 mode: str
745 flags: int = 0
Serhiy Storchaka202fda52017-03-12 10:10:47 +0200746 dont_inherit: bool(accept={int}) = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300747 optimize: int = -1
Guido van Rossum495da292019-03-07 12:38:08 -0800748 feature_version: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000749
750Compile source into a code object that can be executed by exec() or eval().
751
752The source code may represent a Python module, statement or expression.
753The filename will be used for run-time error messages.
754The mode must be 'exec' to compile a module, 'single' to compile a
755single (interactive) statement, or 'eval' to compile an expression.
756The flags argument, if present, controls which future statements influence
757the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300758The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000759the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300760compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000761in addition to any features explicitly specified.
762[clinic start generated code]*/
763
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000764static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300765builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
766 const char *mode, int flags, int dont_inherit,
Guido van Rossum495da292019-03-07 12:38:08 -0800767 int optimize, int feature_version)
768/*[clinic end generated code: output=b0c09c84f116d3d7 input=5fcc30651a6acaa9]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000769{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000770 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200771 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000772 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 int is_ast;
774 PyCompilerFlags cf;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800775 int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000776 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000777
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000778 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -0800779 cf.cf_feature_version = PY_MINOR_VERSION;
780 if (feature_version >= 0 && (flags & PyCF_ONLY_AST)) {
781 cf.cf_feature_version = feature_version;
782 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000783
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000784 if (flags &
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800785 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST | PyCF_TYPE_COMMENTS))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 {
787 PyErr_SetString(PyExc_ValueError,
788 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000789 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 }
791 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000792
Georg Brandl8334fd92010-12-04 10:26:46 +0000793 if (optimize < -1 || optimize > 2) {
794 PyErr_SetString(PyExc_ValueError,
795 "compile(): invalid optimize value");
796 goto error;
797 }
798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 if (!dont_inherit) {
800 PyEval_MergeCompilerFlags(&cf);
801 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000802
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000803 if (strcmp(mode, "exec") == 0)
804 compile_mode = 0;
805 else if (strcmp(mode, "eval") == 0)
806 compile_mode = 1;
807 else if (strcmp(mode, "single") == 0)
808 compile_mode = 2;
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800809 else if (strcmp(mode, "func_type") == 0) {
810 if (!(flags & PyCF_ONLY_AST)) {
811 PyErr_SetString(PyExc_ValueError,
812 "compile() mode 'func_type' requires flag PyCF_ONLY_AST");
813 goto error;
814 }
815 compile_mode = 3;
816 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000817 else {
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800818 const char *msg;
819 if (flags & PyCF_ONLY_AST)
820 msg = "compile() mode must be 'exec', 'eval', 'single' or 'func_type'";
821 else
822 msg = "compile() mode must be 'exec', 'eval' or 'single'";
823 PyErr_SetString(PyExc_ValueError, msg);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000824 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000825 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000826
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000827 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000828 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000829 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000831 if (flags & PyCF_ONLY_AST) {
832 Py_INCREF(source);
833 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 }
835 else {
836 PyArena *arena;
837 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000838
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000839 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200840 if (arena == NULL)
841 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000842 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000843 if (mod == NULL) {
844 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000845 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000846 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500847 if (!PyAST_Validate(mod)) {
848 PyArena_Free(arena);
849 goto error;
850 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200851 result = (PyObject*)PyAST_CompileObject(mod, filename,
852 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000853 PyArena_Free(arena);
854 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000855 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000856 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000857
Martin Panter61d6e4a2015-11-07 02:56:11 +0000858 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000859 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000860 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000861
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000862 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000863 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000864 goto finally;
865
866error:
867 result = NULL;
868finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200869 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000870 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000871}
872
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000873/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000874static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000875builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000876{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
880 return NULL;
881 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000882}
883
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000884PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000885"dir([object]) -> list of strings\n"
886"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000887"If called without an argument, return the names in the current scope.\n"
888"Else, return an alphabetized list of names comprising (some of) the attributes\n"
889"of the given object, and of attributes reachable from it.\n"
890"If the object supplies a method named __dir__, it will be used; otherwise\n"
891"the default dir() logic is used and returns:\n"
892" for a module object: the module's attributes.\n"
893" for a class object: its attributes, and recursively the attributes\n"
894" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000895" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000896" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000897
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000898/*[clinic input]
899divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000900
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300901 x: object
902 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000903 /
904
Zachary Ware7f227d92016-04-28 14:39:50 -0500905Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000906[clinic start generated code]*/
907
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000908static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300909builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
910/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000911{
912 return PyNumber_Divmod(x, y);
913}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914
915
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000916/*[clinic input]
917eval as builtin_eval
918
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300919 source: object
920 globals: object = None
921 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000922 /
923
924Evaluate the given source in the context of globals and locals.
925
926The source may be a string representing a Python expression
927or a code object as returned by compile().
928The globals must be a dictionary and locals can be any mapping,
929defaulting to the current globals and locals.
930If only globals is given, locals defaults to it.
931[clinic start generated code]*/
932
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000933static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300934builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400935 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300936/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000937{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000938 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200939 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 if (locals != Py_None && !PyMapping_Check(locals)) {
943 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
944 return NULL;
945 }
946 if (globals != Py_None && !PyDict_Check(globals)) {
947 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
948 "globals must be a real dict; try eval(expr, {}, mapping)"
949 : "globals must be a dict");
950 return NULL;
951 }
952 if (globals == Py_None) {
953 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100954 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100956 if (locals == NULL)
957 return NULL;
958 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 }
960 else if (locals == Py_None)
961 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000962
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000963 if (globals == NULL || locals == NULL) {
964 PyErr_SetString(PyExc_TypeError,
965 "eval must be given globals and locals "
966 "when called without a frame");
967 return NULL;
968 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000969
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200970 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +0100971 if (_PyDict_SetItemId(globals, &PyId___builtins__,
972 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 return NULL;
974 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +0200975 else if (PyErr_Occurred()) {
976 return NULL;
977 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000978
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000979 if (PyCode_Check(source)) {
980 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 PyErr_SetString(PyExc_TypeError,
982 "code object passed to eval() may not contain free variables");
983 return NULL;
984 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000985 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000988 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -0800989 cf.cf_feature_version = PY_MINOR_VERSION;
Martin Panter61d6e4a2015-11-07 02:56:11 +0000990 str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 if (str == NULL)
992 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 while (*str == ' ' || *str == '\t')
995 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 (void)PyEval_MergeCompilerFlags(&cf);
998 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000999 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001001}
1002
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001003/*[clinic input]
1004exec as builtin_exec
1005
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001006 source: object
1007 globals: object = None
1008 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001009 /
1010
1011Execute the given source in the context of globals and locals.
1012
1013The source may be a string representing one or more Python statements
1014or a code object as returned by compile().
1015The globals must be a dictionary and locals can be any mapping,
1016defaulting to the current globals and locals.
1017If only globals is given, locals defaults to it.
1018[clinic start generated code]*/
1019
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001020static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001021builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -04001022 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001023/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +00001024{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001025 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +00001026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 if (globals == Py_None) {
1028 globals = PyEval_GetGlobals();
1029 if (locals == Py_None) {
1030 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01001031 if (locals == NULL)
1032 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001033 }
1034 if (!globals || !locals) {
1035 PyErr_SetString(PyExc_SystemError,
1036 "globals and locals cannot be NULL");
1037 return NULL;
1038 }
1039 }
1040 else if (locals == Py_None)
1041 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001042
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001044 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 globals->ob_type->tp_name);
1046 return NULL;
1047 }
1048 if (!PyMapping_Check(locals)) {
1049 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001050 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 locals->ob_type->tp_name);
1052 return NULL;
1053 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001054 if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
Victor Stinnerb44562b2013-11-06 19:03:11 +01001055 if (_PyDict_SetItemId(globals, &PyId___builtins__,
1056 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 return NULL;
1058 }
Serhiy Storchakaa24107b2019-02-25 17:59:46 +02001059 else if (PyErr_Occurred()) {
1060 return NULL;
1061 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001063 if (PyCode_Check(source)) {
1064 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 PyErr_SetString(PyExc_TypeError,
1066 "code object passed to exec() may not "
1067 "contain free variables");
1068 return NULL;
1069 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001070 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 }
1072 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +00001073 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +02001074 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 PyCompilerFlags cf;
1076 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Guido van Rossum495da292019-03-07 12:38:08 -08001077 cf.cf_feature_version = PY_MINOR_VERSION;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001078 str = source_as_string(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +00001079 "string, bytes or code", &cf,
1080 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 if (str == NULL)
1082 return NULL;
1083 if (PyEval_MergeCompilerFlags(&cf))
1084 v = PyRun_StringFlags(str, Py_file_input, globals,
1085 locals, &cf);
1086 else
1087 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +00001088 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 }
1090 if (v == NULL)
1091 return NULL;
1092 Py_DECREF(v);
1093 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +00001094}
1095
Georg Brandl7cae87c2006-09-06 06:51:57 +00001096
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001097/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001099builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum33894be1992-01-27 16:53:09 +00001100{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001101 PyObject *v, *name, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001102
Serhiy Storchaka79342662019-01-12 08:25:41 +02001103 if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
Sylvain96c7c062017-06-15 17:05:23 +02001104 return NULL;
1105
Serhiy Storchaka79342662019-01-12 08:25:41 +02001106 v = args[0];
1107 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 if (!PyUnicode_Check(name)) {
1109 PyErr_SetString(PyExc_TypeError,
1110 "getattr(): attribute name must be string");
1111 return NULL;
1112 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001113 if (nargs > 2) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001114 if (_PyObject_LookupAttr(v, name, &result) == 0) {
Serhiy Storchaka79342662019-01-12 08:25:41 +02001115 PyObject *dflt = args[2];
INADA Naoki378edee2018-01-16 20:52:41 +09001116 Py_INCREF(dflt);
1117 return dflt;
1118 }
1119 }
1120 else {
1121 result = PyObject_GetAttr(v, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001122 }
1123 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001124}
1125
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001126PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001127"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001128\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001129Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1130When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001131exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001132
1133
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001134/*[clinic input]
1135globals as builtin_globals
1136
1137Return the dictionary containing the current scope's global variables.
1138
1139NOTE: Updates to this dictionary *will* affect name lookups in the current
1140global scope and vice-versa.
1141[clinic start generated code]*/
1142
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001143static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001144builtin_globals_impl(PyObject *module)
1145/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001146{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 d = PyEval_GetGlobals();
1150 Py_XINCREF(d);
1151 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001152}
1153
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001155/*[clinic input]
1156hasattr as builtin_hasattr
1157
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001158 obj: object
1159 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001160 /
1161
1162Return whether the object has an attribute with the given name.
1163
1164This is done by calling getattr(obj, name) and catching AttributeError.
1165[clinic start generated code]*/
1166
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001167static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001168builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1169/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001170{
1171 PyObject *v;
1172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 if (!PyUnicode_Check(name)) {
1174 PyErr_SetString(PyExc_TypeError,
1175 "hasattr(): attribute name must be string");
1176 return NULL;
1177 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001178 if (_PyObject_LookupAttr(obj, name, &v) < 0) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001179 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001181 if (v == NULL) {
1182 Py_RETURN_FALSE;
1183 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001184 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001185 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001186}
1187
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001188
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001189/* AC: gdb's integration with CPython relies on builtin_id having
1190 * the *exact* parameter names of "self" and "v", so we ensure we
1191 * preserve those name rather than using the AC defaults.
1192 */
1193/*[clinic input]
1194id as builtin_id
1195
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001196 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001197 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001198 /
1199
1200Return the identity of an object.
1201
1202This is guaranteed to be unique among simultaneously existing objects.
1203(CPython uses the object's memory address.)
1204[clinic start generated code]*/
1205
Guido van Rossum79f25d91997-04-29 20:08:16 +00001206static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001207builtin_id(PyModuleDef *self, PyObject *v)
1208/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001209{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001211}
1212
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001213
Raymond Hettingera6c60372008-03-13 01:26:19 +00001214/* map object ************************************************************/
1215
1216typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001217 PyObject_HEAD
1218 PyObject *iters;
1219 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001220} mapobject;
1221
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001223map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001224{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 PyObject *it, *iters, *func;
1226 mapobject *lz;
1227 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001228
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03001229 if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 numargs = PyTuple_Size(args);
1233 if (numargs < 2) {
1234 PyErr_SetString(PyExc_TypeError,
1235 "map() must have at least two arguments.");
1236 return NULL;
1237 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 iters = PyTuple_New(numargs-1);
1240 if (iters == NULL)
1241 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 for (i=1 ; i<numargs ; i++) {
1244 /* Get iterator. */
1245 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1246 if (it == NULL) {
1247 Py_DECREF(iters);
1248 return NULL;
1249 }
1250 PyTuple_SET_ITEM(iters, i-1, it);
1251 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 /* create mapobject structure */
1254 lz = (mapobject *)type->tp_alloc(type, 0);
1255 if (lz == NULL) {
1256 Py_DECREF(iters);
1257 return NULL;
1258 }
1259 lz->iters = iters;
1260 func = PyTuple_GET_ITEM(args, 0);
1261 Py_INCREF(func);
1262 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001265}
1266
1267static void
1268map_dealloc(mapobject *lz)
1269{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 PyObject_GC_UnTrack(lz);
1271 Py_XDECREF(lz->iters);
1272 Py_XDECREF(lz->func);
1273 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001274}
1275
1276static int
1277map_traverse(mapobject *lz, visitproc visit, void *arg)
1278{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001279 Py_VISIT(lz->iters);
1280 Py_VISIT(lz->func);
1281 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001282}
1283
1284static PyObject *
1285map_next(mapobject *lz)
1286{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001287 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001288 PyObject **stack;
1289 Py_ssize_t niters, nargs, i;
1290 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001291
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001292 niters = PyTuple_GET_SIZE(lz->iters);
1293 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1294 stack = small_stack;
1295 }
1296 else {
1297 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1298 if (stack == NULL) {
1299 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001300 return NULL;
1301 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001302 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001303
1304 nargs = 0;
1305 for (i=0; i < niters; i++) {
1306 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1307 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1308 if (val == NULL) {
1309 goto exit;
1310 }
1311 stack[i] = val;
1312 nargs++;
1313 }
1314
1315 result = _PyObject_FastCall(lz->func, stack, nargs);
1316
1317exit:
1318 for (i=0; i < nargs; i++) {
1319 Py_DECREF(stack[i]);
1320 }
1321 if (stack != small_stack) {
1322 PyMem_Free(stack);
1323 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001324 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001325}
1326
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001327static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05301328map_reduce(mapobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001329{
1330 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1331 PyObject *args = PyTuple_New(numargs+1);
1332 Py_ssize_t i;
1333 if (args == NULL)
1334 return NULL;
1335 Py_INCREF(lz->func);
1336 PyTuple_SET_ITEM(args, 0, lz->func);
1337 for (i = 0; i<numargs; i++){
1338 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1339 Py_INCREF(it);
1340 PyTuple_SET_ITEM(args, i+1, it);
1341 }
1342
1343 return Py_BuildValue("ON", Py_TYPE(lz), args);
1344}
1345
1346static PyMethodDef map_methods[] = {
1347 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1348 {NULL, NULL} /* sentinel */
1349};
1350
1351
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001352PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001353"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001354\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001355Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001357
Raymond Hettingera6c60372008-03-13 01:26:19 +00001358PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001359 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1360 "map", /* tp_name */
1361 sizeof(mapobject), /* tp_basicsize */
1362 0, /* tp_itemsize */
1363 /* methods */
1364 (destructor)map_dealloc, /* tp_dealloc */
1365 0, /* tp_print */
1366 0, /* tp_getattr */
1367 0, /* tp_setattr */
1368 0, /* tp_reserved */
1369 0, /* tp_repr */
1370 0, /* tp_as_number */
1371 0, /* tp_as_sequence */
1372 0, /* tp_as_mapping */
1373 0, /* tp_hash */
1374 0, /* tp_call */
1375 0, /* tp_str */
1376 PyObject_GenericGetAttr, /* tp_getattro */
1377 0, /* tp_setattro */
1378 0, /* tp_as_buffer */
1379 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1380 Py_TPFLAGS_BASETYPE, /* tp_flags */
1381 map_doc, /* tp_doc */
1382 (traverseproc)map_traverse, /* tp_traverse */
1383 0, /* tp_clear */
1384 0, /* tp_richcompare */
1385 0, /* tp_weaklistoffset */
1386 PyObject_SelfIter, /* tp_iter */
1387 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001388 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001389 0, /* tp_members */
1390 0, /* tp_getset */
1391 0, /* tp_base */
1392 0, /* tp_dict */
1393 0, /* tp_descr_get */
1394 0, /* tp_descr_set */
1395 0, /* tp_dictoffset */
1396 0, /* tp_init */
1397 PyType_GenericAlloc, /* tp_alloc */
1398 map_new, /* tp_new */
1399 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001400};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001401
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001402
1403/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001404static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001405builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Georg Brandla18af4e2007-04-21 15:47:16 +00001406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001407 PyObject *it, *res;
Georg Brandla18af4e2007-04-21 15:47:16 +00001408
Serhiy Storchaka79342662019-01-12 08:25:41 +02001409 if (!_PyArg_CheckPositional("next", nargs, 1, 2))
Sylvain96c7c062017-06-15 17:05:23 +02001410 return NULL;
1411
Serhiy Storchaka79342662019-01-12 08:25:41 +02001412 it = args[0];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001413 if (!PyIter_Check(it)) {
1414 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001415 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 it->ob_type->tp_name);
1417 return NULL;
1418 }
1419
1420 res = (*it->ob_type->tp_iternext)(it);
1421 if (res != NULL) {
1422 return res;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001423 } else if (nargs > 1) {
1424 PyObject *def = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 if (PyErr_Occurred()) {
1426 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1427 return NULL;
1428 PyErr_Clear();
1429 }
1430 Py_INCREF(def);
1431 return def;
1432 } else if (PyErr_Occurred()) {
1433 return NULL;
1434 } else {
1435 PyErr_SetNone(PyExc_StopIteration);
1436 return NULL;
1437 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001438}
1439
1440PyDoc_STRVAR(next_doc,
1441"next(iterator[, default])\n\
1442\n\
1443Return the next item from the iterator. If default is given and the iterator\n\
1444is exhausted, it is returned instead of raising StopIteration.");
1445
1446
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001447/*[clinic input]
1448setattr as builtin_setattr
1449
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001450 obj: object
1451 name: object
1452 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001453 /
1454
1455Sets the named attribute on the given object to the specified value.
1456
1457setattr(x, 'y', v) is equivalent to ``x.y = v''
1458[clinic start generated code]*/
1459
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001460static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001461builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001462 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001463/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001464{
1465 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001467 Py_RETURN_NONE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001468}
1469
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001470
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001471/*[clinic input]
1472delattr as builtin_delattr
1473
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001474 obj: object
1475 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001476 /
1477
1478Deletes the named attribute from the given object.
1479
1480delattr(x, 'y') is equivalent to ``del x.y''
1481[clinic start generated code]*/
1482
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001483static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001484builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1485/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001486{
1487 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 return NULL;
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001489 Py_RETURN_NONE;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001490}
1491
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001492
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001493/*[clinic input]
1494hash as builtin_hash
1495
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001496 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001497 /
1498
1499Return the hash value for the given object.
1500
1501Two objects that compare equal must also have the same hash value, but the
1502reverse is not necessarily true.
1503[clinic start generated code]*/
1504
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001506builtin_hash(PyObject *module, PyObject *obj)
1507/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001508{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001509 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001510
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001511 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001512 if (x == -1)
1513 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001514 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001515}
1516
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001517
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001518/*[clinic input]
1519hex as builtin_hex
1520
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001521 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001522 /
1523
1524Return the hexadecimal representation of an integer.
1525
1526 >>> hex(12648430)
1527 '0xc0ffee'
1528[clinic start generated code]*/
1529
Guido van Rossum79f25d91997-04-29 20:08:16 +00001530static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001531builtin_hex(PyObject *module, PyObject *number)
1532/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001533{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001534 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001535}
1536
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001537
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001538/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001539static PyObject *
Serhiy Storchaka79342662019-01-12 08:25:41 +02001540builtin_iter(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001541{
Serhiy Storchaka79342662019-01-12 08:25:41 +02001542 PyObject *v;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001543
Serhiy Storchaka79342662019-01-12 08:25:41 +02001544 if (!_PyArg_CheckPositional("iter", nargs, 1, 2))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001545 return NULL;
Serhiy Storchaka79342662019-01-12 08:25:41 +02001546 v = args[0];
1547 if (nargs == 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 return PyObject_GetIter(v);
1549 if (!PyCallable_Check(v)) {
1550 PyErr_SetString(PyExc_TypeError,
1551 "iter(v, w): v must be callable");
1552 return NULL;
1553 }
Serhiy Storchaka79342662019-01-12 08:25:41 +02001554 PyObject *sentinel = args[1];
1555 return PyCallIter_New(v, sentinel);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001556}
1557
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001558PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001559"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001560iter(callable, sentinel) -> iterator\n\
1561\n\
1562Get an iterator from an object. In the first form, the argument must\n\
1563supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001564In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001565
1566
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001567/*[clinic input]
1568len as builtin_len
1569
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001570 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001571 /
1572
1573Return the number of items in a container.
1574[clinic start generated code]*/
1575
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001576static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001577builtin_len(PyObject *module, PyObject *obj)
1578/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001579{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001580 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001581
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001582 res = PyObject_Size(obj);
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001583 if (res < 0) {
1584 assert(PyErr_Occurred());
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 return NULL;
Serhiy Storchaka813f9432017-04-16 09:21:44 +03001586 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001587 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001588}
1589
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001590
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001591/*[clinic input]
1592locals as builtin_locals
1593
1594Return a dictionary containing the current scope's local variables.
1595
1596NOTE: Whether or not updates to this dictionary will affect name lookups in
1597the local scope and vice-versa is *implementation dependent* and not
1598covered by any backwards compatibility guarantees.
1599[clinic start generated code]*/
1600
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001601static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001602builtin_locals_impl(PyObject *module)
1603/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001604{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 d = PyEval_GetLocals();
1608 Py_XINCREF(d);
1609 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001610}
1611
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001612
Guido van Rossum79f25d91997-04-29 20:08:16 +00001613static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001614min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001615{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001617 PyObject *emptytuple, *defaultval = NULL;
1618 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001619 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001620 const int positional = PyTuple_Size(args) > 1;
1621 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001622
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001623 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001625 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001627
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001628 emptytuple = PyTuple_New(0);
1629 if (emptytuple == NULL)
1630 return NULL;
Oren Milman58cf7482017-08-21 20:19:07 +03001631 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds,
1632 (op == Py_LT) ? "|$OO:min" : "|$OO:max",
1633 kwlist, &keyfunc, &defaultval);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001634 Py_DECREF(emptytuple);
1635 if (!ret)
1636 return NULL;
1637
1638 if (positional && defaultval != NULL) {
1639 PyErr_Format(PyExc_TypeError,
1640 "Cannot specify a default for %s() with multiple "
1641 "positional arguments", name);
1642 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 it = PyObject_GetIter(v);
1646 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 return NULL;
1648 }
Tim Petersc3074532001-05-03 07:00:32 +00001649
Alexander Marshalove22072f2018-07-24 10:58:21 +07001650 if (keyfunc == Py_None) {
1651 keyfunc = NULL;
1652 }
1653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 maxitem = NULL; /* the result */
1655 maxval = NULL; /* the value associated with the result */
1656 while (( item = PyIter_Next(it) )) {
1657 /* get the value from the key function */
1658 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001659 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001660 if (val == NULL)
1661 goto Fail_it_item;
1662 }
1663 /* no key function; the value is the item */
1664 else {
1665 val = item;
1666 Py_INCREF(val);
1667 }
Tim Petersc3074532001-05-03 07:00:32 +00001668
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001669 /* maximum value and item are unset; set them */
1670 if (maxval == NULL) {
1671 maxitem = item;
1672 maxval = val;
1673 }
1674 /* maximum value and item are set; update them as necessary */
1675 else {
1676 int cmp = PyObject_RichCompareBool(val, maxval, op);
1677 if (cmp < 0)
1678 goto Fail_it_item_and_val;
1679 else if (cmp > 0) {
1680 Py_DECREF(maxval);
1681 Py_DECREF(maxitem);
1682 maxval = val;
1683 maxitem = item;
1684 }
1685 else {
1686 Py_DECREF(item);
1687 Py_DECREF(val);
1688 }
1689 }
1690 }
1691 if (PyErr_Occurred())
1692 goto Fail_it;
1693 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001695 if (defaultval != NULL) {
1696 Py_INCREF(defaultval);
1697 maxitem = defaultval;
1698 } else {
1699 PyErr_Format(PyExc_ValueError,
1700 "%s() arg is an empty sequence", name);
1701 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 }
1703 else
1704 Py_DECREF(maxval);
1705 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001707
1708Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001710Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001712Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001713 Py_XDECREF(maxval);
1714 Py_XDECREF(maxitem);
1715 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001717}
1718
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001719/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001720static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001721builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001722{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001723 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001724}
1725
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001726PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001727"min(iterable, *[, default=obj, key=func]) -> value\n\
1728min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001729\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001730With a single iterable argument, return its smallest item. The\n\
1731default keyword-only argument specifies an object to return if\n\
1732the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001733With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001734
1735
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001736/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001737static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001738builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001739{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001740 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001741}
1742
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001743PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001744"max(iterable, *[, default=obj, key=func]) -> value\n\
1745max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001746\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001747With a single iterable argument, return its biggest item. The\n\
1748default keyword-only argument specifies an object to return if\n\
1749the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001750With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001751
1752
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001753/*[clinic input]
1754oct as builtin_oct
1755
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001756 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001757 /
1758
1759Return the octal representation of an integer.
1760
1761 >>> oct(342391)
1762 '0o1234567'
1763[clinic start generated code]*/
1764
Guido van Rossum79f25d91997-04-29 20:08:16 +00001765static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001766builtin_oct(PyObject *module, PyObject *number)
1767/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001768{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001769 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001770}
1771
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001772
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001773/*[clinic input]
1774ord as builtin_ord
1775
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001776 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001777 /
1778
1779Return the Unicode code point for a one-character string.
1780[clinic start generated code]*/
1781
Guido van Rossum79f25d91997-04-29 20:08:16 +00001782static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001783builtin_ord(PyObject *module, PyObject *c)
1784/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 long ord;
1787 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001788
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001789 if (PyBytes_Check(c)) {
1790 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001791 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001792 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 return PyLong_FromLong(ord);
1794 }
1795 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001796 else if (PyUnicode_Check(c)) {
1797 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001798 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001799 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001800 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001801 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001802 return PyLong_FromLong(ord);
1803 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001804 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001805 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001807 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001808 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001809 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 return PyLong_FromLong(ord);
1811 }
1812 }
1813 else {
1814 PyErr_Format(PyExc_TypeError,
1815 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001816 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001817 return NULL;
1818 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001819
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001820 PyErr_Format(PyExc_TypeError,
1821 "ord() expected a character, "
1822 "but string of length %zd found",
1823 size);
1824 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001825}
1826
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001827
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001828/*[clinic input]
1829pow as builtin_pow
1830
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001831 x: object
1832 y: object
1833 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001834 /
1835
1836Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1837
1838Some types, such as ints, are able to use a more efficient algorithm when
1839invoked using the three argument form.
1840[clinic start generated code]*/
1841
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001842static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001843builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1844/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001845{
1846 return PyNumber_Power(x, y, z);
1847}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001848
1849
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001850/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001851static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001852builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Guido van Rossum34343512006-11-30 22:13:52 +00001853{
INADA Naokibd584f12017-01-19 12:50:34 +01001854 static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
1855 static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
Georg Brandlbc3b6822012-01-13 19:41:25 +01001856 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001858
INADA Naokibd584f12017-01-19 12:50:34 +01001859 if (kwnames != NULL &&
1860 !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser,
1861 &sep, &end, &file, &flush)) {
Georg Brandlbc3b6822012-01-13 19:41:25 +01001862 return NULL;
INADA Naokibd584f12017-01-19 12:50:34 +01001863 }
1864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001865 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001866 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001867 if (file == NULL) {
1868 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1869 return NULL;
1870 }
1871
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001872 /* sys.stdout may be None when FILE* stdout isn't connected */
1873 if (file == Py_None)
1874 Py_RETURN_NONE;
1875 }
Guido van Rossum34343512006-11-30 22:13:52 +00001876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 if (sep == Py_None) {
1878 sep = NULL;
1879 }
1880 else if (sep && !PyUnicode_Check(sep)) {
1881 PyErr_Format(PyExc_TypeError,
1882 "sep must be None or a string, not %.200s",
1883 sep->ob_type->tp_name);
1884 return NULL;
1885 }
1886 if (end == Py_None) {
1887 end = NULL;
1888 }
1889 else if (end && !PyUnicode_Check(end)) {
1890 PyErr_Format(PyExc_TypeError,
1891 "end must be None or a string, not %.200s",
1892 end->ob_type->tp_name);
1893 return NULL;
1894 }
Guido van Rossum34343512006-11-30 22:13:52 +00001895
INADA Naokibd584f12017-01-19 12:50:34 +01001896 for (i = 0; i < nargs; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 if (i > 0) {
1898 if (sep == NULL)
1899 err = PyFile_WriteString(" ", file);
1900 else
1901 err = PyFile_WriteObject(sep, file,
1902 Py_PRINT_RAW);
1903 if (err)
1904 return NULL;
1905 }
INADA Naokibd584f12017-01-19 12:50:34 +01001906 err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 if (err)
1908 return NULL;
1909 }
Guido van Rossum34343512006-11-30 22:13:52 +00001910
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 if (end == NULL)
1912 err = PyFile_WriteString("\n", file);
1913 else
1914 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1915 if (err)
1916 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001917
Georg Brandlbc3b6822012-01-13 19:41:25 +01001918 if (flush != NULL) {
1919 PyObject *tmp;
1920 int do_flush = PyObject_IsTrue(flush);
1921 if (do_flush == -1)
1922 return NULL;
1923 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001924 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001925 if (tmp == NULL)
1926 return NULL;
1927 else
1928 Py_DECREF(tmp);
1929 }
1930 }
1931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001932 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001933}
1934
1935PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001936"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001937\n\
1938Prints the values to a stream, or to sys.stdout by default.\n\
1939Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001940file: a file-like object (stream); defaults to the current sys.stdout.\n\
1941sep: string inserted between values, default a space.\n\
1942end: string appended after the last value, default a newline.\n\
1943flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001944
1945
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001946/*[clinic input]
1947input as builtin_input
1948
1949 prompt: object(c_default="NULL") = None
1950 /
1951
1952Read a string from standard input. The trailing newline is stripped.
1953
1954The prompt string, if given, is printed to standard output without a
1955trailing newline before reading input.
1956
1957If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1958On *nix systems, readline is used if available.
1959[clinic start generated code]*/
1960
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001961static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001962builtin_input_impl(PyObject *module, PyObject *prompt)
1963/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001964{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001965 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1966 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1967 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001968 PyObject *tmp;
1969 long fd;
1970 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001971
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 /* Check that stdin/out/err are intact */
1973 if (fin == NULL || fin == Py_None) {
1974 PyErr_SetString(PyExc_RuntimeError,
1975 "input(): lost sys.stdin");
1976 return NULL;
1977 }
1978 if (fout == NULL || fout == Py_None) {
1979 PyErr_SetString(PyExc_RuntimeError,
1980 "input(): lost sys.stdout");
1981 return NULL;
1982 }
1983 if (ferr == NULL || ferr == Py_None) {
1984 PyErr_SetString(PyExc_RuntimeError,
1985 "input(): lost sys.stderr");
1986 return NULL;
1987 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001988
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001990 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991 if (tmp == NULL)
1992 PyErr_Clear();
1993 else
1994 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001995
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 /* We should only use (GNU) readline if Python's sys.stdin and
1997 sys.stdout are the same as C's stdin and stdout, because we
1998 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001999 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 if (tmp == NULL) {
2001 PyErr_Clear();
2002 tty = 0;
2003 }
2004 else {
2005 fd = PyLong_AsLong(tmp);
2006 Py_DECREF(tmp);
2007 if (fd < 0 && PyErr_Occurred())
2008 return NULL;
2009 tty = fd == fileno(stdin) && isatty(fd);
2010 }
2011 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07002012 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00002013 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002014 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00002015 tty = 0;
2016 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002017 else {
2018 fd = PyLong_AsLong(tmp);
2019 Py_DECREF(tmp);
2020 if (fd < 0 && PyErr_Occurred())
2021 return NULL;
2022 tty = fd == fileno(stdout) && isatty(fd);
2023 }
2024 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002025
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002026 /* If we're interactive, use (GNU) readline */
2027 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002028 PyObject *po = NULL;
Serhiy Storchakae2f92de2017-11-11 13:06:26 +02002029 const char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002030 char *s = NULL;
2031 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
2032 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002033 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002034 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002035 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00002036
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002037 /* stdin is a text stream, so it must have an encoding. */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002038 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002039 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002040 if (!stdin_encoding || !stdin_errors ||
2041 !PyUnicode_Check(stdin_encoding) ||
2042 !PyUnicode_Check(stdin_errors)) {
2043 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002044 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002045 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002046 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
2047 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002048 if (!stdin_encoding_str || !stdin_errors_str)
2049 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07002050 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002051 if (tmp == NULL)
2052 PyErr_Clear();
2053 else
2054 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002055 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002056 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002057 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002059 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01002060 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002061 if (!stdout_encoding || !stdout_errors ||
2062 !PyUnicode_Check(stdout_encoding) ||
2063 !PyUnicode_Check(stdout_errors)) {
2064 tty = 0;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002065 goto _readline_errors;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002066 }
Serhiy Storchaka06515832016-11-20 09:13:07 +02002067 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
2068 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002069 if (!stdout_encoding_str || !stdout_errors_str)
2070 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002071 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002072 if (stringpo == NULL)
2073 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002074 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002075 stdout_encoding_str, stdout_errors_str);
2076 Py_CLEAR(stdout_encoding);
2077 Py_CLEAR(stdout_errors);
2078 Py_CLEAR(stringpo);
2079 if (po == NULL)
2080 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03002081 assert(PyBytes_Check(po));
2082 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002083 }
2084 else {
2085 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002086 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002088 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002089 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01002090 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 if (!PyErr_Occurred())
2092 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002093 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002095
2096 len = strlen(s);
2097 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 PyErr_SetNone(PyExc_EOFError);
2099 result = NULL;
2100 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002101 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002102 if (len > PY_SSIZE_T_MAX) {
2103 PyErr_SetString(PyExc_OverflowError,
2104 "input: input too long");
2105 result = NULL;
2106 }
2107 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00002108 len--; /* strip trailing '\n' */
2109 if (len != 0 && s[len-1] == '\r')
2110 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002111 result = PyUnicode_Decode(s, len, stdin_encoding_str,
2112 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 }
2114 }
2115 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002116 Py_DECREF(stdin_errors);
2117 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 PyMem_FREE(s);
2119 return result;
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002120
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002121 _readline_errors:
2122 Py_XDECREF(stdin_encoding);
2123 Py_XDECREF(stdout_encoding);
2124 Py_XDECREF(stdin_errors);
2125 Py_XDECREF(stdout_errors);
2126 Py_XDECREF(po);
Serhiy Storchakac2cf1282017-03-12 13:50:36 +02002127 if (tty)
2128 return NULL;
2129
2130 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002131 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002133 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002134 if (prompt != NULL) {
2135 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 return NULL;
2137 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002138 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 if (tmp == NULL)
2140 PyErr_Clear();
2141 else
2142 Py_DECREF(tmp);
2143 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002144}
2145
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002146
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002147/*[clinic input]
2148repr as builtin_repr
2149
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002150 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002151 /
2152
2153Return the canonical string representation of the object.
2154
2155For many object types, including most builtins, eval(repr(obj)) == obj.
2156[clinic start generated code]*/
2157
Guido van Rossum79f25d91997-04-29 20:08:16 +00002158static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002159builtin_repr(PyObject *module, PyObject *obj)
2160/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002161{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002162 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002163}
2164
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002165
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002166/*[clinic input]
2167round as builtin_round
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002168
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002169 number: object
2170 ndigits: object = NULL
2171
2172Round a number to a given precision in decimal digits.
2173
2174The return value is an integer if ndigits is omitted or None. Otherwise
2175the return value has the same type as the number. ndigits may be negative.
2176[clinic start generated code]*/
2177
2178static PyObject *
2179builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
2180/*[clinic end generated code: output=ff0d9dd176c02ede input=854bc3a217530c3d]*/
2181{
2182 PyObject *round, *result;
Alex Martelliae211f92007-08-22 23:21:33 +00002183
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 if (Py_TYPE(number)->tp_dict == NULL) {
2185 if (PyType_Ready(Py_TYPE(number)) < 0)
2186 return NULL;
2187 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002188
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002189 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002191 if (!PyErr_Occurred())
2192 PyErr_Format(PyExc_TypeError,
2193 "type %.100s doesn't define __round__ method",
2194 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002195 return NULL;
2196 }
Alex Martelliae211f92007-08-22 23:21:33 +00002197
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002198 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002199 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002201 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002202 Py_DECREF(round);
2203 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002204}
2205
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002206
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002207/*AC: we need to keep the kwds dict intact to easily call into the
2208 * list.sort method, which isn't currently supported in AC. So we just use
2209 * the initially generated signature with a custom implementation.
2210 */
2211/* [disabled clinic input]
2212sorted as builtin_sorted
2213
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002214 iterable as seq: object
2215 key as keyfunc: object = None
2216 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002217
2218Return a new list containing all items from the iterable in ascending order.
2219
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002220A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002221reverse flag can be set to request the result in descending order.
2222[end disabled clinic input]*/
2223
2224PyDoc_STRVAR(builtin_sorted__doc__,
Serhiy Storchaka3a104252017-01-23 12:29:47 +02002225"sorted($module, iterable, /, *, key=None, reverse=False)\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002226"--\n"
2227"\n"
2228"Return a new list containing all items from the iterable in ascending order.\n"
2229"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002230"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002231"reverse flag can be set to request the result in descending order.");
2232
2233#define BUILTIN_SORTED_METHODDEF \
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002234 {"sorted", (PyCFunction)(void(*)(void))builtin_sorted, METH_FASTCALL | METH_KEYWORDS, builtin_sorted__doc__},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002235
Raymond Hettinger64958a12003-12-17 20:43:33 +00002236static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02002237builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Raymond Hettinger64958a12003-12-17 20:43:33 +00002238{
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002239 PyObject *newlist, *v, *seq, *callable;
Victor Stinner5a60eca2017-01-17 15:17:49 +01002240
Serhiy Storchaka7cf8beb2017-01-21 23:05:00 +02002241 /* Keyword arguments are passed through list.sort() which will check
2242 them. */
2243 if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002244 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002245
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002246 newlist = PySequence_List(seq);
2247 if (newlist == NULL)
2248 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002249
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002250 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002251 if (callable == NULL) {
2252 Py_DECREF(newlist);
2253 return NULL;
2254 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002255
Serhiy Storchaka299dc232017-01-20 08:35:18 +02002256 assert(nargs >= 1);
Victor Stinner5a60eca2017-01-17 15:17:49 +01002257 v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002258 Py_DECREF(callable);
2259 if (v == NULL) {
2260 Py_DECREF(newlist);
2261 return NULL;
2262 }
2263 Py_DECREF(v);
2264 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002265}
2266
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002267
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002268/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002269static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002270builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002272 PyObject *v = NULL;
2273 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002275 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2276 return NULL;
2277 if (v == NULL) {
2278 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002279 if (d == NULL)
2280 return NULL;
2281 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002282 }
2283 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002284 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002285 if (d == NULL) {
2286 PyErr_SetString(PyExc_TypeError,
2287 "vars() argument must have __dict__ attribute");
2288 return NULL;
2289 }
2290 }
2291 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002292}
2293
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002294PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002295"vars([object]) -> dictionary\n\
2296\n\
2297Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002298With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002299
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002300
2301/*[clinic input]
2302sum as builtin_sum
2303
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002304 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002305 /
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002306 start: object(c_default="NULL") = 0
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002307
2308Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2309
2310When the iterable is empty, return the start value.
2311This function is intended specifically for use with numeric values and may
2312reject non-numeric types.
2313[clinic start generated code]*/
2314
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002315static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002316builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
Raymond Hettinger9dfa0fe2018-09-12 10:54:06 -07002317/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002318{
2319 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002320 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002321
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002322 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002323 if (iter == NULL)
2324 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002326 if (result == NULL) {
2327 result = PyLong_FromLong(0);
2328 if (result == NULL) {
2329 Py_DECREF(iter);
2330 return NULL;
2331 }
2332 } else {
2333 /* reject string values for 'start' parameter */
2334 if (PyUnicode_Check(result)) {
2335 PyErr_SetString(PyExc_TypeError,
2336 "sum() can't sum strings [use ''.join(seq) instead]");
2337 Py_DECREF(iter);
2338 return NULL;
2339 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002340 if (PyBytes_Check(result)) {
2341 PyErr_SetString(PyExc_TypeError,
2342 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002343 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002344 return NULL;
2345 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002346 if (PyByteArray_Check(result)) {
2347 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002348 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 Py_DECREF(iter);
2350 return NULL;
2351 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 Py_INCREF(result);
2353 }
Alex Martellia70b1912003-04-22 08:12:33 +00002354
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002355#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002356 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2357 Assumes all inputs are the same type. If the assumption fails, default
2358 to the more general routine.
2359 */
2360 if (PyLong_CheckExact(result)) {
2361 int overflow;
2362 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2363 /* If this already overflowed, don't even enter the loop. */
2364 if (overflow == 0) {
2365 Py_DECREF(result);
2366 result = NULL;
2367 }
2368 while(result == NULL) {
2369 item = PyIter_Next(iter);
2370 if (item == NULL) {
2371 Py_DECREF(iter);
2372 if (PyErr_Occurred())
2373 return NULL;
2374 return PyLong_FromLong(i_result);
2375 }
2376 if (PyLong_CheckExact(item)) {
2377 long b = PyLong_AsLongAndOverflow(item, &overflow);
Serhiy Storchaka29500732019-05-05 14:26:23 +03002378 if (overflow == 0 &&
2379 (i_result >= 0 ? (b <= LONG_MAX - i_result)
2380 : (b >= LONG_MIN - i_result)))
2381 {
2382 i_result += b;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002383 Py_DECREF(item);
2384 continue;
2385 }
2386 }
2387 /* Either overflowed or is not an int. Restore real objects and process normally */
2388 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002389 if (result == NULL) {
2390 Py_DECREF(item);
2391 Py_DECREF(iter);
2392 return NULL;
2393 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 temp = PyNumber_Add(result, item);
2395 Py_DECREF(result);
2396 Py_DECREF(item);
2397 result = temp;
2398 if (result == NULL) {
2399 Py_DECREF(iter);
2400 return NULL;
2401 }
2402 }
2403 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002405 if (PyFloat_CheckExact(result)) {
2406 double f_result = PyFloat_AS_DOUBLE(result);
2407 Py_DECREF(result);
2408 result = NULL;
2409 while(result == NULL) {
2410 item = PyIter_Next(iter);
2411 if (item == NULL) {
2412 Py_DECREF(iter);
2413 if (PyErr_Occurred())
2414 return NULL;
2415 return PyFloat_FromDouble(f_result);
2416 }
2417 if (PyFloat_CheckExact(item)) {
2418 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2419 f_result += PyFloat_AS_DOUBLE(item);
2420 PyFPE_END_PROTECT(f_result)
2421 Py_DECREF(item);
2422 continue;
2423 }
2424 if (PyLong_CheckExact(item)) {
2425 long value;
2426 int overflow;
2427 value = PyLong_AsLongAndOverflow(item, &overflow);
2428 if (!overflow) {
2429 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2430 f_result += (double)value;
2431 PyFPE_END_PROTECT(f_result)
2432 Py_DECREF(item);
2433 continue;
2434 }
2435 }
2436 result = PyFloat_FromDouble(f_result);
Alexey Izbyshev2b824b22018-08-24 07:27:52 +03002437 if (result == NULL) {
2438 Py_DECREF(item);
2439 Py_DECREF(iter);
2440 return NULL;
2441 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002442 temp = PyNumber_Add(result, item);
2443 Py_DECREF(result);
2444 Py_DECREF(item);
2445 result = temp;
2446 if (result == NULL) {
2447 Py_DECREF(iter);
2448 return NULL;
2449 }
2450 }
2451 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002452#endif
2453
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002454 for(;;) {
2455 item = PyIter_Next(iter);
2456 if (item == NULL) {
2457 /* error, or end-of-sequence */
2458 if (PyErr_Occurred()) {
2459 Py_DECREF(result);
2460 result = NULL;
2461 }
2462 break;
2463 }
2464 /* It's tempting to use PyNumber_InPlaceAdd instead of
2465 PyNumber_Add here, to avoid quadratic running time
2466 when doing 'sum(list_of_lists, [])'. However, this
2467 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002469 empty = []
2470 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002472 would change the value of empty. */
2473 temp = PyNumber_Add(result, item);
2474 Py_DECREF(result);
2475 Py_DECREF(item);
2476 result = temp;
2477 if (result == NULL)
2478 break;
2479 }
2480 Py_DECREF(iter);
2481 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002482}
2483
Alex Martellia70b1912003-04-22 08:12:33 +00002484
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002485/*[clinic input]
2486isinstance as builtin_isinstance
2487
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002488 obj: object
2489 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002490 /
2491
2492Return whether an object is an instance of a class or of a subclass thereof.
2493
2494A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2495check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2496or ...`` etc.
2497[clinic start generated code]*/
2498
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002499static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002500builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002501 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002502/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002503{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002504 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002505
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002506 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002507 if (retval < 0)
2508 return NULL;
2509 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002510}
2511
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002512
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002513/*[clinic input]
2514issubclass as builtin_issubclass
2515
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002516 cls: object
2517 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002518 /
2519
2520Return whether 'cls' is a derived from another class or is the same class.
2521
2522A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2523check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2524or ...`` etc.
2525[clinic start generated code]*/
2526
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002527static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002528builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002529 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002530/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002531{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002532 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002533
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002534 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 if (retval < 0)
2536 return NULL;
2537 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002538}
2539
2540
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002541typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 PyObject_HEAD
2543 Py_ssize_t tuplesize;
2544 PyObject *ittuple; /* tuple of iterators */
2545 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002546} zipobject;
2547
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002548static PyObject *
2549zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002550{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002551 zipobject *lz;
2552 Py_ssize_t i;
2553 PyObject *ittuple; /* tuple of iterators */
2554 PyObject *result;
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002555 Py_ssize_t tuplesize;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002556
Serhiy Storchaka6cca5c82017-06-08 14:41:19 +03002557 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip", kwds))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002558 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 /* args must be a tuple */
2561 assert(PyTuple_Check(args));
Serhiy Storchakabf623ae2017-04-19 20:03:52 +03002562 tuplesize = PyTuple_GET_SIZE(args);
Barry Warsawbd599b52000-08-03 15:45:29 +00002563
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002564 /* obtain iterators */
2565 ittuple = PyTuple_New(tuplesize);
2566 if (ittuple == NULL)
2567 return NULL;
2568 for (i=0; i < tuplesize; ++i) {
2569 PyObject *item = PyTuple_GET_ITEM(args, i);
2570 PyObject *it = PyObject_GetIter(item);
2571 if (it == NULL) {
2572 if (PyErr_ExceptionMatches(PyExc_TypeError))
2573 PyErr_Format(PyExc_TypeError,
2574 "zip argument #%zd must support iteration",
2575 i+1);
2576 Py_DECREF(ittuple);
2577 return NULL;
2578 }
2579 PyTuple_SET_ITEM(ittuple, i, it);
2580 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002581
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 /* create a result holder */
2583 result = PyTuple_New(tuplesize);
2584 if (result == NULL) {
2585 Py_DECREF(ittuple);
2586 return NULL;
2587 }
2588 for (i=0 ; i < tuplesize ; i++) {
2589 Py_INCREF(Py_None);
2590 PyTuple_SET_ITEM(result, i, Py_None);
2591 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002593 /* create zipobject structure */
2594 lz = (zipobject *)type->tp_alloc(type, 0);
2595 if (lz == NULL) {
2596 Py_DECREF(ittuple);
2597 Py_DECREF(result);
2598 return NULL;
2599 }
2600 lz->ittuple = ittuple;
2601 lz->tuplesize = tuplesize;
2602 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002605}
2606
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002607static void
2608zip_dealloc(zipobject *lz)
2609{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002610 PyObject_GC_UnTrack(lz);
2611 Py_XDECREF(lz->ittuple);
2612 Py_XDECREF(lz->result);
2613 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002614}
2615
2616static int
2617zip_traverse(zipobject *lz, visitproc visit, void *arg)
2618{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002619 Py_VISIT(lz->ittuple);
2620 Py_VISIT(lz->result);
2621 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002622}
2623
2624static PyObject *
2625zip_next(zipobject *lz)
2626{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002627 Py_ssize_t i;
2628 Py_ssize_t tuplesize = lz->tuplesize;
2629 PyObject *result = lz->result;
2630 PyObject *it;
2631 PyObject *item;
2632 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002633
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002634 if (tuplesize == 0)
2635 return NULL;
2636 if (Py_REFCNT(result) == 1) {
2637 Py_INCREF(result);
2638 for (i=0 ; i < tuplesize ; i++) {
2639 it = PyTuple_GET_ITEM(lz->ittuple, i);
2640 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002641 if (item == NULL) {
2642 Py_DECREF(result);
2643 return NULL;
2644 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002645 olditem = PyTuple_GET_ITEM(result, i);
2646 PyTuple_SET_ITEM(result, i, item);
2647 Py_DECREF(olditem);
2648 }
2649 } else {
2650 result = PyTuple_New(tuplesize);
2651 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002652 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002653 for (i=0 ; i < tuplesize ; i++) {
2654 it = PyTuple_GET_ITEM(lz->ittuple, i);
2655 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002656 if (item == NULL) {
2657 Py_DECREF(result);
2658 return NULL;
2659 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002660 PyTuple_SET_ITEM(result, i, item);
2661 }
2662 }
2663 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002664}
Barry Warsawbd599b52000-08-03 15:45:29 +00002665
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002666static PyObject *
Siddhesh Poyarekar55edd0c2018-04-30 00:29:33 +05302667zip_reduce(zipobject *lz, PyObject *Py_UNUSED(ignored))
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002668{
2669 /* Just recreate the zip with the internal iterator tuple */
2670 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2671}
2672
2673static PyMethodDef zip_methods[] = {
2674 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2675 {NULL, NULL} /* sentinel */
2676};
2677
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002678PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002679"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002680\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002681Return a zip object whose .__next__() method returns a tuple where\n\
2682the i-th element comes from the i-th iterable argument. The .__next__()\n\
2683method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002684is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002685
2686PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002687 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2688 "zip", /* tp_name */
2689 sizeof(zipobject), /* tp_basicsize */
2690 0, /* tp_itemsize */
2691 /* methods */
2692 (destructor)zip_dealloc, /* tp_dealloc */
2693 0, /* tp_print */
2694 0, /* tp_getattr */
2695 0, /* tp_setattr */
2696 0, /* tp_reserved */
2697 0, /* tp_repr */
2698 0, /* tp_as_number */
2699 0, /* tp_as_sequence */
2700 0, /* tp_as_mapping */
2701 0, /* tp_hash */
2702 0, /* tp_call */
2703 0, /* tp_str */
2704 PyObject_GenericGetAttr, /* tp_getattro */
2705 0, /* tp_setattro */
2706 0, /* tp_as_buffer */
2707 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2708 Py_TPFLAGS_BASETYPE, /* tp_flags */
2709 zip_doc, /* tp_doc */
2710 (traverseproc)zip_traverse, /* tp_traverse */
2711 0, /* tp_clear */
2712 0, /* tp_richcompare */
2713 0, /* tp_weaklistoffset */
2714 PyObject_SelfIter, /* tp_iter */
2715 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002716 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002717 0, /* tp_members */
2718 0, /* tp_getset */
2719 0, /* tp_base */
2720 0, /* tp_dict */
2721 0, /* tp_descr_get */
2722 0, /* tp_descr_set */
2723 0, /* tp_dictoffset */
2724 0, /* tp_init */
2725 PyType_GenericAlloc, /* tp_alloc */
2726 zip_new, /* tp_new */
2727 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002728};
Barry Warsawbd599b52000-08-03 15:45:29 +00002729
2730
Guido van Rossum79f25d91997-04-29 20:08:16 +00002731static PyMethodDef builtin_methods[] = {
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002732 {"__build_class__", (PyCFunction)(void(*)(void))builtin___build_class__,
Serhiy Storchaka6969eaf2017-07-03 21:20:15 +03002733 METH_FASTCALL | METH_KEYWORDS, build_class_doc},
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002734 {"__import__", (PyCFunction)(void(*)(void))builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002735 BUILTIN_ABS_METHODDEF
2736 BUILTIN_ALL_METHODDEF
2737 BUILTIN_ANY_METHODDEF
2738 BUILTIN_ASCII_METHODDEF
2739 BUILTIN_BIN_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002740 {"breakpoint", (PyCFunction)(void(*)(void))builtin_breakpoint, METH_FASTCALL | METH_KEYWORDS, breakpoint_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002741 BUILTIN_CALLABLE_METHODDEF
2742 BUILTIN_CHR_METHODDEF
2743 BUILTIN_COMPILE_METHODDEF
2744 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002745 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002746 BUILTIN_DIVMOD_METHODDEF
2747 BUILTIN_EVAL_METHODDEF
2748 BUILTIN_EXEC_METHODDEF
2749 BUILTIN_FORMAT_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002750 {"getattr", (PyCFunction)(void(*)(void))builtin_getattr, METH_FASTCALL, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002751 BUILTIN_GLOBALS_METHODDEF
2752 BUILTIN_HASATTR_METHODDEF
2753 BUILTIN_HASH_METHODDEF
2754 BUILTIN_HEX_METHODDEF
2755 BUILTIN_ID_METHODDEF
2756 BUILTIN_INPUT_METHODDEF
2757 BUILTIN_ISINSTANCE_METHODDEF
2758 BUILTIN_ISSUBCLASS_METHODDEF
Serhiy Storchaka79342662019-01-12 08:25:41 +02002759 {"iter", (PyCFunction)(void(*)(void))builtin_iter, METH_FASTCALL, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002760 BUILTIN_LEN_METHODDEF
2761 BUILTIN_LOCALS_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002762 {"max", (PyCFunction)(void(*)(void))builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2763 {"min", (PyCFunction)(void(*)(void))builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2764 {"next", (PyCFunction)(void(*)(void))builtin_next, METH_FASTCALL, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002765 BUILTIN_OCT_METHODDEF
2766 BUILTIN_ORD_METHODDEF
2767 BUILTIN_POW_METHODDEF
Serhiy Storchaka62be7422018-11-27 13:27:31 +02002768 {"print", (PyCFunction)(void(*)(void))builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002769 BUILTIN_REPR_METHODDEF
Serhiy Storchakaaca7f572017-11-15 17:51:14 +02002770 BUILTIN_ROUND_METHODDEF
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002771 BUILTIN_SETATTR_METHODDEF
2772 BUILTIN_SORTED_METHODDEF
2773 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002774 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2775 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002776};
2777
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002778PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002779"Built-in functions, exceptions, and other objects.\n\
2780\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002781Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002782
Martin v. Löwis1a214512008-06-11 05:26:20 +00002783static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002784 PyModuleDef_HEAD_INIT,
2785 "builtins",
2786 builtin_doc,
2787 -1, /* multiple "initialization" just copies the module dict. */
2788 builtin_methods,
2789 NULL,
2790 NULL,
2791 NULL,
2792 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002793};
2794
2795
Guido van Rossum25ce5661997-08-02 03:10:38 +00002796PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002797_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002798{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002799 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002800
Victor Stinnerfbca9082018-08-30 00:50:45 +02002801 const _PyCoreConfig *config = &_PyInterpreterState_GET_UNSAFE()->core_config;
2802
Benjamin Peterson42124a72012-10-30 23:41:54 -04002803 if (PyType_Ready(&PyFilter_Type) < 0 ||
2804 PyType_Ready(&PyMap_Type) < 0 ||
2805 PyType_Ready(&PyZip_Type) < 0)
2806 return NULL;
2807
Eric Snowd393c1b2017-09-14 12:18:12 -06002808 mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002809 if (mod == NULL)
2810 return NULL;
2811 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002812
Tim Peters7571a0f2003-03-23 17:52:28 +00002813#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002814 /* "builtins" exposes a number of statically allocated objects
2815 * that, before this code was added in 2.3, never showed up in
2816 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2817 * result, programs leaking references to None and False (etc)
2818 * couldn't be diagnosed by examining sys.getobjects(0).
2819 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002820#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2821#else
2822#define ADD_TO_ALL(OBJECT) (void)0
2823#endif
2824
Tim Peters4b7625e2001-09-13 21:37:17 +00002825#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002826 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2827 return NULL; \
2828 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002830 SETBUILTIN("None", Py_None);
2831 SETBUILTIN("Ellipsis", Py_Ellipsis);
2832 SETBUILTIN("NotImplemented", Py_NotImplemented);
2833 SETBUILTIN("False", Py_False);
2834 SETBUILTIN("True", Py_True);
2835 SETBUILTIN("bool", &PyBool_Type);
2836 SETBUILTIN("memoryview", &PyMemoryView_Type);
2837 SETBUILTIN("bytearray", &PyByteArray_Type);
2838 SETBUILTIN("bytes", &PyBytes_Type);
2839 SETBUILTIN("classmethod", &PyClassMethod_Type);
2840 SETBUILTIN("complex", &PyComplex_Type);
2841 SETBUILTIN("dict", &PyDict_Type);
2842 SETBUILTIN("enumerate", &PyEnum_Type);
2843 SETBUILTIN("filter", &PyFilter_Type);
2844 SETBUILTIN("float", &PyFloat_Type);
2845 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2846 SETBUILTIN("property", &PyProperty_Type);
2847 SETBUILTIN("int", &PyLong_Type);
2848 SETBUILTIN("list", &PyList_Type);
2849 SETBUILTIN("map", &PyMap_Type);
2850 SETBUILTIN("object", &PyBaseObject_Type);
2851 SETBUILTIN("range", &PyRange_Type);
2852 SETBUILTIN("reversed", &PyReversed_Type);
2853 SETBUILTIN("set", &PySet_Type);
2854 SETBUILTIN("slice", &PySlice_Type);
2855 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2856 SETBUILTIN("str", &PyUnicode_Type);
2857 SETBUILTIN("super", &PySuper_Type);
2858 SETBUILTIN("tuple", &PyTuple_Type);
2859 SETBUILTIN("type", &PyType_Type);
2860 SETBUILTIN("zip", &PyZip_Type);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002861 debug = PyBool_FromLong(config->optimization_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002862 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002863 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002864 return NULL;
2865 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002866 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002868 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002869#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002870#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002871}