blob: b85e37bc2954a525f188ecb9bc8040798a850c84 [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
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Victor Stinnerb744ba12010-05-15 12:27:16 +000011#ifdef HAVE_LANGINFO_H
12#include <langinfo.h> /* CODESET */
13#endif
14
Mark Hammond26cffde42001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000017
18 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
19 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000020*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000021#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000022const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000023int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000024#elif defined(__APPLE__)
25const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerb744ba12010-05-15 12:27:16 +000027#elif defined(HAVE_LANGINFO_H) && defined(CODESET)
28const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +000030#else
31const char *Py_FileSystemDefaultEncoding = "utf-8";
32int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000033#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000034
Guido van Rossum79f25d91997-04-29 20:08:16 +000035static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000036builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
37{
Nick Coghlande31b192011-10-23 22:04:16 +100038 PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *cell;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000039 PyObject *cls = NULL;
Florent Xicluna4d46c2a2011-10-28 15:00:50 +020040 Py_ssize_t nargs;
Nick Coghlande31b192011-10-23 22:04:16 +100041 int isclass;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000042
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000043 assert(args != NULL);
44 if (!PyTuple_Check(args)) {
45 PyErr_SetString(PyExc_TypeError,
46 "__build_class__: args is not a tuple");
47 return NULL;
48 }
49 nargs = PyTuple_GET_SIZE(args);
50 if (nargs < 2) {
51 PyErr_SetString(PyExc_TypeError,
52 "__build_class__: not enough arguments");
53 return NULL;
54 }
55 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
56 name = PyTuple_GET_ITEM(args, 1);
57 if (!PyUnicode_Check(name)) {
58 PyErr_SetString(PyExc_TypeError,
59 "__build_class__: name is not a string");
60 return NULL;
61 }
62 bases = PyTuple_GetSlice(args, 2, nargs);
63 if (bases == NULL)
64 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000066 if (kwds == NULL) {
67 meta = NULL;
68 mkw = NULL;
69 }
70 else {
71 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
72 if (mkw == NULL) {
73 Py_DECREF(bases);
74 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000075 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000076 meta = PyDict_GetItemString(mkw, "metaclass");
77 if (meta != NULL) {
78 Py_INCREF(meta);
79 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
80 Py_DECREF(meta);
81 Py_DECREF(mkw);
82 Py_DECREF(bases);
83 return NULL;
84 }
Nick Coghlande31b192011-10-23 22:04:16 +100085 /* metaclass is explicitly given, check if it's indeed a class */
86 isclass = PyType_Check(meta);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000087 }
88 }
89 if (meta == NULL) {
Nick Coghlande31b192011-10-23 22:04:16 +100090 /* if there are no bases, use type: */
91 if (PyTuple_GET_SIZE(bases) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000092 meta = (PyObject *) (&PyType_Type);
Nick Coghlande31b192011-10-23 22:04:16 +100093 }
94 /* else get the type of the first base */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000095 else {
96 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
97 meta = (PyObject *) (base0->ob_type);
98 }
99 Py_INCREF(meta);
Nick Coghlande31b192011-10-23 22:04:16 +1000100 isclass = 1; /* meta is really a class */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 }
Nick Coghlande31b192011-10-23 22:04:16 +1000102 if (isclass) {
103 /* meta is really a class, so check for a more derived
104 metaclass, or possible metaclass conflicts: */
105 winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
106 bases);
107 if (winner == NULL) {
108 Py_DECREF(meta);
109 Py_XDECREF(mkw);
110 Py_DECREF(bases);
111 return NULL;
112 }
113 if (winner != meta) {
114 Py_DECREF(meta);
115 meta = winner;
116 Py_INCREF(meta);
117 }
118 }
119 /* else: meta is not a class, so we cannot do the metaclass
120 calculation, so we will use the explicitly given object as it is */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000121 prep = PyObject_GetAttrString(meta, "__prepare__");
122 if (prep == NULL) {
123 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
124 PyErr_Clear();
125 ns = PyDict_New();
126 }
127 else {
128 Py_DECREF(meta);
129 Py_XDECREF(mkw);
130 Py_DECREF(bases);
131 return NULL;
132 }
133 }
134 else {
135 PyObject *pargs = PyTuple_Pack(2, name, bases);
136 if (pargs == NULL) {
137 Py_DECREF(prep);
138 Py_DECREF(meta);
139 Py_XDECREF(mkw);
140 Py_DECREF(bases);
141 return NULL;
142 }
143 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
144 Py_DECREF(pargs);
145 Py_DECREF(prep);
146 }
147 if (ns == NULL) {
148 Py_DECREF(meta);
149 Py_XDECREF(mkw);
150 Py_DECREF(bases);
151 return NULL;
152 }
153 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
154 if (cell != NULL) {
155 PyObject *margs;
156 margs = PyTuple_Pack(3, name, bases, ns);
157 if (margs != NULL) {
158 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
159 Py_DECREF(margs);
160 }
Benjamin Peterson8e8fbea2012-06-01 23:57:36 -0700161 if (cls != NULL && PyCell_Check(cell))
162 PyCell_Set(cell, cls);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000163 Py_DECREF(cell);
164 }
165 Py_DECREF(ns);
166 Py_DECREF(meta);
167 Py_XDECREF(mkw);
168 Py_DECREF(bases);
169 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000170}
171
172PyDoc_STRVAR(build_class_doc,
173"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
174\n\
175Internal helper function used by the class statement.");
176
177static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000178builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
181 "level", 0};
182 char *name;
183 PyObject *globals = NULL;
184 PyObject *locals = NULL;
185 PyObject *fromlist = NULL;
186 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000187
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000188 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
189 kwlist, &name, &globals, &locals, &fromlist, &level))
190 return NULL;
191 return PyImport_ImportModuleLevel(name, globals, locals,
192 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000193}
194
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000195PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000196"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000197\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000198Import a module. Because this function is meant for use by the Python\n\
199interpreter and not for general use it is better to use\n\
200importlib.import_module() to programmatically import a module.\n\
201\n\
202The globals argument is only used to determine the context;\n\
203they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000204should be a list of names to emulate ``from name import ...'', or an\n\
205empty list to emulate ``import name''.\n\
206When importing a module from a package, note that __import__('A.B', ...)\n\
207returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000208fromlist is not empty. Level is used to determine whether to perform \n\
209absolute or relative imports. -1 is the original strategy of attempting\n\
210both absolute and relative imports, 0 is absolute, a positive number\n\
211is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000212
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000213
Guido van Rossum79f25d91997-04-29 20:08:16 +0000214static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000215builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000216{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000217 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000218}
219
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000220PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000221"abs(number) -> number\n\
222\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000223Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000224
Raymond Hettinger96229b12005-03-11 06:49:40 +0000225static PyObject *
226builtin_all(PyObject *self, PyObject *v)
227{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000228 PyObject *it, *item;
229 PyObject *(*iternext)(PyObject *);
230 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 it = PyObject_GetIter(v);
233 if (it == NULL)
234 return NULL;
235 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000237 for (;;) {
238 item = iternext(it);
239 if (item == NULL)
240 break;
241 cmp = PyObject_IsTrue(item);
242 Py_DECREF(item);
243 if (cmp < 0) {
244 Py_DECREF(it);
245 return NULL;
246 }
247 if (cmp == 0) {
248 Py_DECREF(it);
249 Py_RETURN_FALSE;
250 }
251 }
252 Py_DECREF(it);
253 if (PyErr_Occurred()) {
254 if (PyErr_ExceptionMatches(PyExc_StopIteration))
255 PyErr_Clear();
256 else
257 return NULL;
258 }
259 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000260}
261
262PyDoc_STRVAR(all_doc,
263"all(iterable) -> bool\n\
264\n\
265Return True if bool(x) is True for all values x in the iterable.");
266
267static PyObject *
268builtin_any(PyObject *self, PyObject *v)
269{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000270 PyObject *it, *item;
271 PyObject *(*iternext)(PyObject *);
272 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000274 it = PyObject_GetIter(v);
275 if (it == NULL)
276 return NULL;
277 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000278
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 for (;;) {
280 item = iternext(it);
281 if (item == NULL)
282 break;
283 cmp = PyObject_IsTrue(item);
284 Py_DECREF(item);
285 if (cmp < 0) {
286 Py_DECREF(it);
287 return NULL;
288 }
289 if (cmp == 1) {
290 Py_DECREF(it);
291 Py_RETURN_TRUE;
292 }
293 }
294 Py_DECREF(it);
295 if (PyErr_Occurred()) {
296 if (PyErr_ExceptionMatches(PyExc_StopIteration))
297 PyErr_Clear();
298 else
299 return NULL;
300 }
301 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000302}
303
304PyDoc_STRVAR(any_doc,
305"any(iterable) -> bool\n\
306\n\
307Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000308
Georg Brandl559e5d72008-06-11 18:37:52 +0000309static PyObject *
310builtin_ascii(PyObject *self, PyObject *v)
311{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000312 return PyObject_ASCII(v);
Georg Brandl559e5d72008-06-11 18:37:52 +0000313}
314
315PyDoc_STRVAR(ascii_doc,
316"ascii(object) -> string\n\
317\n\
318As repr(), return a string containing a printable representation of an\n\
319object, but escape the non-ASCII characters in the string returned by\n\
320repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
321to that returned by repr() in Python 2.");
322
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000323
Guido van Rossum79f25d91997-04-29 20:08:16 +0000324static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000325builtin_bin(PyObject *self, PyObject *v)
326{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000327 return PyNumber_ToBase(v, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000328}
329
330PyDoc_STRVAR(bin_doc,
331"bin(number) -> string\n\
332\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -0400333Return the binary representation of an integer.");
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000334
335
Antoine Pitroue71362d2010-11-27 22:00:11 +0000336static PyObject *
337builtin_callable(PyObject *self, PyObject *v)
338{
339 return PyBool_FromLong((long)PyCallable_Check(v));
340}
341
342PyDoc_STRVAR(callable_doc,
343"callable(object) -> bool\n\
344\n\
345Return whether the object is callable (i.e., some kind of function).\n\
346Note that classes are callable, as are instances of classes with a\n\
347__call__() method.");
348
349
Raymond Hettinger17301e92008-03-13 00:19:26 +0000350typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000351 PyObject_HEAD
352 PyObject *func;
353 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000354} filterobject;
355
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000356static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000357filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000358{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000359 PyObject *func, *seq;
360 PyObject *it;
361 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000362
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
364 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000365
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
367 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 /* Get iterator. */
370 it = PyObject_GetIter(seq);
371 if (it == NULL)
372 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000374 /* create filterobject structure */
375 lz = (filterobject *)type->tp_alloc(type, 0);
376 if (lz == NULL) {
377 Py_DECREF(it);
378 return NULL;
379 }
380 Py_INCREF(func);
381 lz->func = func;
382 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000385}
386
387static void
388filter_dealloc(filterobject *lz)
389{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000390 PyObject_GC_UnTrack(lz);
391 Py_XDECREF(lz->func);
392 Py_XDECREF(lz->it);
393 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000394}
395
396static int
397filter_traverse(filterobject *lz, visitproc visit, void *arg)
398{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 Py_VISIT(lz->it);
400 Py_VISIT(lz->func);
401 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000402}
403
404static PyObject *
405filter_next(filterobject *lz)
406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 PyObject *item;
408 PyObject *it = lz->it;
409 long ok;
410 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000411
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000412 iternext = *Py_TYPE(it)->tp_iternext;
413 for (;;) {
414 item = iternext(it);
415 if (item == NULL)
416 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000417
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
419 ok = PyObject_IsTrue(item);
420 } else {
421 PyObject *good;
422 good = PyObject_CallFunctionObjArgs(lz->func,
423 item, NULL);
424 if (good == NULL) {
425 Py_DECREF(item);
426 return NULL;
427 }
428 ok = PyObject_IsTrue(good);
429 Py_DECREF(good);
430 }
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200431 if (ok > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 return item;
433 Py_DECREF(item);
Antoine Pitrou6f430e42012-08-15 23:18:25 +0200434 if (ok < 0)
435 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000437}
438
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000439PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000440"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000441\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000442Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000443is true. If function is None, return the items that are true.");
444
445PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000446 PyVarObject_HEAD_INIT(&PyType_Type, 0)
447 "filter", /* tp_name */
448 sizeof(filterobject), /* tp_basicsize */
449 0, /* tp_itemsize */
450 /* methods */
451 (destructor)filter_dealloc, /* tp_dealloc */
452 0, /* tp_print */
453 0, /* tp_getattr */
454 0, /* tp_setattr */
455 0, /* tp_reserved */
456 0, /* tp_repr */
457 0, /* tp_as_number */
458 0, /* tp_as_sequence */
459 0, /* tp_as_mapping */
460 0, /* tp_hash */
461 0, /* tp_call */
462 0, /* tp_str */
463 PyObject_GenericGetAttr, /* tp_getattro */
464 0, /* tp_setattro */
465 0, /* tp_as_buffer */
466 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
467 Py_TPFLAGS_BASETYPE, /* tp_flags */
468 filter_doc, /* tp_doc */
469 (traverseproc)filter_traverse, /* tp_traverse */
470 0, /* tp_clear */
471 0, /* tp_richcompare */
472 0, /* tp_weaklistoffset */
473 PyObject_SelfIter, /* tp_iter */
474 (iternextfunc)filter_next, /* tp_iternext */
475 0, /* tp_methods */
476 0, /* tp_members */
477 0, /* tp_getset */
478 0, /* tp_base */
479 0, /* tp_dict */
480 0, /* tp_descr_get */
481 0, /* tp_descr_set */
482 0, /* tp_dictoffset */
483 0, /* tp_init */
484 PyType_GenericAlloc, /* tp_alloc */
485 filter_new, /* tp_new */
486 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000487};
488
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000489
Eric Smith8c663262007-08-25 02:26:07 +0000490static PyObject *
491builtin_format(PyObject *self, PyObject *args)
492{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000493 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000494 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000495
Eric Smith8fd3eba2008-02-17 19:48:00 +0000496 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Benjamin Petersona12d5c62012-01-03 16:47:22 -0600497 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000498
Eric Smith8fd3eba2008-02-17 19:48:00 +0000499 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000500}
501
Eric Smith8c663262007-08-25 02:26:07 +0000502PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000503"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000504\n\
Eric Smith81936692007-08-31 01:14:01 +0000505Returns value.__format__(format_spec)\n\
506format_spec defaults to \"\"");
507
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000508static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000509builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000510{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 if (!PyArg_ParseTuple(args, "i:chr", &x))
514 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000517}
518
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000519PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000520"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000521\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000522Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000523)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000524#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000525PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000526"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000527)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000528#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000529;
Guido van Rossum09095f32000-03-10 23:00:52 +0000530
531
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000532static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000533source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000534{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000535 char *str;
536 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 if (PyUnicode_Check(cmd)) {
539 cf->cf_flags |= PyCF_IGNORE_COOKIE;
540 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
541 if (cmd == NULL)
542 return NULL;
543 }
544 else if (!PyObject_CheckReadBuffer(cmd)) {
545 PyErr_Format(PyExc_TypeError,
546 "%s() arg 1 must be a %s object",
547 funcname, what);
548 return NULL;
549 }
550 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
551 return NULL;
552 }
553 if (strlen(str) != size) {
554 PyErr_SetString(PyExc_TypeError,
555 "source code string cannot contain null bytes");
556 return NULL;
557 }
558 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000559}
560
Guido van Rossum79f25d91997-04-29 20:08:16 +0000561static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000562builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000563{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 char *str;
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000565 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000566 char *filename;
567 char *startstr;
568 int mode = -1;
569 int dont_inherit = 0;
570 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000571 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 int is_ast;
573 PyCompilerFlags cf;
574 PyObject *cmd;
575 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000576 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000578 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000579
Georg Brandl8334fd92010-12-04 10:26:46 +0000580 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000581 &cmd,
582 PyUnicode_FSConverter, &filename_obj,
583 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000584 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000585 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000586
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000587 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000589
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000590 if (supplied_flags &
591 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
592 {
593 PyErr_SetString(PyExc_ValueError,
594 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000595 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 }
597 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000598
Georg Brandl8334fd92010-12-04 10:26:46 +0000599 if (optimize < -1 || optimize > 2) {
600 PyErr_SetString(PyExc_ValueError,
601 "compile(): invalid optimize value");
602 goto error;
603 }
604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 if (!dont_inherit) {
606 PyEval_MergeCompilerFlags(&cf);
607 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000608
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000609 if (strcmp(startstr, "exec") == 0)
610 mode = 0;
611 else if (strcmp(startstr, "eval") == 0)
612 mode = 1;
613 else if (strcmp(startstr, "single") == 0)
614 mode = 2;
615 else {
616 PyErr_SetString(PyExc_ValueError,
617 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000618 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 is_ast = PyAST_Check(cmd);
622 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000623 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000625 if (supplied_flags & PyCF_ONLY_AST) {
626 Py_INCREF(cmd);
627 result = cmd;
628 }
629 else {
630 PyArena *arena;
631 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000632
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000633 arena = PyArena_New();
Stefan Krah07795df2012-08-20 17:19:50 +0200634 if (arena == NULL)
635 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 mod = PyAST_obj2mod(cmd, arena, mode);
637 if (mod == NULL) {
638 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000639 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000641 result = (PyObject*)PyAST_CompileEx(mod, filename,
642 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 PyArena_Free(arena);
644 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000645 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000646 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000648 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
649 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000650 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000651
Georg Brandl8334fd92010-12-04 10:26:46 +0000652 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000653 goto finally;
654
655error:
656 result = NULL;
657finally:
658 Py_DECREF(filename_obj);
659 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000660}
661
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000662PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000663"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000664\n\
665Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000666into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000667The filename will be used for run-time error messages.\n\
668The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000669single (interactive) statement, or 'eval' to compile an expression.\n\
670The flags argument, if present, controls which future statements influence\n\
671the compilation of the code.\n\
672The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
673the effects of any future statements in effect in the code calling\n\
674compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000675in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000676
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000678builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000679{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000680 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000682 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
683 return NULL;
684 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000685}
686
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000687PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000688"dir([object]) -> list of strings\n"
689"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000690"If called without an argument, return the names in the current scope.\n"
691"Else, return an alphabetized list of names comprising (some of) the attributes\n"
692"of the given object, and of attributes reachable from it.\n"
693"If the object supplies a method named __dir__, it will be used; otherwise\n"
694"the default dir() logic is used and returns:\n"
695" for a module object: the module's attributes.\n"
696" for a class object: its attributes, and recursively the attributes\n"
697" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000698" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000699" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000700
Guido van Rossum79f25d91997-04-29 20:08:16 +0000701static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000702builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000703{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
707 return NULL;
708 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000709}
710
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000711PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000712"divmod(x, y) -> (div, mod)\n\
713\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000714Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000715
716
Guido van Rossum79f25d91997-04-29 20:08:16 +0000717static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000718builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000719{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 PyObject *cmd, *result, *tmp = NULL;
721 PyObject *globals = Py_None, *locals = Py_None;
722 char *str;
723 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000724
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
726 return NULL;
727 if (locals != Py_None && !PyMapping_Check(locals)) {
728 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
729 return NULL;
730 }
731 if (globals != Py_None && !PyDict_Check(globals)) {
732 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
733 "globals must be a real dict; try eval(expr, {}, mapping)"
734 : "globals must be a dict");
735 return NULL;
736 }
737 if (globals == Py_None) {
738 globals = PyEval_GetGlobals();
739 if (locals == Py_None)
740 locals = PyEval_GetLocals();
741 }
742 else if (locals == Py_None)
743 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000744
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000745 if (globals == NULL || locals == NULL) {
746 PyErr_SetString(PyExc_TypeError,
747 "eval must be given globals and locals "
748 "when called without a frame");
749 return NULL;
750 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000751
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000752 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
753 if (PyDict_SetItemString(globals, "__builtins__",
754 PyEval_GetBuiltins()) != 0)
755 return NULL;
756 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 if (PyCode_Check(cmd)) {
759 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
760 PyErr_SetString(PyExc_TypeError,
761 "code object passed to eval() may not contain free variables");
762 return NULL;
763 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000764 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000766
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000767 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
768 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
769 if (str == NULL)
770 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000772 while (*str == ' ' || *str == '\t')
773 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000774
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 (void)PyEval_MergeCompilerFlags(&cf);
776 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
777 Py_XDECREF(tmp);
778 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000779}
780
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000781PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000782"eval(source[, globals[, locals]]) -> value\n\
783\n\
784Evaluate the source in the context of globals and locals.\n\
785The source may be a string representing a Python expression\n\
786or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000787The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000788defaulting to the current globals and locals.\n\
789If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000790
Georg Brandl7cae87c2006-09-06 06:51:57 +0000791static PyObject *
792builtin_exec(PyObject *self, PyObject *args)
793{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 PyObject *v;
795 PyObject *prog, *globals = Py_None, *locals = Py_None;
796 int plain = 0;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000797
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000798 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
799 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000800
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000801 if (globals == Py_None) {
802 globals = PyEval_GetGlobals();
803 if (locals == Py_None) {
804 locals = PyEval_GetLocals();
805 plain = 1;
806 }
807 if (!globals || !locals) {
808 PyErr_SetString(PyExc_SystemError,
809 "globals and locals cannot be NULL");
810 return NULL;
811 }
812 }
813 else if (locals == Py_None)
814 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 if (!PyDict_Check(globals)) {
817 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
818 globals->ob_type->tp_name);
819 return NULL;
820 }
821 if (!PyMapping_Check(locals)) {
822 PyErr_Format(PyExc_TypeError,
823 "arg 3 must be a mapping or None, not %.100s",
824 locals->ob_type->tp_name);
825 return NULL;
826 }
827 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
828 if (PyDict_SetItemString(globals, "__builtins__",
829 PyEval_GetBuiltins()) != 0)
830 return NULL;
831 }
832
833 if (PyCode_Check(prog)) {
834 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
835 PyErr_SetString(PyExc_TypeError,
836 "code object passed to exec() may not "
837 "contain free variables");
838 return NULL;
839 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000840 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 }
842 else {
843 char *str;
844 PyCompilerFlags cf;
845 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
846 str = source_as_string(prog, "exec",
847 "string, bytes or code", &cf);
848 if (str == NULL)
849 return NULL;
850 if (PyEval_MergeCompilerFlags(&cf))
851 v = PyRun_StringFlags(str, Py_file_input, globals,
852 locals, &cf);
853 else
854 v = PyRun_String(str, Py_file_input, globals, locals);
855 }
856 if (v == NULL)
857 return NULL;
858 Py_DECREF(v);
859 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000860}
861
862PyDoc_STRVAR(exec_doc,
863"exec(object[, globals[, locals]])\n\
864\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000865Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000866object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000867The globals and locals are dictionaries, defaulting to the current\n\
868globals and locals. If only globals is given, locals defaults to it.");
869
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000870
Guido van Rossum79f25d91997-04-29 20:08:16 +0000871static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000872builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000873{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000874 PyObject *v, *result, *dflt = NULL;
875 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
878 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000880 if (!PyUnicode_Check(name)) {
881 PyErr_SetString(PyExc_TypeError,
882 "getattr(): attribute name must be string");
883 return NULL;
884 }
885 result = PyObject_GetAttr(v, name);
886 if (result == NULL && dflt != NULL &&
887 PyErr_ExceptionMatches(PyExc_AttributeError))
888 {
889 PyErr_Clear();
890 Py_INCREF(dflt);
891 result = dflt;
892 }
893 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000894}
895
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000896PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000897"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000899Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
900When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000901exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000902
903
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000905builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000906{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000907 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000908
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000909 d = PyEval_GetGlobals();
910 Py_XINCREF(d);
911 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000912}
913
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000914PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000915"globals() -> dictionary\n\
916\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000917Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000918
919
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000921builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000922{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 PyObject *v;
924 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
927 return NULL;
928 if (!PyUnicode_Check(name)) {
929 PyErr_SetString(PyExc_TypeError,
930 "hasattr(): attribute name must be string");
931 return NULL;
932 }
933 v = PyObject_GetAttr(v, name);
934 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000935 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000937 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000938 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000939 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 }
941 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000942 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000943}
944
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000945PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000946"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000947\n\
948Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000949(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000950
951
Guido van Rossum79f25d91997-04-29 20:08:16 +0000952static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000953builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000954{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000956}
957
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000959"id(object) -> integer\n\
960\n\
961Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000962simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000963
964
Raymond Hettingera6c60372008-03-13 01:26:19 +0000965/* map object ************************************************************/
966
967typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 PyObject_HEAD
969 PyObject *iters;
970 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000971} mapobject;
972
Guido van Rossum79f25d91997-04-29 20:08:16 +0000973static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000974map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000975{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 PyObject *it, *iters, *func;
977 mapobject *lz;
978 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000979
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
981 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000983 numargs = PyTuple_Size(args);
984 if (numargs < 2) {
985 PyErr_SetString(PyExc_TypeError,
986 "map() must have at least two arguments.");
987 return NULL;
988 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 iters = PyTuple_New(numargs-1);
991 if (iters == NULL)
992 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 for (i=1 ; i<numargs ; i++) {
995 /* Get iterator. */
996 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
997 if (it == NULL) {
998 Py_DECREF(iters);
999 return NULL;
1000 }
1001 PyTuple_SET_ITEM(iters, i-1, it);
1002 }
Raymond Hettingera6c60372008-03-13 01:26:19 +00001003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 /* create mapobject structure */
1005 lz = (mapobject *)type->tp_alloc(type, 0);
1006 if (lz == NULL) {
1007 Py_DECREF(iters);
1008 return NULL;
1009 }
1010 lz->iters = iters;
1011 func = PyTuple_GET_ITEM(args, 0);
1012 Py_INCREF(func);
1013 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001016}
1017
1018static void
1019map_dealloc(mapobject *lz)
1020{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001021 PyObject_GC_UnTrack(lz);
1022 Py_XDECREF(lz->iters);
1023 Py_XDECREF(lz->func);
1024 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001025}
1026
1027static int
1028map_traverse(mapobject *lz, visitproc visit, void *arg)
1029{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 Py_VISIT(lz->iters);
1031 Py_VISIT(lz->func);
1032 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001033}
1034
1035static PyObject *
1036map_next(mapobject *lz)
1037{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 PyObject *val;
1039 PyObject *argtuple;
1040 PyObject *result;
1041 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001042
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 numargs = PyTuple_Size(lz->iters);
1044 argtuple = PyTuple_New(numargs);
1045 if (argtuple == NULL)
1046 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001047
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001048 for (i=0 ; i<numargs ; i++) {
1049 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1050 if (val == NULL) {
1051 Py_DECREF(argtuple);
1052 return NULL;
1053 }
1054 PyTuple_SET_ITEM(argtuple, i, val);
1055 }
1056 result = PyObject_Call(lz->func, argtuple, NULL);
1057 Py_DECREF(argtuple);
1058 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001059}
1060
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001061PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001062"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001063\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001064Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001066
Raymond Hettingera6c60372008-03-13 01:26:19 +00001067PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1069 "map", /* tp_name */
1070 sizeof(mapobject), /* tp_basicsize */
1071 0, /* tp_itemsize */
1072 /* methods */
1073 (destructor)map_dealloc, /* tp_dealloc */
1074 0, /* tp_print */
1075 0, /* tp_getattr */
1076 0, /* tp_setattr */
1077 0, /* tp_reserved */
1078 0, /* tp_repr */
1079 0, /* tp_as_number */
1080 0, /* tp_as_sequence */
1081 0, /* tp_as_mapping */
1082 0, /* tp_hash */
1083 0, /* tp_call */
1084 0, /* tp_str */
1085 PyObject_GenericGetAttr, /* tp_getattro */
1086 0, /* tp_setattro */
1087 0, /* tp_as_buffer */
1088 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1089 Py_TPFLAGS_BASETYPE, /* tp_flags */
1090 map_doc, /* tp_doc */
1091 (traverseproc)map_traverse, /* tp_traverse */
1092 0, /* tp_clear */
1093 0, /* tp_richcompare */
1094 0, /* tp_weaklistoffset */
1095 PyObject_SelfIter, /* tp_iter */
1096 (iternextfunc)map_next, /* tp_iternext */
1097 0, /* tp_methods */
1098 0, /* tp_members */
1099 0, /* tp_getset */
1100 0, /* tp_base */
1101 0, /* tp_dict */
1102 0, /* tp_descr_get */
1103 0, /* tp_descr_set */
1104 0, /* tp_dictoffset */
1105 0, /* tp_init */
1106 PyType_GenericAlloc, /* tp_alloc */
1107 map_new, /* tp_new */
1108 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001109};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001110
Guido van Rossum79f25d91997-04-29 20:08:16 +00001111static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001112builtin_next(PyObject *self, PyObject *args)
1113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 PyObject *it, *res;
1115 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001116
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1118 return NULL;
1119 if (!PyIter_Check(it)) {
1120 PyErr_Format(PyExc_TypeError,
1121 "%.200s object is not an iterator",
1122 it->ob_type->tp_name);
1123 return NULL;
1124 }
1125
1126 res = (*it->ob_type->tp_iternext)(it);
1127 if (res != NULL) {
1128 return res;
1129 } else if (def != NULL) {
1130 if (PyErr_Occurred()) {
1131 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1132 return NULL;
1133 PyErr_Clear();
1134 }
1135 Py_INCREF(def);
1136 return def;
1137 } else if (PyErr_Occurred()) {
1138 return NULL;
1139 } else {
1140 PyErr_SetNone(PyExc_StopIteration);
1141 return NULL;
1142 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001143}
1144
1145PyDoc_STRVAR(next_doc,
1146"next(iterator[, default])\n\
1147\n\
1148Return the next item from the iterator. If default is given and the iterator\n\
1149is exhausted, it is returned instead of raising StopIteration.");
1150
1151
1152static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001153builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001154{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 PyObject *v;
1156 PyObject *name;
1157 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1160 return NULL;
1161 if (PyObject_SetAttr(v, name, value) != 0)
1162 return NULL;
1163 Py_INCREF(Py_None);
1164 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001165}
1166
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168"setattr(object, name, value)\n\
1169\n\
1170Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001171``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001172
1173
Guido van Rossum79f25d91997-04-29 20:08:16 +00001174static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001175builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001176{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 PyObject *v;
1178 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001179
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1181 return NULL;
1182 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1183 return NULL;
1184 Py_INCREF(Py_None);
1185 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001186}
1187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001188PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001189"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001190\n\
1191Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193
1194
Guido van Rossum79f25d91997-04-29 20:08:16 +00001195static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001196builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001197{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001198 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 x = PyObject_Hash(v);
1201 if (x == -1)
1202 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001203 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001204}
1205
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001206PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001207"hash(object) -> integer\n\
1208\n\
1209Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001210the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001211
1212
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001214builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001215{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001216 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001217}
1218
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001219PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001220"hex(number) -> string\n\
1221\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001222Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001223
1224
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001226builtin_iter(PyObject *self, PyObject *args)
1227{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001228 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001229
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1231 return NULL;
1232 if (w == NULL)
1233 return PyObject_GetIter(v);
1234 if (!PyCallable_Check(v)) {
1235 PyErr_SetString(PyExc_TypeError,
1236 "iter(v, w): v must be callable");
1237 return NULL;
1238 }
1239 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001240}
1241
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001242PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001243"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001244iter(callable, sentinel) -> iterator\n\
1245\n\
1246Get an iterator from an object. In the first form, the argument must\n\
1247supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001248In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001249
1250
1251static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001252builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001253{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001255
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 res = PyObject_Size(v);
1257 if (res < 0 && PyErr_Occurred())
1258 return NULL;
1259 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001260}
1261
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001262PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001263"len(object) -> integer\n\
1264\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001265Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001266
1267
Guido van Rossum79f25d91997-04-29 20:08:16 +00001268static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001269builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 d = PyEval_GetLocals();
1274 Py_XINCREF(d);
1275 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001276}
1277
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001278PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001279"locals() -> dictionary\n\
1280\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001281Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001282
1283
Guido van Rossum79f25d91997-04-29 20:08:16 +00001284static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001285min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001286{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001287 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1288 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 if (PyTuple_Size(args) > 1)
1291 v = args;
1292 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1293 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1296 keyfunc = PyDict_GetItemString(kwds, "key");
1297 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1298 PyErr_Format(PyExc_TypeError,
1299 "%s() got an unexpected keyword argument", name);
1300 return NULL;
1301 }
1302 Py_INCREF(keyfunc);
1303 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 it = PyObject_GetIter(v);
1306 if (it == NULL) {
1307 Py_XDECREF(keyfunc);
1308 return NULL;
1309 }
Tim Petersc3074532001-05-03 07:00:32 +00001310
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 maxitem = NULL; /* the result */
1312 maxval = NULL; /* the value associated with the result */
1313 while (( item = PyIter_Next(it) )) {
1314 /* get the value from the key function */
1315 if (keyfunc != NULL) {
1316 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1317 if (val == NULL)
1318 goto Fail_it_item;
1319 }
1320 /* no key function; the value is the item */
1321 else {
1322 val = item;
1323 Py_INCREF(val);
1324 }
Tim Petersc3074532001-05-03 07:00:32 +00001325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 /* maximum value and item are unset; set them */
1327 if (maxval == NULL) {
1328 maxitem = item;
1329 maxval = val;
1330 }
1331 /* maximum value and item are set; update them as necessary */
1332 else {
1333 int cmp = PyObject_RichCompareBool(val, maxval, op);
1334 if (cmp < 0)
1335 goto Fail_it_item_and_val;
1336 else if (cmp > 0) {
1337 Py_DECREF(maxval);
1338 Py_DECREF(maxitem);
1339 maxval = val;
1340 maxitem = item;
1341 }
1342 else {
1343 Py_DECREF(item);
1344 Py_DECREF(val);
1345 }
1346 }
1347 }
1348 if (PyErr_Occurred())
1349 goto Fail_it;
1350 if (maxval == NULL) {
1351 PyErr_Format(PyExc_ValueError,
1352 "%s() arg is an empty sequence", name);
1353 assert(maxitem == NULL);
1354 }
1355 else
1356 Py_DECREF(maxval);
1357 Py_DECREF(it);
1358 Py_XDECREF(keyfunc);
1359 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001360
1361Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001363Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001364 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001365Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001366 Py_XDECREF(maxval);
1367 Py_XDECREF(maxitem);
1368 Py_DECREF(it);
1369 Py_XDECREF(keyfunc);
1370 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001371}
1372
Guido van Rossum79f25d91997-04-29 20:08:16 +00001373static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001374builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001375{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001377}
1378
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001379PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001380"min(iterable[, key=func]) -> value\n\
1381min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001382\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001383With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001384With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001385
1386
Guido van Rossum79f25d91997-04-29 20:08:16 +00001387static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001388builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001389{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001390 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001391}
1392
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001393PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001394"max(iterable[, key=func]) -> value\n\
1395max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001396\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001397With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001398With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001399
1400
Guido van Rossum79f25d91997-04-29 20:08:16 +00001401static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001402builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001403{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001405}
1406
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001407PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001408"oct(number) -> string\n\
1409\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001410Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001411
1412
Guido van Rossum79f25d91997-04-29 20:08:16 +00001413static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001414builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001415{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 long ord;
1417 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 if (PyBytes_Check(obj)) {
1420 size = PyBytes_GET_SIZE(obj);
1421 if (size == 1) {
1422 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1423 return PyLong_FromLong(ord);
1424 }
1425 }
1426 else if (PyUnicode_Check(obj)) {
1427 size = PyUnicode_GET_SIZE(obj);
1428 if (size == 1) {
1429 ord = (long)*PyUnicode_AS_UNICODE(obj);
1430 return PyLong_FromLong(ord);
1431 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001432#ifndef Py_UNICODE_WIDE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001433 if (size == 2) {
1434 /* Decode a valid surrogate pair */
1435 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1436 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1437 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1438 0xDC00 <= c1 && c1 <= 0xDFFF) {
1439 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1440 0x00010000);
1441 return PyLong_FromLong(ord);
1442 }
1443 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001444#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 }
1446 else if (PyByteArray_Check(obj)) {
1447 /* XXX Hopefully this is temporary */
1448 size = PyByteArray_GET_SIZE(obj);
1449 if (size == 1) {
1450 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1451 return PyLong_FromLong(ord);
1452 }
1453 }
1454 else {
1455 PyErr_Format(PyExc_TypeError,
1456 "ord() expected string of length 1, but " \
1457 "%.200s found", obj->ob_type->tp_name);
1458 return NULL;
1459 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001460
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001461 PyErr_Format(PyExc_TypeError,
1462 "ord() expected a character, "
1463 "but string of length %zd found",
1464 size);
1465 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001466}
1467
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001468PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001469"ord(c) -> integer\n\
1470\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001471Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001472)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001473#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001474PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001475"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001476)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001477#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001478;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001479
1480
Guido van Rossum79f25d91997-04-29 20:08:16 +00001481static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001482builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001483{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1487 return NULL;
1488 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001489}
1490
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001491PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001492"pow(x, y[, z]) -> number\n\
1493\n\
1494With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001495equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001496
1497
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001498
Guido van Rossum34343512006-11-30 22:13:52 +00001499static PyObject *
1500builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001502 static char *kwlist[] = {"sep", "end", "file", 0};
1503 static PyObject *dummy_args;
1504 PyObject *sep = NULL, *end = NULL, *file = NULL;
1505 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001506
Benjamin Peterson00102562012-01-11 21:00:16 -05001507 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001508 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1510 kwlist, &sep, &end, &file))
1511 return NULL;
1512 if (file == NULL || file == Py_None) {
1513 file = PySys_GetObject("stdout");
1514 /* sys.stdout may be None when FILE* stdout isn't connected */
1515 if (file == Py_None)
1516 Py_RETURN_NONE;
1517 }
Guido van Rossum34343512006-11-30 22:13:52 +00001518
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001519 if (sep == Py_None) {
1520 sep = NULL;
1521 }
1522 else if (sep && !PyUnicode_Check(sep)) {
1523 PyErr_Format(PyExc_TypeError,
1524 "sep must be None or a string, not %.200s",
1525 sep->ob_type->tp_name);
1526 return NULL;
1527 }
1528 if (end == Py_None) {
1529 end = NULL;
1530 }
1531 else if (end && !PyUnicode_Check(end)) {
1532 PyErr_Format(PyExc_TypeError,
1533 "end must be None or a string, not %.200s",
1534 end->ob_type->tp_name);
1535 return NULL;
1536 }
Guido van Rossum34343512006-11-30 22:13:52 +00001537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001538 for (i = 0; i < PyTuple_Size(args); i++) {
1539 if (i > 0) {
1540 if (sep == NULL)
1541 err = PyFile_WriteString(" ", file);
1542 else
1543 err = PyFile_WriteObject(sep, file,
1544 Py_PRINT_RAW);
1545 if (err)
1546 return NULL;
1547 }
1548 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1549 Py_PRINT_RAW);
1550 if (err)
1551 return NULL;
1552 }
Guido van Rossum34343512006-11-30 22:13:52 +00001553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 if (end == NULL)
1555 err = PyFile_WriteString("\n", file);
1556 else
1557 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1558 if (err)
1559 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001561 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001562}
1563
1564PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001565"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001566\n\
1567Prints the values to a stream, or to sys.stdout by default.\n\
1568Optional keyword arguments:\n\
1569file: a file-like object (stream); defaults to the current sys.stdout.\n\
1570sep: string inserted between values, default a space.\n\
1571end: string appended after the last value, default a newline.");
1572
1573
Guido van Rossuma88a0332007-02-26 16:59:55 +00001574static PyObject *
1575builtin_input(PyObject *self, PyObject *args)
1576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001577 PyObject *promptarg = NULL;
1578 PyObject *fin = PySys_GetObject("stdin");
1579 PyObject *fout = PySys_GetObject("stdout");
1580 PyObject *ferr = PySys_GetObject("stderr");
1581 PyObject *tmp;
1582 long fd;
1583 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 /* Parse arguments */
1586 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1587 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 /* Check that stdin/out/err are intact */
1590 if (fin == NULL || fin == Py_None) {
1591 PyErr_SetString(PyExc_RuntimeError,
1592 "input(): lost sys.stdin");
1593 return NULL;
1594 }
1595 if (fout == NULL || fout == Py_None) {
1596 PyErr_SetString(PyExc_RuntimeError,
1597 "input(): lost sys.stdout");
1598 return NULL;
1599 }
1600 if (ferr == NULL || ferr == Py_None) {
1601 PyErr_SetString(PyExc_RuntimeError,
1602 "input(): lost sys.stderr");
1603 return NULL;
1604 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001606 /* First of all, flush stderr */
1607 tmp = PyObject_CallMethod(ferr, "flush", "");
1608 if (tmp == NULL)
1609 PyErr_Clear();
1610 else
1611 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001612
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001613 /* We should only use (GNU) readline if Python's sys.stdin and
1614 sys.stdout are the same as C's stdin and stdout, because we
1615 need to pass it those. */
1616 tmp = PyObject_CallMethod(fin, "fileno", "");
1617 if (tmp == NULL) {
1618 PyErr_Clear();
1619 tty = 0;
1620 }
1621 else {
1622 fd = PyLong_AsLong(tmp);
1623 Py_DECREF(tmp);
1624 if (fd < 0 && PyErr_Occurred())
1625 return NULL;
1626 tty = fd == fileno(stdin) && isatty(fd);
1627 }
1628 if (tty) {
1629 tmp = PyObject_CallMethod(fout, "fileno", "");
1630 if (tmp == NULL)
1631 PyErr_Clear();
1632 else {
1633 fd = PyLong_AsLong(tmp);
1634 Py_DECREF(tmp);
1635 if (fd < 0 && PyErr_Occurred())
1636 return NULL;
1637 tty = fd == fileno(stdout) && isatty(fd);
1638 }
1639 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001640
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001641 /* If we're interactive, use (GNU) readline */
1642 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001643 PyObject *po = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 char *prompt;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001645 char *s = NULL;
1646 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1647 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1648 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001649 PyObject *result;
Victor Stinner02bfdb32011-02-23 12:10:23 +00001650 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001651
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001653 stdin_errors = PyObject_GetAttrString(fin, "errors");
1654 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001655 /* stdin is a text stream, so it must have an
1656 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001657 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001658 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001659 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1660 if (!stdin_encoding_str || !stdin_errors_str)
1661 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 tmp = PyObject_CallMethod(fout, "flush", "");
1663 if (tmp == NULL)
1664 PyErr_Clear();
1665 else
1666 Py_DECREF(tmp);
1667 if (promptarg != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001668 /* We have a prompt, encode it as stdout would */
1669 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 PyObject *stringpo;
Victor Stinner306f0102010-05-19 01:06:22 +00001671 stdout_encoding = PyObject_GetAttrString(fout, "encoding");
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001672 stdout_errors = PyObject_GetAttrString(fout, "errors");
1673 if (!stdout_encoding || !stdout_errors)
1674 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001675 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001676 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1677 if (!stdout_encoding_str || !stdout_errors_str)
1678 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 stringpo = PyObject_Str(promptarg);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001680 if (stringpo == NULL)
1681 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001683 stdout_encoding_str, stdout_errors_str);
1684 Py_CLEAR(stdout_encoding);
1685 Py_CLEAR(stdout_errors);
1686 Py_CLEAR(stringpo);
1687 if (po == NULL)
1688 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 prompt = PyBytes_AsString(po);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001690 if (prompt == NULL)
1691 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 }
1693 else {
1694 po = NULL;
1695 prompt = "";
1696 }
1697 s = PyOS_Readline(stdin, stdout, prompt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 if (s == NULL) {
1699 if (!PyErr_Occurred())
1700 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001701 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 }
Victor Stinner02bfdb32011-02-23 12:10:23 +00001703
1704 len = strlen(s);
1705 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 PyErr_SetNone(PyExc_EOFError);
1707 result = NULL;
1708 }
Victor Stinner02bfdb32011-02-23 12:10:23 +00001709 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001710 if (len > PY_SSIZE_T_MAX) {
1711 PyErr_SetString(PyExc_OverflowError,
1712 "input: input too long");
1713 result = NULL;
1714 }
1715 else {
Victor Stinner02bfdb32011-02-23 12:10:23 +00001716 len--; /* strip trailing '\n' */
1717 if (len != 0 && s[len-1] == '\r')
1718 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001719 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1720 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001721 }
1722 }
1723 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001724 Py_DECREF(stdin_errors);
1725 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 PyMem_FREE(s);
1727 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001728 _readline_errors:
1729 Py_XDECREF(stdin_encoding);
1730 Py_XDECREF(stdout_encoding);
1731 Py_XDECREF(stdin_errors);
1732 Py_XDECREF(stdout_errors);
1733 Py_XDECREF(po);
1734 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001735 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001736
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001737 /* Fallback if we're not interactive */
1738 if (promptarg != NULL) {
1739 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1740 return NULL;
1741 }
1742 tmp = PyObject_CallMethod(fout, "flush", "");
1743 if (tmp == NULL)
1744 PyErr_Clear();
1745 else
1746 Py_DECREF(tmp);
1747 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001748}
1749
1750PyDoc_STRVAR(input_doc,
1751"input([prompt]) -> string\n\
1752\n\
1753Read a string from standard input. The trailing newline is stripped.\n\
1754If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1755On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1756is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001757
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758
Guido van Rossum79f25d91997-04-29 20:08:16 +00001759static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001760builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001761{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001763}
1764
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001765PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001766"repr(object) -> string\n\
1767\n\
1768Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001769For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001770
1771
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001773builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001774{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001775 static PyObject *round_str = NULL;
1776 PyObject *ndigits = NULL;
1777 static char *kwlist[] = {"number", "ndigits", 0};
1778 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001780 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1781 kwlist, &number, &ndigits))
1782 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 if (Py_TYPE(number)->tp_dict == NULL) {
1785 if (PyType_Ready(Py_TYPE(number)) < 0)
1786 return NULL;
1787 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 if (round_str == NULL) {
1790 round_str = PyUnicode_InternFromString("__round__");
1791 if (round_str == NULL)
1792 return NULL;
1793 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001795 round = _PyType_Lookup(Py_TYPE(number), round_str);
1796 if (round == NULL) {
1797 PyErr_Format(PyExc_TypeError,
1798 "type %.100s doesn't define __round__ method",
1799 Py_TYPE(number)->tp_name);
1800 return NULL;
1801 }
Alex Martelliae211f92007-08-22 23:21:33 +00001802
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 if (ndigits == NULL)
1804 return PyObject_CallFunction(round, "O", number);
1805 else
1806 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001807}
1808
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001809PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001810"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001811\n\
1812Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001813This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001814same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001815
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001816
Raymond Hettinger64958a12003-12-17 20:43:33 +00001817static PyObject *
1818builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1819{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001820 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1821 PyObject *callable;
1822 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1823 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001824
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001825 /* args 1-3 should match listsort in Objects/listobject.c */
1826 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1827 kwlist, &seq, &keyfunc, &reverse))
1828 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 newlist = PySequence_List(seq);
1831 if (newlist == NULL)
1832 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001834 callable = PyObject_GetAttrString(newlist, "sort");
1835 if (callable == NULL) {
1836 Py_DECREF(newlist);
1837 return NULL;
1838 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 newargs = PyTuple_GetSlice(args, 1, 4);
1841 if (newargs == NULL) {
1842 Py_DECREF(newlist);
1843 Py_DECREF(callable);
1844 return NULL;
1845 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001846
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001847 v = PyObject_Call(callable, newargs, kwds);
1848 Py_DECREF(newargs);
1849 Py_DECREF(callable);
1850 if (v == NULL) {
1851 Py_DECREF(newlist);
1852 return NULL;
1853 }
1854 Py_DECREF(v);
1855 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001856}
1857
1858PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001859"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001860
Guido van Rossum79f25d91997-04-29 20:08:16 +00001861static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001862builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001863{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001864 PyObject *v = NULL;
1865 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001867 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1868 return NULL;
1869 if (v == NULL) {
1870 d = PyEval_GetLocals();
1871 if (d == NULL) {
1872 if (!PyErr_Occurred())
1873 PyErr_SetString(PyExc_SystemError,
1874 "vars(): no locals!?");
1875 }
1876 else
1877 Py_INCREF(d);
1878 }
1879 else {
1880 d = PyObject_GetAttrString(v, "__dict__");
1881 if (d == NULL) {
1882 PyErr_SetString(PyExc_TypeError,
1883 "vars() argument must have __dict__ attribute");
1884 return NULL;
1885 }
1886 }
1887 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001888}
1889
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001890PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001891"vars([object]) -> dictionary\n\
1892\n\
1893Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001894With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001895
Alex Martellia70b1912003-04-22 08:12:33 +00001896static PyObject*
1897builtin_sum(PyObject *self, PyObject *args)
1898{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001899 PyObject *seq;
1900 PyObject *result = NULL;
1901 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1904 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001906 iter = PyObject_GetIter(seq);
1907 if (iter == NULL)
1908 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001910 if (result == NULL) {
1911 result = PyLong_FromLong(0);
1912 if (result == NULL) {
1913 Py_DECREF(iter);
1914 return NULL;
1915 }
1916 } else {
1917 /* reject string values for 'start' parameter */
1918 if (PyUnicode_Check(result)) {
1919 PyErr_SetString(PyExc_TypeError,
1920 "sum() can't sum strings [use ''.join(seq) instead]");
1921 Py_DECREF(iter);
1922 return NULL;
1923 }
1924 if (PyByteArray_Check(result)) {
1925 PyErr_SetString(PyExc_TypeError,
1926 "sum() can't sum bytes [use b''.join(seq) instead]");
1927 Py_DECREF(iter);
1928 return NULL;
1929 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 Py_INCREF(result);
1932 }
Alex Martellia70b1912003-04-22 08:12:33 +00001933
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001934#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001935 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1936 Assumes all inputs are the same type. If the assumption fails, default
1937 to the more general routine.
1938 */
1939 if (PyLong_CheckExact(result)) {
1940 int overflow;
1941 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1942 /* If this already overflowed, don't even enter the loop. */
1943 if (overflow == 0) {
1944 Py_DECREF(result);
1945 result = NULL;
1946 }
1947 while(result == NULL) {
1948 item = PyIter_Next(iter);
1949 if (item == NULL) {
1950 Py_DECREF(iter);
1951 if (PyErr_Occurred())
1952 return NULL;
1953 return PyLong_FromLong(i_result);
1954 }
1955 if (PyLong_CheckExact(item)) {
1956 long b = PyLong_AsLongAndOverflow(item, &overflow);
1957 long x = i_result + b;
1958 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
1959 i_result = x;
1960 Py_DECREF(item);
1961 continue;
1962 }
1963 }
1964 /* Either overflowed or is not an int. Restore real objects and process normally */
1965 result = PyLong_FromLong(i_result);
1966 temp = PyNumber_Add(result, item);
1967 Py_DECREF(result);
1968 Py_DECREF(item);
1969 result = temp;
1970 if (result == NULL) {
1971 Py_DECREF(iter);
1972 return NULL;
1973 }
1974 }
1975 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 if (PyFloat_CheckExact(result)) {
1978 double f_result = PyFloat_AS_DOUBLE(result);
1979 Py_DECREF(result);
1980 result = NULL;
1981 while(result == NULL) {
1982 item = PyIter_Next(iter);
1983 if (item == NULL) {
1984 Py_DECREF(iter);
1985 if (PyErr_Occurred())
1986 return NULL;
1987 return PyFloat_FromDouble(f_result);
1988 }
1989 if (PyFloat_CheckExact(item)) {
1990 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1991 f_result += PyFloat_AS_DOUBLE(item);
1992 PyFPE_END_PROTECT(f_result)
1993 Py_DECREF(item);
1994 continue;
1995 }
1996 if (PyLong_CheckExact(item)) {
1997 long value;
1998 int overflow;
1999 value = PyLong_AsLongAndOverflow(item, &overflow);
2000 if (!overflow) {
2001 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
2002 f_result += (double)value;
2003 PyFPE_END_PROTECT(f_result)
2004 Py_DECREF(item);
2005 continue;
2006 }
2007 }
2008 result = PyFloat_FromDouble(f_result);
2009 temp = PyNumber_Add(result, item);
2010 Py_DECREF(result);
2011 Py_DECREF(item);
2012 result = temp;
2013 if (result == NULL) {
2014 Py_DECREF(iter);
2015 return NULL;
2016 }
2017 }
2018 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002019#endif
2020
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002021 for(;;) {
2022 item = PyIter_Next(iter);
2023 if (item == NULL) {
2024 /* error, or end-of-sequence */
2025 if (PyErr_Occurred()) {
2026 Py_DECREF(result);
2027 result = NULL;
2028 }
2029 break;
2030 }
2031 /* It's tempting to use PyNumber_InPlaceAdd instead of
2032 PyNumber_Add here, to avoid quadratic running time
2033 when doing 'sum(list_of_lists, [])'. However, this
2034 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 empty = []
2037 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 would change the value of empty. */
2040 temp = PyNumber_Add(result, item);
2041 Py_DECREF(result);
2042 Py_DECREF(item);
2043 result = temp;
2044 if (result == NULL)
2045 break;
2046 }
2047 Py_DECREF(iter);
2048 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002049}
2050
2051PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002052"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002053\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002054Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2055of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002056empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002057
2058
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002059static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002060builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002061{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 PyObject *inst;
2063 PyObject *cls;
2064 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002066 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2067 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002068
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 retval = PyObject_IsInstance(inst, cls);
2070 if (retval < 0)
2071 return NULL;
2072 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002073}
2074
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002075PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002076"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002077\n\
2078Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002079With a type as second argument, return whether that is the object's type.\n\
2080The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002081isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002082
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002083
2084static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002085builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002086{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 PyObject *derived;
2088 PyObject *cls;
2089 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002090
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2092 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 retval = PyObject_IsSubclass(derived, cls);
2095 if (retval < 0)
2096 return NULL;
2097 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002098}
2099
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002100PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002101"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002102\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002103Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2104When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2105is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002106
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002107
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002108typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002109 PyObject_HEAD
2110 Py_ssize_t tuplesize;
2111 PyObject *ittuple; /* tuple of iterators */
2112 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002113} zipobject;
2114
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002115static PyObject *
2116zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002117{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 zipobject *lz;
2119 Py_ssize_t i;
2120 PyObject *ittuple; /* tuple of iterators */
2121 PyObject *result;
2122 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002124 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2125 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002127 /* args must be a tuple */
2128 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002129
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002130 /* obtain iterators */
2131 ittuple = PyTuple_New(tuplesize);
2132 if (ittuple == NULL)
2133 return NULL;
2134 for (i=0; i < tuplesize; ++i) {
2135 PyObject *item = PyTuple_GET_ITEM(args, i);
2136 PyObject *it = PyObject_GetIter(item);
2137 if (it == NULL) {
2138 if (PyErr_ExceptionMatches(PyExc_TypeError))
2139 PyErr_Format(PyExc_TypeError,
2140 "zip argument #%zd must support iteration",
2141 i+1);
2142 Py_DECREF(ittuple);
2143 return NULL;
2144 }
2145 PyTuple_SET_ITEM(ittuple, i, it);
2146 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002147
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002148 /* create a result holder */
2149 result = PyTuple_New(tuplesize);
2150 if (result == NULL) {
2151 Py_DECREF(ittuple);
2152 return NULL;
2153 }
2154 for (i=0 ; i < tuplesize ; i++) {
2155 Py_INCREF(Py_None);
2156 PyTuple_SET_ITEM(result, i, Py_None);
2157 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002159 /* create zipobject structure */
2160 lz = (zipobject *)type->tp_alloc(type, 0);
2161 if (lz == NULL) {
2162 Py_DECREF(ittuple);
2163 Py_DECREF(result);
2164 return NULL;
2165 }
2166 lz->ittuple = ittuple;
2167 lz->tuplesize = tuplesize;
2168 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002169
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002170 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002171}
2172
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002173static void
2174zip_dealloc(zipobject *lz)
2175{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 PyObject_GC_UnTrack(lz);
2177 Py_XDECREF(lz->ittuple);
2178 Py_XDECREF(lz->result);
2179 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002180}
2181
2182static int
2183zip_traverse(zipobject *lz, visitproc visit, void *arg)
2184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002185 Py_VISIT(lz->ittuple);
2186 Py_VISIT(lz->result);
2187 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002188}
2189
2190static PyObject *
2191zip_next(zipobject *lz)
2192{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 Py_ssize_t i;
2194 Py_ssize_t tuplesize = lz->tuplesize;
2195 PyObject *result = lz->result;
2196 PyObject *it;
2197 PyObject *item;
2198 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 if (tuplesize == 0)
2201 return NULL;
2202 if (Py_REFCNT(result) == 1) {
2203 Py_INCREF(result);
2204 for (i=0 ; i < tuplesize ; i++) {
2205 it = PyTuple_GET_ITEM(lz->ittuple, i);
2206 item = (*Py_TYPE(it)->tp_iternext)(it);
2207 if (item == NULL) {
2208 Py_DECREF(result);
2209 return NULL;
2210 }
2211 olditem = PyTuple_GET_ITEM(result, i);
2212 PyTuple_SET_ITEM(result, i, item);
2213 Py_DECREF(olditem);
2214 }
2215 } else {
2216 result = PyTuple_New(tuplesize);
2217 if (result == NULL)
2218 return NULL;
2219 for (i=0 ; i < tuplesize ; i++) {
2220 it = PyTuple_GET_ITEM(lz->ittuple, i);
2221 item = (*Py_TYPE(it)->tp_iternext)(it);
2222 if (item == NULL) {
2223 Py_DECREF(result);
2224 return NULL;
2225 }
2226 PyTuple_SET_ITEM(result, i, item);
2227 }
2228 }
2229 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002230}
Barry Warsawbd599b52000-08-03 15:45:29 +00002231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002232PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002233"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002234\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002235Return a zip object whose .__next__() method returns a tuple where\n\
2236the i-th element comes from the i-th iterable argument. The .__next__()\n\
2237method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002238is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002239
2240PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2242 "zip", /* tp_name */
2243 sizeof(zipobject), /* tp_basicsize */
2244 0, /* tp_itemsize */
2245 /* methods */
2246 (destructor)zip_dealloc, /* tp_dealloc */
2247 0, /* tp_print */
2248 0, /* tp_getattr */
2249 0, /* tp_setattr */
2250 0, /* tp_reserved */
2251 0, /* tp_repr */
2252 0, /* tp_as_number */
2253 0, /* tp_as_sequence */
2254 0, /* tp_as_mapping */
2255 0, /* tp_hash */
2256 0, /* tp_call */
2257 0, /* tp_str */
2258 PyObject_GenericGetAttr, /* tp_getattro */
2259 0, /* tp_setattro */
2260 0, /* tp_as_buffer */
2261 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2262 Py_TPFLAGS_BASETYPE, /* tp_flags */
2263 zip_doc, /* tp_doc */
2264 (traverseproc)zip_traverse, /* tp_traverse */
2265 0, /* tp_clear */
2266 0, /* tp_richcompare */
2267 0, /* tp_weaklistoffset */
2268 PyObject_SelfIter, /* tp_iter */
2269 (iternextfunc)zip_next, /* tp_iternext */
2270 0, /* tp_methods */
2271 0, /* tp_members */
2272 0, /* tp_getset */
2273 0, /* tp_base */
2274 0, /* tp_dict */
2275 0, /* tp_descr_get */
2276 0, /* tp_descr_set */
2277 0, /* tp_dictoffset */
2278 0, /* tp_init */
2279 PyType_GenericAlloc, /* tp_alloc */
2280 zip_new, /* tp_new */
2281 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002282};
Barry Warsawbd599b52000-08-03 15:45:29 +00002283
2284
Guido van Rossum79f25d91997-04-29 20:08:16 +00002285static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002286 {"__build_class__", (PyCFunction)builtin___build_class__,
2287 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2288 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2289 {"abs", builtin_abs, METH_O, abs_doc},
2290 {"all", builtin_all, METH_O, all_doc},
2291 {"any", builtin_any, METH_O, any_doc},
2292 {"ascii", builtin_ascii, METH_O, ascii_doc},
2293 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002294 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002295 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2296 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2297 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2298 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2299 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2300 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2301 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2302 {"format", builtin_format, METH_VARARGS, format_doc},
2303 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2304 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2305 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2306 {"hash", builtin_hash, METH_O, hash_doc},
2307 {"hex", builtin_hex, METH_O, hex_doc},
2308 {"id", builtin_id, METH_O, id_doc},
2309 {"input", builtin_input, METH_VARARGS, input_doc},
2310 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2311 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2312 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2313 {"len", builtin_len, METH_O, len_doc},
2314 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2315 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2316 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2317 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2318 {"oct", builtin_oct, METH_O, oct_doc},
2319 {"ord", builtin_ord, METH_O, ord_doc},
2320 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2321 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2322 {"repr", builtin_repr, METH_O, repr_doc},
2323 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2324 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2325 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2326 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2327 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2328 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002329};
2330
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002331PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002332"Built-in functions, exceptions, and other objects.\n\
2333\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002334Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002335
Martin v. Löwis1a214512008-06-11 05:26:20 +00002336static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002337 PyModuleDef_HEAD_INIT,
2338 "builtins",
2339 builtin_doc,
2340 -1, /* multiple "initialization" just copies the module dict. */
2341 builtin_methods,
2342 NULL,
2343 NULL,
2344 NULL,
2345 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002346};
2347
2348
Guido van Rossum25ce5661997-08-02 03:10:38 +00002349PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002350_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002351{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 PyObject *mod, *dict, *debug;
2353 mod = PyModule_Create(&builtinsmodule);
2354 if (mod == NULL)
2355 return NULL;
2356 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002357
Tim Peters7571a0f2003-03-23 17:52:28 +00002358#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002359 /* "builtins" exposes a number of statically allocated objects
2360 * that, before this code was added in 2.3, never showed up in
2361 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2362 * result, programs leaking references to None and False (etc)
2363 * couldn't be diagnosed by examining sys.getobjects(0).
2364 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002365#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2366#else
2367#define ADD_TO_ALL(OBJECT) (void)0
2368#endif
2369
Tim Peters4b7625e2001-09-13 21:37:17 +00002370#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2372 return NULL; \
2373 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002374
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 SETBUILTIN("None", Py_None);
2376 SETBUILTIN("Ellipsis", Py_Ellipsis);
2377 SETBUILTIN("NotImplemented", Py_NotImplemented);
2378 SETBUILTIN("False", Py_False);
2379 SETBUILTIN("True", Py_True);
2380 SETBUILTIN("bool", &PyBool_Type);
2381 SETBUILTIN("memoryview", &PyMemoryView_Type);
2382 SETBUILTIN("bytearray", &PyByteArray_Type);
2383 SETBUILTIN("bytes", &PyBytes_Type);
2384 SETBUILTIN("classmethod", &PyClassMethod_Type);
2385 SETBUILTIN("complex", &PyComplex_Type);
2386 SETBUILTIN("dict", &PyDict_Type);
2387 SETBUILTIN("enumerate", &PyEnum_Type);
2388 SETBUILTIN("filter", &PyFilter_Type);
2389 SETBUILTIN("float", &PyFloat_Type);
2390 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2391 SETBUILTIN("property", &PyProperty_Type);
2392 SETBUILTIN("int", &PyLong_Type);
2393 SETBUILTIN("list", &PyList_Type);
2394 SETBUILTIN("map", &PyMap_Type);
2395 SETBUILTIN("object", &PyBaseObject_Type);
2396 SETBUILTIN("range", &PyRange_Type);
2397 SETBUILTIN("reversed", &PyReversed_Type);
2398 SETBUILTIN("set", &PySet_Type);
2399 SETBUILTIN("slice", &PySlice_Type);
2400 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2401 SETBUILTIN("str", &PyUnicode_Type);
2402 SETBUILTIN("super", &PySuper_Type);
2403 SETBUILTIN("tuple", &PyTuple_Type);
2404 SETBUILTIN("type", &PyType_Type);
2405 SETBUILTIN("zip", &PyZip_Type);
2406 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2407 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2408 Py_XDECREF(debug);
2409 return NULL;
2410 }
2411 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002413 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002414#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002415#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002416}