blob: 31538c634ed6160250331cfcf110d2af3d852096 [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"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Benjamin Petersonea281a52011-08-12 23:10:50 -05009#include "asdl.h"
10#include "ast.h"
11
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012#include <ctype.h>
13
Victor Stinnerb744ba12010-05-15 12:27:16 +000014#ifdef HAVE_LANGINFO_H
15#include <langinfo.h> /* CODESET */
16#endif
17
Mark Hammond26cffde42001-05-14 12:17:34 +000018/* The default encoding used by the platform file system APIs
19 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000020
21 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
22 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000023*/
Steve Dowercc16be82016-09-08 10:35:16 -070024#if defined(__APPLE__)
25const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Steve Dowercc16be82016-09-08 10:35:16 -070027#elif defined(MS_WINDOWS)
28/* may be changed by initfsencoding(), but should never be free()d */
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000029const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000030int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020031#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000032const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000033int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000034#endif
Steve Dowercc16be82016-09-08 10:35:16 -070035const char *Py_FileSystemDefaultEncodeErrors = "surrogateescape";
Mark Hammondef8b6542001-05-13 08:04:26 +000036
Victor Stinnerbd303c12013-11-07 23:07:29 +010037_Py_IDENTIFIER(__builtins__);
38_Py_IDENTIFIER(__dict__);
39_Py_IDENTIFIER(__prepare__);
40_Py_IDENTIFIER(__round__);
41_Py_IDENTIFIER(encoding);
42_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020043_Py_IDENTIFIER(fileno);
44_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010045_Py_IDENTIFIER(metaclass);
46_Py_IDENTIFIER(sort);
47_Py_IDENTIFIER(stdin);
48_Py_IDENTIFIER(stdout);
49_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020050
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030051#include "clinic/bltinmodule.c.h"
52
Nick Coghlanf9e227e2014-08-17 14:01:19 +100053/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +000054static PyObject *
Victor Stinner773dc6d2017-01-16 23:46:26 +010055builtin___build_class__(PyObject *self, PyObject **args, Py_ssize_t nargs,
56 PyObject *kwnames)
Guido van Rossum52cc1d82007-03-18 15:41:51 +000057{
Nick Coghlan19d24672016-12-05 16:47:55 +100058 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns;
59 PyObject *cls = NULL, *cell = NULL;
Victor Stinner0c39b1b2015-03-18 15:02:06 +010060 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +000061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000062 if (nargs < 2) {
63 PyErr_SetString(PyExc_TypeError,
64 "__build_class__: not enough arguments");
65 return NULL;
66 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010067 func = args[0]; /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -050068 if (!PyFunction_Check(func)) {
69 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -050070 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -050071 return NULL;
72 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010073 name = args[1];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000074 if (!PyUnicode_Check(name)) {
75 PyErr_SetString(PyExc_TypeError,
76 "__build_class__: name is not a string");
77 return NULL;
78 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010079 bases = _PyStack_AsTupleSlice(args, nargs, 2, nargs);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000080 if (bases == NULL)
81 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000082
Victor Stinner773dc6d2017-01-16 23:46:26 +010083 if (kwnames == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000084 meta = NULL;
85 mkw = NULL;
86 }
87 else {
Victor Stinner773dc6d2017-01-16 23:46:26 +010088 mkw = _PyStack_AsDict(args + nargs, kwnames);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000089 if (mkw == NULL) {
90 Py_DECREF(bases);
91 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000092 }
Victor Stinner773dc6d2017-01-16 23:46:26 +010093
Victor Stinnerae9f1612013-11-06 22:46:51 +010094 meta = _PyDict_GetItemId(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000095 if (meta != NULL) {
96 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +010097 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000098 Py_DECREF(meta);
99 Py_DECREF(mkw);
100 Py_DECREF(bases);
101 return NULL;
102 }
Nick Coghlande31b192011-10-23 22:04:16 +1000103 /* metaclass is explicitly given, check if it's indeed a class */
104 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000105 }
106 }
107 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000108 /* if there are no bases, use type: */
109 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000110 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000111 }
112 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000113 else {
114 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
115 meta = (PyObject *) (base0->ob_type);
116 }
117 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000118 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000119 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000120
Nick Coghlande31b192011-10-23 22:04:16 +1000121 if (isclass) {
122 /* meta is really a class, so check for a more derived
123 metaclass, or possible metaclass conflicts: */
124 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
125 bases);
126 if (winner == NULL) {
127 Py_DECREF(meta);
128 Py_XDECREF(mkw);
129 Py_DECREF(bases);
130 return NULL;
131 }
132 if (winner != meta) {
133 Py_DECREF(meta);
134 meta = winner;
135 Py_INCREF(meta);
136 }
137 }
138 /* else: meta is not a class, so we cannot do the metaclass
139 calculation, so we will use the explicitly given object as it is */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200140 prep = _PyObject_GetAttrId(meta, &PyId___prepare__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 if (prep == NULL) {
142 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
143 PyErr_Clear();
Eric Snow4f29e752016-09-08 15:11:11 -0700144 ns = PyDict_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000145 }
146 else {
147 Py_DECREF(meta);
148 Py_XDECREF(mkw);
149 Py_DECREF(bases);
150 return NULL;
151 }
152 }
153 else {
Victor Stinner463b86a2016-08-22 23:33:13 +0200154 PyObject *pargs[2] = {name, bases};
155 ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 Py_DECREF(prep);
157 }
158 if (ns == NULL) {
159 Py_DECREF(meta);
160 Py_XDECREF(mkw);
161 Py_DECREF(bases);
162 return NULL;
163 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000164 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
Benjamin Petersone8e14592013-05-16 14:37:25 -0500165 NULL, 0, NULL, 0, NULL, 0, NULL,
166 PyFunction_GET_CLOSURE(func));
Nick Coghlan19d24672016-12-05 16:47:55 +1000167 if (cell != NULL) {
Victor Stinnerd1c2a8e2016-08-23 01:34:35 +0200168 PyObject *margs[3] = {name, bases, ns};
169 cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
Nick Coghlan19d24672016-12-05 16:47:55 +1000170 if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
171 PyObject *cell_cls = PyCell_GET(cell);
172 if (cell_cls != cls) {
173 /* TODO: In 3.7, DeprecationWarning will become RuntimeError.
174 * At that point, cell_error won't be needed.
175 */
176 int cell_error;
177 if (cell_cls == NULL) {
178 const char *msg =
179 "__class__ not set defining %.200R as %.200R. "
180 "Was __classcell__ propagated to type.__new__?";
181 cell_error = PyErr_WarnFormat(
182 PyExc_DeprecationWarning, 1, msg, name, cls);
183 } else {
184 const char *msg =
185 "__class__ set to %.200R defining %.200R as %.200R";
186 PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
187 cell_error = 1;
188 }
189 if (cell_error) {
190 Py_DECREF(cls);
191 cls = NULL;
192 goto error;
193 } else {
194 /* Fill in the cell, since type.__new__ didn't do it */
195 PyCell_Set(cell, cls);
196 }
197 }
198 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000199 }
Nick Coghlan19d24672016-12-05 16:47:55 +1000200error:
201 Py_XDECREF(cell);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 Py_DECREF(ns);
203 Py_DECREF(meta);
204 Py_XDECREF(mkw);
205 Py_DECREF(bases);
206 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000207}
208
209PyDoc_STRVAR(build_class_doc,
210"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
211\n\
212Internal helper function used by the class statement.");
213
214static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000215builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000216{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000217 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
218 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400219 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400220 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000221
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400222 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 kwlist, &name, &globals, &locals, &fromlist, &level))
224 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400225 return PyImport_ImportModuleLevelObject(name, globals, locals,
226 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000227}
228
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000229PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400230"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000231\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000232Import a module. Because this function is meant for use by the Python\n\
233interpreter and not for general use it is better to use\n\
234importlib.import_module() to programmatically import a module.\n\
235\n\
236The globals argument is only used to determine the context;\n\
237they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000238should be a list of names to emulate ``from name import ...'', or an\n\
239empty list to emulate ``import name''.\n\
240When importing a module from a package, note that __import__('A.B', ...)\n\
241returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000242fromlist is not empty. Level is used to determine whether to perform \n\
Brett Cannon722d3ae2012-07-30 17:45:54 -0400243absolute or relative imports. 0 is absolute while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000244is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000245
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000246
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000247/*[clinic input]
248abs as builtin_abs
249
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300250 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000251 /
252
253Return the absolute value of the argument.
254[clinic start generated code]*/
255
Guido van Rossum79f25d91997-04-29 20:08:16 +0000256static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300257builtin_abs(PyObject *module, PyObject *x)
258/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000259{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000260 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000261}
262
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000263/*[clinic input]
264all as builtin_all
265
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300266 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000267 /
268
269Return True if bool(x) is True for all values x in the iterable.
270
271If the iterable is empty, return True.
272[clinic start generated code]*/
273
Raymond Hettinger96229b12005-03-11 06:49:40 +0000274static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300275builtin_all(PyObject *module, PyObject *iterable)
276/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000277{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000278 PyObject *it, *item;
279 PyObject *(*iternext)(PyObject *);
280 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000281
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000282 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000283 if (it == NULL)
284 return NULL;
285 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000286
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000287 for (;;) {
288 item = iternext(it);
289 if (item == NULL)
290 break;
291 cmp = PyObject_IsTrue(item);
292 Py_DECREF(item);
293 if (cmp < 0) {
294 Py_DECREF(it);
295 return NULL;
296 }
297 if (cmp == 0) {
298 Py_DECREF(it);
299 Py_RETURN_FALSE;
300 }
301 }
302 Py_DECREF(it);
303 if (PyErr_Occurred()) {
304 if (PyErr_ExceptionMatches(PyExc_StopIteration))
305 PyErr_Clear();
306 else
307 return NULL;
308 }
309 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000310}
311
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000312/*[clinic input]
313any as builtin_any
314
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300315 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000316 /
317
318Return True if bool(x) is True for any x in the iterable.
319
320If the iterable is empty, return False.
321[clinic start generated code]*/
322
Raymond Hettinger96229b12005-03-11 06:49:40 +0000323static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300324builtin_any(PyObject *module, PyObject *iterable)
325/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000326{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000327 PyObject *it, *item;
328 PyObject *(*iternext)(PyObject *);
329 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000330
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000331 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 if (it == NULL)
333 return NULL;
334 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000336 for (;;) {
337 item = iternext(it);
338 if (item == NULL)
339 break;
340 cmp = PyObject_IsTrue(item);
341 Py_DECREF(item);
342 if (cmp < 0) {
343 Py_DECREF(it);
344 return NULL;
345 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400346 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 Py_DECREF(it);
348 Py_RETURN_TRUE;
349 }
350 }
351 Py_DECREF(it);
352 if (PyErr_Occurred()) {
353 if (PyErr_ExceptionMatches(PyExc_StopIteration))
354 PyErr_Clear();
355 else
356 return NULL;
357 }
358 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000359}
360
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000361/*[clinic input]
362ascii as builtin_ascii
363
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300364 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000365 /
366
367Return an ASCII-only representation of an object.
368
369As repr(), return a string containing a printable representation of an
370object, but escape the non-ASCII characters in the string returned by
371repr() using \\x, \\u or \\U escapes. This generates a string similar
372to that returned by repr() in Python 2.
373[clinic start generated code]*/
374
Georg Brandl559e5d72008-06-11 18:37:52 +0000375static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300376builtin_ascii(PyObject *module, PyObject *obj)
377/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000378{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000379 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000380}
381
Georg Brandl559e5d72008-06-11 18:37:52 +0000382
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000383/*[clinic input]
384bin as builtin_bin
385
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300386 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000387 /
388
389Return the binary representation of an integer.
390
391 >>> bin(2796202)
392 '0b1010101010101010101010'
393[clinic start generated code]*/
394
Guido van Rossum79f25d91997-04-29 20:08:16 +0000395static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300396builtin_bin(PyObject *module, PyObject *number)
397/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000398{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000399 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000400}
401
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000402
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000403/*[clinic input]
404callable as builtin_callable
405
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300406 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000407 /
408
409Return whether the object is callable (i.e., some kind of function).
410
411Note that classes are callable, as are instances of classes with a
412__call__() method.
413[clinic start generated code]*/
414
Antoine Pitroue71362d2010-11-27 22:00:11 +0000415static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300416builtin_callable(PyObject *module, PyObject *obj)
417/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000418{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000419 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000420}
421
Antoine Pitroue71362d2010-11-27 22:00:11 +0000422
Raymond Hettinger17301e92008-03-13 00:19:26 +0000423typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000424 PyObject_HEAD
425 PyObject *func;
426 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000427} filterobject;
428
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000429static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000430filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000431{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 PyObject *func, *seq;
433 PyObject *it;
434 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000435
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
437 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
440 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000441
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000442 /* Get iterator. */
443 it = PyObject_GetIter(seq);
444 if (it == NULL)
445 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000447 /* create filterobject structure */
448 lz = (filterobject *)type->tp_alloc(type, 0);
449 if (lz == NULL) {
450 Py_DECREF(it);
451 return NULL;
452 }
453 Py_INCREF(func);
454 lz->func = func;
455 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000458}
459
460static void
461filter_dealloc(filterobject *lz)
462{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000463 PyObject_GC_UnTrack(lz);
464 Py_XDECREF(lz->func);
465 Py_XDECREF(lz->it);
466 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000467}
468
469static int
470filter_traverse(filterobject *lz, visitproc visit, void *arg)
471{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 Py_VISIT(lz->it);
473 Py_VISIT(lz->func);
474 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000475}
476
477static PyObject *
478filter_next(filterobject *lz)
479{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 PyObject *item;
481 PyObject *it = lz->it;
482 long ok;
483 PyObject *(*iternext)(PyObject *);
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400484 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000486 iternext = *Py_TYPE(it)->tp_iternext;
487 for (;;) {
488 item = iternext(it);
489 if (item == NULL)
490 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000491
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400492 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 ok = PyObject_IsTrue(item);
494 } else {
495 PyObject *good;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +0100496 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 if (good == NULL) {
498 Py_DECREF(item);
499 return NULL;
500 }
501 ok = PyObject_IsTrue(good);
502 Py_DECREF(good);
503 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200504 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000505 return item;
506 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200507 if (ok < 0)
508 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000510}
511
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000512static PyObject *
513filter_reduce(filterobject *lz)
514{
515 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
516}
517
518PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
519
520static PyMethodDef filter_methods[] = {
521 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
522 {NULL, NULL} /* sentinel */
523};
524
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000525PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000526"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000527\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000528Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000529is true. If function is None, return the items that are true.");
530
531PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 PyVarObject_HEAD_INIT(&PyType_Type, 0)
533 "filter", /* tp_name */
534 sizeof(filterobject), /* tp_basicsize */
535 0, /* tp_itemsize */
536 /* methods */
537 (destructor)filter_dealloc, /* tp_dealloc */
538 0, /* tp_print */
539 0, /* tp_getattr */
540 0, /* tp_setattr */
541 0, /* tp_reserved */
542 0, /* tp_repr */
543 0, /* tp_as_number */
544 0, /* tp_as_sequence */
545 0, /* tp_as_mapping */
546 0, /* tp_hash */
547 0, /* tp_call */
548 0, /* tp_str */
549 PyObject_GenericGetAttr, /* tp_getattro */
550 0, /* tp_setattro */
551 0, /* tp_as_buffer */
552 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
553 Py_TPFLAGS_BASETYPE, /* tp_flags */
554 filter_doc, /* tp_doc */
555 (traverseproc)filter_traverse, /* tp_traverse */
556 0, /* tp_clear */
557 0, /* tp_richcompare */
558 0, /* tp_weaklistoffset */
559 PyObject_SelfIter, /* tp_iter */
560 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000561 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 0, /* tp_members */
563 0, /* tp_getset */
564 0, /* tp_base */
565 0, /* tp_dict */
566 0, /* tp_descr_get */
567 0, /* tp_descr_set */
568 0, /* tp_dictoffset */
569 0, /* tp_init */
570 PyType_GenericAlloc, /* tp_alloc */
571 filter_new, /* tp_new */
572 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000573};
574
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000575
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000576/*[clinic input]
577format as builtin_format
578
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300579 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000580 format_spec: unicode(c_default="NULL") = ''
581 /
582
583Return value.__format__(format_spec)
584
585format_spec defaults to the empty string
586[clinic start generated code]*/
587
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000588static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300589builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
590/*[clinic end generated code: output=2f40bdfa4954b077 input=6325e751a1b29b86]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000591{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000592 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000593}
594
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000595/*[clinic input]
596chr as builtin_chr
597
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300598 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000599 /
600
601Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
602[clinic start generated code]*/
603
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000604static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300605builtin_chr_impl(PyObject *module, int i)
606/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000607{
608 return PyUnicode_FromOrdinal(i);
609}
Guido van Rossum09095f32000-03-10 23:00:52 +0000610
611
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200612static const char *
Martin Pantereeb896c2015-11-07 02:32:21 +0000613source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000614{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200615 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000616 Py_ssize_t size;
Martin Pantereeb896c2015-11-07 02:32:21 +0000617 Py_buffer view;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000618
Martin Pantereeb896c2015-11-07 02:32:21 +0000619 *cmd_copy = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 if (PyUnicode_Check(cmd)) {
621 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200622 str = PyUnicode_AsUTF8AndSize(cmd, &size);
623 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 return NULL;
625 }
Martin Pantereeb896c2015-11-07 02:32:21 +0000626 else if (PyBytes_Check(cmd)) {
627 str = PyBytes_AS_STRING(cmd);
628 size = PyBytes_GET_SIZE(cmd);
629 }
630 else if (PyByteArray_Check(cmd)) {
631 str = PyByteArray_AS_STRING(cmd);
632 size = PyByteArray_GET_SIZE(cmd);
633 }
634 else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
635 /* Copy to NUL-terminated buffer. */
636 *cmd_copy = PyBytes_FromStringAndSize(
637 (const char *)view.buf, view.len);
638 PyBuffer_Release(&view);
639 if (*cmd_copy == NULL) {
640 return NULL;
641 }
642 str = PyBytes_AS_STRING(*cmd_copy);
643 size = PyBytes_GET_SIZE(*cmd_copy);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200644 }
645 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000646 PyErr_Format(PyExc_TypeError,
647 "%s() arg 1 must be a %s object",
648 funcname, what);
649 return NULL;
650 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200651
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200652 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300653 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 "source code string cannot contain null bytes");
Martin Pantereeb896c2015-11-07 02:32:21 +0000655 Py_CLEAR(*cmd_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000656 return NULL;
657 }
658 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000659}
660
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000661/*[clinic input]
662compile as builtin_compile
663
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300664 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000665 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300666 mode: str
667 flags: int = 0
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300668 dont_inherit: int(c_default="0") = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300669 optimize: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000670
671Compile source into a code object that can be executed by exec() or eval().
672
673The source code may represent a Python module, statement or expression.
674The filename will be used for run-time error messages.
675The mode must be 'exec' to compile a module, 'single' to compile a
676single (interactive) statement, or 'eval' to compile an expression.
677The flags argument, if present, controls which future statements influence
678the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300679The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000680the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300681compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000682in addition to any features explicitly specified.
683[clinic start generated code]*/
684
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000685static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300686builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
687 const char *mode, int flags, int dont_inherit,
688 int optimize)
689/*[clinic end generated code: output=1fa176e33452bb63 input=9d53e8cfb3c86414]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000690{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000691 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200692 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000693 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 int is_ast;
695 PyCompilerFlags cf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000697 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000699 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Tim Peters6cd6a822001-08-17 22:11:27 +0000700
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000701 if (flags &
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
703 {
704 PyErr_SetString(PyExc_ValueError,
705 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000706 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000707 }
708 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000709
Georg Brandl8334fd92010-12-04 10:26:46 +0000710 if (optimize < -1 || optimize > 2) {
711 PyErr_SetString(PyExc_ValueError,
712 "compile(): invalid optimize value");
713 goto error;
714 }
715
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000716 if (!dont_inherit) {
717 PyEval_MergeCompilerFlags(&cf);
718 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000719
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000720 if (strcmp(mode, "exec") == 0)
721 compile_mode = 0;
722 else if (strcmp(mode, "eval") == 0)
723 compile_mode = 1;
724 else if (strcmp(mode, "single") == 0)
725 compile_mode = 2;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 else {
727 PyErr_SetString(PyExc_ValueError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000728 "compile() mode must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000729 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000731
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000732 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000734 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000735 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000736 if (flags & PyCF_ONLY_AST) {
737 Py_INCREF(source);
738 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 }
740 else {
741 PyArena *arena;
742 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200745 if (arena == NULL)
746 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000747 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 if (mod == NULL) {
749 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000750 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000751 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500752 if (!PyAST_Validate(mod)) {
753 PyArena_Free(arena);
754 goto error;
755 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200756 result = (PyObject*)PyAST_CompileObject(mod, filename,
757 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 PyArena_Free(arena);
759 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000760 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000762
Martin Panter61d6e4a2015-11-07 02:56:11 +0000763 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000765 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000766
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000767 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000768 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000769 goto finally;
770
771error:
772 result = NULL;
773finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200774 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000775 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000776}
777
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000778/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000780builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000781{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
785 return NULL;
786 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000787}
788
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000789PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000790"dir([object]) -> list of strings\n"
791"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000792"If called without an argument, return the names in the current scope.\n"
793"Else, return an alphabetized list of names comprising (some of) the attributes\n"
794"of the given object, and of attributes reachable from it.\n"
795"If the object supplies a method named __dir__, it will be used; otherwise\n"
796"the default dir() logic is used and returns:\n"
797" for a module object: the module's attributes.\n"
798" for a class object: its attributes, and recursively the attributes\n"
799" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000800" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000801" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000802
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000803/*[clinic input]
804divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000805
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300806 x: object
807 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000808 /
809
Zachary Ware7f227d92016-04-28 14:39:50 -0500810Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000811[clinic start generated code]*/
812
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000813static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300814builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
815/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000816{
817 return PyNumber_Divmod(x, y);
818}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000819
820
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000821/*[clinic input]
822eval as builtin_eval
823
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300824 source: object
825 globals: object = None
826 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000827 /
828
829Evaluate the given source in the context of globals and locals.
830
831The source may be a string representing a Python expression
832or a code object as returned by compile().
833The globals must be a dictionary and locals can be any mapping,
834defaulting to the current globals and locals.
835If only globals is given, locals defaults to it.
836[clinic start generated code]*/
837
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000838static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300839builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400840 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300841/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000842{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000843 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200844 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000845 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000846
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 if (locals != Py_None && !PyMapping_Check(locals)) {
848 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
849 return NULL;
850 }
851 if (globals != Py_None && !PyDict_Check(globals)) {
852 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
853 "globals must be a real dict; try eval(expr, {}, mapping)"
854 : "globals must be a dict");
855 return NULL;
856 }
857 if (globals == Py_None) {
858 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100859 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000860 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100861 if (locals == NULL)
862 return NULL;
863 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000864 }
865 else if (locals == Py_None)
866 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 if (globals == NULL || locals == NULL) {
869 PyErr_SetString(PyExc_TypeError,
870 "eval must be given globals and locals "
871 "when called without a frame");
872 return NULL;
873 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000874
Victor Stinnerb44562b2013-11-06 19:03:11 +0100875 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
876 if (_PyDict_SetItemId(globals, &PyId___builtins__,
877 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000878 return NULL;
879 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000880
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000881 if (PyCode_Check(source)) {
882 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 PyErr_SetString(PyExc_TypeError,
884 "code object passed to eval() may not contain free variables");
885 return NULL;
886 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000887 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000888 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Martin Panter61d6e4a2015-11-07 02:56:11 +0000891 str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000892 if (str == NULL)
893 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000894
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000895 while (*str == ' ' || *str == '\t')
896 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 (void)PyEval_MergeCompilerFlags(&cf);
899 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000900 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000901 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000902}
903
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000904/*[clinic input]
905exec as builtin_exec
906
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300907 source: object
908 globals: object = None
909 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000910 /
911
912Execute the given source in the context of globals and locals.
913
914The source may be a string representing one or more Python statements
915or a code object as returned by compile().
916The globals must be a dictionary and locals can be any mapping,
917defaulting to the current globals and locals.
918If only globals is given, locals defaults to it.
919[clinic start generated code]*/
920
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000921static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300922builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
Larry Hastings89964c42015-04-14 18:07:59 -0400923 PyObject *locals)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300924/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +0000925{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +0000927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 if (globals == Py_None) {
929 globals = PyEval_GetGlobals();
930 if (locals == Py_None) {
931 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100932 if (locals == NULL)
933 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 }
935 if (!globals || !locals) {
936 PyErr_SetString(PyExc_SystemError,
937 "globals and locals cannot be NULL");
938 return NULL;
939 }
940 }
941 else if (locals == Py_None)
942 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000945 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 globals->ob_type->tp_name);
947 return NULL;
948 }
949 if (!PyMapping_Check(locals)) {
950 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000951 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 locals->ob_type->tp_name);
953 return NULL;
954 }
Victor Stinnerb44562b2013-11-06 19:03:11 +0100955 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
956 if (_PyDict_SetItemId(globals, &PyId___builtins__,
957 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 return NULL;
959 }
960
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000961 if (PyCode_Check(source)) {
962 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000963 PyErr_SetString(PyExc_TypeError,
964 "code object passed to exec() may not "
965 "contain free variables");
966 return NULL;
967 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000968 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 }
970 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +0000971 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200972 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 PyCompilerFlags cf;
974 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000975 str = source_as_string(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +0000976 "string, bytes or code", &cf,
977 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 if (str == NULL)
979 return NULL;
980 if (PyEval_MergeCompilerFlags(&cf))
981 v = PyRun_StringFlags(str, Py_file_input, globals,
982 locals, &cf);
983 else
984 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000985 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 }
987 if (v == NULL)
988 return NULL;
989 Py_DECREF(v);
990 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000991}
992
Georg Brandl7cae87c2006-09-06 06:51:57 +0000993
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000994/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000995static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000996builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000997{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000998 PyObject *v, *result, *dflt = NULL;
999 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
1002 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +00001003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 if (!PyUnicode_Check(name)) {
1005 PyErr_SetString(PyExc_TypeError,
1006 "getattr(): attribute name must be string");
1007 return NULL;
1008 }
1009 result = PyObject_GetAttr(v, name);
1010 if (result == NULL && dflt != NULL &&
1011 PyErr_ExceptionMatches(PyExc_AttributeError))
1012 {
1013 PyErr_Clear();
1014 Py_INCREF(dflt);
1015 result = dflt;
1016 }
1017 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001018}
1019
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001020PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001021"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001022\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001023Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1024When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001025exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001026
1027
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001028/*[clinic input]
1029globals as builtin_globals
1030
1031Return the dictionary containing the current scope's global variables.
1032
1033NOTE: Updates to this dictionary *will* affect name lookups in the current
1034global scope and vice-versa.
1035[clinic start generated code]*/
1036
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001037static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001038builtin_globals_impl(PyObject *module)
1039/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001040{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001042
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 d = PyEval_GetGlobals();
1044 Py_XINCREF(d);
1045 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001046}
1047
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001048
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001049/*[clinic input]
1050hasattr as builtin_hasattr
1051
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001052 obj: object
1053 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001054 /
1055
1056Return whether the object has an attribute with the given name.
1057
1058This is done by calling getattr(obj, name) and catching AttributeError.
1059[clinic start generated code]*/
1060
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001061static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001062builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1063/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001064{
1065 PyObject *v;
1066
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 if (!PyUnicode_Check(name)) {
1068 PyErr_SetString(PyExc_TypeError,
1069 "hasattr(): attribute name must be string");
1070 return NULL;
1071 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001072 v = PyObject_GetAttr(obj, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001074 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +00001076 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 }
Benjamin Peterson17689992010-08-24 03:26:23 +00001078 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 }
1080 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001081 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001082}
1083
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001084
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001085/* AC: gdb's integration with CPython relies on builtin_id having
1086 * the *exact* parameter names of "self" and "v", so we ensure we
1087 * preserve those name rather than using the AC defaults.
1088 */
1089/*[clinic input]
1090id as builtin_id
1091
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001092 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001093 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001094 /
1095
1096Return the identity of an object.
1097
1098This is guaranteed to be unique among simultaneously existing objects.
1099(CPython uses the object's memory address.)
1100[clinic start generated code]*/
1101
Guido van Rossum79f25d91997-04-29 20:08:16 +00001102static PyObject *
Serhiy Storchaka24182a32016-05-05 16:21:35 +03001103builtin_id(PyModuleDef *self, PyObject *v)
1104/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001105{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001107}
1108
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001109
Raymond Hettingera6c60372008-03-13 01:26:19 +00001110/* map object ************************************************************/
1111
1112typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 PyObject_HEAD
1114 PyObject *iters;
1115 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001116} mapobject;
1117
Guido van Rossum79f25d91997-04-29 20:08:16 +00001118static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001119map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001120{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 PyObject *it, *iters, *func;
1122 mapobject *lz;
1123 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001124
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
1126 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001127
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001128 numargs = PyTuple_Size(args);
1129 if (numargs < 2) {
1130 PyErr_SetString(PyExc_TypeError,
1131 "map() must have at least two arguments.");
1132 return NULL;
1133 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 iters = PyTuple_New(numargs-1);
1136 if (iters == NULL)
1137 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001138
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 for (i=1 ; i<numargs ; i++) {
1140 /* Get iterator. */
1141 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1142 if (it == NULL) {
1143 Py_DECREF(iters);
1144 return NULL;
1145 }
1146 PyTuple_SET_ITEM(iters, i-1, it);
1147 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 /* create mapobject structure */
1150 lz = (mapobject *)type->tp_alloc(type, 0);
1151 if (lz == NULL) {
1152 Py_DECREF(iters);
1153 return NULL;
1154 }
1155 lz->iters = iters;
1156 func = PyTuple_GET_ITEM(args, 0);
1157 Py_INCREF(func);
1158 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001160 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001161}
1162
1163static void
1164map_dealloc(mapobject *lz)
1165{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 PyObject_GC_UnTrack(lz);
1167 Py_XDECREF(lz->iters);
1168 Py_XDECREF(lz->func);
1169 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001170}
1171
1172static int
1173map_traverse(mapobject *lz, visitproc visit, void *arg)
1174{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001175 Py_VISIT(lz->iters);
1176 Py_VISIT(lz->func);
1177 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001178}
1179
1180static PyObject *
1181map_next(mapobject *lz)
1182{
Victor Stinnerbc08ab42016-12-15 12:40:53 +01001183 PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001184 PyObject **stack;
1185 Py_ssize_t niters, nargs, i;
1186 PyObject *result = NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001187
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001188 niters = PyTuple_GET_SIZE(lz->iters);
1189 if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
1190 stack = small_stack;
1191 }
1192 else {
1193 stack = PyMem_Malloc(niters * sizeof(stack[0]));
1194 if (stack == NULL) {
1195 PyErr_NoMemory();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 return NULL;
1197 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 }
Victor Stinnercdb5cee2016-08-24 01:45:13 +02001199
1200 nargs = 0;
1201 for (i=0; i < niters; i++) {
1202 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1203 PyObject *val = Py_TYPE(it)->tp_iternext(it);
1204 if (val == NULL) {
1205 goto exit;
1206 }
1207 stack[i] = val;
1208 nargs++;
1209 }
1210
1211 result = _PyObject_FastCall(lz->func, stack, nargs);
1212
1213exit:
1214 for (i=0; i < nargs; i++) {
1215 Py_DECREF(stack[i]);
1216 }
1217 if (stack != small_stack) {
1218 PyMem_Free(stack);
1219 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001221}
1222
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001223static PyObject *
1224map_reduce(mapobject *lz)
1225{
1226 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1227 PyObject *args = PyTuple_New(numargs+1);
1228 Py_ssize_t i;
1229 if (args == NULL)
1230 return NULL;
1231 Py_INCREF(lz->func);
1232 PyTuple_SET_ITEM(args, 0, lz->func);
1233 for (i = 0; i<numargs; i++){
1234 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1235 Py_INCREF(it);
1236 PyTuple_SET_ITEM(args, i+1, it);
1237 }
1238
1239 return Py_BuildValue("ON", Py_TYPE(lz), args);
1240}
1241
1242static PyMethodDef map_methods[] = {
1243 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1244 {NULL, NULL} /* sentinel */
1245};
1246
1247
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001248PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001249"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001250\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001251Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001252each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001253
Raymond Hettingera6c60372008-03-13 01:26:19 +00001254PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1256 "map", /* tp_name */
1257 sizeof(mapobject), /* tp_basicsize */
1258 0, /* tp_itemsize */
1259 /* methods */
1260 (destructor)map_dealloc, /* tp_dealloc */
1261 0, /* tp_print */
1262 0, /* tp_getattr */
1263 0, /* tp_setattr */
1264 0, /* tp_reserved */
1265 0, /* tp_repr */
1266 0, /* tp_as_number */
1267 0, /* tp_as_sequence */
1268 0, /* tp_as_mapping */
1269 0, /* tp_hash */
1270 0, /* tp_call */
1271 0, /* tp_str */
1272 PyObject_GenericGetAttr, /* tp_getattro */
1273 0, /* tp_setattro */
1274 0, /* tp_as_buffer */
1275 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1276 Py_TPFLAGS_BASETYPE, /* tp_flags */
1277 map_doc, /* tp_doc */
1278 (traverseproc)map_traverse, /* tp_traverse */
1279 0, /* tp_clear */
1280 0, /* tp_richcompare */
1281 0, /* tp_weaklistoffset */
1282 PyObject_SelfIter, /* tp_iter */
1283 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001284 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001285 0, /* tp_members */
1286 0, /* tp_getset */
1287 0, /* tp_base */
1288 0, /* tp_dict */
1289 0, /* tp_descr_get */
1290 0, /* tp_descr_set */
1291 0, /* tp_dictoffset */
1292 0, /* tp_init */
1293 PyType_GenericAlloc, /* tp_alloc */
1294 map_new, /* tp_new */
1295 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001296};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001297
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001298
1299/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001300static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001301builtin_next(PyObject *self, PyObject *args)
1302{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 PyObject *it, *res;
1304 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001306 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1307 return NULL;
1308 if (!PyIter_Check(it)) {
1309 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001310 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 it->ob_type->tp_name);
1312 return NULL;
1313 }
1314
1315 res = (*it->ob_type->tp_iternext)(it);
1316 if (res != NULL) {
1317 return res;
1318 } else if (def != NULL) {
1319 if (PyErr_Occurred()) {
1320 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1321 return NULL;
1322 PyErr_Clear();
1323 }
1324 Py_INCREF(def);
1325 return def;
1326 } else if (PyErr_Occurred()) {
1327 return NULL;
1328 } else {
1329 PyErr_SetNone(PyExc_StopIteration);
1330 return NULL;
1331 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001332}
1333
1334PyDoc_STRVAR(next_doc,
1335"next(iterator[, default])\n\
1336\n\
1337Return the next item from the iterator. If default is given and the iterator\n\
1338is exhausted, it is returned instead of raising StopIteration.");
1339
1340
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001341/*[clinic input]
1342setattr as builtin_setattr
1343
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001344 obj: object
1345 name: object
1346 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001347 /
1348
1349Sets the named attribute on the given object to the specified value.
1350
1351setattr(x, 'y', v) is equivalent to ``x.y = v''
1352[clinic start generated code]*/
1353
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001354static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001355builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
Larry Hastings89964c42015-04-14 18:07:59 -04001356 PyObject *value)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001357/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001358{
1359 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001360 return NULL;
1361 Py_INCREF(Py_None);
1362 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001363}
1364
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001365
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001366/*[clinic input]
1367delattr as builtin_delattr
1368
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001369 obj: object
1370 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001371 /
1372
1373Deletes the named attribute from the given object.
1374
1375delattr(x, 'y') is equivalent to ``del x.y''
1376[clinic start generated code]*/
1377
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001378static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001379builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
1380/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001381{
1382 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001383 return NULL;
1384 Py_INCREF(Py_None);
1385 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001386}
1387
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001388
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001389/*[clinic input]
1390hash as builtin_hash
1391
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001392 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001393 /
1394
1395Return the hash value for the given object.
1396
1397Two objects that compare equal must also have the same hash value, but the
1398reverse is not necessarily true.
1399[clinic start generated code]*/
1400
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001402builtin_hash(PyObject *module, PyObject *obj)
1403/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001404{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001405 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001406
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001407 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001408 if (x == -1)
1409 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001410 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001411}
1412
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001413
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001414/*[clinic input]
1415hex as builtin_hex
1416
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001417 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001418 /
1419
1420Return the hexadecimal representation of an integer.
1421
1422 >>> hex(12648430)
1423 '0xc0ffee'
1424[clinic start generated code]*/
1425
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001427builtin_hex(PyObject *module, PyObject *number)
1428/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001429{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001430 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001431}
1432
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001433
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001434/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001435static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001436builtin_iter(PyObject *self, PyObject *args)
1437{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001440 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1441 return NULL;
1442 if (w == NULL)
1443 return PyObject_GetIter(v);
1444 if (!PyCallable_Check(v)) {
1445 PyErr_SetString(PyExc_TypeError,
1446 "iter(v, w): v must be callable");
1447 return NULL;
1448 }
1449 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001450}
1451
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001452PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001453"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001454iter(callable, sentinel) -> iterator\n\
1455\n\
1456Get an iterator from an object. In the first form, the argument must\n\
1457supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001458In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001459
1460
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001461/*[clinic input]
1462len as builtin_len
1463
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001464 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001465 /
1466
1467Return the number of items in a container.
1468[clinic start generated code]*/
1469
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001470static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001471builtin_len(PyObject *module, PyObject *obj)
1472/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001475
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001476 res = PyObject_Size(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 if (res < 0 && PyErr_Occurred())
1478 return NULL;
1479 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001480}
1481
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001482
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001483/*[clinic input]
1484locals as builtin_locals
1485
1486Return a dictionary containing the current scope's local variables.
1487
1488NOTE: Whether or not updates to this dictionary will affect name lookups in
1489the local scope and vice-versa is *implementation dependent* and not
1490covered by any backwards compatibility guarantees.
1491[clinic start generated code]*/
1492
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001493static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001494builtin_locals_impl(PyObject *module)
1495/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001496{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001497 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001498
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001499 d = PyEval_GetLocals();
1500 Py_XINCREF(d);
1501 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001502}
1503
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001504
Guido van Rossum79f25d91997-04-29 20:08:16 +00001505static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001506min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001508 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001509 PyObject *emptytuple, *defaultval = NULL;
1510 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001511 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001512 const int positional = PyTuple_Size(args) > 1;
1513 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001514
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001515 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001516 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001517 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001518 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001519
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001520 emptytuple = PyTuple_New(0);
1521 if (emptytuple == NULL)
1522 return NULL;
1523 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
1524 &keyfunc, &defaultval);
1525 Py_DECREF(emptytuple);
1526 if (!ret)
1527 return NULL;
1528
1529 if (positional && defaultval != NULL) {
1530 PyErr_Format(PyExc_TypeError,
1531 "Cannot specify a default for %s() with multiple "
1532 "positional arguments", name);
1533 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001534 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001536 it = PyObject_GetIter(v);
1537 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001538 return NULL;
1539 }
Tim Petersc3074532001-05-03 07:00:32 +00001540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001541 maxitem = NULL; /* the result */
1542 maxval = NULL; /* the value associated with the result */
1543 while (( item = PyIter_Next(it) )) {
1544 /* get the value from the key function */
1545 if (keyfunc != NULL) {
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001546 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001547 if (val == NULL)
1548 goto Fail_it_item;
1549 }
1550 /* no key function; the value is the item */
1551 else {
1552 val = item;
1553 Py_INCREF(val);
1554 }
Tim Petersc3074532001-05-03 07:00:32 +00001555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001556 /* maximum value and item are unset; set them */
1557 if (maxval == NULL) {
1558 maxitem = item;
1559 maxval = val;
1560 }
1561 /* maximum value and item are set; update them as necessary */
1562 else {
1563 int cmp = PyObject_RichCompareBool(val, maxval, op);
1564 if (cmp < 0)
1565 goto Fail_it_item_and_val;
1566 else if (cmp > 0) {
1567 Py_DECREF(maxval);
1568 Py_DECREF(maxitem);
1569 maxval = val;
1570 maxitem = item;
1571 }
1572 else {
1573 Py_DECREF(item);
1574 Py_DECREF(val);
1575 }
1576 }
1577 }
1578 if (PyErr_Occurred())
1579 goto Fail_it;
1580 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001581 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001582 if (defaultval != NULL) {
1583 Py_INCREF(defaultval);
1584 maxitem = defaultval;
1585 } else {
1586 PyErr_Format(PyExc_ValueError,
1587 "%s() arg is an empty sequence", name);
1588 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 }
1590 else
1591 Py_DECREF(maxval);
1592 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001594
1595Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001597Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001598 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001599Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 Py_XDECREF(maxval);
1601 Py_XDECREF(maxitem);
1602 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001603 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001604}
1605
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001606/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001607static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001608builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001609{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001610 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001611}
1612
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001613PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001614"min(iterable, *[, default=obj, key=func]) -> value\n\
1615min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001616\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001617With a single iterable argument, return its smallest item. The\n\
1618default keyword-only argument specifies an object to return if\n\
1619the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001620With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001621
1622
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001623/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001624static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001625builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001626{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001628}
1629
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001630PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001631"max(iterable, *[, default=obj, key=func]) -> value\n\
1632max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001633\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001634With a single iterable argument, return its biggest item. The\n\
1635default keyword-only argument specifies an object to return if\n\
1636the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001637With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001638
1639
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001640/*[clinic input]
1641oct as builtin_oct
1642
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001643 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001644 /
1645
1646Return the octal representation of an integer.
1647
1648 >>> oct(342391)
1649 '0o1234567'
1650[clinic start generated code]*/
1651
Guido van Rossum79f25d91997-04-29 20:08:16 +00001652static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001653builtin_oct(PyObject *module, PyObject *number)
1654/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001655{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001656 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001657}
1658
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001659
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001660/*[clinic input]
1661ord as builtin_ord
1662
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001663 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001664 /
1665
1666Return the Unicode code point for a one-character string.
1667[clinic start generated code]*/
1668
Guido van Rossum79f25d91997-04-29 20:08:16 +00001669static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001670builtin_ord(PyObject *module, PyObject *c)
1671/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001672{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001673 long ord;
1674 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001675
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001676 if (PyBytes_Check(c)) {
1677 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001679 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 return PyLong_FromLong(ord);
1681 }
1682 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001683 else if (PyUnicode_Check(c)) {
1684 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001685 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001686 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001688 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 return PyLong_FromLong(ord);
1690 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001691 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001692 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001693 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001694 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001695 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001696 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 return PyLong_FromLong(ord);
1698 }
1699 }
1700 else {
1701 PyErr_Format(PyExc_TypeError,
1702 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001703 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001704 return NULL;
1705 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001706
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 PyErr_Format(PyExc_TypeError,
1708 "ord() expected a character, "
1709 "but string of length %zd found",
1710 size);
1711 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001712}
1713
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001714
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001715/*[clinic input]
1716pow as builtin_pow
1717
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001718 x: object
1719 y: object
1720 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001721 /
1722
1723Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1724
1725Some types, such as ints, are able to use a more efficient algorithm when
1726invoked using the three argument form.
1727[clinic start generated code]*/
1728
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001729static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001730builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
1731/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001732{
1733 return PyNumber_Power(x, y, z);
1734}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001735
1736
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001737/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001738static PyObject *
1739builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1740{
Georg Brandlbc3b6822012-01-13 19:41:25 +01001741 static char *kwlist[] = {"sep", "end", "file", "flush", 0};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001742 static PyObject *dummy_args;
Georg Brandlbc3b6822012-01-13 19:41:25 +01001743 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001744 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001745
Benjamin Peterson00102562012-01-11 21:00:16 -05001746 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Georg Brandlbc3b6822012-01-13 19:41:25 +01001747 return NULL;
1748 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print",
1749 kwlist, &sep, &end, &file, &flush))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 return NULL;
1751 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001752 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001753 if (file == NULL) {
1754 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1755 return NULL;
1756 }
1757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 /* sys.stdout may be None when FILE* stdout isn't connected */
1759 if (file == Py_None)
1760 Py_RETURN_NONE;
1761 }
Guido van Rossum34343512006-11-30 22:13:52 +00001762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 if (sep == Py_None) {
1764 sep = NULL;
1765 }
1766 else if (sep && !PyUnicode_Check(sep)) {
1767 PyErr_Format(PyExc_TypeError,
1768 "sep must be None or a string, not %.200s",
1769 sep->ob_type->tp_name);
1770 return NULL;
1771 }
1772 if (end == Py_None) {
1773 end = NULL;
1774 }
1775 else if (end && !PyUnicode_Check(end)) {
1776 PyErr_Format(PyExc_TypeError,
1777 "end must be None or a string, not %.200s",
1778 end->ob_type->tp_name);
1779 return NULL;
1780 }
Guido van Rossum34343512006-11-30 22:13:52 +00001781
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001782 for (i = 0; i < PyTuple_Size(args); i++) {
1783 if (i > 0) {
1784 if (sep == NULL)
1785 err = PyFile_WriteString(" ", file);
1786 else
1787 err = PyFile_WriteObject(sep, file,
1788 Py_PRINT_RAW);
1789 if (err)
1790 return NULL;
1791 }
1792 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1793 Py_PRINT_RAW);
1794 if (err)
1795 return NULL;
1796 }
Guido van Rossum34343512006-11-30 22:13:52 +00001797
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001798 if (end == NULL)
1799 err = PyFile_WriteString("\n", file);
1800 else
1801 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1802 if (err)
1803 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001804
Georg Brandlbc3b6822012-01-13 19:41:25 +01001805 if (flush != NULL) {
1806 PyObject *tmp;
1807 int do_flush = PyObject_IsTrue(flush);
1808 if (do_flush == -1)
1809 return NULL;
1810 else if (do_flush) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001811 tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
Georg Brandlbc3b6822012-01-13 19:41:25 +01001812 if (tmp == NULL)
1813 return NULL;
1814 else
1815 Py_DECREF(tmp);
1816 }
1817 }
1818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001819 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001820}
1821
1822PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001823"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001824\n\
1825Prints the values to a stream, or to sys.stdout by default.\n\
1826Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001827file: a file-like object (stream); defaults to the current sys.stdout.\n\
1828sep: string inserted between values, default a space.\n\
1829end: string appended after the last value, default a newline.\n\
1830flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001831
1832
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001833/*[clinic input]
1834input as builtin_input
1835
1836 prompt: object(c_default="NULL") = None
1837 /
1838
1839Read a string from standard input. The trailing newline is stripped.
1840
1841The prompt string, if given, is printed to standard output without a
1842trailing newline before reading input.
1843
1844If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1845On *nix systems, readline is used if available.
1846[clinic start generated code]*/
1847
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001848static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001849builtin_input_impl(PyObject *module, PyObject *prompt)
1850/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001851{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001852 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1853 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1854 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001855 PyObject *tmp;
1856 long fd;
1857 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001858
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001859 /* Check that stdin/out/err are intact */
1860 if (fin == NULL || fin == Py_None) {
1861 PyErr_SetString(PyExc_RuntimeError,
1862 "input(): lost sys.stdin");
1863 return NULL;
1864 }
1865 if (fout == NULL || fout == Py_None) {
1866 PyErr_SetString(PyExc_RuntimeError,
1867 "input(): lost sys.stdout");
1868 return NULL;
1869 }
1870 if (ferr == NULL || ferr == Py_None) {
1871 PyErr_SetString(PyExc_RuntimeError,
1872 "input(): lost sys.stderr");
1873 return NULL;
1874 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 /* First of all, flush stderr */
Victor Stinner3466bde2016-09-05 18:16:01 -07001877 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 if (tmp == NULL)
1879 PyErr_Clear();
1880 else
1881 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001883 /* We should only use (GNU) readline if Python's sys.stdin and
1884 sys.stdout are the same as C's stdin and stdout, because we
1885 need to pass it those. */
Victor Stinner3466bde2016-09-05 18:16:01 -07001886 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001887 if (tmp == NULL) {
1888 PyErr_Clear();
1889 tty = 0;
1890 }
1891 else {
1892 fd = PyLong_AsLong(tmp);
1893 Py_DECREF(tmp);
1894 if (fd < 0 && PyErr_Occurred())
1895 return NULL;
1896 tty = fd == fileno(stdin) && isatty(fd);
1897 }
1898 if (tty) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001899 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
Martin Panterc9a6ab52015-10-10 01:25:38 +00001900 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001902 tty = 0;
1903 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 else {
1905 fd = PyLong_AsLong(tmp);
1906 Py_DECREF(tmp);
1907 if (fd < 0 && PyErr_Occurred())
1908 return NULL;
1909 tty = fd == fileno(stdout) && isatty(fd);
1910 }
1911 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001912
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 /* If we're interactive, use (GNU) readline */
1914 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001915 PyObject *po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001916 char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001917 char *s = NULL;
1918 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1919 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001920 const char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001921 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001922 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001923
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001924 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001925 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001926 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 /* stdin is a text stream, so it must have an
1928 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001929 goto _readline_errors;
Serhiy Storchaka06515832016-11-20 09:13:07 +02001930 stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
1931 stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001932 if (!stdin_encoding_str || !stdin_errors_str)
1933 goto _readline_errors;
Victor Stinner3466bde2016-09-05 18:16:01 -07001934 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001935 if (tmp == NULL)
1936 PyErr_Clear();
1937 else
1938 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001939 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001940 /* We have a prompt, encode it as stdout would */
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001941 const char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001943 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001944 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001945 if (!stdout_encoding || !stdout_errors)
1946 goto _readline_errors;
Serhiy Storchaka06515832016-11-20 09:13:07 +02001947 stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
1948 stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001949 if (!stdout_encoding_str || !stdout_errors_str)
1950 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001951 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001952 if (stringpo == NULL)
1953 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001954 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001955 stdout_encoding_str, stdout_errors_str);
1956 Py_CLEAR(stdout_encoding);
1957 Py_CLEAR(stdout_errors);
1958 Py_CLEAR(stringpo);
1959 if (po == NULL)
1960 goto _readline_errors;
Serhiy Storchaka21a663e2016-04-13 15:37:23 +03001961 assert(PyBytes_Check(po));
1962 promptstr = PyBytes_AS_STRING(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001963 }
1964 else {
1965 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001966 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001968 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001970 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 if (!PyErr_Occurred())
1972 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001973 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001974 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001975
1976 len = strlen(s);
1977 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 PyErr_SetNone(PyExc_EOFError);
1979 result = NULL;
1980 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001981 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001982 if (len > PY_SSIZE_T_MAX) {
1983 PyErr_SetString(PyExc_OverflowError,
1984 "input: input too long");
1985 result = NULL;
1986 }
1987 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001988 len--; /* strip trailing '\n' */
1989 if (len != 0 && s[len-1] == '\r')
1990 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001991 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1992 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 }
1994 }
1995 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001996 Py_DECREF(stdin_errors);
1997 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 PyMem_FREE(s);
1999 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01002000 _readline_errors:
2001 Py_XDECREF(stdin_encoding);
2002 Py_XDECREF(stdout_encoding);
2003 Py_XDECREF(stdin_errors);
2004 Py_XDECREF(stdout_errors);
2005 Py_XDECREF(po);
2006 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002007 }
Guido van Rossumeba76962007-05-27 09:13:28 +00002008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002009 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002010 if (prompt != NULL) {
2011 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 return NULL;
2013 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002014 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 if (tmp == NULL)
2016 PyErr_Clear();
2017 else
2018 Py_DECREF(tmp);
2019 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00002020}
2021
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002022
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002023/*[clinic input]
2024repr as builtin_repr
2025
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002026 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002027 /
2028
2029Return the canonical string representation of the object.
2030
2031For many object types, including most builtins, eval(repr(obj)) == obj.
2032[clinic start generated code]*/
2033
Guido van Rossum79f25d91997-04-29 20:08:16 +00002034static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002035builtin_repr(PyObject *module, PyObject *obj)
2036/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002037{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002038 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002039}
2040
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002041
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002042/* AC: cannot convert yet, as needs PEP 457 group support in inspect
2043 * or a semantic change to accept None for "ndigits"
2044 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002045static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002046builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002047{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002048 PyObject *ndigits = NULL;
2049 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002050 PyObject *number, *round, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002051
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002052 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
2053 kwlist, &number, &ndigits))
2054 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00002055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002056 if (Py_TYPE(number)->tp_dict == NULL) {
2057 if (PyType_Ready(Py_TYPE(number)) < 0)
2058 return NULL;
2059 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002060
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002061 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002063 if (!PyErr_Occurred())
2064 PyErr_Format(PyExc_TypeError,
2065 "type %.100s doesn't define __round__ method",
2066 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 return NULL;
2068 }
Alex Martelliae211f92007-08-22 23:21:33 +00002069
Raymond Hettingerf0f1c232016-09-03 01:55:11 -07002070 if (ndigits == NULL || ndigits == Py_None)
Victor Stinnerf17c3de2016-12-06 18:46:19 +01002071 result = _PyObject_CallNoArg(round);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002072 else
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01002073 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002074 Py_DECREF(round);
2075 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002076}
2077
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002078PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00002079"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002080\n\
2081Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00002082This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00002083same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00002084
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002085
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002086/*AC: we need to keep the kwds dict intact to easily call into the
2087 * list.sort method, which isn't currently supported in AC. So we just use
2088 * the initially generated signature with a custom implementation.
2089 */
2090/* [disabled clinic input]
2091sorted as builtin_sorted
2092
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002093 iterable as seq: object
2094 key as keyfunc: object = None
2095 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002096
2097Return a new list containing all items from the iterable in ascending order.
2098
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002099A custom key function can be supplied to customize the sort order, and the
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002100reverse flag can be set to request the result in descending order.
2101[end disabled clinic input]*/
2102
2103PyDoc_STRVAR(builtin_sorted__doc__,
2104"sorted($module, iterable, key=None, reverse=False)\n"
2105"--\n"
2106"\n"
2107"Return a new list containing all items from the iterable in ascending order.\n"
2108"\n"
Raymond Hettinger7ea386e2016-08-25 21:11:50 -07002109"A custom key function can be supplied to customize the sort order, and the\n"
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002110"reverse flag can be set to request the result in descending order.");
2111
2112#define BUILTIN_SORTED_METHODDEF \
2113 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS|METH_KEYWORDS, builtin_sorted__doc__},
2114
Raymond Hettinger64958a12003-12-17 20:43:33 +00002115static PyObject *
2116builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2117{
Victor Stinner2990fa12016-08-22 23:21:55 +02002118 PyObject *newlist, *v, *seq, *keyfunc=NULL, **newargs;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 PyObject *callable;
2120 static char *kwlist[] = {"iterable", "key", "reverse", 0};
2121 int reverse;
Victor Stinner74319ae2016-08-25 00:04:09 +02002122 Py_ssize_t nargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002124 /* args 1-3 should match listsort in Objects/listobject.c */
2125 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
2126 kwlist, &seq, &keyfunc, &reverse))
2127 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002129 newlist = PySequence_List(seq);
2130 if (newlist == NULL)
2131 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002132
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002133 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002134 if (callable == NULL) {
2135 Py_DECREF(newlist);
2136 return NULL;
2137 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002138
Victor Stinner2990fa12016-08-22 23:21:55 +02002139 newargs = &PyTuple_GET_ITEM(args, 1);
2140 nargs = PyTuple_GET_SIZE(args) - 1;
2141 v = _PyObject_FastCallDict(callable, newargs, nargs, kwds);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002142 Py_DECREF(callable);
2143 if (v == NULL) {
2144 Py_DECREF(newlist);
2145 return NULL;
2146 }
2147 Py_DECREF(v);
2148 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002149}
2150
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002151
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002152/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002153static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002154builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002155{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 PyObject *v = NULL;
2157 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002159 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2160 return NULL;
2161 if (v == NULL) {
2162 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002163 if (d == NULL)
2164 return NULL;
2165 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 }
2167 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002168 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002169 if (d == NULL) {
2170 PyErr_SetString(PyExc_TypeError,
2171 "vars() argument must have __dict__ attribute");
2172 return NULL;
2173 }
2174 }
2175 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002176}
2177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002178PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002179"vars([object]) -> dictionary\n\
2180\n\
2181Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002182With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002183
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002184
2185/*[clinic input]
2186sum as builtin_sum
2187
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002188 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002189 start: object(c_default="NULL") = 0
2190 /
2191
2192Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2193
2194When the iterable is empty, return the start value.
2195This function is intended specifically for use with numeric values and may
2196reject non-numeric types.
2197[clinic start generated code]*/
2198
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002199static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002200builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
2201/*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002202{
2203 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002205
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002206 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 if (iter == NULL)
2208 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002210 if (result == NULL) {
2211 result = PyLong_FromLong(0);
2212 if (result == NULL) {
2213 Py_DECREF(iter);
2214 return NULL;
2215 }
2216 } else {
2217 /* reject string values for 'start' parameter */
2218 if (PyUnicode_Check(result)) {
2219 PyErr_SetString(PyExc_TypeError,
2220 "sum() can't sum strings [use ''.join(seq) instead]");
2221 Py_DECREF(iter);
2222 return NULL;
2223 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002224 if (PyBytes_Check(result)) {
2225 PyErr_SetString(PyExc_TypeError,
2226 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002227 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002228 return NULL;
2229 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002230 if (PyByteArray_Check(result)) {
2231 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002232 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002233 Py_DECREF(iter);
2234 return NULL;
2235 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002236 Py_INCREF(result);
2237 }
Alex Martellia70b1912003-04-22 08:12:33 +00002238
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002239#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002240 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2241 Assumes all inputs are the same type. If the assumption fails, default
2242 to the more general routine.
2243 */
2244 if (PyLong_CheckExact(result)) {
2245 int overflow;
2246 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2247 /* If this already overflowed, don't even enter the loop. */
2248 if (overflow == 0) {
2249 Py_DECREF(result);
2250 result = NULL;
2251 }
2252 while(result == NULL) {
2253 item = PyIter_Next(iter);
2254 if (item == NULL) {
2255 Py_DECREF(iter);
2256 if (PyErr_Occurred())
2257 return NULL;
2258 return PyLong_FromLong(i_result);
2259 }
2260 if (PyLong_CheckExact(item)) {
2261 long b = PyLong_AsLongAndOverflow(item, &overflow);
2262 long x = i_result + b;
2263 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2264 i_result = x;
2265 Py_DECREF(item);
2266 continue;
2267 }
2268 }
2269 /* Either overflowed or is not an int. Restore real objects and process normally */
2270 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002271 if (result == NULL) {
2272 Py_DECREF(item);
2273 Py_DECREF(iter);
2274 return NULL;
2275 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002276 temp = PyNumber_Add(result, item);
2277 Py_DECREF(result);
2278 Py_DECREF(item);
2279 result = temp;
2280 if (result == NULL) {
2281 Py_DECREF(iter);
2282 return NULL;
2283 }
2284 }
2285 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002286
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002287 if (PyFloat_CheckExact(result)) {
2288 double f_result = PyFloat_AS_DOUBLE(result);
2289 Py_DECREF(result);
2290 result = NULL;
2291 while(result == NULL) {
2292 item = PyIter_Next(iter);
2293 if (item == NULL) {
2294 Py_DECREF(iter);
2295 if (PyErr_Occurred())
2296 return NULL;
2297 return PyFloat_FromDouble(f_result);
2298 }
2299 if (PyFloat_CheckExact(item)) {
2300 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2301 f_result += PyFloat_AS_DOUBLE(item);
2302 PyFPE_END_PROTECT(f_result)
2303 Py_DECREF(item);
2304 continue;
2305 }
2306 if (PyLong_CheckExact(item)) {
2307 long value;
2308 int overflow;
2309 value = PyLong_AsLongAndOverflow(item, &overflow);
2310 if (!overflow) {
2311 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2312 f_result += (double)value;
2313 PyFPE_END_PROTECT(f_result)
2314 Py_DECREF(item);
2315 continue;
2316 }
2317 }
2318 result = PyFloat_FromDouble(f_result);
2319 temp = PyNumber_Add(result, item);
2320 Py_DECREF(result);
2321 Py_DECREF(item);
2322 result = temp;
2323 if (result == NULL) {
2324 Py_DECREF(iter);
2325 return NULL;
2326 }
2327 }
2328 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002329#endif
2330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002331 for(;;) {
2332 item = PyIter_Next(iter);
2333 if (item == NULL) {
2334 /* error, or end-of-sequence */
2335 if (PyErr_Occurred()) {
2336 Py_DECREF(result);
2337 result = NULL;
2338 }
2339 break;
2340 }
2341 /* It's tempting to use PyNumber_InPlaceAdd instead of
2342 PyNumber_Add here, to avoid quadratic running time
2343 when doing 'sum(list_of_lists, [])'. However, this
2344 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002346 empty = []
2347 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002348
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 would change the value of empty. */
2350 temp = PyNumber_Add(result, item);
2351 Py_DECREF(result);
2352 Py_DECREF(item);
2353 result = temp;
2354 if (result == NULL)
2355 break;
2356 }
2357 Py_DECREF(iter);
2358 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002359}
2360
Alex Martellia70b1912003-04-22 08:12:33 +00002361
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002362/*[clinic input]
2363isinstance as builtin_isinstance
2364
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002365 obj: object
2366 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002367 /
2368
2369Return whether an object is an instance of a class or of a subclass thereof.
2370
2371A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2372check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2373or ...`` etc.
2374[clinic start generated code]*/
2375
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002376static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002377builtin_isinstance_impl(PyObject *module, PyObject *obj,
Larry Hastings89964c42015-04-14 18:07:59 -04002378 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002379/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002381 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002382
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002383 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 if (retval < 0)
2385 return NULL;
2386 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002387}
2388
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002389
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002390/*[clinic input]
2391issubclass as builtin_issubclass
2392
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002393 cls: object
2394 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002395 /
2396
2397Return whether 'cls' is a derived from another class or is the same class.
2398
2399A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2400check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2401or ...`` etc.
2402[clinic start generated code]*/
2403
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002404static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002405builtin_issubclass_impl(PyObject *module, PyObject *cls,
Larry Hastings89964c42015-04-14 18:07:59 -04002406 PyObject *class_or_tuple)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002407/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002408{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002410
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002411 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002412 if (retval < 0)
2413 return NULL;
2414 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002415}
2416
2417
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002418typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002419 PyObject_HEAD
2420 Py_ssize_t tuplesize;
2421 PyObject *ittuple; /* tuple of iterators */
2422 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002423} zipobject;
2424
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002425static PyObject *
2426zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002427{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 zipobject *lz;
2429 Py_ssize_t i;
2430 PyObject *ittuple; /* tuple of iterators */
2431 PyObject *result;
2432 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002433
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002434 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2435 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002436
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 /* args must be a tuple */
2438 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002440 /* obtain iterators */
2441 ittuple = PyTuple_New(tuplesize);
2442 if (ittuple == NULL)
2443 return NULL;
2444 for (i=0; i < tuplesize; ++i) {
2445 PyObject *item = PyTuple_GET_ITEM(args, i);
2446 PyObject *it = PyObject_GetIter(item);
2447 if (it == NULL) {
2448 if (PyErr_ExceptionMatches(PyExc_TypeError))
2449 PyErr_Format(PyExc_TypeError,
2450 "zip argument #%zd must support iteration",
2451 i+1);
2452 Py_DECREF(ittuple);
2453 return NULL;
2454 }
2455 PyTuple_SET_ITEM(ittuple, i, it);
2456 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 /* create a result holder */
2459 result = PyTuple_New(tuplesize);
2460 if (result == NULL) {
2461 Py_DECREF(ittuple);
2462 return NULL;
2463 }
2464 for (i=0 ; i < tuplesize ; i++) {
2465 Py_INCREF(Py_None);
2466 PyTuple_SET_ITEM(result, i, Py_None);
2467 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002469 /* create zipobject structure */
2470 lz = (zipobject *)type->tp_alloc(type, 0);
2471 if (lz == NULL) {
2472 Py_DECREF(ittuple);
2473 Py_DECREF(result);
2474 return NULL;
2475 }
2476 lz->ittuple = ittuple;
2477 lz->tuplesize = tuplesize;
2478 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002480 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002481}
2482
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002483static void
2484zip_dealloc(zipobject *lz)
2485{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 PyObject_GC_UnTrack(lz);
2487 Py_XDECREF(lz->ittuple);
2488 Py_XDECREF(lz->result);
2489 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002490}
2491
2492static int
2493zip_traverse(zipobject *lz, visitproc visit, void *arg)
2494{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002495 Py_VISIT(lz->ittuple);
2496 Py_VISIT(lz->result);
2497 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002498}
2499
2500static PyObject *
2501zip_next(zipobject *lz)
2502{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002503 Py_ssize_t i;
2504 Py_ssize_t tuplesize = lz->tuplesize;
2505 PyObject *result = lz->result;
2506 PyObject *it;
2507 PyObject *item;
2508 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002510 if (tuplesize == 0)
2511 return NULL;
2512 if (Py_REFCNT(result) == 1) {
2513 Py_INCREF(result);
2514 for (i=0 ; i < tuplesize ; i++) {
2515 it = PyTuple_GET_ITEM(lz->ittuple, i);
2516 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002517 if (item == NULL) {
2518 Py_DECREF(result);
2519 return NULL;
2520 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002521 olditem = PyTuple_GET_ITEM(result, i);
2522 PyTuple_SET_ITEM(result, i, item);
2523 Py_DECREF(olditem);
2524 }
2525 } else {
2526 result = PyTuple_New(tuplesize);
2527 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002528 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 for (i=0 ; i < tuplesize ; i++) {
2530 it = PyTuple_GET_ITEM(lz->ittuple, i);
2531 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002532 if (item == NULL) {
2533 Py_DECREF(result);
2534 return NULL;
2535 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 PyTuple_SET_ITEM(result, i, item);
2537 }
2538 }
2539 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002540}
Barry Warsawbd599b52000-08-03 15:45:29 +00002541
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002542static PyObject *
2543zip_reduce(zipobject *lz)
2544{
2545 /* Just recreate the zip with the internal iterator tuple */
2546 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2547}
2548
2549static PyMethodDef zip_methods[] = {
2550 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2551 {NULL, NULL} /* sentinel */
2552};
2553
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002554PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002555"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002556\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002557Return a zip object whose .__next__() method returns a tuple where\n\
2558the i-th element comes from the i-th iterable argument. The .__next__()\n\
2559method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002560is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002561
2562PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002563 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2564 "zip", /* tp_name */
2565 sizeof(zipobject), /* tp_basicsize */
2566 0, /* tp_itemsize */
2567 /* methods */
2568 (destructor)zip_dealloc, /* tp_dealloc */
2569 0, /* tp_print */
2570 0, /* tp_getattr */
2571 0, /* tp_setattr */
2572 0, /* tp_reserved */
2573 0, /* tp_repr */
2574 0, /* tp_as_number */
2575 0, /* tp_as_sequence */
2576 0, /* tp_as_mapping */
2577 0, /* tp_hash */
2578 0, /* tp_call */
2579 0, /* tp_str */
2580 PyObject_GenericGetAttr, /* tp_getattro */
2581 0, /* tp_setattro */
2582 0, /* tp_as_buffer */
2583 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2584 Py_TPFLAGS_BASETYPE, /* tp_flags */
2585 zip_doc, /* tp_doc */
2586 (traverseproc)zip_traverse, /* tp_traverse */
2587 0, /* tp_clear */
2588 0, /* tp_richcompare */
2589 0, /* tp_weaklistoffset */
2590 PyObject_SelfIter, /* tp_iter */
2591 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002592 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002593 0, /* tp_members */
2594 0, /* tp_getset */
2595 0, /* tp_base */
2596 0, /* tp_dict */
2597 0, /* tp_descr_get */
2598 0, /* tp_descr_set */
2599 0, /* tp_dictoffset */
2600 0, /* tp_init */
2601 PyType_GenericAlloc, /* tp_alloc */
2602 zip_new, /* tp_new */
2603 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002604};
Barry Warsawbd599b52000-08-03 15:45:29 +00002605
2606
Guido van Rossum79f25d91997-04-29 20:08:16 +00002607static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002608 {"__build_class__", (PyCFunction)builtin___build_class__,
Victor Stinner773dc6d2017-01-16 23:46:26 +01002609 METH_FASTCALL, build_class_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002610 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002611 BUILTIN_ABS_METHODDEF
2612 BUILTIN_ALL_METHODDEF
2613 BUILTIN_ANY_METHODDEF
2614 BUILTIN_ASCII_METHODDEF
2615 BUILTIN_BIN_METHODDEF
2616 BUILTIN_CALLABLE_METHODDEF
2617 BUILTIN_CHR_METHODDEF
2618 BUILTIN_COMPILE_METHODDEF
2619 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002620 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002621 BUILTIN_DIVMOD_METHODDEF
2622 BUILTIN_EVAL_METHODDEF
2623 BUILTIN_EXEC_METHODDEF
2624 BUILTIN_FORMAT_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002625 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002626 BUILTIN_GLOBALS_METHODDEF
2627 BUILTIN_HASATTR_METHODDEF
2628 BUILTIN_HASH_METHODDEF
2629 BUILTIN_HEX_METHODDEF
2630 BUILTIN_ID_METHODDEF
2631 BUILTIN_INPUT_METHODDEF
2632 BUILTIN_ISINSTANCE_METHODDEF
2633 BUILTIN_ISSUBCLASS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002634 {"iter", builtin_iter, METH_VARARGS, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002635 BUILTIN_LEN_METHODDEF
2636 BUILTIN_LOCALS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2638 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2639 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002640 BUILTIN_OCT_METHODDEF
2641 BUILTIN_ORD_METHODDEF
2642 BUILTIN_POW_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002643 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002644 BUILTIN_REPR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002645 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002646 BUILTIN_SETATTR_METHODDEF
2647 BUILTIN_SORTED_METHODDEF
2648 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002649 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2650 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002651};
2652
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002653PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002654"Built-in functions, exceptions, and other objects.\n\
2655\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002656Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002657
Martin v. Löwis1a214512008-06-11 05:26:20 +00002658static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002659 PyModuleDef_HEAD_INIT,
2660 "builtins",
2661 builtin_doc,
2662 -1, /* multiple "initialization" just copies the module dict. */
2663 builtin_methods,
2664 NULL,
2665 NULL,
2666 NULL,
2667 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002668};
2669
2670
Guido van Rossum25ce5661997-08-02 03:10:38 +00002671PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002672_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002673{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002675
2676 if (PyType_Ready(&PyFilter_Type) < 0 ||
2677 PyType_Ready(&PyMap_Type) < 0 ||
2678 PyType_Ready(&PyZip_Type) < 0)
2679 return NULL;
2680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002681 mod = PyModule_Create(&builtinsmodule);
2682 if (mod == NULL)
2683 return NULL;
2684 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002685
Tim Peters7571a0f2003-03-23 17:52:28 +00002686#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002687 /* "builtins" exposes a number of statically allocated objects
2688 * that, before this code was added in 2.3, never showed up in
2689 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2690 * result, programs leaking references to None and False (etc)
2691 * couldn't be diagnosed by examining sys.getobjects(0).
2692 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002693#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2694#else
2695#define ADD_TO_ALL(OBJECT) (void)0
2696#endif
2697
Tim Peters4b7625e2001-09-13 21:37:17 +00002698#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002699 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2700 return NULL; \
2701 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002703 SETBUILTIN("None", Py_None);
2704 SETBUILTIN("Ellipsis", Py_Ellipsis);
2705 SETBUILTIN("NotImplemented", Py_NotImplemented);
2706 SETBUILTIN("False", Py_False);
2707 SETBUILTIN("True", Py_True);
2708 SETBUILTIN("bool", &PyBool_Type);
2709 SETBUILTIN("memoryview", &PyMemoryView_Type);
2710 SETBUILTIN("bytearray", &PyByteArray_Type);
2711 SETBUILTIN("bytes", &PyBytes_Type);
2712 SETBUILTIN("classmethod", &PyClassMethod_Type);
2713 SETBUILTIN("complex", &PyComplex_Type);
2714 SETBUILTIN("dict", &PyDict_Type);
2715 SETBUILTIN("enumerate", &PyEnum_Type);
2716 SETBUILTIN("filter", &PyFilter_Type);
2717 SETBUILTIN("float", &PyFloat_Type);
2718 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2719 SETBUILTIN("property", &PyProperty_Type);
2720 SETBUILTIN("int", &PyLong_Type);
2721 SETBUILTIN("list", &PyList_Type);
2722 SETBUILTIN("map", &PyMap_Type);
2723 SETBUILTIN("object", &PyBaseObject_Type);
2724 SETBUILTIN("range", &PyRange_Type);
2725 SETBUILTIN("reversed", &PyReversed_Type);
2726 SETBUILTIN("set", &PySet_Type);
2727 SETBUILTIN("slice", &PySlice_Type);
2728 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2729 SETBUILTIN("str", &PyUnicode_Type);
2730 SETBUILTIN("super", &PySuper_Type);
2731 SETBUILTIN("tuple", &PyTuple_Type);
2732 SETBUILTIN("type", &PyType_Type);
2733 SETBUILTIN("zip", &PyZip_Type);
2734 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2735 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002736 Py_DECREF(debug);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002737 return NULL;
2738 }
Serhiy Storchakacfdfbb42016-06-18 09:44:03 +03002739 Py_DECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002742#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002743#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002744}