blob: e733485111b6023a7229c5f834f9724018443392 [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*/
Victor Stinner99b95382011-07-04 14:23:54 +020024#ifdef HAVE_MBCS
Mark Hammond26cffde42001-05-14 12:17:34 +000025const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000027#elif defined(__APPLE__)
28const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020030#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000031const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000032int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000033#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000034
Victor Stinnerbd303c12013-11-07 23:07:29 +010035_Py_IDENTIFIER(__builtins__);
36_Py_IDENTIFIER(__dict__);
37_Py_IDENTIFIER(__prepare__);
38_Py_IDENTIFIER(__round__);
39_Py_IDENTIFIER(encoding);
40_Py_IDENTIFIER(errors);
Martin v. Löwisbd928fe2011-10-14 10:20:37 +020041_Py_IDENTIFIER(fileno);
42_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010043_Py_IDENTIFIER(metaclass);
44_Py_IDENTIFIER(sort);
45_Py_IDENTIFIER(stdin);
46_Py_IDENTIFIER(stdout);
47_Py_IDENTIFIER(stderr);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020048
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030049#include "clinic/bltinmodule.c.h"
50
Nick Coghlanf9e227e2014-08-17 14:01:19 +100051/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +000052static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000053builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
54{
Nick Coghlande31b192011-10-23 22:04:16 +100055 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *cell;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000056 PyObject *cls = NULL;
Florent Xicluna4d46c2a2011-10-28 15:00:50 +020057 Py_ssize_t nargs;
Victor Stinner0c39b1b2015-03-18 15:02:06 +010058 int isclass = 0; /* initialize to prevent gcc warning */
Guido van Rossum52cc1d82007-03-18 15:41:51 +000059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000060 assert(args != NULL);
61 if (!PyTuple_Check(args)) {
62 PyErr_SetString(PyExc_TypeError,
63 "__build_class__: args is not a tuple");
64 return NULL;
65 }
66 nargs = PyTuple_GET_SIZE(args);
67 if (nargs < 2) {
68 PyErr_SetString(PyExc_TypeError,
69 "__build_class__: not enough arguments");
70 return NULL;
71 }
72 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
Benjamin Petersone8e14592013-05-16 14:37:25 -050073 if (!PyFunction_Check(func)) {
74 PyErr_SetString(PyExc_TypeError,
Zachary Ware9b338722014-08-05 14:01:10 -050075 "__build_class__: func must be a function");
Benjamin Petersone8e14592013-05-16 14:37:25 -050076 return NULL;
77 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000078 name = PyTuple_GET_ITEM(args, 1);
79 if (!PyUnicode_Check(name)) {
80 PyErr_SetString(PyExc_TypeError,
81 "__build_class__: name is not a string");
82 return NULL;
83 }
84 bases = PyTuple_GetSlice(args, 2, nargs);
85 if (bases == NULL)
86 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000087
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000088 if (kwds == NULL) {
89 meta = NULL;
90 mkw = NULL;
91 }
92 else {
93 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
94 if (mkw == NULL) {
95 Py_DECREF(bases);
96 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000097 }
Victor Stinnerae9f1612013-11-06 22:46:51 +010098 meta = _PyDict_GetItemId(mkw, &PyId_metaclass);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 if (meta != NULL) {
100 Py_INCREF(meta);
Victor Stinnerae9f1612013-11-06 22:46:51 +0100101 if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000102 Py_DECREF(meta);
103 Py_DECREF(mkw);
104 Py_DECREF(bases);
105 return NULL;
106 }
Nick Coghlande31b192011-10-23 22:04:16 +1000107 /* metaclass is explicitly given, check if it's indeed a class */
108 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000109 }
110 }
111 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +1000112 /* if there are no bases, use type: */
113 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000114 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +1000115 }
116 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000117 else {
118 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
119 meta = (PyObject *) (base0->ob_type);
120 }
121 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000122 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000123 }
Nick Coghlan9715d262011-10-23 22:36:42 +1000124
Nick Coghlande31b192011-10-23 22:04:16 +1000125 if (isclass) {
126 /* meta is really a class, so check for a more derived
127 metaclass, or possible metaclass conflicts: */
128 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
129 bases);
130 if (winner == NULL) {
131 Py_DECREF(meta);
132 Py_XDECREF(mkw);
133 Py_DECREF(bases);
134 return NULL;
135 }
136 if (winner != meta) {
137 Py_DECREF(meta);
138 meta = winner;
139 Py_INCREF(meta);
140 }
141 }
142 /* else: meta is not a class, so we cannot do the metaclass
143 calculation, so we will use the explicitly given object as it is */
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200144 prep = _PyObject_GetAttrId(meta, &PyId___prepare__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000145 if (prep == NULL) {
146 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
147 PyErr_Clear();
148 ns = PyDict_New();
149 }
150 else {
151 Py_DECREF(meta);
152 Py_XDECREF(mkw);
153 Py_DECREF(bases);
154 return NULL;
155 }
156 }
157 else {
158 PyObject *pargs = PyTuple_Pack(2, name, bases);
159 if (pargs == NULL) {
160 Py_DECREF(prep);
161 Py_DECREF(meta);
162 Py_XDECREF(mkw);
163 Py_DECREF(bases);
164 return NULL;
165 }
166 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
167 Py_DECREF(pargs);
168 Py_DECREF(prep);
169 }
170 if (ns == NULL) {
171 Py_DECREF(meta);
172 Py_XDECREF(mkw);
173 Py_DECREF(bases);
174 return NULL;
175 }
Benjamin Petersone8e14592013-05-16 14:37:25 -0500176 cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
177 NULL, 0, NULL, 0, NULL, 0, NULL,
178 PyFunction_GET_CLOSURE(func));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000179 if (cell != NULL) {
180 PyObject *margs;
181 margs = PyTuple_Pack(3, name, bases, ns);
182 if (margs != NULL) {
183 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
184 Py_DECREF(margs);
185 }
Benjamin Peterson8e8fbea2012-06-01 23:57:36 -0700186 if (cls != NULL && PyCell_Check(cell))
187 PyCell_Set(cell, cls);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000188 Py_DECREF(cell);
189 }
190 Py_DECREF(ns);
191 Py_DECREF(meta);
192 Py_XDECREF(mkw);
193 Py_DECREF(bases);
194 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000195}
196
197PyDoc_STRVAR(build_class_doc,
198"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
199\n\
200Internal helper function used by the class statement.");
201
202static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000203builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000204{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000205 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
206 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400207 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -0400208 int level = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000209
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400210 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 kwlist, &name, &globals, &locals, &fromlist, &level))
212 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400213 return PyImport_ImportModuleLevelObject(name, globals, locals,
214 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000215}
216
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000217PyDoc_STRVAR(import_doc,
Brett Cannoncb4996a2012-08-06 16:34:44 -0400218"__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000219\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000220Import a module. Because this function is meant for use by the Python\n\
221interpreter and not for general use it is better to use\n\
222importlib.import_module() to programmatically import a module.\n\
223\n\
224The globals argument is only used to determine the context;\n\
225they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000226should be a list of names to emulate ``from name import ...'', or an\n\
227empty list to emulate ``import name''.\n\
228When importing a module from a package, note that __import__('A.B', ...)\n\
229returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000230fromlist is not empty. Level is used to determine whether to perform \n\
Brett Cannon722d3ae2012-07-30 17:45:54 -0400231absolute or relative imports. 0 is absolute while a positive number\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000232is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000233
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000234
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000235/*[clinic input]
236abs as builtin_abs
237
238 x: 'O'
239 /
240
241Return the absolute value of the argument.
242[clinic start generated code]*/
243
Guido van Rossum79f25d91997-04-29 20:08:16 +0000244static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000245builtin_abs(PyModuleDef *module, PyObject *x)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300246/*[clinic end generated code: output=6833047c493ecea2 input=aa29cc07869b4732]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000247{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000248 return PyNumber_Absolute(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000249}
250
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000251/*[clinic input]
252all as builtin_all
253
254 iterable: 'O'
255 /
256
257Return True if bool(x) is True for all values x in the iterable.
258
259If the iterable is empty, return True.
260[clinic start generated code]*/
261
Raymond Hettinger96229b12005-03-11 06:49:40 +0000262static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000263builtin_all(PyModuleDef *module, PyObject *iterable)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300264/*[clinic end generated code: output=089e6d1b7bde27b1 input=dd506dc9998d42bd]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 PyObject *it, *item;
267 PyObject *(*iternext)(PyObject *);
268 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000269
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000270 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 if (it == NULL)
272 return NULL;
273 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000275 for (;;) {
276 item = iternext(it);
277 if (item == NULL)
278 break;
279 cmp = PyObject_IsTrue(item);
280 Py_DECREF(item);
281 if (cmp < 0) {
282 Py_DECREF(it);
283 return NULL;
284 }
285 if (cmp == 0) {
286 Py_DECREF(it);
287 Py_RETURN_FALSE;
288 }
289 }
290 Py_DECREF(it);
291 if (PyErr_Occurred()) {
292 if (PyErr_ExceptionMatches(PyExc_StopIteration))
293 PyErr_Clear();
294 else
295 return NULL;
296 }
297 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000298}
299
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000300/*[clinic input]
301any as builtin_any
302
303 iterable: 'O'
304 /
305
306Return True if bool(x) is True for any x in the iterable.
307
308If the iterable is empty, return False.
309[clinic start generated code]*/
310
Raymond Hettinger96229b12005-03-11 06:49:40 +0000311static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000312builtin_any(PyModuleDef *module, PyObject *iterable)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300313/*[clinic end generated code: output=1be994b2c2307492 input=8fe8460f3fbbced8]*/
Raymond Hettinger96229b12005-03-11 06:49:40 +0000314{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000315 PyObject *it, *item;
316 PyObject *(*iternext)(PyObject *);
317 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000318
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000319 it = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000320 if (it == NULL)
321 return NULL;
322 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000323
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 for (;;) {
325 item = iternext(it);
326 if (item == NULL)
327 break;
328 cmp = PyObject_IsTrue(item);
329 Py_DECREF(item);
330 if (cmp < 0) {
331 Py_DECREF(it);
332 return NULL;
333 }
334 if (cmp == 1) {
335 Py_DECREF(it);
336 Py_RETURN_TRUE;
337 }
338 }
339 Py_DECREF(it);
340 if (PyErr_Occurred()) {
341 if (PyErr_ExceptionMatches(PyExc_StopIteration))
342 PyErr_Clear();
343 else
344 return NULL;
345 }
346 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000347}
348
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000349/*[clinic input]
350ascii as builtin_ascii
351
352 obj: 'O'
353 /
354
355Return an ASCII-only representation of an object.
356
357As repr(), return a string containing a printable representation of an
358object, but escape the non-ASCII characters in the string returned by
359repr() using \\x, \\u or \\U escapes. This generates a string similar
360to that returned by repr() in Python 2.
361[clinic start generated code]*/
362
Georg Brandl559e5d72008-06-11 18:37:52 +0000363static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000364builtin_ascii(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300365/*[clinic end generated code: output=d4e862c48af2a933 input=0cbdc1420a306325]*/
Georg Brandl559e5d72008-06-11 18:37:52 +0000366{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000367 return PyObject_ASCII(obj);
Georg Brandl559e5d72008-06-11 18:37:52 +0000368}
369
Georg Brandl559e5d72008-06-11 18:37:52 +0000370
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000371/*[clinic input]
372bin as builtin_bin
373
374 number: 'O'
375 /
376
377Return the binary representation of an integer.
378
379 >>> bin(2796202)
380 '0b1010101010101010101010'
381[clinic start generated code]*/
382
Guido van Rossum79f25d91997-04-29 20:08:16 +0000383static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000384builtin_bin(PyModuleDef *module, PyObject *number)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300385/*[clinic end generated code: output=25ee26c6cf3bbb54 input=2a6362ae9a9c9203]*/
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000386{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000387 return PyNumber_ToBase(number, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000388}
389
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000390
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000391/*[clinic input]
392callable as builtin_callable
393
394 obj: 'O'
395 /
396
397Return whether the object is callable (i.e., some kind of function).
398
399Note that classes are callable, as are instances of classes with a
400__call__() method.
401[clinic start generated code]*/
402
Antoine Pitroue71362d2010-11-27 22:00:11 +0000403static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000404builtin_callable(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300405/*[clinic end generated code: output=f4df2ce92364b656 input=bb3bb528fffdade4]*/
Antoine Pitroue71362d2010-11-27 22:00:11 +0000406{
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000407 return PyBool_FromLong((long)PyCallable_Check(obj));
Antoine Pitroue71362d2010-11-27 22:00:11 +0000408}
409
Antoine Pitroue71362d2010-11-27 22:00:11 +0000410
Raymond Hettinger17301e92008-03-13 00:19:26 +0000411typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000412 PyObject_HEAD
413 PyObject *func;
414 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000415} filterobject;
416
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000417static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000418filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000419{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 PyObject *func, *seq;
421 PyObject *it;
422 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000423
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000424 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
425 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000426
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000427 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
428 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 /* Get iterator. */
431 it = PyObject_GetIter(seq);
432 if (it == NULL)
433 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 /* create filterobject structure */
436 lz = (filterobject *)type->tp_alloc(type, 0);
437 if (lz == NULL) {
438 Py_DECREF(it);
439 return NULL;
440 }
441 Py_INCREF(func);
442 lz->func = func;
443 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000446}
447
448static void
449filter_dealloc(filterobject *lz)
450{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000451 PyObject_GC_UnTrack(lz);
452 Py_XDECREF(lz->func);
453 Py_XDECREF(lz->it);
454 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000455}
456
457static int
458filter_traverse(filterobject *lz, visitproc visit, void *arg)
459{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 Py_VISIT(lz->it);
461 Py_VISIT(lz->func);
462 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000463}
464
465static PyObject *
466filter_next(filterobject *lz)
467{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 PyObject *item;
469 PyObject *it = lz->it;
470 long ok;
471 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000472
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000473 iternext = *Py_TYPE(it)->tp_iternext;
474 for (;;) {
475 item = iternext(it);
476 if (item == NULL)
477 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000478
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000479 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
480 ok = PyObject_IsTrue(item);
481 } else {
482 PyObject *good;
483 good = PyObject_CallFunctionObjArgs(lz->func,
484 item, NULL);
485 if (good == NULL) {
486 Py_DECREF(item);
487 return NULL;
488 }
489 ok = PyObject_IsTrue(good);
490 Py_DECREF(good);
491 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200492 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 return item;
494 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200495 if (ok < 0)
496 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000498}
499
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000500static PyObject *
501filter_reduce(filterobject *lz)
502{
503 return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
504}
505
506PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
507
508static PyMethodDef filter_methods[] = {
509 {"__reduce__", (PyCFunction)filter_reduce, METH_NOARGS, reduce_doc},
510 {NULL, NULL} /* sentinel */
511};
512
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000513PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000514"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000515\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000516Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000517is true. If function is None, return the items that are true.");
518
519PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 PyVarObject_HEAD_INIT(&PyType_Type, 0)
521 "filter", /* tp_name */
522 sizeof(filterobject), /* tp_basicsize */
523 0, /* tp_itemsize */
524 /* methods */
525 (destructor)filter_dealloc, /* tp_dealloc */
526 0, /* tp_print */
527 0, /* tp_getattr */
528 0, /* tp_setattr */
529 0, /* tp_reserved */
530 0, /* tp_repr */
531 0, /* tp_as_number */
532 0, /* tp_as_sequence */
533 0, /* tp_as_mapping */
534 0, /* tp_hash */
535 0, /* tp_call */
536 0, /* tp_str */
537 PyObject_GenericGetAttr, /* tp_getattro */
538 0, /* tp_setattro */
539 0, /* tp_as_buffer */
540 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
541 Py_TPFLAGS_BASETYPE, /* tp_flags */
542 filter_doc, /* tp_doc */
543 (traverseproc)filter_traverse, /* tp_traverse */
544 0, /* tp_clear */
545 0, /* tp_richcompare */
546 0, /* tp_weaklistoffset */
547 PyObject_SelfIter, /* tp_iter */
548 (iternextfunc)filter_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000549 filter_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 0, /* tp_members */
551 0, /* tp_getset */
552 0, /* tp_base */
553 0, /* tp_dict */
554 0, /* tp_descr_get */
555 0, /* tp_descr_set */
556 0, /* tp_dictoffset */
557 0, /* tp_init */
558 PyType_GenericAlloc, /* tp_alloc */
559 filter_new, /* tp_new */
560 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000561};
562
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000563
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000564/*[clinic input]
565format as builtin_format
566
567 value: 'O'
568 format_spec: unicode(c_default="NULL") = ''
569 /
570
571Return value.__format__(format_spec)
572
573format_spec defaults to the empty string
574[clinic start generated code]*/
575
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000576static PyObject *
577builtin_format_impl(PyModuleDef *module, PyObject *value, PyObject *format_spec)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300578/*[clinic end generated code: output=fae3e927cc715466 input=e23f2f11e0098c64]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000579{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000580 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000581}
582
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000583/*[clinic input]
584chr as builtin_chr
585
586 i: 'i'
587 /
588
589Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
590[clinic start generated code]*/
591
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000592static PyObject *
593builtin_chr_impl(PyModuleDef *module, int i)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300594/*[clinic end generated code: output=67fe4d87e690f373 input=9b1ced29615adf66]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000595{
596 return PyUnicode_FromOrdinal(i);
597}
Guido van Rossum09095f32000-03-10 23:00:52 +0000598
599
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200600static const char *
601source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, Py_buffer *view)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000602{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200603 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000604 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 if (PyUnicode_Check(cmd)) {
607 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200608 str = PyUnicode_AsUTF8AndSize(cmd, &size);
609 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000610 return NULL;
611 }
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200612 else if (PyObject_GetBuffer(cmd, view, PyBUF_SIMPLE) == 0) {
613 str = (const char *)view->buf;
614 size = view->len;
615 }
616 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000617 PyErr_Format(PyExc_TypeError,
618 "%s() arg 1 must be a %s object",
619 funcname, what);
620 return NULL;
621 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200622
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200623 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300624 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000625 "source code string cannot contain null bytes");
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200626 PyBuffer_Release(view);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 return NULL;
628 }
629 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000630}
631
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000632/*[clinic input]
633compile as builtin_compile
634
635 source: 'O'
636 filename: object(converter="PyUnicode_FSDecoder")
637 mode: 's'
638 flags: 'i' = 0
639 dont_inherit: 'i' = 0
640 optimize: 'i' = -1
641
642Compile source into a code object that can be executed by exec() or eval().
643
644The source code may represent a Python module, statement or expression.
645The filename will be used for run-time error messages.
646The mode must be 'exec' to compile a module, 'single' to compile a
647single (interactive) statement, or 'eval' to compile an expression.
648The flags argument, if present, controls which future statements influence
649the compilation of the code.
650The dont_inherit argument, if non-zero, stops the compilation inheriting
651the effects of any future statements in effect in the code calling
652compile; if absent or zero these statements do influence the compilation,
653in addition to any features explicitly specified.
654[clinic start generated code]*/
655
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000656static PyObject *
657builtin_compile_impl(PyModuleDef *module, PyObject *source, PyObject *filename, const char *mode, int flags, int dont_inherit, int optimize)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300658/*[clinic end generated code: output=4f41a315386bab9f input=c6212a9d21472f7e]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000659{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200660 Py_buffer view = {NULL, NULL};
661 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000662 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 int is_ast;
664 PyCompilerFlags cf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000665 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000666 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000667
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000668 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Tim Peters6cd6a822001-08-17 22:11:27 +0000669
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000670 if (flags &
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000671 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
672 {
673 PyErr_SetString(PyExc_ValueError,
674 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000675 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000676 }
677 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000678
Georg Brandl8334fd92010-12-04 10:26:46 +0000679 if (optimize < -1 || optimize > 2) {
680 PyErr_SetString(PyExc_ValueError,
681 "compile(): invalid optimize value");
682 goto error;
683 }
684
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000685 if (!dont_inherit) {
686 PyEval_MergeCompilerFlags(&cf);
687 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000688
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000689 if (strcmp(mode, "exec") == 0)
690 compile_mode = 0;
691 else if (strcmp(mode, "eval") == 0)
692 compile_mode = 1;
693 else if (strcmp(mode, "single") == 0)
694 compile_mode = 2;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 else {
696 PyErr_SetString(PyExc_ValueError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000697 "compile() mode must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000698 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000699 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000700
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000701 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000703 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000705 if (flags & PyCF_ONLY_AST) {
706 Py_INCREF(source);
707 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 }
709 else {
710 PyArena *arena;
711 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000712
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200714 if (arena == NULL)
715 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000716 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000717 if (mod == NULL) {
718 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000719 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500721 if (!PyAST_Validate(mod)) {
722 PyArena_Free(arena);
723 goto error;
724 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200725 result = (PyObject*)PyAST_CompileObject(mod, filename,
726 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 PyArena_Free(arena);
728 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000729 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000731
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200732 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &view);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000734 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000735
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000736 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200737 PyBuffer_Release(&view);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000738 goto finally;
739
740error:
741 result = NULL;
742finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200743 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000744 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000745}
746
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000747/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000748static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000749builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000750{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000751 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
754 return NULL;
755 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000756}
757
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000758PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000759"dir([object]) -> list of strings\n"
760"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000761"If called without an argument, return the names in the current scope.\n"
762"Else, return an alphabetized list of names comprising (some of) the attributes\n"
763"of the given object, and of attributes reachable from it.\n"
764"If the object supplies a method named __dir__, it will be used; otherwise\n"
765"the default dir() logic is used and returns:\n"
766" for a module object: the module's attributes.\n"
767" for a class object: its attributes, and recursively the attributes\n"
768" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000769" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000770" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000771
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000772/*[clinic input]
773divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000774
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000775 x: 'O'
776 y: 'O'
777 /
778
779Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.
780[clinic start generated code]*/
781
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000782static PyObject *
783builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300784/*[clinic end generated code: output=9ad0076120ebf9ac input=c9c617b7bb74c615]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000785{
786 return PyNumber_Divmod(x, y);
787}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000788
789
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000790/*[clinic input]
791eval as builtin_eval
792
793 source: 'O'
794 globals: 'O' = None
795 locals: 'O' = None
796 /
797
798Evaluate the given source in the context of globals and locals.
799
800The source may be a string representing a Python expression
801or a code object as returned by compile().
802The globals must be a dictionary and locals can be any mapping,
803defaulting to the current globals and locals.
804If only globals is given, locals defaults to it.
805[clinic start generated code]*/
806
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000807static PyObject *
808builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, PyObject *locals)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300809/*[clinic end generated code: output=90642b79dd8b08d6 input=31e42c1d2125b50b]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000810{
811 PyObject *result, *tmp = NULL;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200812 Py_buffer view = {NULL, NULL};
813 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 if (locals != Py_None && !PyMapping_Check(locals)) {
817 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
818 return NULL;
819 }
820 if (globals != Py_None && !PyDict_Check(globals)) {
821 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
822 "globals must be a real dict; try eval(expr, {}, mapping)"
823 : "globals must be a dict");
824 return NULL;
825 }
826 if (globals == Py_None) {
827 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100828 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100830 if (locals == NULL)
831 return NULL;
832 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 }
834 else if (locals == Py_None)
835 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000837 if (globals == NULL || locals == NULL) {
838 PyErr_SetString(PyExc_TypeError,
839 "eval must be given globals and locals "
840 "when called without a frame");
841 return NULL;
842 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000843
Victor Stinnerb44562b2013-11-06 19:03:11 +0100844 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
845 if (_PyDict_SetItemId(globals, &PyId___builtins__,
846 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 return NULL;
848 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000849
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000850 if (PyCode_Check(source)) {
851 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 PyErr_SetString(PyExc_TypeError,
853 "code object passed to eval() may not contain free variables");
854 return NULL;
855 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000856 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000858
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000859 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200860 str = source_as_string(source, "eval", "string, bytes or code", &cf, &view);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 if (str == NULL)
862 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000863
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000864 while (*str == ' ' || *str == '\t')
865 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000866
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000867 (void)PyEval_MergeCompilerFlags(&cf);
868 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200869 PyBuffer_Release(&view);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 Py_XDECREF(tmp);
871 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000872}
873
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000874/*[clinic input]
875exec as builtin_exec
876
877 source: 'O'
878 globals: 'O' = None
879 locals: 'O' = None
880 /
881
882Execute the given source in the context of globals and locals.
883
884The source may be a string representing one or more Python statements
885or a code object as returned by compile().
886The globals must be a dictionary and locals can be any mapping,
887defaulting to the current globals and locals.
888If only globals is given, locals defaults to it.
889[clinic start generated code]*/
890
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000891static PyObject *
892builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, PyObject *locals)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +0300893/*[clinic end generated code: output=e8e0bbcde826a048 input=536e057b5e00d89e]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +0000894{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000895 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +0000896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000897 if (globals == Py_None) {
898 globals = PyEval_GetGlobals();
899 if (locals == Py_None) {
900 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100901 if (locals == NULL)
902 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000903 }
904 if (!globals || !locals) {
905 PyErr_SetString(PyExc_SystemError,
906 "globals and locals cannot be NULL");
907 return NULL;
908 }
909 }
910 else if (locals == Py_None)
911 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000912
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000914 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 globals->ob_type->tp_name);
916 return NULL;
917 }
918 if (!PyMapping_Check(locals)) {
919 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000920 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 locals->ob_type->tp_name);
922 return NULL;
923 }
Victor Stinnerb44562b2013-11-06 19:03:11 +0100924 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
925 if (_PyDict_SetItemId(globals, &PyId___builtins__,
926 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000927 return NULL;
928 }
929
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000930 if (PyCode_Check(source)) {
931 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 PyErr_SetString(PyExc_TypeError,
933 "code object passed to exec() may not "
934 "contain free variables");
935 return NULL;
936 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000937 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000938 }
939 else {
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200940 Py_buffer view = {NULL, NULL};
941 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 PyCompilerFlags cf;
943 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000944 str = source_as_string(source, "exec",
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200945 "string, bytes or code", &cf, &view);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 if (str == NULL)
947 return NULL;
948 if (PyEval_MergeCompilerFlags(&cf))
949 v = PyRun_StringFlags(str, Py_file_input, globals,
950 locals, &cf);
951 else
952 v = PyRun_String(str, Py_file_input, globals, locals);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200953 PyBuffer_Release(&view);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 }
955 if (v == NULL)
956 return NULL;
957 Py_DECREF(v);
958 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000959}
960
Georg Brandl7cae87c2006-09-06 06:51:57 +0000961
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000962/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000963static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000964builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000965{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 PyObject *v, *result, *dflt = NULL;
967 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
970 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000971
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 if (!PyUnicode_Check(name)) {
973 PyErr_SetString(PyExc_TypeError,
974 "getattr(): attribute name must be string");
975 return NULL;
976 }
977 result = PyObject_GetAttr(v, name);
978 if (result == NULL && dflt != NULL &&
979 PyErr_ExceptionMatches(PyExc_AttributeError))
980 {
981 PyErr_Clear();
982 Py_INCREF(dflt);
983 result = dflt;
984 }
985 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000986}
987
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000988PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000989"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000990\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000991Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
992When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000993exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000994
995
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000996/*[clinic input]
997globals as builtin_globals
998
999Return the dictionary containing the current scope's global variables.
1000
1001NOTE: Updates to this dictionary *will* affect name lookups in the current
1002global scope and vice-versa.
1003[clinic start generated code]*/
1004
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001005static PyObject *
1006builtin_globals_impl(PyModuleDef *module)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001007/*[clinic end generated code: output=4958645e96dd8138 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001008{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 d = PyEval_GetGlobals();
1012 Py_XINCREF(d);
1013 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001014}
1015
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001016
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001017/*[clinic input]
1018hasattr as builtin_hasattr
1019
1020 obj: 'O'
1021 name: 'O'
1022 /
1023
1024Return whether the object has an attribute with the given name.
1025
1026This is done by calling getattr(obj, name) and catching AttributeError.
1027[clinic start generated code]*/
1028
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001029static PyObject *
1030builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001031/*[clinic end generated code: output=81154fdd63634696 input=b50bad5f739ea10d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001032{
1033 PyObject *v;
1034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 if (!PyUnicode_Check(name)) {
1036 PyErr_SetString(PyExc_TypeError,
1037 "hasattr(): attribute name must be string");
1038 return NULL;
1039 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001040 v = PyObject_GetAttr(obj, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001042 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +00001044 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 }
Benjamin Peterson17689992010-08-24 03:26:23 +00001046 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 }
1048 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001049 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001050}
1051
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001052
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001053/* AC: gdb's integration with CPython relies on builtin_id having
1054 * the *exact* parameter names of "self" and "v", so we ensure we
1055 * preserve those name rather than using the AC defaults.
1056 */
1057/*[clinic input]
1058id as builtin_id
1059
1060 self: self(type="PyModuleDef *")
1061 obj as v: 'O'
1062 /
1063
1064Return the identity of an object.
1065
1066This is guaranteed to be unique among simultaneously existing objects.
1067(CPython uses the object's memory address.)
1068[clinic start generated code]*/
1069
Guido van Rossum79f25d91997-04-29 20:08:16 +00001070static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001071builtin_id(PyModuleDef *self, PyObject *v)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001072/*[clinic end generated code: output=0aa640785f697f65 input=a1f988d98357341d]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001073{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001074 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001075}
1076
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001077
Raymond Hettingera6c60372008-03-13 01:26:19 +00001078/* map object ************************************************************/
1079
1080typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 PyObject_HEAD
1082 PyObject *iters;
1083 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001084} mapobject;
1085
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001087map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001088{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 PyObject *it, *iters, *func;
1090 mapobject *lz;
1091 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001092
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
1094 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001095
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001096 numargs = PyTuple_Size(args);
1097 if (numargs < 2) {
1098 PyErr_SetString(PyExc_TypeError,
1099 "map() must have at least two arguments.");
1100 return NULL;
1101 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001102
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 iters = PyTuple_New(numargs-1);
1104 if (iters == NULL)
1105 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107 for (i=1 ; i<numargs ; i++) {
1108 /* Get iterator. */
1109 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1110 if (it == NULL) {
1111 Py_DECREF(iters);
1112 return NULL;
1113 }
1114 PyTuple_SET_ITEM(iters, i-1, it);
1115 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001116
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 /* create mapobject structure */
1118 lz = (mapobject *)type->tp_alloc(type, 0);
1119 if (lz == NULL) {
1120 Py_DECREF(iters);
1121 return NULL;
1122 }
1123 lz->iters = iters;
1124 func = PyTuple_GET_ITEM(args, 0);
1125 Py_INCREF(func);
1126 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001127
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001128 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001129}
1130
1131static void
1132map_dealloc(mapobject *lz)
1133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 PyObject_GC_UnTrack(lz);
1135 Py_XDECREF(lz->iters);
1136 Py_XDECREF(lz->func);
1137 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001138}
1139
1140static int
1141map_traverse(mapobject *lz, visitproc visit, void *arg)
1142{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001143 Py_VISIT(lz->iters);
1144 Py_VISIT(lz->func);
1145 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001146}
1147
1148static PyObject *
1149map_next(mapobject *lz)
1150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001151 PyObject *val;
1152 PyObject *argtuple;
1153 PyObject *result;
1154 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001155
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 numargs = PyTuple_Size(lz->iters);
1157 argtuple = PyTuple_New(numargs);
1158 if (argtuple == NULL)
1159 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 for (i=0 ; i<numargs ; i++) {
1162 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1163 if (val == NULL) {
1164 Py_DECREF(argtuple);
1165 return NULL;
1166 }
1167 PyTuple_SET_ITEM(argtuple, i, val);
1168 }
1169 result = PyObject_Call(lz->func, argtuple, NULL);
1170 Py_DECREF(argtuple);
1171 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001172}
1173
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001174static PyObject *
1175map_reduce(mapobject *lz)
1176{
1177 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1178 PyObject *args = PyTuple_New(numargs+1);
1179 Py_ssize_t i;
1180 if (args == NULL)
1181 return NULL;
1182 Py_INCREF(lz->func);
1183 PyTuple_SET_ITEM(args, 0, lz->func);
1184 for (i = 0; i<numargs; i++){
1185 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1186 Py_INCREF(it);
1187 PyTuple_SET_ITEM(args, i+1, it);
1188 }
1189
1190 return Py_BuildValue("ON", Py_TYPE(lz), args);
1191}
1192
1193static PyMethodDef map_methods[] = {
1194 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1195 {NULL, NULL} /* sentinel */
1196};
1197
1198
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001199PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001200"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001201\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001202Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001204
Raymond Hettingera6c60372008-03-13 01:26:19 +00001205PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001206 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1207 "map", /* tp_name */
1208 sizeof(mapobject), /* tp_basicsize */
1209 0, /* tp_itemsize */
1210 /* methods */
1211 (destructor)map_dealloc, /* tp_dealloc */
1212 0, /* tp_print */
1213 0, /* tp_getattr */
1214 0, /* tp_setattr */
1215 0, /* tp_reserved */
1216 0, /* tp_repr */
1217 0, /* tp_as_number */
1218 0, /* tp_as_sequence */
1219 0, /* tp_as_mapping */
1220 0, /* tp_hash */
1221 0, /* tp_call */
1222 0, /* tp_str */
1223 PyObject_GenericGetAttr, /* tp_getattro */
1224 0, /* tp_setattro */
1225 0, /* tp_as_buffer */
1226 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1227 Py_TPFLAGS_BASETYPE, /* tp_flags */
1228 map_doc, /* tp_doc */
1229 (traverseproc)map_traverse, /* tp_traverse */
1230 0, /* tp_clear */
1231 0, /* tp_richcompare */
1232 0, /* tp_weaklistoffset */
1233 PyObject_SelfIter, /* tp_iter */
1234 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001235 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001236 0, /* tp_members */
1237 0, /* tp_getset */
1238 0, /* tp_base */
1239 0, /* tp_dict */
1240 0, /* tp_descr_get */
1241 0, /* tp_descr_set */
1242 0, /* tp_dictoffset */
1243 0, /* tp_init */
1244 PyType_GenericAlloc, /* tp_alloc */
1245 map_new, /* tp_new */
1246 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001247};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001248
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001249
1250/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001251static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001252builtin_next(PyObject *self, PyObject *args)
1253{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 PyObject *it, *res;
1255 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001256
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001257 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1258 return NULL;
1259 if (!PyIter_Check(it)) {
1260 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001261 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 it->ob_type->tp_name);
1263 return NULL;
1264 }
1265
1266 res = (*it->ob_type->tp_iternext)(it);
1267 if (res != NULL) {
1268 return res;
1269 } else if (def != NULL) {
1270 if (PyErr_Occurred()) {
1271 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1272 return NULL;
1273 PyErr_Clear();
1274 }
1275 Py_INCREF(def);
1276 return def;
1277 } else if (PyErr_Occurred()) {
1278 return NULL;
1279 } else {
1280 PyErr_SetNone(PyExc_StopIteration);
1281 return NULL;
1282 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001283}
1284
1285PyDoc_STRVAR(next_doc,
1286"next(iterator[, default])\n\
1287\n\
1288Return the next item from the iterator. If default is given and the iterator\n\
1289is exhausted, it is returned instead of raising StopIteration.");
1290
1291
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001292/*[clinic input]
1293setattr as builtin_setattr
1294
1295 obj: 'O'
1296 name: 'O'
1297 value: 'O'
1298 /
1299
1300Sets the named attribute on the given object to the specified value.
1301
1302setattr(x, 'y', v) is equivalent to ``x.y = v''
1303[clinic start generated code]*/
1304
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001305static PyObject *
1306builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, PyObject *value)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001307/*[clinic end generated code: output=c5e0a3a3971333ed input=fbe7e53403116b93]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001308{
1309 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 return NULL;
1311 Py_INCREF(Py_None);
1312 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001313}
1314
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001315
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001316/*[clinic input]
1317delattr as builtin_delattr
1318
1319 obj: 'O'
1320 name: 'O'
1321 /
1322
1323Deletes the named attribute from the given object.
1324
1325delattr(x, 'y') is equivalent to ``del x.y''
1326[clinic start generated code]*/
1327
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001328static PyObject *
1329builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001330/*[clinic end generated code: output=ef653e698a0b4187 input=647af2ce9183a823]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001331{
1332 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001333 return NULL;
1334 Py_INCREF(Py_None);
1335 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001336}
1337
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001338
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001339/*[clinic input]
1340hash as builtin_hash
1341
1342 obj: 'O'
1343 /
1344
1345Return the hash value for the given object.
1346
1347Two objects that compare equal must also have the same hash value, but the
1348reverse is not necessarily true.
1349[clinic start generated code]*/
1350
Guido van Rossum79f25d91997-04-29 20:08:16 +00001351static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001352builtin_hash(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001353/*[clinic end generated code: output=1f32ff154c1f751a input=ccc4d2b9a351df4e]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001354{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001355 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001356
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001357 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001358 if (x == -1)
1359 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001360 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001361}
1362
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001363
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001364/*[clinic input]
1365hex as builtin_hex
1366
1367 number: 'O'
1368 /
1369
1370Return the hexadecimal representation of an integer.
1371
1372 >>> hex(12648430)
1373 '0xc0ffee'
1374[clinic start generated code]*/
1375
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001377builtin_hex(PyModuleDef *module, PyObject *number)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001378/*[clinic end generated code: output=618489ce3cbc5858 input=e816200b0a728ebe]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001379{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001380 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001381}
1382
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001383
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001384/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001385static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001386builtin_iter(PyObject *self, PyObject *args)
1387{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001388 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001390 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1391 return NULL;
1392 if (w == NULL)
1393 return PyObject_GetIter(v);
1394 if (!PyCallable_Check(v)) {
1395 PyErr_SetString(PyExc_TypeError,
1396 "iter(v, w): v must be callable");
1397 return NULL;
1398 }
1399 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001400}
1401
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001402PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001403"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001404iter(callable, sentinel) -> iterator\n\
1405\n\
1406Get an iterator from an object. In the first form, the argument must\n\
1407supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001408In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001409
1410
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001411/*[clinic input]
1412len as builtin_len
1413
1414 obj: 'O'
1415 /
1416
1417Return the number of items in a container.
1418[clinic start generated code]*/
1419
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001420static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001421builtin_len(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001422/*[clinic end generated code: output=8e5837b6f81d915b input=2e5ff15db9a2de22]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001423{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001424 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001425
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001426 res = PyObject_Size(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001427 if (res < 0 && PyErr_Occurred())
1428 return NULL;
1429 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001430}
1431
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001432
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001433/*[clinic input]
1434locals as builtin_locals
1435
1436Return a dictionary containing the current scope's local variables.
1437
1438NOTE: Whether or not updates to this dictionary will affect name lookups in
1439the local scope and vice-versa is *implementation dependent* and not
1440covered by any backwards compatibility guarantees.
1441[clinic start generated code]*/
1442
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001443static PyObject *
1444builtin_locals_impl(PyModuleDef *module)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001445/*[clinic end generated code: output=8b5a41f12e19d13a input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 d = PyEval_GetLocals();
1450 Py_XINCREF(d);
1451 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001452}
1453
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001454
Guido van Rossum79f25d91997-04-29 20:08:16 +00001455static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001456min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001458 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001459 PyObject *emptytuple, *defaultval = NULL;
1460 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001461 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001462 const int positional = PyTuple_Size(args) > 1;
1463 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001464
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001465 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001467 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001468 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001469
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001470 emptytuple = PyTuple_New(0);
1471 if (emptytuple == NULL)
1472 return NULL;
1473 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
1474 &keyfunc, &defaultval);
1475 Py_DECREF(emptytuple);
1476 if (!ret)
1477 return NULL;
1478
1479 if (positional && defaultval != NULL) {
1480 PyErr_Format(PyExc_TypeError,
1481 "Cannot specify a default for %s() with multiple "
1482 "positional arguments", name);
1483 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 it = PyObject_GetIter(v);
1487 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 return NULL;
1489 }
Tim Petersc3074532001-05-03 07:00:32 +00001490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001491 maxitem = NULL; /* the result */
1492 maxval = NULL; /* the value associated with the result */
1493 while (( item = PyIter_Next(it) )) {
1494 /* get the value from the key function */
1495 if (keyfunc != NULL) {
1496 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1497 if (val == NULL)
1498 goto Fail_it_item;
1499 }
1500 /* no key function; the value is the item */
1501 else {
1502 val = item;
1503 Py_INCREF(val);
1504 }
Tim Petersc3074532001-05-03 07:00:32 +00001505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 /* maximum value and item are unset; set them */
1507 if (maxval == NULL) {
1508 maxitem = item;
1509 maxval = val;
1510 }
1511 /* maximum value and item are set; update them as necessary */
1512 else {
1513 int cmp = PyObject_RichCompareBool(val, maxval, op);
1514 if (cmp < 0)
1515 goto Fail_it_item_and_val;
1516 else if (cmp > 0) {
1517 Py_DECREF(maxval);
1518 Py_DECREF(maxitem);
1519 maxval = val;
1520 maxitem = item;
1521 }
1522 else {
1523 Py_DECREF(item);
1524 Py_DECREF(val);
1525 }
1526 }
1527 }
1528 if (PyErr_Occurred())
1529 goto Fail_it;
1530 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001531 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001532 if (defaultval != NULL) {
1533 Py_INCREF(defaultval);
1534 maxitem = defaultval;
1535 } else {
1536 PyErr_Format(PyExc_ValueError,
1537 "%s() arg is an empty sequence", name);
1538 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001539 }
1540 else
1541 Py_DECREF(maxval);
1542 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001543 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001544
1545Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001547Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001549Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001550 Py_XDECREF(maxval);
1551 Py_XDECREF(maxitem);
1552 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001553 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001554}
1555
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001556/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001557static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001558builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001560 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001561}
1562
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001563PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001564"min(iterable, *[, default=obj, key=func]) -> value\n\
1565min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001566\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001567With a single iterable argument, return its smallest item. The\n\
1568default keyword-only argument specifies an object to return if\n\
1569the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001570With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001571
1572
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001573/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001574static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001575builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001577 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001578}
1579
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001580PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001581"max(iterable, *[, default=obj, key=func]) -> value\n\
1582max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001583\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001584With a single iterable argument, return its biggest item. The\n\
1585default keyword-only argument specifies an object to return if\n\
1586the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001587With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001588
1589
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001590/*[clinic input]
1591oct as builtin_oct
1592
1593 number: 'O'
1594 /
1595
1596Return the octal representation of an integer.
1597
1598 >>> oct(342391)
1599 '0o1234567'
1600[clinic start generated code]*/
1601
Guido van Rossum79f25d91997-04-29 20:08:16 +00001602static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001603builtin_oct(PyModuleDef *module, PyObject *number)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001604/*[clinic end generated code: output=18f701bc6d8f804a input=a3a372b521b3dd13]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001605{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001606 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001607}
1608
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001609
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001610/*[clinic input]
1611ord as builtin_ord
1612
1613 c: 'O'
1614 /
1615
1616Return the Unicode code point for a one-character string.
1617[clinic start generated code]*/
1618
Guido van Rossum79f25d91997-04-29 20:08:16 +00001619static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001620builtin_ord(PyModuleDef *module, PyObject *c)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001621/*[clinic end generated code: output=04fd27272d9462f6 input=762355f87451efa3]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001622{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001623 long ord;
1624 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001625
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001626 if (PyBytes_Check(c)) {
1627 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001629 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 return PyLong_FromLong(ord);
1631 }
1632 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001633 else if (PyUnicode_Check(c)) {
1634 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001635 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001636 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001637 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001638 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 return PyLong_FromLong(ord);
1640 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001641 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001642 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001644 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001646 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 return PyLong_FromLong(ord);
1648 }
1649 }
1650 else {
1651 PyErr_Format(PyExc_TypeError,
1652 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001653 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 return NULL;
1655 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001657 PyErr_Format(PyExc_TypeError,
1658 "ord() expected a character, "
1659 "but string of length %zd found",
1660 size);
1661 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001662}
1663
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001664
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001665/*[clinic input]
1666pow as builtin_pow
1667
1668 x: 'O'
1669 y: 'O'
1670 z: 'O' = None
1671 /
1672
1673Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1674
1675Some types, such as ints, are able to use a more efficient algorithm when
1676invoked using the three argument form.
1677[clinic start generated code]*/
1678
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001679static PyObject *
1680builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001681/*[clinic end generated code: output=1fba268adba9b45f input=561a942d5f5c1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001682{
1683 return PyNumber_Power(x, y, z);
1684}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001685
1686
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001687/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001688static PyObject *
1689builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1690{
Georg Brandlbc3b6822012-01-13 19:41:25 +01001691 static char *kwlist[] = {"sep", "end", "file", "flush", 0};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 static PyObject *dummy_args;
Georg Brandlbc3b6822012-01-13 19:41:25 +01001693 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001695
Benjamin Peterson00102562012-01-11 21:00:16 -05001696 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Georg Brandlbc3b6822012-01-13 19:41:25 +01001697 return NULL;
1698 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print",
1699 kwlist, &sep, &end, &file, &flush))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 return NULL;
1701 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001702 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001703 if (file == NULL) {
1704 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1705 return NULL;
1706 }
1707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001708 /* sys.stdout may be None when FILE* stdout isn't connected */
1709 if (file == Py_None)
1710 Py_RETURN_NONE;
1711 }
Guido van Rossum34343512006-11-30 22:13:52 +00001712
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001713 if (sep == Py_None) {
1714 sep = NULL;
1715 }
1716 else if (sep && !PyUnicode_Check(sep)) {
1717 PyErr_Format(PyExc_TypeError,
1718 "sep must be None or a string, not %.200s",
1719 sep->ob_type->tp_name);
1720 return NULL;
1721 }
1722 if (end == Py_None) {
1723 end = NULL;
1724 }
1725 else if (end && !PyUnicode_Check(end)) {
1726 PyErr_Format(PyExc_TypeError,
1727 "end must be None or a string, not %.200s",
1728 end->ob_type->tp_name);
1729 return NULL;
1730 }
Guido van Rossum34343512006-11-30 22:13:52 +00001731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001732 for (i = 0; i < PyTuple_Size(args); i++) {
1733 if (i > 0) {
1734 if (sep == NULL)
1735 err = PyFile_WriteString(" ", file);
1736 else
1737 err = PyFile_WriteObject(sep, file,
1738 Py_PRINT_RAW);
1739 if (err)
1740 return NULL;
1741 }
1742 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1743 Py_PRINT_RAW);
1744 if (err)
1745 return NULL;
1746 }
Guido van Rossum34343512006-11-30 22:13:52 +00001747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 if (end == NULL)
1749 err = PyFile_WriteString("\n", file);
1750 else
1751 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1752 if (err)
1753 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001754
Georg Brandlbc3b6822012-01-13 19:41:25 +01001755 if (flush != NULL) {
1756 PyObject *tmp;
1757 int do_flush = PyObject_IsTrue(flush);
1758 if (do_flush == -1)
1759 return NULL;
1760 else if (do_flush) {
Victor Stinnereaa28832013-11-07 00:01:51 +01001761 tmp = _PyObject_CallMethodId(file, &PyId_flush, "");
Georg Brandlbc3b6822012-01-13 19:41:25 +01001762 if (tmp == NULL)
1763 return NULL;
1764 else
1765 Py_DECREF(tmp);
1766 }
1767 }
1768
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001770}
1771
1772PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001773"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001774\n\
1775Prints the values to a stream, or to sys.stdout by default.\n\
1776Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001777file: a file-like object (stream); defaults to the current sys.stdout.\n\
1778sep: string inserted between values, default a space.\n\
1779end: string appended after the last value, default a newline.\n\
1780flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001781
1782
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001783/*[clinic input]
1784input as builtin_input
1785
1786 prompt: object(c_default="NULL") = None
1787 /
1788
1789Read a string from standard input. The trailing newline is stripped.
1790
1791The prompt string, if given, is printed to standard output without a
1792trailing newline before reading input.
1793
1794If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1795On *nix systems, readline is used if available.
1796[clinic start generated code]*/
1797
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001798static PyObject *
1799builtin_input_impl(PyModuleDef *module, PyObject *prompt)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001800/*[clinic end generated code: output=b77731f59e1515c4 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001801{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001802 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1803 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1804 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 PyObject *tmp;
1806 long fd;
1807 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001809 /* Check that stdin/out/err are intact */
1810 if (fin == NULL || fin == Py_None) {
1811 PyErr_SetString(PyExc_RuntimeError,
1812 "input(): lost sys.stdin");
1813 return NULL;
1814 }
1815 if (fout == NULL || fout == Py_None) {
1816 PyErr_SetString(PyExc_RuntimeError,
1817 "input(): lost sys.stdout");
1818 return NULL;
1819 }
1820 if (ferr == NULL || ferr == Py_None) {
1821 PyErr_SetString(PyExc_RuntimeError,
1822 "input(): lost sys.stderr");
1823 return NULL;
1824 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001827 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001828 if (tmp == NULL)
1829 PyErr_Clear();
1830 else
1831 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001832
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001833 /* We should only use (GNU) readline if Python's sys.stdin and
1834 sys.stdout are the same as C's stdin and stdout, because we
1835 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001836 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 if (tmp == NULL) {
1838 PyErr_Clear();
1839 tty = 0;
1840 }
1841 else {
1842 fd = PyLong_AsLong(tmp);
1843 Py_DECREF(tmp);
1844 if (fd < 0 && PyErr_Occurred())
1845 return NULL;
1846 tty = fd == fileno(stdin) && isatty(fd);
1847 }
1848 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001849 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001850 if (tmp == NULL)
1851 PyErr_Clear();
1852 else {
1853 fd = PyLong_AsLong(tmp);
1854 Py_DECREF(tmp);
1855 if (fd < 0 && PyErr_Occurred())
1856 return NULL;
1857 tty = fd == fileno(stdout) && isatty(fd);
1858 }
1859 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 /* If we're interactive, use (GNU) readline */
1862 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001863 PyObject *po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001864 char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001865 char *s = NULL;
1866 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1867 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1868 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001869 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001870 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001871
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001872 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001873 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001874 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001875 /* stdin is a text stream, so it must have an
1876 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001877 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001878 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001879 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1880 if (!stdin_encoding_str || !stdin_errors_str)
1881 goto _readline_errors;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001882 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001883 if (tmp == NULL)
1884 PyErr_Clear();
1885 else
1886 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001887 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001888 /* We have a prompt, encode it as stdout would */
1889 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001891 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001892 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001893 if (!stdout_encoding || !stdout_errors)
1894 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001895 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001896 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1897 if (!stdout_encoding_str || !stdout_errors_str)
1898 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001899 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001900 if (stringpo == NULL)
1901 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001902 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001903 stdout_encoding_str, stdout_errors_str);
1904 Py_CLEAR(stdout_encoding);
1905 Py_CLEAR(stdout_errors);
1906 Py_CLEAR(stringpo);
1907 if (po == NULL)
1908 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001909 promptstr = PyBytes_AsString(po);
1910 if (promptstr == NULL)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001911 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 }
1913 else {
1914 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001915 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001916 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001917 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001918 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001919 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 if (!PyErr_Occurred())
1921 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001922 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001923 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001924
1925 len = strlen(s);
1926 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 PyErr_SetNone(PyExc_EOFError);
1928 result = NULL;
1929 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001930 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 if (len > PY_SSIZE_T_MAX) {
1932 PyErr_SetString(PyExc_OverflowError,
1933 "input: input too long");
1934 result = NULL;
1935 }
1936 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001937 len--; /* strip trailing '\n' */
1938 if (len != 0 && s[len-1] == '\r')
1939 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001940 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1941 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 }
1943 }
1944 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001945 Py_DECREF(stdin_errors);
1946 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001947 PyMem_FREE(s);
1948 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001949 _readline_errors:
1950 Py_XDECREF(stdin_encoding);
1951 Py_XDECREF(stdout_encoding);
1952 Py_XDECREF(stdin_errors);
1953 Py_XDECREF(stdout_errors);
1954 Py_XDECREF(po);
1955 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001956 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001958 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001959 if (prompt != NULL) {
1960 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 return NULL;
1962 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001963 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001964 if (tmp == NULL)
1965 PyErr_Clear();
1966 else
1967 Py_DECREF(tmp);
1968 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001969}
1970
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001971
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001972/*[clinic input]
1973repr as builtin_repr
1974
1975 obj: 'O'
1976 /
1977
1978Return the canonical string representation of the object.
1979
1980For many object types, including most builtins, eval(repr(obj)) == obj.
1981[clinic start generated code]*/
1982
Guido van Rossum79f25d91997-04-29 20:08:16 +00001983static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001984builtin_repr(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001985/*[clinic end generated code: output=dc41784fa4341834 input=a2bca0f38a5a924d]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00001986{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001987 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001988}
1989
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001990
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001991/* AC: cannot convert yet, as needs PEP 457 group support in inspect
1992 * or a semantic change to accept None for "ndigits"
1993 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001995builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001996{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 PyObject *ndigits = NULL;
1998 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04001999 PyObject *number, *round, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002001 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
2002 kwlist, &number, &ndigits))
2003 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00002004
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002005 if (Py_TYPE(number)->tp_dict == NULL) {
2006 if (PyType_Ready(Py_TYPE(number)) < 0)
2007 return NULL;
2008 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002009
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002010 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002011 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002012 if (!PyErr_Occurred())
2013 PyErr_Format(PyExc_TypeError,
2014 "type %.100s doesn't define __round__ method",
2015 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002016 return NULL;
2017 }
Alex Martelliae211f92007-08-22 23:21:33 +00002018
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002019 if (ndigits == NULL)
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002020 result = PyObject_CallFunctionObjArgs(round, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002021 else
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002022 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
2023 Py_DECREF(round);
2024 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002025}
2026
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002027PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00002028"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002029\n\
2030Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00002031This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00002032same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00002033
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002034
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002035/*AC: we need to keep the kwds dict intact to easily call into the
2036 * list.sort method, which isn't currently supported in AC. So we just use
2037 * the initially generated signature with a custom implementation.
2038 */
2039/* [disabled clinic input]
2040sorted as builtin_sorted
2041
2042 iterable as seq: 'O'
2043 key as keyfunc: 'O' = None
2044 reverse: 'O' = False
2045
2046Return a new list containing all items from the iterable in ascending order.
2047
2048A custom key function can be supplied to customise the sort order, and the
2049reverse flag can be set to request the result in descending order.
2050[end disabled clinic input]*/
2051
2052PyDoc_STRVAR(builtin_sorted__doc__,
2053"sorted($module, iterable, key=None, reverse=False)\n"
2054"--\n"
2055"\n"
2056"Return a new list containing all items from the iterable in ascending order.\n"
2057"\n"
2058"A custom key function can be supplied to customise the sort order, and the\n"
2059"reverse flag can be set to request the result in descending order.");
2060
2061#define BUILTIN_SORTED_METHODDEF \
2062 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS|METH_KEYWORDS, builtin_sorted__doc__},
2063
Raymond Hettinger64958a12003-12-17 20:43:33 +00002064static PyObject *
2065builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2066{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
2068 PyObject *callable;
2069 static char *kwlist[] = {"iterable", "key", "reverse", 0};
2070 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002071
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002072 /* args 1-3 should match listsort in Objects/listobject.c */
2073 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
2074 kwlist, &seq, &keyfunc, &reverse))
2075 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002076
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002077 newlist = PySequence_List(seq);
2078 if (newlist == NULL)
2079 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002080
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002081 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 if (callable == NULL) {
2083 Py_DECREF(newlist);
2084 return NULL;
2085 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 newargs = PyTuple_GetSlice(args, 1, 4);
2088 if (newargs == NULL) {
2089 Py_DECREF(newlist);
2090 Py_DECREF(callable);
2091 return NULL;
2092 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00002093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 v = PyObject_Call(callable, newargs, kwds);
2095 Py_DECREF(newargs);
2096 Py_DECREF(callable);
2097 if (v == NULL) {
2098 Py_DECREF(newlist);
2099 return NULL;
2100 }
2101 Py_DECREF(v);
2102 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002103}
2104
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002105
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002106/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002107static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002108builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002109{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002110 PyObject *v = NULL;
2111 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2114 return NULL;
2115 if (v == NULL) {
2116 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002117 if (d == NULL)
2118 return NULL;
2119 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002120 }
2121 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002122 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002123 if (d == NULL) {
2124 PyErr_SetString(PyExc_TypeError,
2125 "vars() argument must have __dict__ attribute");
2126 return NULL;
2127 }
2128 }
2129 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002130}
2131
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002132PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002133"vars([object]) -> dictionary\n\
2134\n\
2135Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002136With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002137
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002138
2139/*[clinic input]
2140sum as builtin_sum
2141
2142 iterable: 'O'
2143 start: object(c_default="NULL") = 0
2144 /
2145
2146Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2147
2148When the iterable is empty, return the start value.
2149This function is intended specifically for use with numeric values and may
2150reject non-numeric types.
2151[clinic start generated code]*/
2152
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002153static PyObject *
2154builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03002155/*[clinic end generated code: output=33655b248b21d581 input=90ae7a242cfcf025]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002156{
2157 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002158 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002159
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002160 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 if (iter == NULL)
2162 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 if (result == NULL) {
2165 result = PyLong_FromLong(0);
2166 if (result == NULL) {
2167 Py_DECREF(iter);
2168 return NULL;
2169 }
2170 } else {
2171 /* reject string values for 'start' parameter */
2172 if (PyUnicode_Check(result)) {
2173 PyErr_SetString(PyExc_TypeError,
2174 "sum() can't sum strings [use ''.join(seq) instead]");
2175 Py_DECREF(iter);
2176 return NULL;
2177 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002178 if (PyBytes_Check(result)) {
2179 PyErr_SetString(PyExc_TypeError,
2180 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002181 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002182 return NULL;
2183 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 if (PyByteArray_Check(result)) {
2185 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002186 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002187 Py_DECREF(iter);
2188 return NULL;
2189 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 Py_INCREF(result);
2191 }
Alex Martellia70b1912003-04-22 08:12:33 +00002192
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002193#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2195 Assumes all inputs are the same type. If the assumption fails, default
2196 to the more general routine.
2197 */
2198 if (PyLong_CheckExact(result)) {
2199 int overflow;
2200 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2201 /* If this already overflowed, don't even enter the loop. */
2202 if (overflow == 0) {
2203 Py_DECREF(result);
2204 result = NULL;
2205 }
2206 while(result == NULL) {
2207 item = PyIter_Next(iter);
2208 if (item == NULL) {
2209 Py_DECREF(iter);
2210 if (PyErr_Occurred())
2211 return NULL;
2212 return PyLong_FromLong(i_result);
2213 }
2214 if (PyLong_CheckExact(item)) {
2215 long b = PyLong_AsLongAndOverflow(item, &overflow);
2216 long x = i_result + b;
2217 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2218 i_result = x;
2219 Py_DECREF(item);
2220 continue;
2221 }
2222 }
2223 /* Either overflowed or is not an int. Restore real objects and process normally */
2224 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002225 if (result == NULL) {
2226 Py_DECREF(item);
2227 Py_DECREF(iter);
2228 return NULL;
2229 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002230 temp = PyNumber_Add(result, item);
2231 Py_DECREF(result);
2232 Py_DECREF(item);
2233 result = temp;
2234 if (result == NULL) {
2235 Py_DECREF(iter);
2236 return NULL;
2237 }
2238 }
2239 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 if (PyFloat_CheckExact(result)) {
2242 double f_result = PyFloat_AS_DOUBLE(result);
2243 Py_DECREF(result);
2244 result = NULL;
2245 while(result == NULL) {
2246 item = PyIter_Next(iter);
2247 if (item == NULL) {
2248 Py_DECREF(iter);
2249 if (PyErr_Occurred())
2250 return NULL;
2251 return PyFloat_FromDouble(f_result);
2252 }
2253 if (PyFloat_CheckExact(item)) {
2254 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2255 f_result += PyFloat_AS_DOUBLE(item);
2256 PyFPE_END_PROTECT(f_result)
2257 Py_DECREF(item);
2258 continue;
2259 }
2260 if (PyLong_CheckExact(item)) {
2261 long value;
2262 int overflow;
2263 value = PyLong_AsLongAndOverflow(item, &overflow);
2264 if (!overflow) {
2265 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2266 f_result += (double)value;
2267 PyFPE_END_PROTECT(f_result)
2268 Py_DECREF(item);
2269 continue;
2270 }
2271 }
2272 result = PyFloat_FromDouble(f_result);
2273 temp = PyNumber_Add(result, item);
2274 Py_DECREF(result);
2275 Py_DECREF(item);
2276 result = temp;
2277 if (result == NULL) {
2278 Py_DECREF(iter);
2279 return NULL;
2280 }
2281 }
2282 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002283#endif
2284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002285 for(;;) {
2286 item = PyIter_Next(iter);
2287 if (item == NULL) {
2288 /* error, or end-of-sequence */
2289 if (PyErr_Occurred()) {
2290 Py_DECREF(result);
2291 result = NULL;
2292 }
2293 break;
2294 }
2295 /* It's tempting to use PyNumber_InPlaceAdd instead of
2296 PyNumber_Add here, to avoid quadratic running time
2297 when doing 'sum(list_of_lists, [])'. However, this
2298 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002300 empty = []
2301 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 would change the value of empty. */
2304 temp = PyNumber_Add(result, item);
2305 Py_DECREF(result);
2306 Py_DECREF(item);
2307 result = temp;
2308 if (result == NULL)
2309 break;
2310 }
2311 Py_DECREF(iter);
2312 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002313}
2314
Alex Martellia70b1912003-04-22 08:12:33 +00002315
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002316/*[clinic input]
2317isinstance as builtin_isinstance
2318
2319 obj: 'O'
2320 class_or_tuple: 'O'
2321 /
2322
2323Return whether an object is an instance of a class or of a subclass thereof.
2324
2325A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2326check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2327or ...`` etc.
2328[clinic start generated code]*/
2329
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002330static PyObject *
2331builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, PyObject *class_or_tuple)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03002332/*[clinic end generated code: output=5e234dc3872d75a2 input=cf9eb0ad6bb9bad6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002334 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002335
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002336 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002337 if (retval < 0)
2338 return NULL;
2339 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002340}
2341
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002342
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002343/*[clinic input]
2344issubclass as builtin_issubclass
2345
2346 cls: 'O'
2347 class_or_tuple: 'O'
2348 /
2349
2350Return whether 'cls' is a derived from another class or is the same class.
2351
2352A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2353check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2354or ...`` etc.
2355[clinic start generated code]*/
2356
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002357static PyObject *
2358builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, PyObject *class_or_tuple)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03002359/*[clinic end generated code: output=6346a85ba15dbd7d input=923d03fa41fc352a]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002360{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002362
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002363 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002364 if (retval < 0)
2365 return NULL;
2366 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002367}
2368
2369
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002370typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 PyObject_HEAD
2372 Py_ssize_t tuplesize;
2373 PyObject *ittuple; /* tuple of iterators */
2374 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002375} zipobject;
2376
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002377static PyObject *
2378zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002379{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002380 zipobject *lz;
2381 Py_ssize_t i;
2382 PyObject *ittuple; /* tuple of iterators */
2383 PyObject *result;
2384 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2387 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002388
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 /* args must be a tuple */
2390 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002392 /* obtain iterators */
2393 ittuple = PyTuple_New(tuplesize);
2394 if (ittuple == NULL)
2395 return NULL;
2396 for (i=0; i < tuplesize; ++i) {
2397 PyObject *item = PyTuple_GET_ITEM(args, i);
2398 PyObject *it = PyObject_GetIter(item);
2399 if (it == NULL) {
2400 if (PyErr_ExceptionMatches(PyExc_TypeError))
2401 PyErr_Format(PyExc_TypeError,
2402 "zip argument #%zd must support iteration",
2403 i+1);
2404 Py_DECREF(ittuple);
2405 return NULL;
2406 }
2407 PyTuple_SET_ITEM(ittuple, i, it);
2408 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002409
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 /* create a result holder */
2411 result = PyTuple_New(tuplesize);
2412 if (result == NULL) {
2413 Py_DECREF(ittuple);
2414 return NULL;
2415 }
2416 for (i=0 ; i < tuplesize ; i++) {
2417 Py_INCREF(Py_None);
2418 PyTuple_SET_ITEM(result, i, Py_None);
2419 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002421 /* create zipobject structure */
2422 lz = (zipobject *)type->tp_alloc(type, 0);
2423 if (lz == NULL) {
2424 Py_DECREF(ittuple);
2425 Py_DECREF(result);
2426 return NULL;
2427 }
2428 lz->ittuple = ittuple;
2429 lz->tuplesize = tuplesize;
2430 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002432 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002433}
2434
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002435static void
2436zip_dealloc(zipobject *lz)
2437{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002438 PyObject_GC_UnTrack(lz);
2439 Py_XDECREF(lz->ittuple);
2440 Py_XDECREF(lz->result);
2441 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002442}
2443
2444static int
2445zip_traverse(zipobject *lz, visitproc visit, void *arg)
2446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 Py_VISIT(lz->ittuple);
2448 Py_VISIT(lz->result);
2449 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002450}
2451
2452static PyObject *
2453zip_next(zipobject *lz)
2454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 Py_ssize_t i;
2456 Py_ssize_t tuplesize = lz->tuplesize;
2457 PyObject *result = lz->result;
2458 PyObject *it;
2459 PyObject *item;
2460 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002461
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002462 if (tuplesize == 0)
2463 return NULL;
2464 if (Py_REFCNT(result) == 1) {
2465 Py_INCREF(result);
2466 for (i=0 ; i < tuplesize ; i++) {
2467 it = PyTuple_GET_ITEM(lz->ittuple, i);
2468 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002469 if (item == NULL) {
2470 Py_DECREF(result);
2471 return NULL;
2472 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002473 olditem = PyTuple_GET_ITEM(result, i);
2474 PyTuple_SET_ITEM(result, i, item);
2475 Py_DECREF(olditem);
2476 }
2477 } else {
2478 result = PyTuple_New(tuplesize);
2479 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002480 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002481 for (i=0 ; i < tuplesize ; i++) {
2482 it = PyTuple_GET_ITEM(lz->ittuple, i);
2483 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002484 if (item == NULL) {
2485 Py_DECREF(result);
2486 return NULL;
2487 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002488 PyTuple_SET_ITEM(result, i, item);
2489 }
2490 }
2491 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002492}
Barry Warsawbd599b52000-08-03 15:45:29 +00002493
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002494static PyObject *
2495zip_reduce(zipobject *lz)
2496{
2497 /* Just recreate the zip with the internal iterator tuple */
2498 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2499}
2500
2501static PyMethodDef zip_methods[] = {
2502 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2503 {NULL, NULL} /* sentinel */
2504};
2505
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002506PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002507"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002508\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002509Return a zip object whose .__next__() method returns a tuple where\n\
2510the i-th element comes from the i-th iterable argument. The .__next__()\n\
2511method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002512is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002513
2514PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002515 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2516 "zip", /* tp_name */
2517 sizeof(zipobject), /* tp_basicsize */
2518 0, /* tp_itemsize */
2519 /* methods */
2520 (destructor)zip_dealloc, /* tp_dealloc */
2521 0, /* tp_print */
2522 0, /* tp_getattr */
2523 0, /* tp_setattr */
2524 0, /* tp_reserved */
2525 0, /* tp_repr */
2526 0, /* tp_as_number */
2527 0, /* tp_as_sequence */
2528 0, /* tp_as_mapping */
2529 0, /* tp_hash */
2530 0, /* tp_call */
2531 0, /* tp_str */
2532 PyObject_GenericGetAttr, /* tp_getattro */
2533 0, /* tp_setattro */
2534 0, /* tp_as_buffer */
2535 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2536 Py_TPFLAGS_BASETYPE, /* tp_flags */
2537 zip_doc, /* tp_doc */
2538 (traverseproc)zip_traverse, /* tp_traverse */
2539 0, /* tp_clear */
2540 0, /* tp_richcompare */
2541 0, /* tp_weaklistoffset */
2542 PyObject_SelfIter, /* tp_iter */
2543 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002544 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 0, /* tp_members */
2546 0, /* tp_getset */
2547 0, /* tp_base */
2548 0, /* tp_dict */
2549 0, /* tp_descr_get */
2550 0, /* tp_descr_set */
2551 0, /* tp_dictoffset */
2552 0, /* tp_init */
2553 PyType_GenericAlloc, /* tp_alloc */
2554 zip_new, /* tp_new */
2555 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002556};
Barry Warsawbd599b52000-08-03 15:45:29 +00002557
2558
Guido van Rossum79f25d91997-04-29 20:08:16 +00002559static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 {"__build_class__", (PyCFunction)builtin___build_class__,
2561 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2562 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002563 BUILTIN_ABS_METHODDEF
2564 BUILTIN_ALL_METHODDEF
2565 BUILTIN_ANY_METHODDEF
2566 BUILTIN_ASCII_METHODDEF
2567 BUILTIN_BIN_METHODDEF
2568 BUILTIN_CALLABLE_METHODDEF
2569 BUILTIN_CHR_METHODDEF
2570 BUILTIN_COMPILE_METHODDEF
2571 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002572 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002573 BUILTIN_DIVMOD_METHODDEF
2574 BUILTIN_EVAL_METHODDEF
2575 BUILTIN_EXEC_METHODDEF
2576 BUILTIN_FORMAT_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002578 BUILTIN_GLOBALS_METHODDEF
2579 BUILTIN_HASATTR_METHODDEF
2580 BUILTIN_HASH_METHODDEF
2581 BUILTIN_HEX_METHODDEF
2582 BUILTIN_ID_METHODDEF
2583 BUILTIN_INPUT_METHODDEF
2584 BUILTIN_ISINSTANCE_METHODDEF
2585 BUILTIN_ISSUBCLASS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002586 {"iter", builtin_iter, METH_VARARGS, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002587 BUILTIN_LEN_METHODDEF
2588 BUILTIN_LOCALS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002589 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2590 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2591 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002592 BUILTIN_OCT_METHODDEF
2593 BUILTIN_ORD_METHODDEF
2594 BUILTIN_POW_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002595 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002596 BUILTIN_REPR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002597 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002598 BUILTIN_SETATTR_METHODDEF
2599 BUILTIN_SORTED_METHODDEF
2600 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002601 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2602 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002603};
2604
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002605PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002606"Built-in functions, exceptions, and other objects.\n\
2607\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002608Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002609
Martin v. Löwis1a214512008-06-11 05:26:20 +00002610static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 PyModuleDef_HEAD_INIT,
2612 "builtins",
2613 builtin_doc,
2614 -1, /* multiple "initialization" just copies the module dict. */
2615 builtin_methods,
2616 NULL,
2617 NULL,
2618 NULL,
2619 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002620};
2621
2622
Guido van Rossum25ce5661997-08-02 03:10:38 +00002623PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002624_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002625{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002627
2628 if (PyType_Ready(&PyFilter_Type) < 0 ||
2629 PyType_Ready(&PyMap_Type) < 0 ||
2630 PyType_Ready(&PyZip_Type) < 0)
2631 return NULL;
2632
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002633 mod = PyModule_Create(&builtinsmodule);
2634 if (mod == NULL)
2635 return NULL;
2636 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002637
Tim Peters7571a0f2003-03-23 17:52:28 +00002638#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002639 /* "builtins" exposes a number of statically allocated objects
2640 * that, before this code was added in 2.3, never showed up in
2641 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2642 * result, programs leaking references to None and False (etc)
2643 * couldn't be diagnosed by examining sys.getobjects(0).
2644 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002645#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2646#else
2647#define ADD_TO_ALL(OBJECT) (void)0
2648#endif
2649
Tim Peters4b7625e2001-09-13 21:37:17 +00002650#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2652 return NULL; \
2653 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 SETBUILTIN("None", Py_None);
2656 SETBUILTIN("Ellipsis", Py_Ellipsis);
2657 SETBUILTIN("NotImplemented", Py_NotImplemented);
2658 SETBUILTIN("False", Py_False);
2659 SETBUILTIN("True", Py_True);
2660 SETBUILTIN("bool", &PyBool_Type);
2661 SETBUILTIN("memoryview", &PyMemoryView_Type);
2662 SETBUILTIN("bytearray", &PyByteArray_Type);
2663 SETBUILTIN("bytes", &PyBytes_Type);
2664 SETBUILTIN("classmethod", &PyClassMethod_Type);
2665 SETBUILTIN("complex", &PyComplex_Type);
2666 SETBUILTIN("dict", &PyDict_Type);
2667 SETBUILTIN("enumerate", &PyEnum_Type);
2668 SETBUILTIN("filter", &PyFilter_Type);
2669 SETBUILTIN("float", &PyFloat_Type);
2670 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2671 SETBUILTIN("property", &PyProperty_Type);
2672 SETBUILTIN("int", &PyLong_Type);
2673 SETBUILTIN("list", &PyList_Type);
2674 SETBUILTIN("map", &PyMap_Type);
2675 SETBUILTIN("object", &PyBaseObject_Type);
2676 SETBUILTIN("range", &PyRange_Type);
2677 SETBUILTIN("reversed", &PyReversed_Type);
2678 SETBUILTIN("set", &PySet_Type);
2679 SETBUILTIN("slice", &PySlice_Type);
2680 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2681 SETBUILTIN("str", &PyUnicode_Type);
2682 SETBUILTIN("super", &PySuper_Type);
2683 SETBUILTIN("tuple", &PyTuple_Type);
2684 SETBUILTIN("type", &PyType_Type);
2685 SETBUILTIN("zip", &PyZip_Type);
2686 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2687 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2688 Py_XDECREF(debug);
2689 return NULL;
2690 }
2691 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002693 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002694#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002695#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002696}