blob: 232e3dc497091de093a96ed5b305c15209a2791c [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 }
431 if (ok)
432 return item;
433 Py_DECREF(item);
434 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000435}
436
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000437PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000438"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000439\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000440Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000441is true. If function is None, return the items that are true.");
442
443PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000444 PyVarObject_HEAD_INIT(&PyType_Type, 0)
445 "filter", /* tp_name */
446 sizeof(filterobject), /* tp_basicsize */
447 0, /* tp_itemsize */
448 /* methods */
449 (destructor)filter_dealloc, /* tp_dealloc */
450 0, /* tp_print */
451 0, /* tp_getattr */
452 0, /* tp_setattr */
453 0, /* tp_reserved */
454 0, /* tp_repr */
455 0, /* tp_as_number */
456 0, /* tp_as_sequence */
457 0, /* tp_as_mapping */
458 0, /* tp_hash */
459 0, /* tp_call */
460 0, /* tp_str */
461 PyObject_GenericGetAttr, /* tp_getattro */
462 0, /* tp_setattro */
463 0, /* tp_as_buffer */
464 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
465 Py_TPFLAGS_BASETYPE, /* tp_flags */
466 filter_doc, /* tp_doc */
467 (traverseproc)filter_traverse, /* tp_traverse */
468 0, /* tp_clear */
469 0, /* tp_richcompare */
470 0, /* tp_weaklistoffset */
471 PyObject_SelfIter, /* tp_iter */
472 (iternextfunc)filter_next, /* tp_iternext */
473 0, /* tp_methods */
474 0, /* tp_members */
475 0, /* tp_getset */
476 0, /* tp_base */
477 0, /* tp_dict */
478 0, /* tp_descr_get */
479 0, /* tp_descr_set */
480 0, /* tp_dictoffset */
481 0, /* tp_init */
482 PyType_GenericAlloc, /* tp_alloc */
483 filter_new, /* tp_new */
484 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000485};
486
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000487
Eric Smith8c663262007-08-25 02:26:07 +0000488static PyObject *
489builtin_format(PyObject *self, PyObject *args)
490{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000491 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000492 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000493
Eric Smith8fd3eba2008-02-17 19:48:00 +0000494 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Benjamin Petersona12d5c62012-01-03 16:47:22 -0600495 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000496
Eric Smith8fd3eba2008-02-17 19:48:00 +0000497 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000498}
499
Eric Smith8c663262007-08-25 02:26:07 +0000500PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000501"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000502\n\
Eric Smith81936692007-08-31 01:14:01 +0000503Returns value.__format__(format_spec)\n\
504format_spec defaults to \"\"");
505
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000506static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000507builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 if (!PyArg_ParseTuple(args, "i:chr", &x))
512 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000513
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000515}
516
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000517PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000518"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000519\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000520Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000521)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000522#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000523PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000524"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000525)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000526#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000527;
Guido van Rossum09095f32000-03-10 23:00:52 +0000528
529
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000530static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000531source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000532{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 char *str;
534 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 if (PyUnicode_Check(cmd)) {
537 cf->cf_flags |= PyCF_IGNORE_COOKIE;
538 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
539 if (cmd == NULL)
540 return NULL;
541 }
542 else if (!PyObject_CheckReadBuffer(cmd)) {
543 PyErr_Format(PyExc_TypeError,
544 "%s() arg 1 must be a %s object",
545 funcname, what);
546 return NULL;
547 }
548 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
549 return NULL;
550 }
551 if (strlen(str) != size) {
552 PyErr_SetString(PyExc_TypeError,
553 "source code string cannot contain null bytes");
554 return NULL;
555 }
556 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000557}
558
Guido van Rossum79f25d91997-04-29 20:08:16 +0000559static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000560builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000561{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 char *str;
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000563 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 char *filename;
565 char *startstr;
566 int mode = -1;
567 int dont_inherit = 0;
568 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000569 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 int is_ast;
571 PyCompilerFlags cf;
572 PyObject *cmd;
573 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000574 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000576 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000577
Georg Brandl8334fd92010-12-04 10:26:46 +0000578 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000579 &cmd,
580 PyUnicode_FSConverter, &filename_obj,
581 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000582 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000583 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000584
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000585 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000586 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000587
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 if (supplied_flags &
589 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
590 {
591 PyErr_SetString(PyExc_ValueError,
592 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000593 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 }
595 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000596
Georg Brandl8334fd92010-12-04 10:26:46 +0000597 if (optimize < -1 || optimize > 2) {
598 PyErr_SetString(PyExc_ValueError,
599 "compile(): invalid optimize value");
600 goto error;
601 }
602
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000603 if (!dont_inherit) {
604 PyEval_MergeCompilerFlags(&cf);
605 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000607 if (strcmp(startstr, "exec") == 0)
608 mode = 0;
609 else if (strcmp(startstr, "eval") == 0)
610 mode = 1;
611 else if (strcmp(startstr, "single") == 0)
612 mode = 2;
613 else {
614 PyErr_SetString(PyExc_ValueError,
615 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000616 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000617 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 is_ast = PyAST_Check(cmd);
620 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000621 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 if (supplied_flags & PyCF_ONLY_AST) {
624 Py_INCREF(cmd);
625 result = cmd;
626 }
627 else {
628 PyArena *arena;
629 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 arena = PyArena_New();
632 mod = PyAST_obj2mod(cmd, arena, mode);
633 if (mod == NULL) {
634 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000635 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000637 result = (PyObject*)PyAST_CompileEx(mod, filename,
638 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 PyArena_Free(arena);
640 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000641 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
645 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000646 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000647
Georg Brandl8334fd92010-12-04 10:26:46 +0000648 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000649 goto finally;
650
651error:
652 result = NULL;
653finally:
654 Py_DECREF(filename_obj);
655 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000656}
657
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000658PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000659"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000660\n\
661Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000662into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000663The filename will be used for run-time error messages.\n\
664The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000665single (interactive) statement, or 'eval' to compile an expression.\n\
666The flags argument, if present, controls which future statements influence\n\
667the compilation of the code.\n\
668The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
669the effects of any future statements in effect in the code calling\n\
670compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000671in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000672
Guido van Rossum79f25d91997-04-29 20:08:16 +0000673static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000674builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000675{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000676 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000678 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
679 return NULL;
680 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000681}
682
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000683PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000684"dir([object]) -> list of strings\n"
685"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000686"If called without an argument, return the names in the current scope.\n"
687"Else, return an alphabetized list of names comprising (some of) the attributes\n"
688"of the given object, and of attributes reachable from it.\n"
689"If the object supplies a method named __dir__, it will be used; otherwise\n"
690"the default dir() logic is used and returns:\n"
691" for a module object: the module's attributes.\n"
692" for a class object: its attributes, and recursively the attributes\n"
693" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000694" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000695" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000696
Guido van Rossum79f25d91997-04-29 20:08:16 +0000697static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000698builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000699{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000700 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
703 return NULL;
704 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000705}
706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000707PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000708"divmod(x, y) -> (div, mod)\n\
709\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000710Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000711
712
Guido van Rossum79f25d91997-04-29 20:08:16 +0000713static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000714builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000715{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000716 PyObject *cmd, *result, *tmp = NULL;
717 PyObject *globals = Py_None, *locals = Py_None;
718 char *str;
719 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000720
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
722 return NULL;
723 if (locals != Py_None && !PyMapping_Check(locals)) {
724 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
725 return NULL;
726 }
727 if (globals != Py_None && !PyDict_Check(globals)) {
728 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
729 "globals must be a real dict; try eval(expr, {}, mapping)"
730 : "globals must be a dict");
731 return NULL;
732 }
733 if (globals == Py_None) {
734 globals = PyEval_GetGlobals();
735 if (locals == Py_None)
736 locals = PyEval_GetLocals();
737 }
738 else if (locals == Py_None)
739 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 if (globals == NULL || locals == NULL) {
742 PyErr_SetString(PyExc_TypeError,
743 "eval must be given globals and locals "
744 "when called without a frame");
745 return NULL;
746 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
749 if (PyDict_SetItemString(globals, "__builtins__",
750 PyEval_GetBuiltins()) != 0)
751 return NULL;
752 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000753
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 if (PyCode_Check(cmd)) {
755 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
756 PyErr_SetString(PyExc_TypeError,
757 "code object passed to eval() may not contain free variables");
758 return NULL;
759 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000760 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
764 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
765 if (str == NULL)
766 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 while (*str == ' ' || *str == '\t')
769 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 (void)PyEval_MergeCompilerFlags(&cf);
772 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
773 Py_XDECREF(tmp);
774 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000775}
776
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000777PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000778"eval(source[, globals[, locals]]) -> value\n\
779\n\
780Evaluate the source in the context of globals and locals.\n\
781The source may be a string representing a Python expression\n\
782or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000783The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000784defaulting to the current globals and locals.\n\
785If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000786
Georg Brandl7cae87c2006-09-06 06:51:57 +0000787static PyObject *
788builtin_exec(PyObject *self, PyObject *args)
789{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 PyObject *v;
791 PyObject *prog, *globals = Py_None, *locals = Py_None;
792 int plain = 0;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
795 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 if (globals == Py_None) {
798 globals = PyEval_GetGlobals();
799 if (locals == Py_None) {
800 locals = PyEval_GetLocals();
801 plain = 1;
802 }
803 if (!globals || !locals) {
804 PyErr_SetString(PyExc_SystemError,
805 "globals and locals cannot be NULL");
806 return NULL;
807 }
808 }
809 else if (locals == Py_None)
810 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000811
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 if (!PyDict_Check(globals)) {
813 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
814 globals->ob_type->tp_name);
815 return NULL;
816 }
817 if (!PyMapping_Check(locals)) {
818 PyErr_Format(PyExc_TypeError,
819 "arg 3 must be a mapping or None, not %.100s",
820 locals->ob_type->tp_name);
821 return NULL;
822 }
823 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
824 if (PyDict_SetItemString(globals, "__builtins__",
825 PyEval_GetBuiltins()) != 0)
826 return NULL;
827 }
828
829 if (PyCode_Check(prog)) {
830 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
831 PyErr_SetString(PyExc_TypeError,
832 "code object passed to exec() may not "
833 "contain free variables");
834 return NULL;
835 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000836 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000837 }
838 else {
839 char *str;
840 PyCompilerFlags cf;
841 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
842 str = source_as_string(prog, "exec",
843 "string, bytes or code", &cf);
844 if (str == NULL)
845 return NULL;
846 if (PyEval_MergeCompilerFlags(&cf))
847 v = PyRun_StringFlags(str, Py_file_input, globals,
848 locals, &cf);
849 else
850 v = PyRun_String(str, Py_file_input, globals, locals);
851 }
852 if (v == NULL)
853 return NULL;
854 Py_DECREF(v);
855 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000856}
857
858PyDoc_STRVAR(exec_doc,
859"exec(object[, globals[, locals]])\n\
860\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000861Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000862object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000863The globals and locals are dictionaries, defaulting to the current\n\
864globals and locals. If only globals is given, locals defaults to it.");
865
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000868builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000869{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 PyObject *v, *result, *dflt = NULL;
871 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000872
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
874 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 if (!PyUnicode_Check(name)) {
877 PyErr_SetString(PyExc_TypeError,
878 "getattr(): attribute name must be string");
879 return NULL;
880 }
881 result = PyObject_GetAttr(v, name);
882 if (result == NULL && dflt != NULL &&
883 PyErr_ExceptionMatches(PyExc_AttributeError))
884 {
885 PyErr_Clear();
886 Py_INCREF(dflt);
887 result = dflt;
888 }
889 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000890}
891
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000892PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000893"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000894\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000895Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
896When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000897exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000898
899
Guido van Rossum79f25d91997-04-29 20:08:16 +0000900static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000901builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000902{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000903 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000904
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000905 d = PyEval_GetGlobals();
906 Py_XINCREF(d);
907 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000908}
909
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000910PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000911"globals() -> dictionary\n\
912\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000913Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914
915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000917builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 PyObject *v;
920 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
923 return NULL;
924 if (!PyUnicode_Check(name)) {
925 PyErr_SetString(PyExc_TypeError,
926 "hasattr(): attribute name must be string");
927 return NULL;
928 }
929 v = PyObject_GetAttr(v, name);
930 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000931 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000933 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000935 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 }
937 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000938 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000939}
940
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000941PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000942"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000943\n\
944Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000945(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000946
947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000949builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000952}
953
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000954PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000955"id(object) -> integer\n\
956\n\
957Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000959
960
Raymond Hettingera6c60372008-03-13 01:26:19 +0000961/* map object ************************************************************/
962
963typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 PyObject_HEAD
965 PyObject *iters;
966 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000967} mapobject;
968
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000970map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000971{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 PyObject *it, *iters, *func;
973 mapobject *lz;
974 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
977 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 numargs = PyTuple_Size(args);
980 if (numargs < 2) {
981 PyErr_SetString(PyExc_TypeError,
982 "map() must have at least two arguments.");
983 return NULL;
984 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000985
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 iters = PyTuple_New(numargs-1);
987 if (iters == NULL)
988 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 for (i=1 ; i<numargs ; i++) {
991 /* Get iterator. */
992 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
993 if (it == NULL) {
994 Py_DECREF(iters);
995 return NULL;
996 }
997 PyTuple_SET_ITEM(iters, i-1, it);
998 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 /* create mapobject structure */
1001 lz = (mapobject *)type->tp_alloc(type, 0);
1002 if (lz == NULL) {
1003 Py_DECREF(iters);
1004 return NULL;
1005 }
1006 lz->iters = iters;
1007 func = PyTuple_GET_ITEM(args, 0);
1008 Py_INCREF(func);
1009 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001012}
1013
1014static void
1015map_dealloc(mapobject *lz)
1016{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 PyObject_GC_UnTrack(lz);
1018 Py_XDECREF(lz->iters);
1019 Py_XDECREF(lz->func);
1020 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001021}
1022
1023static int
1024map_traverse(mapobject *lz, visitproc visit, void *arg)
1025{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 Py_VISIT(lz->iters);
1027 Py_VISIT(lz->func);
1028 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001029}
1030
1031static PyObject *
1032map_next(mapobject *lz)
1033{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 PyObject *val;
1035 PyObject *argtuple;
1036 PyObject *result;
1037 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 numargs = PyTuple_Size(lz->iters);
1040 argtuple = PyTuple_New(numargs);
1041 if (argtuple == NULL)
1042 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001043
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001044 for (i=0 ; i<numargs ; i++) {
1045 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1046 if (val == NULL) {
1047 Py_DECREF(argtuple);
1048 return NULL;
1049 }
1050 PyTuple_SET_ITEM(argtuple, i, val);
1051 }
1052 result = PyObject_Call(lz->func, argtuple, NULL);
1053 Py_DECREF(argtuple);
1054 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001055}
1056
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001057PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001058"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001059\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001060Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001062
Raymond Hettingera6c60372008-03-13 01:26:19 +00001063PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1065 "map", /* tp_name */
1066 sizeof(mapobject), /* tp_basicsize */
1067 0, /* tp_itemsize */
1068 /* methods */
1069 (destructor)map_dealloc, /* tp_dealloc */
1070 0, /* tp_print */
1071 0, /* tp_getattr */
1072 0, /* tp_setattr */
1073 0, /* tp_reserved */
1074 0, /* tp_repr */
1075 0, /* tp_as_number */
1076 0, /* tp_as_sequence */
1077 0, /* tp_as_mapping */
1078 0, /* tp_hash */
1079 0, /* tp_call */
1080 0, /* tp_str */
1081 PyObject_GenericGetAttr, /* tp_getattro */
1082 0, /* tp_setattro */
1083 0, /* tp_as_buffer */
1084 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1085 Py_TPFLAGS_BASETYPE, /* tp_flags */
1086 map_doc, /* tp_doc */
1087 (traverseproc)map_traverse, /* tp_traverse */
1088 0, /* tp_clear */
1089 0, /* tp_richcompare */
1090 0, /* tp_weaklistoffset */
1091 PyObject_SelfIter, /* tp_iter */
1092 (iternextfunc)map_next, /* tp_iternext */
1093 0, /* tp_methods */
1094 0, /* tp_members */
1095 0, /* tp_getset */
1096 0, /* tp_base */
1097 0, /* tp_dict */
1098 0, /* tp_descr_get */
1099 0, /* tp_descr_set */
1100 0, /* tp_dictoffset */
1101 0, /* tp_init */
1102 PyType_GenericAlloc, /* tp_alloc */
1103 map_new, /* tp_new */
1104 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001105};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001106
Guido van Rossum79f25d91997-04-29 20:08:16 +00001107static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001108builtin_next(PyObject *self, PyObject *args)
1109{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 PyObject *it, *res;
1111 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1114 return NULL;
1115 if (!PyIter_Check(it)) {
1116 PyErr_Format(PyExc_TypeError,
1117 "%.200s object is not an iterator",
1118 it->ob_type->tp_name);
1119 return NULL;
1120 }
1121
1122 res = (*it->ob_type->tp_iternext)(it);
1123 if (res != NULL) {
1124 return res;
1125 } else if (def != NULL) {
1126 if (PyErr_Occurred()) {
1127 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1128 return NULL;
1129 PyErr_Clear();
1130 }
1131 Py_INCREF(def);
1132 return def;
1133 } else if (PyErr_Occurred()) {
1134 return NULL;
1135 } else {
1136 PyErr_SetNone(PyExc_StopIteration);
1137 return NULL;
1138 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001139}
1140
1141PyDoc_STRVAR(next_doc,
1142"next(iterator[, default])\n\
1143\n\
1144Return the next item from the iterator. If default is given and the iterator\n\
1145is exhausted, it is returned instead of raising StopIteration.");
1146
1147
1148static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001149builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001151 PyObject *v;
1152 PyObject *name;
1153 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1156 return NULL;
1157 if (PyObject_SetAttr(v, name, value) != 0)
1158 return NULL;
1159 Py_INCREF(Py_None);
1160 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001161}
1162
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001163PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001164"setattr(object, name, value)\n\
1165\n\
1166Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168
1169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001171builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001172{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 PyObject *v;
1174 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1177 return NULL;
1178 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1179 return NULL;
1180 Py_INCREF(Py_None);
1181 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001182}
1183
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001184PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001185"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186\n\
1187Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001188``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001189
1190
Guido van Rossum79f25d91997-04-29 20:08:16 +00001191static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001192builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001193{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001194 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 x = PyObject_Hash(v);
1197 if (x == -1)
1198 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001199 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001200}
1201
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001202PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001203"hash(object) -> integer\n\
1204\n\
1205Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001206the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001207
1208
Guido van Rossum79f25d91997-04-29 20:08:16 +00001209static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001210builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001211{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001213}
1214
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001215PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001216"hex(number) -> string\n\
1217\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001218Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001219
1220
Guido van Rossum79f25d91997-04-29 20:08:16 +00001221static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001222builtin_iter(PyObject *self, PyObject *args)
1223{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001225
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001226 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1227 return NULL;
1228 if (w == NULL)
1229 return PyObject_GetIter(v);
1230 if (!PyCallable_Check(v)) {
1231 PyErr_SetString(PyExc_TypeError,
1232 "iter(v, w): v must be callable");
1233 return NULL;
1234 }
1235 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001236}
1237
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001238PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001239"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001240iter(callable, sentinel) -> iterator\n\
1241\n\
1242Get an iterator from an object. In the first form, the argument must\n\
1243supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001244In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001245
1246
1247static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001248builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001249{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001252 res = PyObject_Size(v);
1253 if (res < 0 && PyErr_Occurred())
1254 return NULL;
1255 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001256}
1257
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001258PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001259"len(object) -> integer\n\
1260\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001261Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001262
1263
Guido van Rossum79f25d91997-04-29 20:08:16 +00001264static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001265builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001266{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 d = PyEval_GetLocals();
1270 Py_XINCREF(d);
1271 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001272}
1273
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001274PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001275"locals() -> dictionary\n\
1276\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001277Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001278
1279
Guido van Rossum79f25d91997-04-29 20:08:16 +00001280static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001281min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001282{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1284 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001286 if (PyTuple_Size(args) > 1)
1287 v = args;
1288 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1289 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001290
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001291 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1292 keyfunc = PyDict_GetItemString(kwds, "key");
1293 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1294 PyErr_Format(PyExc_TypeError,
1295 "%s() got an unexpected keyword argument", name);
1296 return NULL;
1297 }
1298 Py_INCREF(keyfunc);
1299 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 it = PyObject_GetIter(v);
1302 if (it == NULL) {
1303 Py_XDECREF(keyfunc);
1304 return NULL;
1305 }
Tim Petersc3074532001-05-03 07:00:32 +00001306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001307 maxitem = NULL; /* the result */
1308 maxval = NULL; /* the value associated with the result */
1309 while (( item = PyIter_Next(it) )) {
1310 /* get the value from the key function */
1311 if (keyfunc != NULL) {
1312 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1313 if (val == NULL)
1314 goto Fail_it_item;
1315 }
1316 /* no key function; the value is the item */
1317 else {
1318 val = item;
1319 Py_INCREF(val);
1320 }
Tim Petersc3074532001-05-03 07:00:32 +00001321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001322 /* maximum value and item are unset; set them */
1323 if (maxval == NULL) {
1324 maxitem = item;
1325 maxval = val;
1326 }
1327 /* maximum value and item are set; update them as necessary */
1328 else {
1329 int cmp = PyObject_RichCompareBool(val, maxval, op);
1330 if (cmp < 0)
1331 goto Fail_it_item_and_val;
1332 else if (cmp > 0) {
1333 Py_DECREF(maxval);
1334 Py_DECREF(maxitem);
1335 maxval = val;
1336 maxitem = item;
1337 }
1338 else {
1339 Py_DECREF(item);
1340 Py_DECREF(val);
1341 }
1342 }
1343 }
1344 if (PyErr_Occurred())
1345 goto Fail_it;
1346 if (maxval == NULL) {
1347 PyErr_Format(PyExc_ValueError,
1348 "%s() arg is an empty sequence", name);
1349 assert(maxitem == NULL);
1350 }
1351 else
1352 Py_DECREF(maxval);
1353 Py_DECREF(it);
1354 Py_XDECREF(keyfunc);
1355 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356
1357Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001358 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001359Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001360 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001361Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 Py_XDECREF(maxval);
1363 Py_XDECREF(maxitem);
1364 Py_DECREF(it);
1365 Py_XDECREF(keyfunc);
1366 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001367}
1368
Guido van Rossum79f25d91997-04-29 20:08:16 +00001369static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001370builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001371{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001373}
1374
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001375PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001376"min(iterable[, key=func]) -> value\n\
1377min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001378\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001380With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001381
1382
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001384builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001385{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001386 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001387}
1388
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001389PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001390"max(iterable[, key=func]) -> value\n\
1391max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001392\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001393With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001394With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001395
1396
Guido van Rossum79f25d91997-04-29 20:08:16 +00001397static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001398builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001400 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001401}
1402
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001403PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001404"oct(number) -> string\n\
1405\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001406Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001407
1408
Guido van Rossum79f25d91997-04-29 20:08:16 +00001409static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001410builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001411{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 long ord;
1413 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001414
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001415 if (PyBytes_Check(obj)) {
1416 size = PyBytes_GET_SIZE(obj);
1417 if (size == 1) {
1418 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1419 return PyLong_FromLong(ord);
1420 }
1421 }
1422 else if (PyUnicode_Check(obj)) {
1423 size = PyUnicode_GET_SIZE(obj);
1424 if (size == 1) {
1425 ord = (long)*PyUnicode_AS_UNICODE(obj);
1426 return PyLong_FromLong(ord);
1427 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001428#ifndef Py_UNICODE_WIDE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 if (size == 2) {
1430 /* Decode a valid surrogate pair */
1431 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1432 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1433 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1434 0xDC00 <= c1 && c1 <= 0xDFFF) {
1435 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1436 0x00010000);
1437 return PyLong_FromLong(ord);
1438 }
1439 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001440#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001441 }
1442 else if (PyByteArray_Check(obj)) {
1443 /* XXX Hopefully this is temporary */
1444 size = PyByteArray_GET_SIZE(obj);
1445 if (size == 1) {
1446 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1447 return PyLong_FromLong(ord);
1448 }
1449 }
1450 else {
1451 PyErr_Format(PyExc_TypeError,
1452 "ord() expected string of length 1, but " \
1453 "%.200s found", obj->ob_type->tp_name);
1454 return NULL;
1455 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001457 PyErr_Format(PyExc_TypeError,
1458 "ord() expected a character, "
1459 "but string of length %zd found",
1460 size);
1461 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001462}
1463
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001464PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001465"ord(c) -> integer\n\
1466\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001467Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001468)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001469#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001470PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001471"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001472)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001473#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001474;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001475
1476
Guido van Rossum79f25d91997-04-29 20:08:16 +00001477static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001478builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001479{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001480 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001482 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1483 return NULL;
1484 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001485}
1486
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001487PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001488"pow(x, y[, z]) -> number\n\
1489\n\
1490With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001491equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001492
1493
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001494
Guido van Rossum34343512006-11-30 22:13:52 +00001495static PyObject *
1496builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1497{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001498 static char *kwlist[] = {"sep", "end", "file", 0};
1499 static PyObject *dummy_args;
1500 PyObject *sep = NULL, *end = NULL, *file = NULL;
1501 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001502
Benjamin Peterson00102562012-01-11 21:00:16 -05001503 if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001504 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1506 kwlist, &sep, &end, &file))
1507 return NULL;
1508 if (file == NULL || file == Py_None) {
1509 file = PySys_GetObject("stdout");
1510 /* sys.stdout may be None when FILE* stdout isn't connected */
1511 if (file == Py_None)
1512 Py_RETURN_NONE;
1513 }
Guido van Rossum34343512006-11-30 22:13:52 +00001514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001515 if (sep == Py_None) {
1516 sep = NULL;
1517 }
1518 else if (sep && !PyUnicode_Check(sep)) {
1519 PyErr_Format(PyExc_TypeError,
1520 "sep must be None or a string, not %.200s",
1521 sep->ob_type->tp_name);
1522 return NULL;
1523 }
1524 if (end == Py_None) {
1525 end = NULL;
1526 }
1527 else if (end && !PyUnicode_Check(end)) {
1528 PyErr_Format(PyExc_TypeError,
1529 "end must be None or a string, not %.200s",
1530 end->ob_type->tp_name);
1531 return NULL;
1532 }
Guido van Rossum34343512006-11-30 22:13:52 +00001533
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001534 for (i = 0; i < PyTuple_Size(args); i++) {
1535 if (i > 0) {
1536 if (sep == NULL)
1537 err = PyFile_WriteString(" ", file);
1538 else
1539 err = PyFile_WriteObject(sep, file,
1540 Py_PRINT_RAW);
1541 if (err)
1542 return NULL;
1543 }
1544 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1545 Py_PRINT_RAW);
1546 if (err)
1547 return NULL;
1548 }
Guido van Rossum34343512006-11-30 22:13:52 +00001549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001550 if (end == NULL)
1551 err = PyFile_WriteString("\n", file);
1552 else
1553 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1554 if (err)
1555 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001557 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001558}
1559
1560PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001561"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001562\n\
1563Prints the values to a stream, or to sys.stdout by default.\n\
1564Optional keyword arguments:\n\
1565file: a file-like object (stream); defaults to the current sys.stdout.\n\
1566sep: string inserted between values, default a space.\n\
1567end: string appended after the last value, default a newline.");
1568
1569
Guido van Rossuma88a0332007-02-26 16:59:55 +00001570static PyObject *
1571builtin_input(PyObject *self, PyObject *args)
1572{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 PyObject *promptarg = NULL;
1574 PyObject *fin = PySys_GetObject("stdin");
1575 PyObject *fout = PySys_GetObject("stdout");
1576 PyObject *ferr = PySys_GetObject("stderr");
1577 PyObject *tmp;
1578 long fd;
1579 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001581 /* Parse arguments */
1582 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1583 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 /* Check that stdin/out/err are intact */
1586 if (fin == NULL || fin == Py_None) {
1587 PyErr_SetString(PyExc_RuntimeError,
1588 "input(): lost sys.stdin");
1589 return NULL;
1590 }
1591 if (fout == NULL || fout == Py_None) {
1592 PyErr_SetString(PyExc_RuntimeError,
1593 "input(): lost sys.stdout");
1594 return NULL;
1595 }
1596 if (ferr == NULL || ferr == Py_None) {
1597 PyErr_SetString(PyExc_RuntimeError,
1598 "input(): lost sys.stderr");
1599 return NULL;
1600 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001601
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 /* First of all, flush stderr */
1603 tmp = PyObject_CallMethod(ferr, "flush", "");
1604 if (tmp == NULL)
1605 PyErr_Clear();
1606 else
1607 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001608
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 /* We should only use (GNU) readline if Python's sys.stdin and
1610 sys.stdout are the same as C's stdin and stdout, because we
1611 need to pass it those. */
1612 tmp = PyObject_CallMethod(fin, "fileno", "");
1613 if (tmp == NULL) {
1614 PyErr_Clear();
1615 tty = 0;
1616 }
1617 else {
1618 fd = PyLong_AsLong(tmp);
1619 Py_DECREF(tmp);
1620 if (fd < 0 && PyErr_Occurred())
1621 return NULL;
1622 tty = fd == fileno(stdin) && isatty(fd);
1623 }
1624 if (tty) {
1625 tmp = PyObject_CallMethod(fout, "fileno", "");
1626 if (tmp == NULL)
1627 PyErr_Clear();
1628 else {
1629 fd = PyLong_AsLong(tmp);
1630 Py_DECREF(tmp);
1631 if (fd < 0 && PyErr_Occurred())
1632 return NULL;
1633 tty = fd == fileno(stdout) && isatty(fd);
1634 }
1635 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001637 /* If we're interactive, use (GNU) readline */
1638 if (tty) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001639 PyObject *po = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001640 char *prompt;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001641 char *s = NULL;
1642 PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
1643 PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
1644 char *stdin_encoding_str, *stdin_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 PyObject *result;
Victor Stinner02bfdb32011-02-23 12:10:23 +00001646 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001649 stdin_errors = PyObject_GetAttrString(fin, "errors");
1650 if (!stdin_encoding || !stdin_errors)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001651 /* stdin is a text stream, so it must have an
1652 encoding. */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001653 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001654 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001655 stdin_errors_str = _PyUnicode_AsString(stdin_errors);
1656 if (!stdin_encoding_str || !stdin_errors_str)
1657 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001658 tmp = PyObject_CallMethod(fout, "flush", "");
1659 if (tmp == NULL)
1660 PyErr_Clear();
1661 else
1662 Py_DECREF(tmp);
1663 if (promptarg != NULL) {
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001664 /* We have a prompt, encode it as stdout would */
1665 char *stdout_encoding_str, *stdout_errors_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 PyObject *stringpo;
Victor Stinner306f0102010-05-19 01:06:22 +00001667 stdout_encoding = PyObject_GetAttrString(fout, "encoding");
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001668 stdout_errors = PyObject_GetAttrString(fout, "errors");
1669 if (!stdout_encoding || !stdout_errors)
1670 goto _readline_errors;
Victor Stinner306f0102010-05-19 01:06:22 +00001671 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001672 stdout_errors_str = _PyUnicode_AsString(stdout_errors);
1673 if (!stdout_encoding_str || !stdout_errors_str)
1674 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 stringpo = PyObject_Str(promptarg);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001676 if (stringpo == NULL)
1677 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 po = PyUnicode_AsEncodedString(stringpo,
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001679 stdout_encoding_str, stdout_errors_str);
1680 Py_CLEAR(stdout_encoding);
1681 Py_CLEAR(stdout_errors);
1682 Py_CLEAR(stringpo);
1683 if (po == NULL)
1684 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 prompt = PyBytes_AsString(po);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001686 if (prompt == NULL)
1687 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 }
1689 else {
1690 po = NULL;
1691 prompt = "";
1692 }
1693 s = PyOS_Readline(stdin, stdout, prompt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 if (s == NULL) {
1695 if (!PyErr_Occurred())
1696 PyErr_SetNone(PyExc_KeyboardInterrupt);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001697 goto _readline_errors;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 }
Victor Stinner02bfdb32011-02-23 12:10:23 +00001699
1700 len = strlen(s);
1701 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 PyErr_SetNone(PyExc_EOFError);
1703 result = NULL;
1704 }
Victor Stinner02bfdb32011-02-23 12:10:23 +00001705 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 if (len > PY_SSIZE_T_MAX) {
1707 PyErr_SetString(PyExc_OverflowError,
1708 "input: input too long");
1709 result = NULL;
1710 }
1711 else {
Victor Stinner02bfdb32011-02-23 12:10:23 +00001712 len--; /* strip trailing '\n' */
1713 if (len != 0 && s[len-1] == '\r')
1714 len--; /* strip trailing '\r' */
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001715 result = PyUnicode_Decode(s, len, stdin_encoding_str,
1716 stdin_errors_str);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001717 }
1718 }
1719 Py_DECREF(stdin_encoding);
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001720 Py_DECREF(stdin_errors);
1721 Py_XDECREF(po);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 PyMem_FREE(s);
1723 return result;
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001724 _readline_errors:
1725 Py_XDECREF(stdin_encoding);
1726 Py_XDECREF(stdout_encoding);
1727 Py_XDECREF(stdin_errors);
1728 Py_XDECREF(stdout_errors);
1729 Py_XDECREF(po);
1730 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 /* Fallback if we're not interactive */
1734 if (promptarg != NULL) {
1735 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1736 return NULL;
1737 }
1738 tmp = PyObject_CallMethod(fout, "flush", "");
1739 if (tmp == NULL)
1740 PyErr_Clear();
1741 else
1742 Py_DECREF(tmp);
1743 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001744}
1745
1746PyDoc_STRVAR(input_doc,
1747"input([prompt]) -> string\n\
1748\n\
1749Read a string from standard input. The trailing newline is stripped.\n\
1750If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1751On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1752is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001753
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001754
Guido van Rossum79f25d91997-04-29 20:08:16 +00001755static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001756builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001757{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001759}
1760
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001761PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001762"repr(object) -> string\n\
1763\n\
1764Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001765For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001766
1767
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001769builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001771 static PyObject *round_str = NULL;
1772 PyObject *ndigits = NULL;
1773 static char *kwlist[] = {"number", "ndigits", 0};
1774 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001776 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1777 kwlist, &number, &ndigits))
1778 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001780 if (Py_TYPE(number)->tp_dict == NULL) {
1781 if (PyType_Ready(Py_TYPE(number)) < 0)
1782 return NULL;
1783 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001784
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001785 if (round_str == NULL) {
1786 round_str = PyUnicode_InternFromString("__round__");
1787 if (round_str == NULL)
1788 return NULL;
1789 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001791 round = _PyType_Lookup(Py_TYPE(number), round_str);
1792 if (round == NULL) {
1793 PyErr_Format(PyExc_TypeError,
1794 "type %.100s doesn't define __round__ method",
1795 Py_TYPE(number)->tp_name);
1796 return NULL;
1797 }
Alex Martelliae211f92007-08-22 23:21:33 +00001798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 if (ndigits == NULL)
1800 return PyObject_CallFunction(round, "O", number);
1801 else
1802 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001803}
1804
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001805PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001806"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001807\n\
1808Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001809This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001810same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001811
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001812
Raymond Hettinger64958a12003-12-17 20:43:33 +00001813static PyObject *
1814builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1817 PyObject *callable;
1818 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1819 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001821 /* args 1-3 should match listsort in Objects/listobject.c */
1822 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1823 kwlist, &seq, &keyfunc, &reverse))
1824 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 newlist = PySequence_List(seq);
1827 if (newlist == NULL)
1828 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001829
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 callable = PyObject_GetAttrString(newlist, "sort");
1831 if (callable == NULL) {
1832 Py_DECREF(newlist);
1833 return NULL;
1834 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001835
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001836 newargs = PyTuple_GetSlice(args, 1, 4);
1837 if (newargs == NULL) {
1838 Py_DECREF(newlist);
1839 Py_DECREF(callable);
1840 return NULL;
1841 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001842
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 v = PyObject_Call(callable, newargs, kwds);
1844 Py_DECREF(newargs);
1845 Py_DECREF(callable);
1846 if (v == NULL) {
1847 Py_DECREF(newlist);
1848 return NULL;
1849 }
1850 Py_DECREF(v);
1851 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001852}
1853
1854PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001855"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001856
Guido van Rossum79f25d91997-04-29 20:08:16 +00001857static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001858builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001859{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 PyObject *v = NULL;
1861 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001862
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1864 return NULL;
1865 if (v == NULL) {
1866 d = PyEval_GetLocals();
1867 if (d == NULL) {
1868 if (!PyErr_Occurred())
1869 PyErr_SetString(PyExc_SystemError,
1870 "vars(): no locals!?");
1871 }
1872 else
1873 Py_INCREF(d);
1874 }
1875 else {
1876 d = PyObject_GetAttrString(v, "__dict__");
1877 if (d == NULL) {
1878 PyErr_SetString(PyExc_TypeError,
1879 "vars() argument must have __dict__ attribute");
1880 return NULL;
1881 }
1882 }
1883 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001884}
1885
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001886PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001887"vars([object]) -> dictionary\n\
1888\n\
1889Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001890With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001891
Alex Martellia70b1912003-04-22 08:12:33 +00001892static PyObject*
1893builtin_sum(PyObject *self, PyObject *args)
1894{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 PyObject *seq;
1896 PyObject *result = NULL;
1897 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001898
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001899 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1900 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001902 iter = PyObject_GetIter(seq);
1903 if (iter == NULL)
1904 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001906 if (result == NULL) {
1907 result = PyLong_FromLong(0);
1908 if (result == NULL) {
1909 Py_DECREF(iter);
1910 return NULL;
1911 }
1912 } else {
1913 /* reject string values for 'start' parameter */
1914 if (PyUnicode_Check(result)) {
1915 PyErr_SetString(PyExc_TypeError,
1916 "sum() can't sum strings [use ''.join(seq) instead]");
1917 Py_DECREF(iter);
1918 return NULL;
1919 }
1920 if (PyByteArray_Check(result)) {
1921 PyErr_SetString(PyExc_TypeError,
1922 "sum() can't sum bytes [use b''.join(seq) instead]");
1923 Py_DECREF(iter);
1924 return NULL;
1925 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 Py_INCREF(result);
1928 }
Alex Martellia70b1912003-04-22 08:12:33 +00001929
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001930#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1932 Assumes all inputs are the same type. If the assumption fails, default
1933 to the more general routine.
1934 */
1935 if (PyLong_CheckExact(result)) {
1936 int overflow;
1937 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1938 /* If this already overflowed, don't even enter the loop. */
1939 if (overflow == 0) {
1940 Py_DECREF(result);
1941 result = NULL;
1942 }
1943 while(result == NULL) {
1944 item = PyIter_Next(iter);
1945 if (item == NULL) {
1946 Py_DECREF(iter);
1947 if (PyErr_Occurred())
1948 return NULL;
1949 return PyLong_FromLong(i_result);
1950 }
1951 if (PyLong_CheckExact(item)) {
1952 long b = PyLong_AsLongAndOverflow(item, &overflow);
1953 long x = i_result + b;
1954 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
1955 i_result = x;
1956 Py_DECREF(item);
1957 continue;
1958 }
1959 }
1960 /* Either overflowed or is not an int. Restore real objects and process normally */
1961 result = PyLong_FromLong(i_result);
1962 temp = PyNumber_Add(result, item);
1963 Py_DECREF(result);
1964 Py_DECREF(item);
1965 result = temp;
1966 if (result == NULL) {
1967 Py_DECREF(iter);
1968 return NULL;
1969 }
1970 }
1971 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001972
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001973 if (PyFloat_CheckExact(result)) {
1974 double f_result = PyFloat_AS_DOUBLE(result);
1975 Py_DECREF(result);
1976 result = NULL;
1977 while(result == NULL) {
1978 item = PyIter_Next(iter);
1979 if (item == NULL) {
1980 Py_DECREF(iter);
1981 if (PyErr_Occurred())
1982 return NULL;
1983 return PyFloat_FromDouble(f_result);
1984 }
1985 if (PyFloat_CheckExact(item)) {
1986 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1987 f_result += PyFloat_AS_DOUBLE(item);
1988 PyFPE_END_PROTECT(f_result)
1989 Py_DECREF(item);
1990 continue;
1991 }
1992 if (PyLong_CheckExact(item)) {
1993 long value;
1994 int overflow;
1995 value = PyLong_AsLongAndOverflow(item, &overflow);
1996 if (!overflow) {
1997 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1998 f_result += (double)value;
1999 PyFPE_END_PROTECT(f_result)
2000 Py_DECREF(item);
2001 continue;
2002 }
2003 }
2004 result = PyFloat_FromDouble(f_result);
2005 temp = PyNumber_Add(result, item);
2006 Py_DECREF(result);
2007 Py_DECREF(item);
2008 result = temp;
2009 if (result == NULL) {
2010 Py_DECREF(iter);
2011 return NULL;
2012 }
2013 }
2014 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00002015#endif
2016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002017 for(;;) {
2018 item = PyIter_Next(iter);
2019 if (item == NULL) {
2020 /* error, or end-of-sequence */
2021 if (PyErr_Occurred()) {
2022 Py_DECREF(result);
2023 result = NULL;
2024 }
2025 break;
2026 }
2027 /* It's tempting to use PyNumber_InPlaceAdd instead of
2028 PyNumber_Add here, to avoid quadratic running time
2029 when doing 'sum(list_of_lists, [])'. However, this
2030 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 empty = []
2033 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 would change the value of empty. */
2036 temp = PyNumber_Add(result, item);
2037 Py_DECREF(result);
2038 Py_DECREF(item);
2039 result = temp;
2040 if (result == NULL)
2041 break;
2042 }
2043 Py_DECREF(iter);
2044 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002045}
2046
2047PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002048"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002049\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002050Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2051of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002052empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002053
2054
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002055static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002056builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002057{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 PyObject *inst;
2059 PyObject *cls;
2060 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2063 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002065 retval = PyObject_IsInstance(inst, cls);
2066 if (retval < 0)
2067 return NULL;
2068 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002069}
2070
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002071PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002072"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002073\n\
2074Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002075With a type as second argument, return whether that is the object's type.\n\
2076The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002077isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002078
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002079
2080static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002081builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002082{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002083 PyObject *derived;
2084 PyObject *cls;
2085 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2088 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 retval = PyObject_IsSubclass(derived, cls);
2091 if (retval < 0)
2092 return NULL;
2093 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002094}
2095
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002096PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002097"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002098\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002099Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2100When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2101is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002102
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002103
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002104typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002105 PyObject_HEAD
2106 Py_ssize_t tuplesize;
2107 PyObject *ittuple; /* tuple of iterators */
2108 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002109} zipobject;
2110
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002111static PyObject *
2112zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002114 zipobject *lz;
2115 Py_ssize_t i;
2116 PyObject *ittuple; /* tuple of iterators */
2117 PyObject *result;
2118 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002120 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2121 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002122
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002123 /* args must be a tuple */
2124 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002126 /* obtain iterators */
2127 ittuple = PyTuple_New(tuplesize);
2128 if (ittuple == NULL)
2129 return NULL;
2130 for (i=0; i < tuplesize; ++i) {
2131 PyObject *item = PyTuple_GET_ITEM(args, i);
2132 PyObject *it = PyObject_GetIter(item);
2133 if (it == NULL) {
2134 if (PyErr_ExceptionMatches(PyExc_TypeError))
2135 PyErr_Format(PyExc_TypeError,
2136 "zip argument #%zd must support iteration",
2137 i+1);
2138 Py_DECREF(ittuple);
2139 return NULL;
2140 }
2141 PyTuple_SET_ITEM(ittuple, i, it);
2142 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002144 /* create a result holder */
2145 result = PyTuple_New(tuplesize);
2146 if (result == NULL) {
2147 Py_DECREF(ittuple);
2148 return NULL;
2149 }
2150 for (i=0 ; i < tuplesize ; i++) {
2151 Py_INCREF(Py_None);
2152 PyTuple_SET_ITEM(result, i, Py_None);
2153 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 /* create zipobject structure */
2156 lz = (zipobject *)type->tp_alloc(type, 0);
2157 if (lz == NULL) {
2158 Py_DECREF(ittuple);
2159 Py_DECREF(result);
2160 return NULL;
2161 }
2162 lz->ittuple = ittuple;
2163 lz->tuplesize = tuplesize;
2164 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002167}
2168
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002169static void
2170zip_dealloc(zipobject *lz)
2171{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 PyObject_GC_UnTrack(lz);
2173 Py_XDECREF(lz->ittuple);
2174 Py_XDECREF(lz->result);
2175 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002176}
2177
2178static int
2179zip_traverse(zipobject *lz, visitproc visit, void *arg)
2180{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002181 Py_VISIT(lz->ittuple);
2182 Py_VISIT(lz->result);
2183 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002184}
2185
2186static PyObject *
2187zip_next(zipobject *lz)
2188{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 Py_ssize_t i;
2190 Py_ssize_t tuplesize = lz->tuplesize;
2191 PyObject *result = lz->result;
2192 PyObject *it;
2193 PyObject *item;
2194 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 if (tuplesize == 0)
2197 return NULL;
2198 if (Py_REFCNT(result) == 1) {
2199 Py_INCREF(result);
2200 for (i=0 ; i < tuplesize ; i++) {
2201 it = PyTuple_GET_ITEM(lz->ittuple, i);
2202 item = (*Py_TYPE(it)->tp_iternext)(it);
2203 if (item == NULL) {
2204 Py_DECREF(result);
2205 return NULL;
2206 }
2207 olditem = PyTuple_GET_ITEM(result, i);
2208 PyTuple_SET_ITEM(result, i, item);
2209 Py_DECREF(olditem);
2210 }
2211 } else {
2212 result = PyTuple_New(tuplesize);
2213 if (result == NULL)
2214 return NULL;
2215 for (i=0 ; i < tuplesize ; i++) {
2216 it = PyTuple_GET_ITEM(lz->ittuple, i);
2217 item = (*Py_TYPE(it)->tp_iternext)(it);
2218 if (item == NULL) {
2219 Py_DECREF(result);
2220 return NULL;
2221 }
2222 PyTuple_SET_ITEM(result, i, item);
2223 }
2224 }
2225 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002226}
Barry Warsawbd599b52000-08-03 15:45:29 +00002227
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002228PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002229"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002230\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002231Return a zip object whose .__next__() method returns a tuple where\n\
2232the i-th element comes from the i-th iterable argument. The .__next__()\n\
2233method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002234is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002235
2236PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002237 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2238 "zip", /* tp_name */
2239 sizeof(zipobject), /* tp_basicsize */
2240 0, /* tp_itemsize */
2241 /* methods */
2242 (destructor)zip_dealloc, /* tp_dealloc */
2243 0, /* tp_print */
2244 0, /* tp_getattr */
2245 0, /* tp_setattr */
2246 0, /* tp_reserved */
2247 0, /* tp_repr */
2248 0, /* tp_as_number */
2249 0, /* tp_as_sequence */
2250 0, /* tp_as_mapping */
2251 0, /* tp_hash */
2252 0, /* tp_call */
2253 0, /* tp_str */
2254 PyObject_GenericGetAttr, /* tp_getattro */
2255 0, /* tp_setattro */
2256 0, /* tp_as_buffer */
2257 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2258 Py_TPFLAGS_BASETYPE, /* tp_flags */
2259 zip_doc, /* tp_doc */
2260 (traverseproc)zip_traverse, /* tp_traverse */
2261 0, /* tp_clear */
2262 0, /* tp_richcompare */
2263 0, /* tp_weaklistoffset */
2264 PyObject_SelfIter, /* tp_iter */
2265 (iternextfunc)zip_next, /* tp_iternext */
2266 0, /* tp_methods */
2267 0, /* tp_members */
2268 0, /* tp_getset */
2269 0, /* tp_base */
2270 0, /* tp_dict */
2271 0, /* tp_descr_get */
2272 0, /* tp_descr_set */
2273 0, /* tp_dictoffset */
2274 0, /* tp_init */
2275 PyType_GenericAlloc, /* tp_alloc */
2276 zip_new, /* tp_new */
2277 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002278};
Barry Warsawbd599b52000-08-03 15:45:29 +00002279
2280
Guido van Rossum79f25d91997-04-29 20:08:16 +00002281static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002282 {"__build_class__", (PyCFunction)builtin___build_class__,
2283 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2284 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2285 {"abs", builtin_abs, METH_O, abs_doc},
2286 {"all", builtin_all, METH_O, all_doc},
2287 {"any", builtin_any, METH_O, any_doc},
2288 {"ascii", builtin_ascii, METH_O, ascii_doc},
2289 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002290 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002291 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2292 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2293 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2294 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2295 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2296 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2297 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2298 {"format", builtin_format, METH_VARARGS, format_doc},
2299 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2300 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2301 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2302 {"hash", builtin_hash, METH_O, hash_doc},
2303 {"hex", builtin_hex, METH_O, hex_doc},
2304 {"id", builtin_id, METH_O, id_doc},
2305 {"input", builtin_input, METH_VARARGS, input_doc},
2306 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2307 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2308 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2309 {"len", builtin_len, METH_O, len_doc},
2310 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2311 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2312 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2313 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2314 {"oct", builtin_oct, METH_O, oct_doc},
2315 {"ord", builtin_ord, METH_O, ord_doc},
2316 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2317 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2318 {"repr", builtin_repr, METH_O, repr_doc},
2319 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2320 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2321 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2322 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2323 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2324 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002325};
2326
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002327PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002328"Built-in functions, exceptions, and other objects.\n\
2329\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002330Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002331
Martin v. Löwis1a214512008-06-11 05:26:20 +00002332static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002333 PyModuleDef_HEAD_INIT,
2334 "builtins",
2335 builtin_doc,
2336 -1, /* multiple "initialization" just copies the module dict. */
2337 builtin_methods,
2338 NULL,
2339 NULL,
2340 NULL,
2341 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002342};
2343
2344
Guido van Rossum25ce5661997-08-02 03:10:38 +00002345PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002346_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002347{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002348 PyObject *mod, *dict, *debug;
2349 mod = PyModule_Create(&builtinsmodule);
2350 if (mod == NULL)
2351 return NULL;
2352 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002353
Tim Peters7571a0f2003-03-23 17:52:28 +00002354#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002355 /* "builtins" exposes a number of statically allocated objects
2356 * that, before this code was added in 2.3, never showed up in
2357 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2358 * result, programs leaking references to None and False (etc)
2359 * couldn't be diagnosed by examining sys.getobjects(0).
2360 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002361#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2362#else
2363#define ADD_TO_ALL(OBJECT) (void)0
2364#endif
2365
Tim Peters4b7625e2001-09-13 21:37:17 +00002366#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002367 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2368 return NULL; \
2369 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002370
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 SETBUILTIN("None", Py_None);
2372 SETBUILTIN("Ellipsis", Py_Ellipsis);
2373 SETBUILTIN("NotImplemented", Py_NotImplemented);
2374 SETBUILTIN("False", Py_False);
2375 SETBUILTIN("True", Py_True);
2376 SETBUILTIN("bool", &PyBool_Type);
2377 SETBUILTIN("memoryview", &PyMemoryView_Type);
2378 SETBUILTIN("bytearray", &PyByteArray_Type);
2379 SETBUILTIN("bytes", &PyBytes_Type);
2380 SETBUILTIN("classmethod", &PyClassMethod_Type);
2381 SETBUILTIN("complex", &PyComplex_Type);
2382 SETBUILTIN("dict", &PyDict_Type);
2383 SETBUILTIN("enumerate", &PyEnum_Type);
2384 SETBUILTIN("filter", &PyFilter_Type);
2385 SETBUILTIN("float", &PyFloat_Type);
2386 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2387 SETBUILTIN("property", &PyProperty_Type);
2388 SETBUILTIN("int", &PyLong_Type);
2389 SETBUILTIN("list", &PyList_Type);
2390 SETBUILTIN("map", &PyMap_Type);
2391 SETBUILTIN("object", &PyBaseObject_Type);
2392 SETBUILTIN("range", &PyRange_Type);
2393 SETBUILTIN("reversed", &PyReversed_Type);
2394 SETBUILTIN("set", &PySet_Type);
2395 SETBUILTIN("slice", &PySlice_Type);
2396 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2397 SETBUILTIN("str", &PyUnicode_Type);
2398 SETBUILTIN("super", &PySuper_Type);
2399 SETBUILTIN("tuple", &PyTuple_Type);
2400 SETBUILTIN("type", &PyType_Type);
2401 SETBUILTIN("zip", &PyZip_Type);
2402 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2403 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2404 Py_XDECREF(debug);
2405 return NULL;
2406 }
2407 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002408
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002410#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002411#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002412}