blob: 31d9e0e4d1b6a56844b4593c034641eb51005242 [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
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300238 x: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000239 /
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 Storchaka7e810a62015-05-30 11:09:35 +0300246/*[clinic end generated code: output=6833047c493ecea2 input=bed4ca14e29c20d1]*/
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
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300254 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000255 /
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 Storchaka7e810a62015-05-30 11:09:35 +0300264/*[clinic end generated code: output=089e6d1b7bde27b1 input=1a7c5d1bc3438a21]*/
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
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300303 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000304 /
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 Storchaka7e810a62015-05-30 11:09:35 +0300313/*[clinic end generated code: output=1be994b2c2307492 input=41d7451c23384f24]*/
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 }
Raymond Hettinger5098b582015-10-09 00:42:47 -0400334 if (cmp > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000335 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
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300352 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000353 /
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 Storchaka7e810a62015-05-30 11:09:35 +0300365/*[clinic end generated code: output=d4e862c48af2a933 input=4c62732e1b3a3cc9]*/
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
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300374 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000375 /
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 Storchaka7e810a62015-05-30 11:09:35 +0300385/*[clinic end generated code: output=25ee26c6cf3bbb54 input=53f8a0264bacaf90]*/
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
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300394 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000395 /
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 Storchaka7e810a62015-05-30 11:09:35 +0300405/*[clinic end generated code: output=f4df2ce92364b656 input=1423bab99cc41f58]*/
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 Hettingerbd5f0e82015-10-09 01:34:08 -0400472 int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 iternext = *Py_TYPE(it)->tp_iternext;
475 for (;;) {
476 item = iternext(it);
477 if (item == NULL)
478 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000479
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400480 if (checktrue) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 ok = PyObject_IsTrue(item);
482 } else {
483 PyObject *good;
Raymond Hettingerbd5f0e82015-10-09 01:34:08 -0400484 good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 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
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300567 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000568 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 *
Larry Hastings89964c42015-04-14 18:07:59 -0400577builtin_format_impl(PyModuleDef *module, PyObject *value,
578 PyObject *format_spec)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300579/*[clinic end generated code: output=4341fd78a5f01764 input=6325e751a1b29b86]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000580{
Eric Smith8fd3eba2008-02-17 19:48:00 +0000581 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000582}
583
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000584/*[clinic input]
585chr as builtin_chr
586
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300587 i: int
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000588 /
589
590Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
591[clinic start generated code]*/
592
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000593static PyObject *
594builtin_chr_impl(PyModuleDef *module, int i)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300595/*[clinic end generated code: output=67fe4d87e690f373 input=3f604ef45a70750d]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000596{
597 return PyUnicode_FromOrdinal(i);
598}
Guido van Rossum09095f32000-03-10 23:00:52 +0000599
600
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200601static const char *
Martin Pantereeb896c2015-11-07 02:32:21 +0000602source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000603{
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200604 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 Py_ssize_t size;
Martin Pantereeb896c2015-11-07 02:32:21 +0000606 Py_buffer view;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000607
Martin Pantereeb896c2015-11-07 02:32:21 +0000608 *cmd_copy = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000609 if (PyUnicode_Check(cmd)) {
610 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200611 str = PyUnicode_AsUTF8AndSize(cmd, &size);
612 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 return NULL;
614 }
Martin Pantereeb896c2015-11-07 02:32:21 +0000615 else if (PyBytes_Check(cmd)) {
616 str = PyBytes_AS_STRING(cmd);
617 size = PyBytes_GET_SIZE(cmd);
618 }
619 else if (PyByteArray_Check(cmd)) {
620 str = PyByteArray_AS_STRING(cmd);
621 size = PyByteArray_GET_SIZE(cmd);
622 }
623 else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
624 /* Copy to NUL-terminated buffer. */
625 *cmd_copy = PyBytes_FromStringAndSize(
626 (const char *)view.buf, view.len);
627 PyBuffer_Release(&view);
628 if (*cmd_copy == NULL) {
629 return NULL;
630 }
631 str = PyBytes_AS_STRING(*cmd_copy);
632 size = PyBytes_GET_SIZE(*cmd_copy);
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200633 }
634 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 PyErr_Format(PyExc_TypeError,
636 "%s() arg 1 must be a %s object",
637 funcname, what);
638 return NULL;
639 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200640
Serhiy Storchaka3dd3e262015-02-03 01:25:42 +0200641 if (strlen(str) != (size_t)size) {
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300642 PyErr_SetString(PyExc_ValueError,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 "source code string cannot contain null bytes");
Martin Pantereeb896c2015-11-07 02:32:21 +0000644 Py_CLEAR(*cmd_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000645 return NULL;
646 }
647 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000648}
649
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000650/*[clinic input]
651compile as builtin_compile
652
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300653 source: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000654 filename: object(converter="PyUnicode_FSDecoder")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300655 mode: str
656 flags: int = 0
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300657 dont_inherit: int(c_default="0") = False
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300658 optimize: int = -1
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000659
660Compile source into a code object that can be executed by exec() or eval().
661
662The source code may represent a Python module, statement or expression.
663The filename will be used for run-time error messages.
664The mode must be 'exec' to compile a module, 'single' to compile a
665single (interactive) statement, or 'eval' to compile an expression.
666The flags argument, if present, controls which future statements influence
667the compilation of the code.
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300668The dont_inherit argument, if true, stops the compilation inheriting
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000669the effects of any future statements in effect in the code calling
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300670compile; if absent or false these statements do influence the compilation,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000671in addition to any features explicitly specified.
672[clinic start generated code]*/
673
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000674static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -0400675builtin_compile_impl(PyModuleDef *module, PyObject *source,
676 PyObject *filename, const char *mode, int flags,
677 int dont_inherit, int optimize)
Serhiy Storchaka8b2e8b62015-05-30 11:30:39 +0300678/*[clinic end generated code: output=31881762c1bb90c4 input=9d53e8cfb3c86414]*/
Guido van Rossum5b722181993-03-30 17:46:03 +0000679{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000680 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200681 const char *str;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000682 int compile_mode = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000683 int is_ast;
684 PyCompilerFlags cf;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000685 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000686 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000687
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000688 cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
Tim Peters6cd6a822001-08-17 22:11:27 +0000689
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000690 if (flags &
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
692 {
693 PyErr_SetString(PyExc_ValueError,
694 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000695 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 }
697 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000698
Georg Brandl8334fd92010-12-04 10:26:46 +0000699 if (optimize < -1 || optimize > 2) {
700 PyErr_SetString(PyExc_ValueError,
701 "compile(): invalid optimize value");
702 goto error;
703 }
704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 if (!dont_inherit) {
706 PyEval_MergeCompilerFlags(&cf);
707 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000708
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000709 if (strcmp(mode, "exec") == 0)
710 compile_mode = 0;
711 else if (strcmp(mode, "eval") == 0)
712 compile_mode = 1;
713 else if (strcmp(mode, "single") == 0)
714 compile_mode = 2;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 else {
716 PyErr_SetString(PyExc_ValueError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000717 "compile() mode must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000718 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000720
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000721 is_ast = PyAST_Check(source);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000723 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 if (is_ast) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000725 if (flags & PyCF_ONLY_AST) {
726 Py_INCREF(source);
727 result = source;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 }
729 else {
730 PyArena *arena;
731 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200734 if (arena == NULL)
735 goto error;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000736 mod = PyAST_obj2mod(source, arena, compile_mode);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 if (mod == NULL) {
738 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000739 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000740 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500741 if (!PyAST_Validate(mod)) {
742 PyArena_Free(arena);
743 goto error;
744 }
Victor Stinner14e461d2013-08-26 22:28:21 +0200745 result = (PyObject*)PyAST_CompileObject(mod, filename,
746 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000747 PyArena_Free(arena);
748 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000749 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000750 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000751
Martin Panter61d6e4a2015-11-07 02:56:11 +0000752 str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000754 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000755
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000756 result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000757 Py_XDECREF(source_copy);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000758 goto finally;
759
760error:
761 result = NULL;
762finally:
Victor Stinner14e461d2013-08-26 22:28:21 +0200763 Py_DECREF(filename);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000764 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000765}
766
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000767/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000768static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000769builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
774 return NULL;
775 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000776}
777
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000778PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000779"dir([object]) -> list of strings\n"
780"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000781"If called without an argument, return the names in the current scope.\n"
782"Else, return an alphabetized list of names comprising (some of) the attributes\n"
783"of the given object, and of attributes reachable from it.\n"
784"If the object supplies a method named __dir__, it will be used; otherwise\n"
785"the default dir() logic is used and returns:\n"
786" for a module object: the module's attributes.\n"
787" for a class object: its attributes, and recursively the attributes\n"
788" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000789" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000790" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000791
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000792/*[clinic input]
793divmod as builtin_divmod
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000794
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300795 x: object
796 y: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000797 /
798
799Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.
800[clinic start generated code]*/
801
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000802static PyObject *
803builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300804/*[clinic end generated code: output=9ad0076120ebf9ac input=7fdb15f8a97a5fe7]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000805{
806 return PyNumber_Divmod(x, y);
807}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000808
809
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000810/*[clinic input]
811eval as builtin_eval
812
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300813 source: object
814 globals: object = None
815 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000816 /
817
818Evaluate the given source in the context of globals and locals.
819
820The source may be a string representing a Python expression
821or a code object as returned by compile().
822The globals must be a dictionary and locals can be any mapping,
823defaulting to the current globals and locals.
824If only globals is given, locals defaults to it.
825[clinic start generated code]*/
826
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000827static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -0400828builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals,
829 PyObject *locals)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300830/*[clinic end generated code: output=7284501fb7b4d666 input=11ee718a8640e527]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000831{
Martin Panter61d6e4a2015-11-07 02:56:11 +0000832 PyObject *result, *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200833 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000835
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 if (locals != Py_None && !PyMapping_Check(locals)) {
837 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
838 return NULL;
839 }
840 if (globals != Py_None && !PyDict_Check(globals)) {
841 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
842 "globals must be a real dict; try eval(expr, {}, mapping)"
843 : "globals must be a dict");
844 return NULL;
845 }
846 if (globals == Py_None) {
847 globals = PyEval_GetGlobals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100848 if (locals == Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100850 if (locals == NULL)
851 return NULL;
852 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000853 }
854 else if (locals == Py_None)
855 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000856
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 if (globals == NULL || locals == NULL) {
858 PyErr_SetString(PyExc_TypeError,
859 "eval must be given globals and locals "
860 "when called without a frame");
861 return NULL;
862 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000863
Victor Stinnerb44562b2013-11-06 19:03:11 +0100864 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
865 if (_PyDict_SetItemId(globals, &PyId___builtins__,
866 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000867 return NULL;
868 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000869
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000870 if (PyCode_Check(source)) {
871 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 PyErr_SetString(PyExc_TypeError,
873 "code object passed to eval() may not contain free variables");
874 return NULL;
875 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000876 return PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Martin Panter61d6e4a2015-11-07 02:56:11 +0000880 str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 if (str == NULL)
882 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 while (*str == ' ' || *str == '\t')
885 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000886
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000887 (void)PyEval_MergeCompilerFlags(&cf);
888 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000889 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000891}
892
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000893/*[clinic input]
894exec as builtin_exec
895
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300896 source: object
897 globals: object = None
898 locals: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000899 /
900
901Execute the given source in the context of globals and locals.
902
903The source may be a string representing one or more Python statements
904or a code object as returned by compile().
905The globals must be a dictionary and locals can be any mapping,
906defaulting to the current globals and locals.
907If only globals is given, locals defaults to it.
908[clinic start generated code]*/
909
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000910static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -0400911builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals,
912 PyObject *locals)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +0300913/*[clinic end generated code: output=83d574ef9d5d0b46 input=01ca3e1c01692829]*/
Georg Brandl7cae87c2006-09-06 06:51:57 +0000914{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 PyObject *v;
Georg Brandl2cabc562008-08-28 07:57:16 +0000916
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 if (globals == Py_None) {
918 globals = PyEval_GetGlobals();
919 if (locals == Py_None) {
920 locals = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +0100921 if (locals == NULL)
922 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 }
924 if (!globals || !locals) {
925 PyErr_SetString(PyExc_SystemError,
926 "globals and locals cannot be NULL");
927 return NULL;
928 }
929 }
930 else if (locals == Py_None)
931 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 if (!PyDict_Check(globals)) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000934 PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000935 globals->ob_type->tp_name);
936 return NULL;
937 }
938 if (!PyMapping_Check(locals)) {
939 PyErr_Format(PyExc_TypeError,
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000940 "locals must be a mapping or None, not %.100s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 locals->ob_type->tp_name);
942 return NULL;
943 }
Victor Stinnerb44562b2013-11-06 19:03:11 +0100944 if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
945 if (_PyDict_SetItemId(globals, &PyId___builtins__,
946 PyEval_GetBuiltins()) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 return NULL;
948 }
949
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000950 if (PyCode_Check(source)) {
951 if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 PyErr_SetString(PyExc_TypeError,
953 "code object passed to exec() may not "
954 "contain free variables");
955 return NULL;
956 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000957 v = PyEval_EvalCode(source, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 }
959 else {
Martin Panter61d6e4a2015-11-07 02:56:11 +0000960 PyObject *source_copy;
Serhiy Storchaka4fdb6842015-02-03 01:21:08 +0200961 const char *str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 PyCompilerFlags cf;
963 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000964 str = source_as_string(source, "exec",
Martin Panter61d6e4a2015-11-07 02:56:11 +0000965 "string, bytes or code", &cf,
966 &source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 if (str == NULL)
968 return NULL;
969 if (PyEval_MergeCompilerFlags(&cf))
970 v = PyRun_StringFlags(str, Py_file_input, globals,
971 locals, &cf);
972 else
973 v = PyRun_String(str, Py_file_input, globals, locals);
Martin Panter61d6e4a2015-11-07 02:56:11 +0000974 Py_XDECREF(source_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 }
976 if (v == NULL)
977 return NULL;
978 Py_DECREF(v);
979 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000980}
981
Georg Brandl7cae87c2006-09-06 06:51:57 +0000982
Nick Coghlanf9e227e2014-08-17 14:01:19 +1000983/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000984static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000985builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000986{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 PyObject *v, *result, *dflt = NULL;
988 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
991 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 if (!PyUnicode_Check(name)) {
994 PyErr_SetString(PyExc_TypeError,
995 "getattr(): attribute name must be string");
996 return NULL;
997 }
998 result = PyObject_GetAttr(v, name);
999 if (result == NULL && dflt != NULL &&
1000 PyErr_ExceptionMatches(PyExc_AttributeError))
1001 {
1002 PyErr_Clear();
1003 Py_INCREF(dflt);
1004 result = dflt;
1005 }
1006 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001007}
1008
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001009PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +00001010"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001011\n\
Guido van Rossum950ff291998-06-29 13:38:57 +00001012Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
1013When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001014exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001015
1016
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001017/*[clinic input]
1018globals as builtin_globals
1019
1020Return the dictionary containing the current scope's global variables.
1021
1022NOTE: Updates to this dictionary *will* affect name lookups in the current
1023global scope and vice-versa.
1024[clinic start generated code]*/
1025
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001026static PyObject *
1027builtin_globals_impl(PyModuleDef *module)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001028/*[clinic end generated code: output=4958645e96dd8138 input=9327576f92bb48ba]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001029{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032 d = PyEval_GetGlobals();
1033 Py_XINCREF(d);
1034 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001035}
1036
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001037
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001038/*[clinic input]
1039hasattr as builtin_hasattr
1040
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001041 obj: object
1042 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001043 /
1044
1045Return whether the object has an attribute with the given name.
1046
1047This is done by calling getattr(obj, name) and catching AttributeError.
1048[clinic start generated code]*/
1049
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001050static PyObject *
1051builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001052/*[clinic end generated code: output=81154fdd63634696 input=0faec9787d979542]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001053{
1054 PyObject *v;
1055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001056 if (!PyUnicode_Check(name)) {
1057 PyErr_SetString(PyExc_TypeError,
1058 "hasattr(): attribute name must be string");
1059 return NULL;
1060 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001061 v = PyObject_GetAttr(obj, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +00001063 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +00001065 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001066 }
Benjamin Peterson17689992010-08-24 03:26:23 +00001067 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 }
1069 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +00001070 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +00001071}
1072
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001073
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001074/* AC: gdb's integration with CPython relies on builtin_id having
1075 * the *exact* parameter names of "self" and "v", so we ensure we
1076 * preserve those name rather than using the AC defaults.
1077 */
1078/*[clinic input]
1079id as builtin_id
1080
1081 self: self(type="PyModuleDef *")
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001082 obj as v: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001083 /
1084
1085Return the identity of an object.
1086
1087This is guaranteed to be unique among simultaneously existing objects.
1088(CPython uses the object's memory address.)
1089[clinic start generated code]*/
1090
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001092builtin_id(PyModuleDef *self, PyObject *v)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001093/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
Guido van Rossum5b722181993-03-30 17:46:03 +00001094{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +00001096}
1097
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001098
Raymond Hettingera6c60372008-03-13 01:26:19 +00001099/* map object ************************************************************/
1100
1101typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 PyObject_HEAD
1103 PyObject *iters;
1104 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001105} mapobject;
1106
Guido van Rossum79f25d91997-04-29 20:08:16 +00001107static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +00001108map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +00001109{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 PyObject *it, *iters, *func;
1111 mapobject *lz;
1112 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001113
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
1115 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001116
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 numargs = PyTuple_Size(args);
1118 if (numargs < 2) {
1119 PyErr_SetString(PyExc_TypeError,
1120 "map() must have at least two arguments.");
1121 return NULL;
1122 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 iters = PyTuple_New(numargs-1);
1125 if (iters == NULL)
1126 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001127
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001128 for (i=1 ; i<numargs ; i++) {
1129 /* Get iterator. */
1130 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
1131 if (it == NULL) {
1132 Py_DECREF(iters);
1133 return NULL;
1134 }
1135 PyTuple_SET_ITEM(iters, i-1, it);
1136 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 /* create mapobject structure */
1139 lz = (mapobject *)type->tp_alloc(type, 0);
1140 if (lz == NULL) {
1141 Py_DECREF(iters);
1142 return NULL;
1143 }
1144 lz->iters = iters;
1145 func = PyTuple_GET_ITEM(args, 0);
1146 Py_INCREF(func);
1147 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001150}
1151
1152static void
1153map_dealloc(mapobject *lz)
1154{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 PyObject_GC_UnTrack(lz);
1156 Py_XDECREF(lz->iters);
1157 Py_XDECREF(lz->func);
1158 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001159}
1160
1161static int
1162map_traverse(mapobject *lz, visitproc visit, void *arg)
1163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 Py_VISIT(lz->iters);
1165 Py_VISIT(lz->func);
1166 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001167}
1168
1169static PyObject *
1170map_next(mapobject *lz)
1171{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001172 PyObject *val;
1173 PyObject *argtuple;
1174 PyObject *result;
1175 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001176
Raymond Hettinger501b4a72015-08-18 08:07:16 -07001177 numargs = PyTuple_GET_SIZE(lz->iters);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 argtuple = PyTuple_New(numargs);
1179 if (argtuple == NULL)
1180 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 for (i=0 ; i<numargs ; i++) {
Raymond Hettingerf1094142015-08-18 00:20:20 -07001183 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1184 val = Py_TYPE(it)->tp_iternext(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001185 if (val == NULL) {
1186 Py_DECREF(argtuple);
1187 return NULL;
1188 }
1189 PyTuple_SET_ITEM(argtuple, i, val);
1190 }
1191 result = PyObject_Call(lz->func, argtuple, NULL);
1192 Py_DECREF(argtuple);
1193 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001194}
1195
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001196static PyObject *
1197map_reduce(mapobject *lz)
1198{
1199 Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
1200 PyObject *args = PyTuple_New(numargs+1);
1201 Py_ssize_t i;
1202 if (args == NULL)
1203 return NULL;
1204 Py_INCREF(lz->func);
1205 PyTuple_SET_ITEM(args, 0, lz->func);
1206 for (i = 0; i<numargs; i++){
1207 PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
1208 Py_INCREF(it);
1209 PyTuple_SET_ITEM(args, i+1, it);
1210 }
1211
1212 return Py_BuildValue("ON", Py_TYPE(lz), args);
1213}
1214
1215static PyMethodDef map_methods[] = {
1216 {"__reduce__", (PyCFunction)map_reduce, METH_NOARGS, reduce_doc},
1217 {NULL, NULL} /* sentinel */
1218};
1219
1220
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001221PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001222"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001223\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001224Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001226
Raymond Hettingera6c60372008-03-13 01:26:19 +00001227PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001228 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1229 "map", /* tp_name */
1230 sizeof(mapobject), /* tp_basicsize */
1231 0, /* tp_itemsize */
1232 /* methods */
1233 (destructor)map_dealloc, /* tp_dealloc */
1234 0, /* tp_print */
1235 0, /* tp_getattr */
1236 0, /* tp_setattr */
1237 0, /* tp_reserved */
1238 0, /* tp_repr */
1239 0, /* tp_as_number */
1240 0, /* tp_as_sequence */
1241 0, /* tp_as_mapping */
1242 0, /* tp_hash */
1243 0, /* tp_call */
1244 0, /* tp_str */
1245 PyObject_GenericGetAttr, /* tp_getattro */
1246 0, /* tp_setattro */
1247 0, /* tp_as_buffer */
1248 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1249 Py_TPFLAGS_BASETYPE, /* tp_flags */
1250 map_doc, /* tp_doc */
1251 (traverseproc)map_traverse, /* tp_traverse */
1252 0, /* tp_clear */
1253 0, /* tp_richcompare */
1254 0, /* tp_weaklistoffset */
1255 PyObject_SelfIter, /* tp_iter */
1256 (iternextfunc)map_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001257 map_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 0, /* tp_members */
1259 0, /* tp_getset */
1260 0, /* tp_base */
1261 0, /* tp_dict */
1262 0, /* tp_descr_get */
1263 0, /* tp_descr_set */
1264 0, /* tp_dictoffset */
1265 0, /* tp_init */
1266 PyType_GenericAlloc, /* tp_alloc */
1267 map_new, /* tp_new */
1268 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001269};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001270
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001271
1272/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001273static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001274builtin_next(PyObject *self, PyObject *args)
1275{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001276 PyObject *it, *res;
1277 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001278
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001279 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1280 return NULL;
1281 if (!PyIter_Check(it)) {
1282 PyErr_Format(PyExc_TypeError,
Philip Jenvey50add042011-11-06 16:37:52 -08001283 "'%.200s' object is not an iterator",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001284 it->ob_type->tp_name);
1285 return NULL;
1286 }
1287
1288 res = (*it->ob_type->tp_iternext)(it);
1289 if (res != NULL) {
1290 return res;
1291 } else if (def != NULL) {
1292 if (PyErr_Occurred()) {
1293 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1294 return NULL;
1295 PyErr_Clear();
1296 }
1297 Py_INCREF(def);
1298 return def;
1299 } else if (PyErr_Occurred()) {
1300 return NULL;
1301 } else {
1302 PyErr_SetNone(PyExc_StopIteration);
1303 return NULL;
1304 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001305}
1306
1307PyDoc_STRVAR(next_doc,
1308"next(iterator[, default])\n\
1309\n\
1310Return the next item from the iterator. If default is given and the iterator\n\
1311is exhausted, it is returned instead of raising StopIteration.");
1312
1313
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001314/*[clinic input]
1315setattr as builtin_setattr
1316
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001317 obj: object
1318 name: object
1319 value: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001320 /
1321
1322Sets the named attribute on the given object to the specified value.
1323
1324setattr(x, 'y', v) is equivalent to ``x.y = v''
1325[clinic start generated code]*/
1326
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001327static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -04001328builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name,
1329 PyObject *value)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001330/*[clinic end generated code: output=d881c655c0f7e34f input=bd2b7ca6875a1899]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001331{
1332 if (PyObject_SetAttr(obj, name, value) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001333 return NULL;
1334 Py_INCREF(Py_None);
1335 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001336}
1337
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001338
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001339/*[clinic input]
1340delattr as builtin_delattr
1341
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001342 obj: object
1343 name: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001344 /
1345
1346Deletes the named attribute from the given object.
1347
1348delattr(x, 'y') is equivalent to ``del x.y''
1349[clinic start generated code]*/
1350
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001351static PyObject *
1352builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001353/*[clinic end generated code: output=ef653e698a0b4187 input=db16685d6b4b9410]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001354{
1355 if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356 return NULL;
1357 Py_INCREF(Py_None);
1358 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001359}
1360
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001361
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001362/*[clinic input]
1363hash as builtin_hash
1364
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001365 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001366 /
1367
1368Return the hash value for the given object.
1369
1370Two objects that compare equal must also have the same hash value, but the
1371reverse is not necessarily true.
1372[clinic start generated code]*/
1373
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001375builtin_hash(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001376/*[clinic end generated code: output=1f32ff154c1f751a input=58c48be822bf9c54]*/
Guido van Rossum9bfef441993-03-29 10:43:31 +00001377{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001378 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001379
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001380 x = PyObject_Hash(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001381 if (x == -1)
1382 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001383 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001384}
1385
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001386
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001387/*[clinic input]
1388hex as builtin_hex
1389
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001390 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001391 /
1392
1393Return the hexadecimal representation of an integer.
1394
1395 >>> hex(12648430)
1396 '0xc0ffee'
1397[clinic start generated code]*/
1398
Guido van Rossum79f25d91997-04-29 20:08:16 +00001399static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001400builtin_hex(PyModuleDef *module, PyObject *number)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001401/*[clinic end generated code: output=618489ce3cbc5858 input=e645aff5fc7d540e]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001402{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001403 return PyNumber_ToBase(number, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001404}
1405
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001406
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001407/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001408static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001409builtin_iter(PyObject *self, PyObject *args)
1410{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001411 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001413 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1414 return NULL;
1415 if (w == NULL)
1416 return PyObject_GetIter(v);
1417 if (!PyCallable_Check(v)) {
1418 PyErr_SetString(PyExc_TypeError,
1419 "iter(v, w): v must be callable");
1420 return NULL;
1421 }
1422 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001423}
1424
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001425PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001426"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001427iter(callable, sentinel) -> iterator\n\
1428\n\
1429Get an iterator from an object. In the first form, the argument must\n\
1430supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001431In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001432
1433
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001434/*[clinic input]
1435len as builtin_len
1436
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001437 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001438 /
1439
1440Return the number of items in a container.
1441[clinic start generated code]*/
1442
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001443static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001444builtin_len(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001445/*[clinic end generated code: output=8e5837b6f81d915b input=bc55598da9e9c9b5]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001448
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001449 res = PyObject_Size(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 if (res < 0 && PyErr_Occurred())
1451 return NULL;
1452 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001453}
1454
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001455
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001456/*[clinic input]
1457locals as builtin_locals
1458
1459Return a dictionary containing the current scope's local variables.
1460
1461NOTE: Whether or not updates to this dictionary will affect name lookups in
1462the local scope and vice-versa is *implementation dependent* and not
1463covered by any backwards compatibility guarantees.
1464[clinic start generated code]*/
1465
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001466static PyObject *
1467builtin_locals_impl(PyModuleDef *module)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001468/*[clinic end generated code: output=8b5a41f12e19d13a input=7874018d478d5c4b]*/
Guido van Rossum872537c1995-07-07 22:43:42 +00001469{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001470 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001472 d = PyEval_GetLocals();
1473 Py_XINCREF(d);
1474 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001475}
1476
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001477
Guido van Rossum79f25d91997-04-29 20:08:16 +00001478static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001479min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001482 PyObject *emptytuple, *defaultval = NULL;
1483 static char *kwlist[] = {"key", "default", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 const char *name = op == Py_LT ? "min" : "max";
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001485 const int positional = PyTuple_Size(args) > 1;
1486 int ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001487
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001488 if (positional)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 v = args;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001490 else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001491 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001492
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001493 emptytuple = PyTuple_New(0);
1494 if (emptytuple == NULL)
1495 return NULL;
1496 ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
1497 &keyfunc, &defaultval);
1498 Py_DECREF(emptytuple);
1499 if (!ret)
1500 return NULL;
1501
1502 if (positional && defaultval != NULL) {
1503 PyErr_Format(PyExc_TypeError,
1504 "Cannot specify a default for %s() with multiple "
1505 "positional arguments", name);
1506 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001507 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 it = PyObject_GetIter(v);
1510 if (it == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001511 return NULL;
1512 }
Tim Petersc3074532001-05-03 07:00:32 +00001513
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 maxitem = NULL; /* the result */
1515 maxval = NULL; /* the value associated with the result */
1516 while (( item = PyIter_Next(it) )) {
1517 /* get the value from the key function */
1518 if (keyfunc != NULL) {
1519 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1520 if (val == NULL)
1521 goto Fail_it_item;
1522 }
1523 /* no key function; the value is the item */
1524 else {
1525 val = item;
1526 Py_INCREF(val);
1527 }
Tim Petersc3074532001-05-03 07:00:32 +00001528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 /* maximum value and item are unset; set them */
1530 if (maxval == NULL) {
1531 maxitem = item;
1532 maxval = val;
1533 }
1534 /* maximum value and item are set; update them as necessary */
1535 else {
1536 int cmp = PyObject_RichCompareBool(val, maxval, op);
1537 if (cmp < 0)
1538 goto Fail_it_item_and_val;
1539 else if (cmp > 0) {
1540 Py_DECREF(maxval);
1541 Py_DECREF(maxitem);
1542 maxval = val;
1543 maxitem = item;
1544 }
1545 else {
1546 Py_DECREF(item);
1547 Py_DECREF(val);
1548 }
1549 }
1550 }
1551 if (PyErr_Occurred())
1552 goto Fail_it;
1553 if (maxval == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 assert(maxitem == NULL);
Raymond Hettinger4d6018f2013-06-24 22:43:02 -07001555 if (defaultval != NULL) {
1556 Py_INCREF(defaultval);
1557 maxitem = defaultval;
1558 } else {
1559 PyErr_Format(PyExc_ValueError,
1560 "%s() arg is an empty sequence", name);
1561 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 }
1563 else
1564 Py_DECREF(maxval);
1565 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001566 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001567
1568Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001570Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001572Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 Py_XDECREF(maxval);
1574 Py_XDECREF(maxitem);
1575 Py_DECREF(it);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001577}
1578
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001579/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001580static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001581builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001582{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001584}
1585
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001586PyDoc_STRVAR(min_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001587"min(iterable, *[, default=obj, key=func]) -> value\n\
1588min(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001589\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001590With a single iterable argument, return its smallest item. The\n\
1591default keyword-only argument specifies an object to return if\n\
1592the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001593With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001594
1595
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001596/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001597static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001598builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001599{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001601}
1602
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001603PyDoc_STRVAR(max_doc,
Raymond Hettinger2a545822014-05-19 22:20:52 +01001604"max(iterable, *[, default=obj, key=func]) -> value\n\
1605max(arg1, arg2, *args, *[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001606\n\
Raymond Hettinger2a545822014-05-19 22:20:52 +01001607With a single iterable argument, return its biggest item. The\n\
1608default keyword-only argument specifies an object to return if\n\
1609the provided iterable is empty.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001610With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001611
1612
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001613/*[clinic input]
1614oct as builtin_oct
1615
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001616 number: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001617 /
1618
1619Return the octal representation of an integer.
1620
1621 >>> oct(342391)
1622 '0o1234567'
1623[clinic start generated code]*/
1624
Guido van Rossum79f25d91997-04-29 20:08:16 +00001625static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001626builtin_oct(PyModuleDef *module, PyObject *number)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001627/*[clinic end generated code: output=18f701bc6d8f804a input=ad6b274af4016c72]*/
Guido van Rossum006bcd41991-10-24 14:54:44 +00001628{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001629 return PyNumber_ToBase(number, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001630}
1631
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001632
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001633/*[clinic input]
1634ord as builtin_ord
1635
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001636 c: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001637 /
1638
1639Return the Unicode code point for a one-character string.
1640[clinic start generated code]*/
1641
Guido van Rossum79f25d91997-04-29 20:08:16 +00001642static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001643builtin_ord(PyModuleDef *module, PyObject *c)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001644/*[clinic end generated code: output=04fd27272d9462f6 input=3064e5d6203ad012]*/
Guido van Rossum3f5da241990-12-20 15:06:42 +00001645{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001646 long ord;
1647 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001648
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001649 if (PyBytes_Check(c)) {
1650 size = PyBytes_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001651 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001652 ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001653 return PyLong_FromLong(ord);
1654 }
1655 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001656 else if (PyUnicode_Check(c)) {
1657 if (PyUnicode_READY(c) == -1)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001658 return NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001659 size = PyUnicode_GET_LENGTH(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001660 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001661 ord = (long)PyUnicode_READ_CHAR(c, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 return PyLong_FromLong(ord);
1663 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001664 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001665 else if (PyByteArray_Check(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 /* XXX Hopefully this is temporary */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001667 size = PyByteArray_GET_SIZE(c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001668 if (size == 1) {
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001669 ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 return PyLong_FromLong(ord);
1671 }
1672 }
1673 else {
1674 PyErr_Format(PyExc_TypeError,
1675 "ord() expected string of length 1, but " \
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001676 "%.200s found", c->ob_type->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001677 return NULL;
1678 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001679
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 PyErr_Format(PyExc_TypeError,
1681 "ord() expected a character, "
1682 "but string of length %zd found",
1683 size);
1684 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001685}
1686
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001687
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001688/*[clinic input]
1689pow as builtin_pow
1690
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001691 x: object
1692 y: object
1693 z: object = None
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001694 /
1695
1696Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
1697
1698Some types, such as ints, are able to use a more efficient algorithm when
1699invoked using the three argument form.
1700[clinic start generated code]*/
1701
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001702static PyObject *
1703builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03001704/*[clinic end generated code: output=1fba268adba9b45f input=653d57d38d41fc07]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001705{
1706 return PyNumber_Power(x, y, z);
1707}
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001708
1709
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001710/* AC: cannot convert yet, waiting for *args support */
Guido van Rossum34343512006-11-30 22:13:52 +00001711static PyObject *
1712builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1713{
Georg Brandlbc3b6822012-01-13 19:41:25 +01001714 static char *kwlist[] = {"sep", "end", "file", "flush", 0};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001715 static PyObject *dummy_args;
Georg Brandlbc3b6822012-01-13 19:41:25 +01001716 PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001717 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001718
Benjamin Peterson00102562012-01-11 21:00:16 -05001719 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Georg Brandlbc3b6822012-01-13 19:41:25 +01001720 return NULL;
1721 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print",
1722 kwlist, &sep, &end, &file, &flush))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001723 return NULL;
1724 if (file == NULL || file == Py_None) {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001725 file = _PySys_GetObjectId(&PyId_stdout);
Victor Stinner1e53bba2013-07-16 22:26:05 +02001726 if (file == NULL) {
1727 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
1728 return NULL;
1729 }
1730
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 /* sys.stdout may be None when FILE* stdout isn't connected */
1732 if (file == Py_None)
1733 Py_RETURN_NONE;
1734 }
Guido van Rossum34343512006-11-30 22:13:52 +00001735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001736 if (sep == Py_None) {
1737 sep = NULL;
1738 }
1739 else if (sep && !PyUnicode_Check(sep)) {
1740 PyErr_Format(PyExc_TypeError,
1741 "sep must be None or a string, not %.200s",
1742 sep->ob_type->tp_name);
1743 return NULL;
1744 }
1745 if (end == Py_None) {
1746 end = NULL;
1747 }
1748 else if (end && !PyUnicode_Check(end)) {
1749 PyErr_Format(PyExc_TypeError,
1750 "end must be None or a string, not %.200s",
1751 end->ob_type->tp_name);
1752 return NULL;
1753 }
Guido van Rossum34343512006-11-30 22:13:52 +00001754
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001755 for (i = 0; i < PyTuple_Size(args); i++) {
1756 if (i > 0) {
1757 if (sep == NULL)
1758 err = PyFile_WriteString(" ", file);
1759 else
1760 err = PyFile_WriteObject(sep, file,
1761 Py_PRINT_RAW);
1762 if (err)
1763 return NULL;
1764 }
1765 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1766 Py_PRINT_RAW);
1767 if (err)
1768 return NULL;
1769 }
Guido van Rossum34343512006-11-30 22:13:52 +00001770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001771 if (end == NULL)
1772 err = PyFile_WriteString("\n", file);
1773 else
1774 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1775 if (err)
1776 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001777
Georg Brandlbc3b6822012-01-13 19:41:25 +01001778 if (flush != NULL) {
1779 PyObject *tmp;
1780 int do_flush = PyObject_IsTrue(flush);
1781 if (do_flush == -1)
1782 return NULL;
1783 else if (do_flush) {
Victor Stinnereaa28832013-11-07 00:01:51 +01001784 tmp = _PyObject_CallMethodId(file, &PyId_flush, "");
Georg Brandlbc3b6822012-01-13 19:41:25 +01001785 if (tmp == NULL)
1786 return NULL;
1787 else
1788 Py_DECREF(tmp);
1789 }
1790 }
1791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001792 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001793}
1794
1795PyDoc_STRVAR(print_doc,
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001796"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001797\n\
1798Prints the values to a stream, or to sys.stdout by default.\n\
1799Optional keyword arguments:\n\
Senthil Kumarane9175bd2012-08-10 13:53:45 -07001800file: a file-like object (stream); defaults to the current sys.stdout.\n\
1801sep: string inserted between values, default a space.\n\
1802end: string appended after the last value, default a newline.\n\
1803flush: whether to forcibly flush the stream.");
Guido van Rossum34343512006-11-30 22:13:52 +00001804
1805
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001806/*[clinic input]
1807input as builtin_input
1808
1809 prompt: object(c_default="NULL") = None
1810 /
1811
1812Read a string from standard input. The trailing newline is stripped.
1813
1814The prompt string, if given, is printed to standard output without a
1815trailing newline before reading input.
1816
1817If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
1818On *nix systems, readline is used if available.
1819[clinic start generated code]*/
1820
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001821static PyObject *
1822builtin_input_impl(PyModuleDef *module, PyObject *prompt)
Serhiy Storchaka1009bf12015-04-03 23:53:51 +03001823/*[clinic end generated code: output=b77731f59e1515c4 input=5e8bb70c2908fe3c]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001824{
Victor Stinnerbd303c12013-11-07 23:07:29 +01001825 PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
1826 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1827 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001828 PyObject *tmp;
1829 long fd;
1830 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 /* Check that stdin/out/err are intact */
1833 if (fin == NULL || fin == Py_None) {
1834 PyErr_SetString(PyExc_RuntimeError,
1835 "input(): lost sys.stdin");
1836 return NULL;
1837 }
1838 if (fout == NULL || fout == Py_None) {
1839 PyErr_SetString(PyExc_RuntimeError,
1840 "input(): lost sys.stdout");
1841 return NULL;
1842 }
1843 if (ferr == NULL || ferr == Py_None) {
1844 PyErr_SetString(PyExc_RuntimeError,
1845 "input(): lost sys.stderr");
1846 return NULL;
1847 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001849 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001850 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001851 if (tmp == NULL)
1852 PyErr_Clear();
1853 else
1854 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001855
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001856 /* We should only use (GNU) readline if Python's sys.stdin and
1857 sys.stdout are the same as C's stdin and stdout, because we
1858 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001859 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 if (tmp == NULL) {
1861 PyErr_Clear();
1862 tty = 0;
1863 }
1864 else {
1865 fd = PyLong_AsLong(tmp);
1866 Py_DECREF(tmp);
1867 if (fd < 0 && PyErr_Occurred())
1868 return NULL;
1869 tty = fd == fileno(stdin) && isatty(fd);
1870 }
1871 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001872 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Martin Panterc9a6ab52015-10-10 01:25:38 +00001873 if (tmp == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001874 PyErr_Clear();
Martin Panterc9a6ab52015-10-10 01:25:38 +00001875 tty = 0;
1876 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 else {
1878 fd = PyLong_AsLong(tmp);
1879 Py_DECREF(tmp);
1880 if (fd < 0 && PyErr_Occurred())
1881 return NULL;
1882 tty = fd == fileno(stdout) && isatty(fd);
1883 }
1884 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 /* If we're interactive, use (GNU) readline */
1887 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001888 PyObject *po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001889 char *promptstr;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001890 char *s = NULL;
1891 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1892 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1893 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001895 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001896
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001897 stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001898 stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001899 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 /* stdin is a text stream, so it must have an
1901 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001902 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001903 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001904 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1905 if (!stdin_encoding_str || !stdin_errors_str)
1906 goto _readline_errors;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001907 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 if (tmp == NULL)
1909 PyErr_Clear();
1910 else
1911 Py_DECREF(tmp);
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001912 if (prompt != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001913 /* We have a prompt, encode it as stdout would */
1914 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001915 PyObject *stringpo;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001916 stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
Antoine Pitrou5ee9d8a2011-11-06 00:38:45 +01001917 stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001918 if (!stdout_encoding || !stdout_errors)
1919 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001920 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001921 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1922 if (!stdout_encoding_str || !stdout_errors_str)
1923 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001924 stringpo = PyObject_Str(prompt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001925 if (stringpo == NULL)
1926 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001928 stdout_encoding_str, stdout_errors_str);
1929 Py_CLEAR(stdout_encoding);
1930 Py_CLEAR(stdout_errors);
1931 Py_CLEAR(stringpo);
1932 if (po == NULL)
1933 goto _readline_errors;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001934 promptstr = PyBytes_AsString(po);
1935 if (promptstr == NULL)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001936 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 }
1938 else {
1939 po = NULL;
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001940 promptstr = "";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001941 }
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001942 s = PyOS_Readline(stdin, stdout, promptstr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001943 if (s == NULL) {
Richard Oudkerk614c5782013-04-03 13:44:50 +01001944 PyErr_CheckSignals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001945 if (!PyErr_Occurred())
1946 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001947 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001948 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001949
1950 len = strlen(s);
1951 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001952 PyErr_SetNone(PyExc_EOFError);
1953 result = NULL;
1954 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001955 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001956 if (len > PY_SSIZE_T_MAX) {
1957 PyErr_SetString(PyExc_OverflowError,
1958 "input: input too long");
1959 result = NULL;
1960 }
1961 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001962 len--; /* strip trailing '\n' */
1963 if (len != 0 && s[len-1] == '\r')
1964 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001965 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1966 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 }
1968 }
1969 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001970 Py_DECREF(stdin_errors);
1971 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 PyMem_FREE(s);
1973 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001974 _readline_errors:
1975 Py_XDECREF(stdin_encoding);
1976 Py_XDECREF(stdout_encoding);
1977 Py_XDECREF(stdin_errors);
1978 Py_XDECREF(stdout_errors);
1979 Py_XDECREF(po);
1980 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001981 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 /* Fallback if we're not interactive */
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001984 if (prompt != NULL) {
1985 if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001986 return NULL;
1987 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001988 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 if (tmp == NULL)
1990 PyErr_Clear();
1991 else
1992 Py_DECREF(tmp);
1993 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001994}
1995
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001996
Nick Coghlanf9e227e2014-08-17 14:01:19 +10001997/*[clinic input]
1998repr as builtin_repr
1999
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002000 obj: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002001 /
2002
2003Return the canonical string representation of the object.
2004
2005For many object types, including most builtins, eval(repr(obj)) == obj.
2006[clinic start generated code]*/
2007
Guido van Rossum79f25d91997-04-29 20:08:16 +00002008static PyObject *
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002009builtin_repr(PyModuleDef *module, PyObject *obj)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002010/*[clinic end generated code: output=dc41784fa4341834 input=1c9e6d66d3e3be04]*/
Guido van Rossumc89705d1992-11-26 08:54:07 +00002011{
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002012 return PyObject_Repr(obj);
Guido van Rossumc89705d1992-11-26 08:54:07 +00002013}
2014
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002015
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002016/* AC: cannot convert yet, as needs PEP 457 group support in inspect
2017 * or a semantic change to accept None for "ndigits"
2018 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002019static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002020builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002021{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 PyObject *ndigits = NULL;
2023 static char *kwlist[] = {"number", "ndigits", 0};
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002024 PyObject *number, *round, *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002025
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002026 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
2027 kwlist, &number, &ndigits))
2028 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00002029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002030 if (Py_TYPE(number)->tp_dict == NULL) {
2031 if (PyType_Ready(Py_TYPE(number)) < 0)
2032 return NULL;
2033 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00002034
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002035 round = _PyObject_LookupSpecial(number, &PyId___round__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 if (round == NULL) {
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002037 if (!PyErr_Occurred())
2038 PyErr_Format(PyExc_TypeError,
2039 "type %.100s doesn't define __round__ method",
2040 Py_TYPE(number)->tp_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002041 return NULL;
2042 }
Alex Martelliae211f92007-08-22 23:21:33 +00002043
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002044 if (ndigits == NULL)
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002045 result = PyObject_CallFunctionObjArgs(round, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002046 else
Benjamin Peterson214a7d22013-04-13 17:19:01 -04002047 result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
2048 Py_DECREF(round);
2049 return result;
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00002050}
2051
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002052PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00002053"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002054\n\
2055Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00002056This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00002057same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00002058
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002059
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002060/*AC: we need to keep the kwds dict intact to easily call into the
2061 * list.sort method, which isn't currently supported in AC. So we just use
2062 * the initially generated signature with a custom implementation.
2063 */
2064/* [disabled clinic input]
2065sorted as builtin_sorted
2066
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002067 iterable as seq: object
2068 key as keyfunc: object = None
2069 reverse: object = False
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002070
2071Return a new list containing all items from the iterable in ascending order.
2072
2073A custom key function can be supplied to customise the sort order, and the
2074reverse flag can be set to request the result in descending order.
2075[end disabled clinic input]*/
2076
2077PyDoc_STRVAR(builtin_sorted__doc__,
2078"sorted($module, iterable, key=None, reverse=False)\n"
2079"--\n"
2080"\n"
2081"Return a new list containing all items from the iterable in ascending order.\n"
2082"\n"
2083"A custom key function can be supplied to customise the sort order, and the\n"
2084"reverse flag can be set to request the result in descending order.");
2085
2086#define BUILTIN_SORTED_METHODDEF \
2087 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS|METH_KEYWORDS, builtin_sorted__doc__},
2088
Raymond Hettinger64958a12003-12-17 20:43:33 +00002089static PyObject *
2090builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
2091{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
2093 PyObject *callable;
2094 static char *kwlist[] = {"iterable", "key", "reverse", 0};
2095 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 /* args 1-3 should match listsort in Objects/listobject.c */
2098 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
2099 kwlist, &seq, &keyfunc, &reverse))
2100 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002102 newlist = PySequence_List(seq);
2103 if (newlist == NULL)
2104 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002105
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002106 callable = _PyObject_GetAttrId(newlist, &PyId_sort);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002107 if (callable == NULL) {
2108 Py_DECREF(newlist);
2109 return NULL;
2110 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00002111
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002112 newargs = PyTuple_GetSlice(args, 1, 4);
2113 if (newargs == NULL) {
2114 Py_DECREF(newlist);
2115 Py_DECREF(callable);
2116 return NULL;
2117 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00002118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 v = PyObject_Call(callable, newargs, kwds);
2120 Py_DECREF(newargs);
2121 Py_DECREF(callable);
2122 if (v == NULL) {
2123 Py_DECREF(newlist);
2124 return NULL;
2125 }
2126 Py_DECREF(v);
2127 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00002128}
2129
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002130
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002131/* AC: cannot convert yet, as needs PEP 457 group support in inspect */
Guido van Rossum79f25d91997-04-29 20:08:16 +00002132static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002133builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00002134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 PyObject *v = NULL;
2136 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002138 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
2139 return NULL;
2140 if (v == NULL) {
2141 d = PyEval_GetLocals();
Victor Stinner41bb43a2013-10-29 01:19:37 +01002142 if (d == NULL)
2143 return NULL;
2144 Py_INCREF(d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002145 }
2146 else {
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02002147 d = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002148 if (d == NULL) {
2149 PyErr_SetString(PyExc_TypeError,
2150 "vars() argument must have __dict__ attribute");
2151 return NULL;
2152 }
2153 }
2154 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00002155}
2156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002157PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002158"vars([object]) -> dictionary\n\
2159\n\
2160Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002161With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002162
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002163
2164/*[clinic input]
2165sum as builtin_sum
2166
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002167 iterable: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002168 start: object(c_default="NULL") = 0
2169 /
2170
2171Return the sum of a 'start' value (default: 0) plus an iterable of numbers
2172
2173When the iterable is empty, return the start value.
2174This function is intended specifically for use with numeric values and may
2175reject non-numeric types.
2176[clinic start generated code]*/
2177
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002178static PyObject *
2179builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002180/*[clinic end generated code: output=33655b248b21d581 input=3b5b7a9d7611c73a]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002181{
2182 PyObject *result = start;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002183 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00002184
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002185 iter = PyObject_GetIter(iterable);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 if (iter == NULL)
2187 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00002188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 if (result == NULL) {
2190 result = PyLong_FromLong(0);
2191 if (result == NULL) {
2192 Py_DECREF(iter);
2193 return NULL;
2194 }
2195 } else {
2196 /* reject string values for 'start' parameter */
2197 if (PyUnicode_Check(result)) {
2198 PyErr_SetString(PyExc_TypeError,
2199 "sum() can't sum strings [use ''.join(seq) instead]");
2200 Py_DECREF(iter);
2201 return NULL;
2202 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002203 if (PyBytes_Check(result)) {
2204 PyErr_SetString(PyExc_TypeError,
2205 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05002206 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05002207 return NULL;
2208 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002209 if (PyByteArray_Check(result)) {
2210 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05002211 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002212 Py_DECREF(iter);
2213 return NULL;
2214 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 Py_INCREF(result);
2216 }
Alex Martellia70b1912003-04-22 08:12:33 +00002217
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002218#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002219 /* Fast addition by keeping temporary sums in C instead of new Python objects.
2220 Assumes all inputs are the same type. If the assumption fails, default
2221 to the more general routine.
2222 */
2223 if (PyLong_CheckExact(result)) {
2224 int overflow;
2225 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
2226 /* If this already overflowed, don't even enter the loop. */
2227 if (overflow == 0) {
2228 Py_DECREF(result);
2229 result = NULL;
2230 }
2231 while(result == NULL) {
2232 item = PyIter_Next(iter);
2233 if (item == NULL) {
2234 Py_DECREF(iter);
2235 if (PyErr_Occurred())
2236 return NULL;
2237 return PyLong_FromLong(i_result);
2238 }
2239 if (PyLong_CheckExact(item)) {
2240 long b = PyLong_AsLongAndOverflow(item, &overflow);
2241 long x = i_result + b;
2242 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
2243 i_result = x;
2244 Py_DECREF(item);
2245 continue;
2246 }
2247 }
2248 /* Either overflowed or is not an int. Restore real objects and process normally */
2249 result = PyLong_FromLong(i_result);
Christian Heimes704e2d32013-07-26 22:49:26 +02002250 if (result == NULL) {
2251 Py_DECREF(item);
2252 Py_DECREF(iter);
2253 return NULL;
2254 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 temp = PyNumber_Add(result, item);
2256 Py_DECREF(result);
2257 Py_DECREF(item);
2258 result = temp;
2259 if (result == NULL) {
2260 Py_DECREF(iter);
2261 return NULL;
2262 }
2263 }
2264 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002265
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002266 if (PyFloat_CheckExact(result)) {
2267 double f_result = PyFloat_AS_DOUBLE(result);
2268 Py_DECREF(result);
2269 result = NULL;
2270 while(result == NULL) {
2271 item = PyIter_Next(iter);
2272 if (item == NULL) {
2273 Py_DECREF(iter);
2274 if (PyErr_Occurred())
2275 return NULL;
2276 return PyFloat_FromDouble(f_result);
2277 }
2278 if (PyFloat_CheckExact(item)) {
2279 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2280 f_result += PyFloat_AS_DOUBLE(item);
2281 PyFPE_END_PROTECT(f_result)
2282 Py_DECREF(item);
2283 continue;
2284 }
2285 if (PyLong_CheckExact(item)) {
2286 long value;
2287 int overflow;
2288 value = PyLong_AsLongAndOverflow(item, &overflow);
2289 if (!overflow) {
2290 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2291 f_result += (double)value;
2292 PyFPE_END_PROTECT(f_result)
2293 Py_DECREF(item);
2294 continue;
2295 }
2296 }
2297 result = PyFloat_FromDouble(f_result);
2298 temp = PyNumber_Add(result, item);
2299 Py_DECREF(result);
2300 Py_DECREF(item);
2301 result = temp;
2302 if (result == NULL) {
2303 Py_DECREF(iter);
2304 return NULL;
2305 }
2306 }
2307 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002308#endif
2309
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002310 for(;;) {
2311 item = PyIter_Next(iter);
2312 if (item == NULL) {
2313 /* error, or end-of-sequence */
2314 if (PyErr_Occurred()) {
2315 Py_DECREF(result);
2316 result = NULL;
2317 }
2318 break;
2319 }
2320 /* It's tempting to use PyNumber_InPlaceAdd instead of
2321 PyNumber_Add here, to avoid quadratic running time
2322 when doing 'sum(list_of_lists, [])'. However, this
2323 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002324
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002325 empty = []
2326 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002328 would change the value of empty. */
2329 temp = PyNumber_Add(result, item);
2330 Py_DECREF(result);
2331 Py_DECREF(item);
2332 result = temp;
2333 if (result == NULL)
2334 break;
2335 }
2336 Py_DECREF(iter);
2337 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002338}
2339
Alex Martellia70b1912003-04-22 08:12:33 +00002340
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002341/*[clinic input]
2342isinstance as builtin_isinstance
2343
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002344 obj: object
2345 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002346 /
2347
2348Return whether an object is an instance of a class or of a subclass thereof.
2349
2350A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
2351check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
2352or ...`` etc.
2353[clinic start generated code]*/
2354
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002355static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -04002356builtin_isinstance_impl(PyModuleDef *module, PyObject *obj,
2357 PyObject *class_or_tuple)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002358/*[clinic end generated code: output=f960b7c12dbbeda0 input=ffa743db1daf7549]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002359{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002360 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002361
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002362 retval = PyObject_IsInstance(obj, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 if (retval < 0)
2364 return NULL;
2365 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002366}
2367
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002368
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002369/*[clinic input]
2370issubclass as builtin_issubclass
2371
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002372 cls: object
2373 class_or_tuple: object
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002374 /
2375
2376Return whether 'cls' is a derived from another class or is the same class.
2377
2378A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
2379check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
2380or ...`` etc.
2381[clinic start generated code]*/
2382
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002383static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -04002384builtin_issubclass_impl(PyModuleDef *module, PyObject *cls,
2385 PyObject *class_or_tuple)
Serhiy Storchaka7e810a62015-05-30 11:09:35 +03002386/*[clinic end generated code: output=8b012a151940bbf2 input=af5f35e9ceaddaf6]*/
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002387{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002388 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002389
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002390 retval = PyObject_IsSubclass(cls, class_or_tuple);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002391 if (retval < 0)
2392 return NULL;
2393 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002394}
2395
2396
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002397typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002398 PyObject_HEAD
2399 Py_ssize_t tuplesize;
2400 PyObject *ittuple; /* tuple of iterators */
2401 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002402} zipobject;
2403
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002404static PyObject *
2405zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002407 zipobject *lz;
2408 Py_ssize_t i;
2409 PyObject *ittuple; /* tuple of iterators */
2410 PyObject *result;
2411 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002413 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2414 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002416 /* args must be a tuple */
2417 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002419 /* obtain iterators */
2420 ittuple = PyTuple_New(tuplesize);
2421 if (ittuple == NULL)
2422 return NULL;
2423 for (i=0; i < tuplesize; ++i) {
2424 PyObject *item = PyTuple_GET_ITEM(args, i);
2425 PyObject *it = PyObject_GetIter(item);
2426 if (it == NULL) {
2427 if (PyErr_ExceptionMatches(PyExc_TypeError))
2428 PyErr_Format(PyExc_TypeError,
2429 "zip argument #%zd must support iteration",
2430 i+1);
2431 Py_DECREF(ittuple);
2432 return NULL;
2433 }
2434 PyTuple_SET_ITEM(ittuple, i, it);
2435 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002436
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 /* create a result holder */
2438 result = PyTuple_New(tuplesize);
2439 if (result == NULL) {
2440 Py_DECREF(ittuple);
2441 return NULL;
2442 }
2443 for (i=0 ; i < tuplesize ; i++) {
2444 Py_INCREF(Py_None);
2445 PyTuple_SET_ITEM(result, i, Py_None);
2446 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002447
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002448 /* create zipobject structure */
2449 lz = (zipobject *)type->tp_alloc(type, 0);
2450 if (lz == NULL) {
2451 Py_DECREF(ittuple);
2452 Py_DECREF(result);
2453 return NULL;
2454 }
2455 lz->ittuple = ittuple;
2456 lz->tuplesize = tuplesize;
2457 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002458
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002459 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002460}
2461
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002462static void
2463zip_dealloc(zipobject *lz)
2464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 PyObject_GC_UnTrack(lz);
2466 Py_XDECREF(lz->ittuple);
2467 Py_XDECREF(lz->result);
2468 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002469}
2470
2471static int
2472zip_traverse(zipobject *lz, visitproc visit, void *arg)
2473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 Py_VISIT(lz->ittuple);
2475 Py_VISIT(lz->result);
2476 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002477}
2478
2479static PyObject *
2480zip_next(zipobject *lz)
2481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 Py_ssize_t i;
2483 Py_ssize_t tuplesize = lz->tuplesize;
2484 PyObject *result = lz->result;
2485 PyObject *it;
2486 PyObject *item;
2487 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002489 if (tuplesize == 0)
2490 return NULL;
2491 if (Py_REFCNT(result) == 1) {
2492 Py_INCREF(result);
2493 for (i=0 ; i < tuplesize ; i++) {
2494 it = PyTuple_GET_ITEM(lz->ittuple, i);
2495 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002496 if (item == NULL) {
2497 Py_DECREF(result);
2498 return NULL;
2499 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002500 olditem = PyTuple_GET_ITEM(result, i);
2501 PyTuple_SET_ITEM(result, i, item);
2502 Py_DECREF(olditem);
2503 }
2504 } else {
2505 result = PyTuple_New(tuplesize);
2506 if (result == NULL)
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002507 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002508 for (i=0 ; i < tuplesize ; i++) {
2509 it = PyTuple_GET_ITEM(lz->ittuple, i);
2510 item = (*Py_TYPE(it)->tp_iternext)(it);
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03002511 if (item == NULL) {
2512 Py_DECREF(result);
2513 return NULL;
2514 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002515 PyTuple_SET_ITEM(result, i, item);
2516 }
2517 }
2518 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002519}
Barry Warsawbd599b52000-08-03 15:45:29 +00002520
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002521static PyObject *
2522zip_reduce(zipobject *lz)
2523{
2524 /* Just recreate the zip with the internal iterator tuple */
2525 return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
2526}
2527
2528static PyMethodDef zip_methods[] = {
2529 {"__reduce__", (PyCFunction)zip_reduce, METH_NOARGS, reduce_doc},
2530 {NULL, NULL} /* sentinel */
2531};
2532
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002533PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002534"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002535\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002536Return a zip object whose .__next__() method returns a tuple where\n\
2537the i-th element comes from the i-th iterable argument. The .__next__()\n\
2538method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002539is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002540
2541PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2543 "zip", /* tp_name */
2544 sizeof(zipobject), /* tp_basicsize */
2545 0, /* tp_itemsize */
2546 /* methods */
2547 (destructor)zip_dealloc, /* tp_dealloc */
2548 0, /* tp_print */
2549 0, /* tp_getattr */
2550 0, /* tp_setattr */
2551 0, /* tp_reserved */
2552 0, /* tp_repr */
2553 0, /* tp_as_number */
2554 0, /* tp_as_sequence */
2555 0, /* tp_as_mapping */
2556 0, /* tp_hash */
2557 0, /* tp_call */
2558 0, /* tp_str */
2559 PyObject_GenericGetAttr, /* tp_getattro */
2560 0, /* tp_setattro */
2561 0, /* tp_as_buffer */
2562 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2563 Py_TPFLAGS_BASETYPE, /* tp_flags */
2564 zip_doc, /* tp_doc */
2565 (traverseproc)zip_traverse, /* tp_traverse */
2566 0, /* tp_clear */
2567 0, /* tp_richcompare */
2568 0, /* tp_weaklistoffset */
2569 PyObject_SelfIter, /* tp_iter */
2570 (iternextfunc)zip_next, /* tp_iternext */
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00002571 zip_methods, /* tp_methods */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002572 0, /* tp_members */
2573 0, /* tp_getset */
2574 0, /* tp_base */
2575 0, /* tp_dict */
2576 0, /* tp_descr_get */
2577 0, /* tp_descr_set */
2578 0, /* tp_dictoffset */
2579 0, /* tp_init */
2580 PyType_GenericAlloc, /* tp_alloc */
2581 zip_new, /* tp_new */
2582 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002583};
Barry Warsawbd599b52000-08-03 15:45:29 +00002584
2585
Guido van Rossum79f25d91997-04-29 20:08:16 +00002586static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002587 {"__build_class__", (PyCFunction)builtin___build_class__,
2588 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2589 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002590 BUILTIN_ABS_METHODDEF
2591 BUILTIN_ALL_METHODDEF
2592 BUILTIN_ANY_METHODDEF
2593 BUILTIN_ASCII_METHODDEF
2594 BUILTIN_BIN_METHODDEF
2595 BUILTIN_CALLABLE_METHODDEF
2596 BUILTIN_CHR_METHODDEF
2597 BUILTIN_COMPILE_METHODDEF
2598 BUILTIN_DELATTR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002599 {"dir", builtin_dir, METH_VARARGS, dir_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002600 BUILTIN_DIVMOD_METHODDEF
2601 BUILTIN_EVAL_METHODDEF
2602 BUILTIN_EXEC_METHODDEF
2603 BUILTIN_FORMAT_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002605 BUILTIN_GLOBALS_METHODDEF
2606 BUILTIN_HASATTR_METHODDEF
2607 BUILTIN_HASH_METHODDEF
2608 BUILTIN_HEX_METHODDEF
2609 BUILTIN_ID_METHODDEF
2610 BUILTIN_INPUT_METHODDEF
2611 BUILTIN_ISINSTANCE_METHODDEF
2612 BUILTIN_ISSUBCLASS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002613 {"iter", builtin_iter, METH_VARARGS, iter_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002614 BUILTIN_LEN_METHODDEF
2615 BUILTIN_LOCALS_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002616 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2617 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2618 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002619 BUILTIN_OCT_METHODDEF
2620 BUILTIN_ORD_METHODDEF
2621 BUILTIN_POW_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002622 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002623 BUILTIN_REPR_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002624 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Nick Coghlanf9e227e2014-08-17 14:01:19 +10002625 BUILTIN_SETATTR_METHODDEF
2626 BUILTIN_SORTED_METHODDEF
2627 BUILTIN_SUM_METHODDEF
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002628 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2629 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002630};
2631
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002632PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002633"Built-in functions, exceptions, and other objects.\n\
2634\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002635Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002636
Martin v. Löwis1a214512008-06-11 05:26:20 +00002637static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002638 PyModuleDef_HEAD_INIT,
2639 "builtins",
2640 builtin_doc,
2641 -1, /* multiple "initialization" just copies the module dict. */
2642 builtin_methods,
2643 NULL,
2644 NULL,
2645 NULL,
2646 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002647};
2648
2649
Guido van Rossum25ce5661997-08-02 03:10:38 +00002650PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002651_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002652{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002653 PyObject *mod, *dict, *debug;
Benjamin Peterson42124a72012-10-30 23:41:54 -04002654
2655 if (PyType_Ready(&PyFilter_Type) < 0 ||
2656 PyType_Ready(&PyMap_Type) < 0 ||
2657 PyType_Ready(&PyZip_Type) < 0)
2658 return NULL;
2659
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002660 mod = PyModule_Create(&builtinsmodule);
2661 if (mod == NULL)
2662 return NULL;
2663 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002664
Tim Peters7571a0f2003-03-23 17:52:28 +00002665#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002666 /* "builtins" exposes a number of statically allocated objects
2667 * that, before this code was added in 2.3, never showed up in
2668 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2669 * result, programs leaking references to None and False (etc)
2670 * couldn't be diagnosed by examining sys.getobjects(0).
2671 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002672#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2673#else
2674#define ADD_TO_ALL(OBJECT) (void)0
2675#endif
2676
Tim Peters4b7625e2001-09-13 21:37:17 +00002677#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002678 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2679 return NULL; \
2680 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002682 SETBUILTIN("None", Py_None);
2683 SETBUILTIN("Ellipsis", Py_Ellipsis);
2684 SETBUILTIN("NotImplemented", Py_NotImplemented);
2685 SETBUILTIN("False", Py_False);
2686 SETBUILTIN("True", Py_True);
2687 SETBUILTIN("bool", &PyBool_Type);
2688 SETBUILTIN("memoryview", &PyMemoryView_Type);
2689 SETBUILTIN("bytearray", &PyByteArray_Type);
2690 SETBUILTIN("bytes", &PyBytes_Type);
2691 SETBUILTIN("classmethod", &PyClassMethod_Type);
2692 SETBUILTIN("complex", &PyComplex_Type);
2693 SETBUILTIN("dict", &PyDict_Type);
2694 SETBUILTIN("enumerate", &PyEnum_Type);
2695 SETBUILTIN("filter", &PyFilter_Type);
2696 SETBUILTIN("float", &PyFloat_Type);
2697 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2698 SETBUILTIN("property", &PyProperty_Type);
2699 SETBUILTIN("int", &PyLong_Type);
2700 SETBUILTIN("list", &PyList_Type);
2701 SETBUILTIN("map", &PyMap_Type);
2702 SETBUILTIN("object", &PyBaseObject_Type);
2703 SETBUILTIN("range", &PyRange_Type);
2704 SETBUILTIN("reversed", &PyReversed_Type);
2705 SETBUILTIN("set", &PySet_Type);
2706 SETBUILTIN("slice", &PySlice_Type);
2707 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2708 SETBUILTIN("str", &PyUnicode_Type);
2709 SETBUILTIN("super", &PySuper_Type);
2710 SETBUILTIN("tuple", &PyTuple_Type);
2711 SETBUILTIN("type", &PyType_Type);
2712 SETBUILTIN("zip", &PyZip_Type);
2713 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2714 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2715 Py_XDECREF(debug);
2716 return NULL;
2717 }
2718 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002720 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002721#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002722#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002723}