blob: c174e9d5ef2021584949e085ea87faabfea45c5a [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Benjamin Petersonea281a52011-08-12 23:10:50 -05009#include "asdl.h"
10#include "ast.h"
11
Guido van Rossum6bf62da1997-04-11 20:37:35 +000012#include <ctype.h>
13
Victor Stinnerb744ba12010-05-15 12:27:16 +000014#ifdef HAVE_LANGINFO_H
15#include <langinfo.h> /* CODESET */
16#endif
17
Mark Hammond26cffde2001-05-14 12:17:34 +000018/* The default encoding used by the platform file system APIs
19 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000020
21 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
22 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde2001-05-14 12:17:34 +000023*/
Victor Stinner99b95382011-07-04 14:23:54 +020024#ifdef HAVE_MBCS
Mark Hammond26cffde2001-05-14 12:17:34 +000025const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000027#elif defined(__APPLE__)
28const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020030#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000031const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000032int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde2001-05-14 12:17:34 +000033#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000034
Martin v. Löwisafe55bb2011-10-09 10:38:36 +020035_Py_identifier(fileno);
36_Py_identifier(flush);
37
Guido van Rossum79f25d91997-04-29 20:08:16 +000038static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000039builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
40{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000041 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
42 PyObject *cls = NULL;
Brett Cannonb94767f2011-02-22 20:15:44 +000043 Py_ssize_t nargs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000044
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000045 assert(args != NULL);
46 if (!PyTuple_Check(args)) {
47 PyErr_SetString(PyExc_TypeError,
48 "__build_class__: args is not a tuple");
49 return NULL;
50 }
51 nargs = PyTuple_GET_SIZE(args);
52 if (nargs < 2) {
53 PyErr_SetString(PyExc_TypeError,
54 "__build_class__: not enough arguments");
55 return NULL;
56 }
57 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
58 name = PyTuple_GET_ITEM(args, 1);
59 if (!PyUnicode_Check(name)) {
60 PyErr_SetString(PyExc_TypeError,
61 "__build_class__: name is not a string");
62 return NULL;
63 }
64 bases = PyTuple_GetSlice(args, 2, nargs);
65 if (bases == NULL)
66 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000068 if (kwds == NULL) {
69 meta = NULL;
70 mkw = NULL;
71 }
72 else {
73 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
74 if (mkw == NULL) {
75 Py_DECREF(bases);
76 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000077 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000078 meta = PyDict_GetItemString(mkw, "metaclass");
79 if (meta != NULL) {
80 Py_INCREF(meta);
81 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
82 Py_DECREF(meta);
83 Py_DECREF(mkw);
84 Py_DECREF(bases);
85 return NULL;
86 }
87 }
88 }
89 if (meta == NULL) {
90 if (PyTuple_GET_SIZE(bases) == 0)
91 meta = (PyObject *) (&PyType_Type);
92 else {
93 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
94 meta = (PyObject *) (base0->ob_type);
95 }
96 Py_INCREF(meta);
97 }
98 prep = PyObject_GetAttrString(meta, "__prepare__");
99 if (prep == NULL) {
100 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
101 PyErr_Clear();
102 ns = PyDict_New();
103 }
104 else {
105 Py_DECREF(meta);
106 Py_XDECREF(mkw);
107 Py_DECREF(bases);
108 return NULL;
109 }
110 }
111 else {
112 PyObject *pargs = PyTuple_Pack(2, name, bases);
113 if (pargs == NULL) {
114 Py_DECREF(prep);
115 Py_DECREF(meta);
116 Py_XDECREF(mkw);
117 Py_DECREF(bases);
118 return NULL;
119 }
120 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
121 Py_DECREF(pargs);
122 Py_DECREF(prep);
123 }
124 if (ns == NULL) {
125 Py_DECREF(meta);
126 Py_XDECREF(mkw);
127 Py_DECREF(bases);
128 return NULL;
129 }
130 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
131 if (cell != NULL) {
132 PyObject *margs;
133 margs = PyTuple_Pack(3, name, bases, ns);
134 if (margs != NULL) {
135 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
136 Py_DECREF(margs);
137 }
138 if (cls != NULL && PyCell_Check(cell)) {
139 Py_INCREF(cls);
140 PyCell_SET(cell, cls);
141 }
142 Py_DECREF(cell);
143 }
144 Py_DECREF(ns);
145 Py_DECREF(meta);
146 Py_XDECREF(mkw);
147 Py_DECREF(bases);
148 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000149}
150
151PyDoc_STRVAR(build_class_doc,
152"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
153\n\
154Internal helper function used by the class statement.");
155
156static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000157builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000158{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000159 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
160 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400161 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000163
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400164 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 kwlist, &name, &globals, &locals, &fromlist, &level))
166 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400167 return PyImport_ImportModuleLevelObject(name, globals, locals,
168 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000169}
170
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000171PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000172"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000173\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000174Import a module. Because this function is meant for use by the Python\n\
175interpreter and not for general use it is better to use\n\
176importlib.import_module() to programmatically import a module.\n\
177\n\
178The globals argument is only used to determine the context;\n\
179they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000180should be a list of names to emulate ``from name import ...'', or an\n\
181empty list to emulate ``import name''.\n\
182When importing a module from a package, note that __import__('A.B', ...)\n\
183returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000184fromlist is not empty. Level is used to determine whether to perform \n\
185absolute or relative imports. -1 is the original strategy of attempting\n\
186both absolute and relative imports, 0 is absolute, a positive number\n\
187is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000188
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000189
Guido van Rossum79f25d91997-04-29 20:08:16 +0000190static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000191builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000192{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000194}
195
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000196PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000197"abs(number) -> number\n\
198\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000199Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000200
Raymond Hettinger96229b12005-03-11 06:49:40 +0000201static PyObject *
202builtin_all(PyObject *self, PyObject *v)
203{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000204 PyObject *it, *item;
205 PyObject *(*iternext)(PyObject *);
206 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 it = PyObject_GetIter(v);
209 if (it == NULL)
210 return NULL;
211 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000213 for (;;) {
214 item = iternext(it);
215 if (item == NULL)
216 break;
217 cmp = PyObject_IsTrue(item);
218 Py_DECREF(item);
219 if (cmp < 0) {
220 Py_DECREF(it);
221 return NULL;
222 }
223 if (cmp == 0) {
224 Py_DECREF(it);
225 Py_RETURN_FALSE;
226 }
227 }
228 Py_DECREF(it);
229 if (PyErr_Occurred()) {
230 if (PyErr_ExceptionMatches(PyExc_StopIteration))
231 PyErr_Clear();
232 else
233 return NULL;
234 }
235 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000236}
237
238PyDoc_STRVAR(all_doc,
239"all(iterable) -> bool\n\
240\n\
241Return True if bool(x) is True for all values x in the iterable.");
242
243static PyObject *
244builtin_any(PyObject *self, PyObject *v)
245{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000246 PyObject *it, *item;
247 PyObject *(*iternext)(PyObject *);
248 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 it = PyObject_GetIter(v);
251 if (it == NULL)
252 return NULL;
253 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 for (;;) {
256 item = iternext(it);
257 if (item == NULL)
258 break;
259 cmp = PyObject_IsTrue(item);
260 Py_DECREF(item);
261 if (cmp < 0) {
262 Py_DECREF(it);
263 return NULL;
264 }
265 if (cmp == 1) {
266 Py_DECREF(it);
267 Py_RETURN_TRUE;
268 }
269 }
270 Py_DECREF(it);
271 if (PyErr_Occurred()) {
272 if (PyErr_ExceptionMatches(PyExc_StopIteration))
273 PyErr_Clear();
274 else
275 return NULL;
276 }
277 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000278}
279
280PyDoc_STRVAR(any_doc,
281"any(iterable) -> bool\n\
282\n\
283Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000284
Georg Brandl559e5d72008-06-11 18:37:52 +0000285static PyObject *
286builtin_ascii(PyObject *self, PyObject *v)
287{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 return PyObject_ASCII(v);
Georg Brandl559e5d72008-06-11 18:37:52 +0000289}
290
291PyDoc_STRVAR(ascii_doc,
292"ascii(object) -> string\n\
293\n\
294As repr(), return a string containing a printable representation of an\n\
295object, but escape the non-ASCII characters in the string returned by\n\
296repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
297to that returned by repr() in Python 2.");
298
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000299
Guido van Rossum79f25d91997-04-29 20:08:16 +0000300static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000301builtin_bin(PyObject *self, PyObject *v)
302{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000303 return PyNumber_ToBase(v, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000304}
305
306PyDoc_STRVAR(bin_doc,
307"bin(number) -> string\n\
308\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -0400309Return the binary representation of an integer.");
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000310
311
Antoine Pitroue71362d2010-11-27 22:00:11 +0000312static PyObject *
313builtin_callable(PyObject *self, PyObject *v)
314{
315 return PyBool_FromLong((long)PyCallable_Check(v));
316}
317
318PyDoc_STRVAR(callable_doc,
319"callable(object) -> bool\n\
320\n\
321Return whether the object is callable (i.e., some kind of function).\n\
322Note that classes are callable, as are instances of classes with a\n\
323__call__() method.");
324
325
Raymond Hettinger17301e92008-03-13 00:19:26 +0000326typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000327 PyObject_HEAD
328 PyObject *func;
329 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000330} filterobject;
331
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000332static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000333filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000334{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000335 PyObject *func, *seq;
336 PyObject *it;
337 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
340 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
343 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 /* Get iterator. */
346 it = PyObject_GetIter(seq);
347 if (it == NULL)
348 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000349
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000350 /* create filterobject structure */
351 lz = (filterobject *)type->tp_alloc(type, 0);
352 if (lz == NULL) {
353 Py_DECREF(it);
354 return NULL;
355 }
356 Py_INCREF(func);
357 lz->func = func;
358 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000359
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000360 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000361}
362
363static void
364filter_dealloc(filterobject *lz)
365{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 PyObject_GC_UnTrack(lz);
367 Py_XDECREF(lz->func);
368 Py_XDECREF(lz->it);
369 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000370}
371
372static int
373filter_traverse(filterobject *lz, visitproc visit, void *arg)
374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 Py_VISIT(lz->it);
376 Py_VISIT(lz->func);
377 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000378}
379
380static PyObject *
381filter_next(filterobject *lz)
382{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 PyObject *item;
384 PyObject *it = lz->it;
385 long ok;
386 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000387
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 iternext = *Py_TYPE(it)->tp_iternext;
389 for (;;) {
390 item = iternext(it);
391 if (item == NULL)
392 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
395 ok = PyObject_IsTrue(item);
396 } else {
397 PyObject *good;
398 good = PyObject_CallFunctionObjArgs(lz->func,
399 item, NULL);
400 if (good == NULL) {
401 Py_DECREF(item);
402 return NULL;
403 }
404 ok = PyObject_IsTrue(good);
405 Py_DECREF(good);
406 }
407 if (ok)
408 return item;
409 Py_DECREF(item);
410 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000411}
412
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000413PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000414"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000415\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000416Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000417is true. If function is None, return the items that are true.");
418
419PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 PyVarObject_HEAD_INIT(&PyType_Type, 0)
421 "filter", /* tp_name */
422 sizeof(filterobject), /* tp_basicsize */
423 0, /* tp_itemsize */
424 /* methods */
425 (destructor)filter_dealloc, /* tp_dealloc */
426 0, /* tp_print */
427 0, /* tp_getattr */
428 0, /* tp_setattr */
429 0, /* tp_reserved */
430 0, /* tp_repr */
431 0, /* tp_as_number */
432 0, /* tp_as_sequence */
433 0, /* tp_as_mapping */
434 0, /* tp_hash */
435 0, /* tp_call */
436 0, /* tp_str */
437 PyObject_GenericGetAttr, /* tp_getattro */
438 0, /* tp_setattro */
439 0, /* tp_as_buffer */
440 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
441 Py_TPFLAGS_BASETYPE, /* tp_flags */
442 filter_doc, /* tp_doc */
443 (traverseproc)filter_traverse, /* tp_traverse */
444 0, /* tp_clear */
445 0, /* tp_richcompare */
446 0, /* tp_weaklistoffset */
447 PyObject_SelfIter, /* tp_iter */
448 (iternextfunc)filter_next, /* tp_iternext */
449 0, /* tp_methods */
450 0, /* tp_members */
451 0, /* tp_getset */
452 0, /* tp_base */
453 0, /* tp_dict */
454 0, /* tp_descr_get */
455 0, /* tp_descr_set */
456 0, /* tp_dictoffset */
457 0, /* tp_init */
458 PyType_GenericAlloc, /* tp_alloc */
459 filter_new, /* tp_new */
460 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000461};
462
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000463
Eric Smith8c663262007-08-25 02:26:07 +0000464static PyObject *
465builtin_format(PyObject *self, PyObject *args)
466{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000467 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000468 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000469
Eric Smith8fd3eba2008-02-17 19:48:00 +0000470 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000471 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000472
Eric Smith8fd3eba2008-02-17 19:48:00 +0000473 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000474}
475
Eric Smith8c663262007-08-25 02:26:07 +0000476PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000477"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000478\n\
Eric Smith81936692007-08-31 01:14:01 +0000479Returns value.__format__(format_spec)\n\
480format_spec defaults to \"\"");
481
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000482static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000483builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000484{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000487 if (!PyArg_ParseTuple(args, "i:chr", &x))
488 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000491}
492
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000493PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000494"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000495\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000496Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000497)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000498#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000499PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000500"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000501)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000502#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000503;
Guido van Rossum09095f32000-03-10 23:00:52 +0000504
505
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000506static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000507source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 char *str;
510 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000511
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 if (PyUnicode_Check(cmd)) {
513 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200514 str = PyUnicode_AsUTF8AndSize(cmd, &size);
515 if (str == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 return NULL;
517 }
518 else if (!PyObject_CheckReadBuffer(cmd)) {
519 PyErr_Format(PyExc_TypeError,
520 "%s() arg 1 must be a %s object",
521 funcname, what);
522 return NULL;
523 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200524 else if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 return NULL;
526 }
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 if (strlen(str) != size) {
529 PyErr_SetString(PyExc_TypeError,
530 "source code string cannot contain null bytes");
531 return NULL;
532 }
533 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000534}
535
Guido van Rossum79f25d91997-04-29 20:08:16 +0000536static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000537builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000538{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 char *str;
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000540 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 char *filename;
542 char *startstr;
543 int mode = -1;
544 int dont_inherit = 0;
545 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000546 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547 int is_ast;
548 PyCompilerFlags cf;
549 PyObject *cmd;
550 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000551 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000552 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000553 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000554
Georg Brandl8334fd92010-12-04 10:26:46 +0000555 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000556 &cmd,
557 PyUnicode_FSConverter, &filename_obj,
558 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000559 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000561
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000562 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000565 if (supplied_flags &
566 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
567 {
568 PyErr_SetString(PyExc_ValueError,
569 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000570 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000571 }
572 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000573
Georg Brandl8334fd92010-12-04 10:26:46 +0000574 if (optimize < -1 || optimize > 2) {
575 PyErr_SetString(PyExc_ValueError,
576 "compile(): invalid optimize value");
577 goto error;
578 }
579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 if (!dont_inherit) {
581 PyEval_MergeCompilerFlags(&cf);
582 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 if (strcmp(startstr, "exec") == 0)
585 mode = 0;
586 else if (strcmp(startstr, "eval") == 0)
587 mode = 1;
588 else if (strcmp(startstr, "single") == 0)
589 mode = 2;
590 else {
591 PyErr_SetString(PyExc_ValueError,
592 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000593 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 is_ast = PyAST_Check(cmd);
597 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000598 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000599 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000600 if (supplied_flags & PyCF_ONLY_AST) {
601 Py_INCREF(cmd);
602 result = cmd;
603 }
604 else {
605 PyArena *arena;
606 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000607
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 arena = PyArena_New();
609 mod = PyAST_obj2mod(cmd, arena, mode);
610 if (mod == NULL) {
611 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000612 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 }
Benjamin Peterson832bfe22011-08-09 16:15:04 -0500614 if (!PyAST_Validate(mod)) {
615 PyArena_Free(arena);
616 goto error;
617 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000618 result = (PyObject*)PyAST_CompileEx(mod, filename,
619 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 PyArena_Free(arena);
621 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000622 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000624
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000625 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
626 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000627 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000628
Georg Brandl8334fd92010-12-04 10:26:46 +0000629 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000630 goto finally;
631
632error:
633 result = NULL;
634finally:
635 Py_DECREF(filename_obj);
636 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000637}
638
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000639PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000640"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000641\n\
642Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000643into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000644The filename will be used for run-time error messages.\n\
645The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000646single (interactive) statement, or 'eval' to compile an expression.\n\
647The flags argument, if present, controls which future statements influence\n\
648the compilation of the code.\n\
649The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
650the effects of any future statements in effect in the code calling\n\
651compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000652in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000653
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000655builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000656{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000659 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
660 return NULL;
661 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000662}
663
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000664PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000665"dir([object]) -> list of strings\n"
666"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000667"If called without an argument, return the names in the current scope.\n"
668"Else, return an alphabetized list of names comprising (some of) the attributes\n"
669"of the given object, and of attributes reachable from it.\n"
670"If the object supplies a method named __dir__, it will be used; otherwise\n"
671"the default dir() logic is used and returns:\n"
672" for a module object: the module's attributes.\n"
673" for a class object: its attributes, and recursively the attributes\n"
674" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000675" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000676" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000677
Guido van Rossum79f25d91997-04-29 20:08:16 +0000678static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000679builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000680{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000683 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
684 return NULL;
685 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000686}
687
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000688PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000689"divmod(x, y) -> (div, mod)\n\
690\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000691Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000692
693
Guido van Rossum79f25d91997-04-29 20:08:16 +0000694static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000695builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000696{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000697 PyObject *cmd, *result, *tmp = NULL;
698 PyObject *globals = Py_None, *locals = Py_None;
699 char *str;
700 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
703 return NULL;
704 if (locals != Py_None && !PyMapping_Check(locals)) {
705 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
706 return NULL;
707 }
708 if (globals != Py_None && !PyDict_Check(globals)) {
709 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
710 "globals must be a real dict; try eval(expr, {}, mapping)"
711 : "globals must be a dict");
712 return NULL;
713 }
714 if (globals == Py_None) {
715 globals = PyEval_GetGlobals();
716 if (locals == Py_None)
717 locals = PyEval_GetLocals();
718 }
719 else if (locals == Py_None)
720 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000721
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 if (globals == NULL || locals == NULL) {
723 PyErr_SetString(PyExc_TypeError,
724 "eval must be given globals and locals "
725 "when called without a frame");
726 return NULL;
727 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000728
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000729 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
730 if (PyDict_SetItemString(globals, "__builtins__",
731 PyEval_GetBuiltins()) != 0)
732 return NULL;
733 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000734
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000735 if (PyCode_Check(cmd)) {
736 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
737 PyErr_SetString(PyExc_TypeError,
738 "code object passed to eval() may not contain free variables");
739 return NULL;
740 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000741 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000742 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
745 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
746 if (str == NULL)
747 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000748
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 while (*str == ' ' || *str == '\t')
750 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000751
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000752 (void)PyEval_MergeCompilerFlags(&cf);
753 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
754 Py_XDECREF(tmp);
755 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000756}
757
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000758PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000759"eval(source[, globals[, locals]]) -> value\n\
760\n\
761Evaluate the source in the context of globals and locals.\n\
762The source may be a string representing a Python expression\n\
763or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000764The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000765defaulting to the current globals and locals.\n\
766If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000767
Georg Brandl7cae87c2006-09-06 06:51:57 +0000768static PyObject *
769builtin_exec(PyObject *self, PyObject *args)
770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 PyObject *v;
772 PyObject *prog, *globals = Py_None, *locals = Py_None;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
775 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000776
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 if (globals == Py_None) {
778 globals = PyEval_GetGlobals();
779 if (locals == Py_None) {
780 locals = PyEval_GetLocals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 }
782 if (!globals || !locals) {
783 PyErr_SetString(PyExc_SystemError,
784 "globals and locals cannot be NULL");
785 return NULL;
786 }
787 }
788 else if (locals == Py_None)
789 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000791 if (!PyDict_Check(globals)) {
792 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
793 globals->ob_type->tp_name);
794 return NULL;
795 }
796 if (!PyMapping_Check(locals)) {
797 PyErr_Format(PyExc_TypeError,
798 "arg 3 must be a mapping or None, not %.100s",
799 locals->ob_type->tp_name);
800 return NULL;
801 }
802 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
803 if (PyDict_SetItemString(globals, "__builtins__",
804 PyEval_GetBuiltins()) != 0)
805 return NULL;
806 }
807
808 if (PyCode_Check(prog)) {
809 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
810 PyErr_SetString(PyExc_TypeError,
811 "code object passed to exec() may not "
812 "contain free variables");
813 return NULL;
814 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000815 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 }
817 else {
818 char *str;
819 PyCompilerFlags cf;
820 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
821 str = source_as_string(prog, "exec",
822 "string, bytes or code", &cf);
823 if (str == NULL)
824 return NULL;
825 if (PyEval_MergeCompilerFlags(&cf))
826 v = PyRun_StringFlags(str, Py_file_input, globals,
827 locals, &cf);
828 else
829 v = PyRun_String(str, Py_file_input, globals, locals);
830 }
831 if (v == NULL)
832 return NULL;
833 Py_DECREF(v);
834 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000835}
836
837PyDoc_STRVAR(exec_doc,
838"exec(object[, globals[, locals]])\n\
839\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000840Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000841object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000842The globals and locals are dictionaries, defaulting to the current\n\
843globals and locals. If only globals is given, locals defaults to it.");
844
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000845
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000847builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000848{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 PyObject *v, *result, *dflt = NULL;
850 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000851
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
853 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000854
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 if (!PyUnicode_Check(name)) {
856 PyErr_SetString(PyExc_TypeError,
857 "getattr(): attribute name must be string");
858 return NULL;
859 }
860 result = PyObject_GetAttr(v, name);
861 if (result == NULL && dflt != NULL &&
862 PyErr_ExceptionMatches(PyExc_AttributeError))
863 {
864 PyErr_Clear();
865 Py_INCREF(dflt);
866 result = dflt;
867 }
868 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000869}
870
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000871PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000872"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000873\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000874Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
875When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000876exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000877
878
Guido van Rossum79f25d91997-04-29 20:08:16 +0000879static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000880builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000881{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000882 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 d = PyEval_GetGlobals();
885 Py_XINCREF(d);
886 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000887}
888
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000889PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000890"globals() -> dictionary\n\
891\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000892Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000893
894
Guido van Rossum79f25d91997-04-29 20:08:16 +0000895static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000896builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000897{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 PyObject *v;
899 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000901 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
902 return NULL;
903 if (!PyUnicode_Check(name)) {
904 PyErr_SetString(PyExc_TypeError,
905 "hasattr(): attribute name must be string");
906 return NULL;
907 }
908 v = PyObject_GetAttr(v, name);
909 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000910 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000911 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000912 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000914 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 }
916 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000917 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000918}
919
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000920PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000921"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000922\n\
923Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000924(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000925
926
Guido van Rossum79f25d91997-04-29 20:08:16 +0000927static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000928builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000929{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000930 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000931}
932
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000933PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000934"id(object) -> integer\n\
935\n\
936Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000937simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000938
939
Raymond Hettingera6c60372008-03-13 01:26:19 +0000940/* map object ************************************************************/
941
942typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 PyObject_HEAD
944 PyObject *iters;
945 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000946} mapobject;
947
Guido van Rossum79f25d91997-04-29 20:08:16 +0000948static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000949map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 PyObject *it, *iters, *func;
952 mapobject *lz;
953 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
956 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 numargs = PyTuple_Size(args);
959 if (numargs < 2) {
960 PyErr_SetString(PyExc_TypeError,
961 "map() must have at least two arguments.");
962 return NULL;
963 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000964
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 iters = PyTuple_New(numargs-1);
966 if (iters == NULL)
967 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 for (i=1 ; i<numargs ; i++) {
970 /* Get iterator. */
971 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
972 if (it == NULL) {
973 Py_DECREF(iters);
974 return NULL;
975 }
976 PyTuple_SET_ITEM(iters, i-1, it);
977 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 /* create mapobject structure */
980 lz = (mapobject *)type->tp_alloc(type, 0);
981 if (lz == NULL) {
982 Py_DECREF(iters);
983 return NULL;
984 }
985 lz->iters = iters;
986 func = PyTuple_GET_ITEM(args, 0);
987 Py_INCREF(func);
988 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000991}
992
993static void
994map_dealloc(mapobject *lz)
995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000996 PyObject_GC_UnTrack(lz);
997 Py_XDECREF(lz->iters);
998 Py_XDECREF(lz->func);
999 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +00001000}
1001
1002static int
1003map_traverse(mapobject *lz, visitproc visit, void *arg)
1004{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 Py_VISIT(lz->iters);
1006 Py_VISIT(lz->func);
1007 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001008}
1009
1010static PyObject *
1011map_next(mapobject *lz)
1012{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 PyObject *val;
1014 PyObject *argtuple;
1015 PyObject *result;
1016 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 numargs = PyTuple_Size(lz->iters);
1019 argtuple = PyTuple_New(numargs);
1020 if (argtuple == NULL)
1021 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 for (i=0 ; i<numargs ; i++) {
1024 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1025 if (val == NULL) {
1026 Py_DECREF(argtuple);
1027 return NULL;
1028 }
1029 PyTuple_SET_ITEM(argtuple, i, val);
1030 }
1031 result = PyObject_Call(lz->func, argtuple, NULL);
1032 Py_DECREF(argtuple);
1033 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001034}
1035
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001036PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001037"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001038\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001039Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001041
Raymond Hettingera6c60372008-03-13 01:26:19 +00001042PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1044 "map", /* tp_name */
1045 sizeof(mapobject), /* tp_basicsize */
1046 0, /* tp_itemsize */
1047 /* methods */
1048 (destructor)map_dealloc, /* tp_dealloc */
1049 0, /* tp_print */
1050 0, /* tp_getattr */
1051 0, /* tp_setattr */
1052 0, /* tp_reserved */
1053 0, /* tp_repr */
1054 0, /* tp_as_number */
1055 0, /* tp_as_sequence */
1056 0, /* tp_as_mapping */
1057 0, /* tp_hash */
1058 0, /* tp_call */
1059 0, /* tp_str */
1060 PyObject_GenericGetAttr, /* tp_getattro */
1061 0, /* tp_setattro */
1062 0, /* tp_as_buffer */
1063 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1064 Py_TPFLAGS_BASETYPE, /* tp_flags */
1065 map_doc, /* tp_doc */
1066 (traverseproc)map_traverse, /* tp_traverse */
1067 0, /* tp_clear */
1068 0, /* tp_richcompare */
1069 0, /* tp_weaklistoffset */
1070 PyObject_SelfIter, /* tp_iter */
1071 (iternextfunc)map_next, /* tp_iternext */
1072 0, /* tp_methods */
1073 0, /* tp_members */
1074 0, /* tp_getset */
1075 0, /* tp_base */
1076 0, /* tp_dict */
1077 0, /* tp_descr_get */
1078 0, /* tp_descr_set */
1079 0, /* tp_dictoffset */
1080 0, /* tp_init */
1081 PyType_GenericAlloc, /* tp_alloc */
1082 map_new, /* tp_new */
1083 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001084};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001085
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001087builtin_next(PyObject *self, PyObject *args)
1088{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 PyObject *it, *res;
1090 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001092 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1093 return NULL;
1094 if (!PyIter_Check(it)) {
1095 PyErr_Format(PyExc_TypeError,
1096 "%.200s object is not an iterator",
1097 it->ob_type->tp_name);
1098 return NULL;
1099 }
1100
1101 res = (*it->ob_type->tp_iternext)(it);
1102 if (res != NULL) {
1103 return res;
1104 } else if (def != NULL) {
1105 if (PyErr_Occurred()) {
1106 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1107 return NULL;
1108 PyErr_Clear();
1109 }
1110 Py_INCREF(def);
1111 return def;
1112 } else if (PyErr_Occurred()) {
1113 return NULL;
1114 } else {
1115 PyErr_SetNone(PyExc_StopIteration);
1116 return NULL;
1117 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001118}
1119
1120PyDoc_STRVAR(next_doc,
1121"next(iterator[, default])\n\
1122\n\
1123Return the next item from the iterator. If default is given and the iterator\n\
1124is exhausted, it is returned instead of raising StopIteration.");
1125
1126
1127static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001128builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001129{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001130 PyObject *v;
1131 PyObject *name;
1132 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001133
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1135 return NULL;
1136 if (PyObject_SetAttr(v, name, value) != 0)
1137 return NULL;
1138 Py_INCREF(Py_None);
1139 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001140}
1141
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001142PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001143"setattr(object, name, value)\n\
1144\n\
1145Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001146``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001147
1148
Guido van Rossum79f25d91997-04-29 20:08:16 +00001149static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001150builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001151{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 PyObject *v;
1153 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1156 return NULL;
1157 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1158 return NULL;
1159 Py_INCREF(Py_None);
1160 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001161}
1162
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001163PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001164"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001165\n\
1166Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001167``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001168
1169
Guido van Rossum79f25d91997-04-29 20:08:16 +00001170static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001171builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001172{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001173 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001175 x = PyObject_Hash(v);
1176 if (x == -1)
1177 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001178 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001179}
1180
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001181PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182"hash(object) -> integer\n\
1183\n\
1184Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001185the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001186
1187
Guido van Rossum79f25d91997-04-29 20:08:16 +00001188static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001189builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001192}
1193
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001194PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001195"hex(number) -> string\n\
1196\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001197Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001198
1199
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001201builtin_iter(PyObject *self, PyObject *args)
1202{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1206 return NULL;
1207 if (w == NULL)
1208 return PyObject_GetIter(v);
1209 if (!PyCallable_Check(v)) {
1210 PyErr_SetString(PyExc_TypeError,
1211 "iter(v, w): v must be callable");
1212 return NULL;
1213 }
1214 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001215}
1216
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001217PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001218"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001219iter(callable, sentinel) -> iterator\n\
1220\n\
1221Get an iterator from an object. In the first form, the argument must\n\
1222supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001223In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001224
1225
1226static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001227builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001228{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001229 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001230
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 res = PyObject_Size(v);
1232 if (res < 0 && PyErr_Occurred())
1233 return NULL;
1234 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001235}
1236
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001237PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001238"len(object) -> integer\n\
1239\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001240Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001241
1242
Guido van Rossum79f25d91997-04-29 20:08:16 +00001243static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001244builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001245{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001246 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 d = PyEval_GetLocals();
1249 Py_XINCREF(d);
1250 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001251}
1252
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001253PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001254"locals() -> dictionary\n\
1255\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001256Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001257
1258
Guido van Rossum79f25d91997-04-29 20:08:16 +00001259static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001260min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1263 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001264
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001265 if (PyTuple_Size(args) > 1)
1266 v = args;
1267 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1268 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1271 keyfunc = PyDict_GetItemString(kwds, "key");
1272 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1273 PyErr_Format(PyExc_TypeError,
1274 "%s() got an unexpected keyword argument", name);
1275 return NULL;
1276 }
1277 Py_INCREF(keyfunc);
1278 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001279
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 it = PyObject_GetIter(v);
1281 if (it == NULL) {
1282 Py_XDECREF(keyfunc);
1283 return NULL;
1284 }
Tim Petersc3074532001-05-03 07:00:32 +00001285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001286 maxitem = NULL; /* the result */
1287 maxval = NULL; /* the value associated with the result */
1288 while (( item = PyIter_Next(it) )) {
1289 /* get the value from the key function */
1290 if (keyfunc != NULL) {
1291 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1292 if (val == NULL)
1293 goto Fail_it_item;
1294 }
1295 /* no key function; the value is the item */
1296 else {
1297 val = item;
1298 Py_INCREF(val);
1299 }
Tim Petersc3074532001-05-03 07:00:32 +00001300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 /* maximum value and item are unset; set them */
1302 if (maxval == NULL) {
1303 maxitem = item;
1304 maxval = val;
1305 }
1306 /* maximum value and item are set; update them as necessary */
1307 else {
1308 int cmp = PyObject_RichCompareBool(val, maxval, op);
1309 if (cmp < 0)
1310 goto Fail_it_item_and_val;
1311 else if (cmp > 0) {
1312 Py_DECREF(maxval);
1313 Py_DECREF(maxitem);
1314 maxval = val;
1315 maxitem = item;
1316 }
1317 else {
1318 Py_DECREF(item);
1319 Py_DECREF(val);
1320 }
1321 }
1322 }
1323 if (PyErr_Occurred())
1324 goto Fail_it;
1325 if (maxval == NULL) {
1326 PyErr_Format(PyExc_ValueError,
1327 "%s() arg is an empty sequence", name);
1328 assert(maxitem == NULL);
1329 }
1330 else
1331 Py_DECREF(maxval);
1332 Py_DECREF(it);
1333 Py_XDECREF(keyfunc);
1334 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001335
1336Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001338Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001339 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001340Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001341 Py_XDECREF(maxval);
1342 Py_XDECREF(maxitem);
1343 Py_DECREF(it);
1344 Py_XDECREF(keyfunc);
1345 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001346}
1347
Guido van Rossum79f25d91997-04-29 20:08:16 +00001348static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001349builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001350{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001351 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001352}
1353
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001354PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001355"min(iterable[, key=func]) -> value\n\
1356min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001357\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001358With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001359With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001360
1361
Guido van Rossum79f25d91997-04-29 20:08:16 +00001362static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001363builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001364{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001365 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001366}
1367
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001368PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001369"max(iterable[, key=func]) -> value\n\
1370max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001371\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001372With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001373With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001374
1375
Guido van Rossum79f25d91997-04-29 20:08:16 +00001376static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001377builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001378{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001380}
1381
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001382PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001383"oct(number) -> string\n\
1384\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001385Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001386
1387
Guido van Rossum79f25d91997-04-29 20:08:16 +00001388static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001389builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001390{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 long ord;
1392 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 if (PyBytes_Check(obj)) {
1395 size = PyBytes_GET_SIZE(obj);
1396 if (size == 1) {
1397 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1398 return PyLong_FromLong(ord);
1399 }
1400 }
1401 else if (PyUnicode_Check(obj)) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001402 if (PyUnicode_READY(obj) == -1)
1403 return NULL;
1404 size = PyUnicode_GET_LENGTH(obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001405 if (size == 1) {
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001406 ord = (long)PyUnicode_READ_CHAR(obj, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001407 return PyLong_FromLong(ord);
1408 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001409 }
1410 else if (PyByteArray_Check(obj)) {
1411 /* XXX Hopefully this is temporary */
1412 size = PyByteArray_GET_SIZE(obj);
1413 if (size == 1) {
1414 ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj));
1415 return PyLong_FromLong(ord);
1416 }
1417 }
1418 else {
1419 PyErr_Format(PyExc_TypeError,
1420 "ord() expected string of length 1, but " \
1421 "%.200s found", obj->ob_type->tp_name);
1422 return NULL;
1423 }
Guido van Rossum09095f32000-03-10 23:00:52 +00001424
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 PyErr_Format(PyExc_TypeError,
1426 "ord() expected a character, "
1427 "but string of length %zd found",
1428 size);
1429 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001430}
1431
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001432PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001433"ord(c) -> integer\n\
1434\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001435Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001436)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001437#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001438PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001439"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001440)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001441#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001442;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001443
1444
Guido van Rossum79f25d91997-04-29 20:08:16 +00001445static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001446builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001447{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001448 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
1451 return NULL;
1452 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001453}
1454
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001455PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001456"pow(x, y[, z]) -> number\n\
1457\n\
1458With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001459equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001460
1461
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001462
Guido van Rossum34343512006-11-30 22:13:52 +00001463static PyObject *
1464builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 static char *kwlist[] = {"sep", "end", "file", 0};
1467 static PyObject *dummy_args;
1468 PyObject *sep = NULL, *end = NULL, *file = NULL;
1469 int i, err;
Guido van Rossum34343512006-11-30 22:13:52 +00001470
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001471 if (dummy_args == NULL) {
1472 if (!(dummy_args = PyTuple_New(0)))
1473 return NULL;
1474 }
1475 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
1476 kwlist, &sep, &end, &file))
1477 return NULL;
1478 if (file == NULL || file == Py_None) {
1479 file = PySys_GetObject("stdout");
1480 /* sys.stdout may be None when FILE* stdout isn't connected */
1481 if (file == Py_None)
1482 Py_RETURN_NONE;
1483 }
Guido van Rossum34343512006-11-30 22:13:52 +00001484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001485 if (sep == Py_None) {
1486 sep = NULL;
1487 }
1488 else if (sep && !PyUnicode_Check(sep)) {
1489 PyErr_Format(PyExc_TypeError,
1490 "sep must be None or a string, not %.200s",
1491 sep->ob_type->tp_name);
1492 return NULL;
1493 }
1494 if (end == Py_None) {
1495 end = NULL;
1496 }
1497 else if (end && !PyUnicode_Check(end)) {
1498 PyErr_Format(PyExc_TypeError,
1499 "end must be None or a string, not %.200s",
1500 end->ob_type->tp_name);
1501 return NULL;
1502 }
Guido van Rossum34343512006-11-30 22:13:52 +00001503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001504 for (i = 0; i < PyTuple_Size(args); i++) {
1505 if (i > 0) {
1506 if (sep == NULL)
1507 err = PyFile_WriteString(" ", file);
1508 else
1509 err = PyFile_WriteObject(sep, file,
1510 Py_PRINT_RAW);
1511 if (err)
1512 return NULL;
1513 }
1514 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1515 Py_PRINT_RAW);
1516 if (err)
1517 return NULL;
1518 }
Guido van Rossum34343512006-11-30 22:13:52 +00001519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001520 if (end == NULL)
1521 err = PyFile_WriteString("\n", file);
1522 else
1523 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1524 if (err)
1525 return NULL;
Guido van Rossum34343512006-11-30 22:13:52 +00001526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001527 Py_RETURN_NONE;
Guido van Rossum34343512006-11-30 22:13:52 +00001528}
1529
1530PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001531"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001532\n\
1533Prints the values to a stream, or to sys.stdout by default.\n\
1534Optional keyword arguments:\n\
1535file: a file-like object (stream); defaults to the current sys.stdout.\n\
1536sep: string inserted between values, default a space.\n\
1537end: string appended after the last value, default a newline.");
1538
1539
Guido van Rossuma88a0332007-02-26 16:59:55 +00001540static PyObject *
1541builtin_input(PyObject *self, PyObject *args)
1542{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001543 PyObject *promptarg = NULL;
1544 PyObject *fin = PySys_GetObject("stdin");
1545 PyObject *fout = PySys_GetObject("stdout");
1546 PyObject *ferr = PySys_GetObject("stderr");
1547 PyObject *tmp;
1548 long fd;
1549 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001550
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001551 /* Parse arguments */
1552 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
1553 return NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 /* Check that stdin/out/err are intact */
1556 if (fin == NULL || fin == Py_None) {
1557 PyErr_SetString(PyExc_RuntimeError,
1558 "input(): lost sys.stdin");
1559 return NULL;
1560 }
1561 if (fout == NULL || fout == Py_None) {
1562 PyErr_SetString(PyExc_RuntimeError,
1563 "input(): lost sys.stdout");
1564 return NULL;
1565 }
1566 if (ferr == NULL || ferr == Py_None) {
1567 PyErr_SetString(PyExc_RuntimeError,
1568 "input(): lost sys.stderr");
1569 return NULL;
1570 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001572 /* First of all, flush stderr */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001573 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 if (tmp == NULL)
1575 PyErr_Clear();
1576 else
1577 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 /* We should only use (GNU) readline if Python's sys.stdin and
1580 sys.stdout are the same as C's stdin and stdout, because we
1581 need to pass it those. */
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001582 tmp = _PyObject_CallMethodId(fin, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 if (tmp == NULL) {
1584 PyErr_Clear();
1585 tty = 0;
1586 }
1587 else {
1588 fd = PyLong_AsLong(tmp);
1589 Py_DECREF(tmp);
1590 if (fd < 0 && PyErr_Occurred())
1591 return NULL;
1592 tty = fd == fileno(stdin) && isatty(fd);
1593 }
1594 if (tty) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001595 tmp = _PyObject_CallMethodId(fout, &PyId_fileno, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 if (tmp == NULL)
1597 PyErr_Clear();
1598 else {
1599 fd = PyLong_AsLong(tmp);
1600 Py_DECREF(tmp);
1601 if (fd < 0 && PyErr_Occurred())
1602 return NULL;
1603 tty = fd == fileno(stdout) && isatty(fd);
1604 }
1605 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 /* If we're interactive, use (GNU) readline */
1608 if (tty) {
1609 PyObject *po;
1610 char *prompt;
1611 char *s;
1612 PyObject *stdin_encoding;
Victor Stinner306f0102010-05-19 01:06:22 +00001613 char *stdin_encoding_str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 PyObject *result;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001615 size_t len;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001616
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1618 if (!stdin_encoding)
1619 /* stdin is a text stream, so it must have an
1620 encoding. */
1621 return NULL;
Victor Stinner306f0102010-05-19 01:06:22 +00001622 stdin_encoding_str = _PyUnicode_AsString(stdin_encoding);
1623 if (stdin_encoding_str == NULL) {
1624 Py_DECREF(stdin_encoding);
1625 return NULL;
1626 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001627 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 if (tmp == NULL)
1629 PyErr_Clear();
1630 else
1631 Py_DECREF(tmp);
1632 if (promptarg != NULL) {
1633 PyObject *stringpo;
1634 PyObject *stdout_encoding;
Victor Stinner306f0102010-05-19 01:06:22 +00001635 char *stdout_encoding_str;
1636 stdout_encoding = PyObject_GetAttrString(fout, "encoding");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001637 if (stdout_encoding == NULL) {
1638 Py_DECREF(stdin_encoding);
1639 return NULL;
1640 }
Victor Stinner306f0102010-05-19 01:06:22 +00001641 stdout_encoding_str = _PyUnicode_AsString(stdout_encoding);
1642 if (stdout_encoding_str == NULL) {
1643 Py_DECREF(stdin_encoding);
1644 Py_DECREF(stdout_encoding);
1645 return NULL;
1646 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 stringpo = PyObject_Str(promptarg);
1648 if (stringpo == NULL) {
1649 Py_DECREF(stdin_encoding);
1650 Py_DECREF(stdout_encoding);
1651 return NULL;
1652 }
1653 po = PyUnicode_AsEncodedString(stringpo,
Victor Stinner306f0102010-05-19 01:06:22 +00001654 stdout_encoding_str, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001655 Py_DECREF(stdout_encoding);
1656 Py_DECREF(stringpo);
1657 if (po == NULL) {
1658 Py_DECREF(stdin_encoding);
1659 return NULL;
1660 }
1661 prompt = PyBytes_AsString(po);
1662 if (prompt == NULL) {
1663 Py_DECREF(stdin_encoding);
1664 Py_DECREF(po);
1665 return NULL;
1666 }
1667 }
1668 else {
1669 po = NULL;
1670 prompt = "";
1671 }
1672 s = PyOS_Readline(stdin, stdout, prompt);
1673 Py_XDECREF(po);
1674 if (s == NULL) {
1675 if (!PyErr_Occurred())
1676 PyErr_SetNone(PyExc_KeyboardInterrupt);
1677 Py_DECREF(stdin_encoding);
1678 return NULL;
1679 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001680
1681 len = strlen(s);
1682 if (len == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 PyErr_SetNone(PyExc_EOFError);
1684 result = NULL;
1685 }
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001686 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 if (len > PY_SSIZE_T_MAX) {
1688 PyErr_SetString(PyExc_OverflowError,
1689 "input: input too long");
1690 result = NULL;
1691 }
1692 else {
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001693 len--; /* strip trailing '\n' */
1694 if (len != 0 && s[len-1] == '\r')
1695 len--; /* strip trailing '\r' */
1696 result = PyUnicode_Decode(s, len, stdin_encoding_str, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 }
1698 }
1699 Py_DECREF(stdin_encoding);
1700 PyMem_FREE(s);
1701 return result;
1702 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001703
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001704 /* Fallback if we're not interactive */
1705 if (promptarg != NULL) {
1706 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
1707 return NULL;
1708 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001709 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001710 if (tmp == NULL)
1711 PyErr_Clear();
1712 else
1713 Py_DECREF(tmp);
1714 return PyFile_GetLine(fin, -1);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001715}
1716
1717PyDoc_STRVAR(input_doc,
1718"input([prompt]) -> string\n\
1719\n\
1720Read a string from standard input. The trailing newline is stripped.\n\
1721If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1722On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1723is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001724
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001725
Guido van Rossum79f25d91997-04-29 20:08:16 +00001726static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001727builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001728{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001730}
1731
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001732PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001733"repr(object) -> string\n\
1734\n\
1735Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001736For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001737
1738
Guido van Rossum79f25d91997-04-29 20:08:16 +00001739static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001740builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001741{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001742 static PyObject *round_str = NULL;
1743 PyObject *ndigits = NULL;
1744 static char *kwlist[] = {"number", "ndigits", 0};
1745 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001746
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001747 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
1748 kwlist, &number, &ndigits))
1749 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 if (Py_TYPE(number)->tp_dict == NULL) {
1752 if (PyType_Ready(Py_TYPE(number)) < 0)
1753 return NULL;
1754 }
Guido van Rossum15d3d042007-08-24 02:02:45 +00001755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001756 if (round_str == NULL) {
1757 round_str = PyUnicode_InternFromString("__round__");
1758 if (round_str == NULL)
1759 return NULL;
1760 }
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001761
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 round = _PyType_Lookup(Py_TYPE(number), round_str);
1763 if (round == NULL) {
1764 PyErr_Format(PyExc_TypeError,
1765 "type %.100s doesn't define __round__ method",
1766 Py_TYPE(number)->tp_name);
1767 return NULL;
1768 }
Alex Martelliae211f92007-08-22 23:21:33 +00001769
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 if (ndigits == NULL)
1771 return PyObject_CallFunction(round, "O", number);
1772 else
1773 return PyObject_CallFunction(round, "OO", number, ndigits);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001774}
1775
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001776PyDoc_STRVAR(round_doc,
Mark Dickinson1124e712009-01-28 21:25:58 +00001777"round(number[, ndigits]) -> number\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001778\n\
1779Round a number to a given precision in decimal digits (default 0 digits).\n\
Mark Dickinson0d748c22008-07-05 11:29:03 +00001780This returns an int when called with one argument, otherwise the\n\
Georg Brandl809ddaa2008-07-01 20:39:59 +00001781same type as the number. ndigits may be negative.");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001782
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001783
Raymond Hettinger64958a12003-12-17 20:43:33 +00001784static PyObject *
1785builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1786{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001787 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
1788 PyObject *callable;
1789 static char *kwlist[] = {"iterable", "key", "reverse", 0};
1790 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001792 /* args 1-3 should match listsort in Objects/listobject.c */
1793 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1794 kwlist, &seq, &keyfunc, &reverse))
1795 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001797 newlist = PySequence_List(seq);
1798 if (newlist == NULL)
1799 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001800
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 callable = PyObject_GetAttrString(newlist, "sort");
1802 if (callable == NULL) {
1803 Py_DECREF(newlist);
1804 return NULL;
1805 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001807 newargs = PyTuple_GetSlice(args, 1, 4);
1808 if (newargs == NULL) {
1809 Py_DECREF(newlist);
1810 Py_DECREF(callable);
1811 return NULL;
1812 }
Raymond Hettinger64958a12003-12-17 20:43:33 +00001813
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 v = PyObject_Call(callable, newargs, kwds);
1815 Py_DECREF(newargs);
1816 Py_DECREF(callable);
1817 if (v == NULL) {
1818 Py_DECREF(newlist);
1819 return NULL;
1820 }
1821 Py_DECREF(v);
1822 return newlist;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001823}
1824
1825PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001826"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001827
Guido van Rossum79f25d91997-04-29 20:08:16 +00001828static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001829builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001830{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001831 PyObject *v = NULL;
1832 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001834 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
1835 return NULL;
1836 if (v == NULL) {
1837 d = PyEval_GetLocals();
1838 if (d == NULL) {
1839 if (!PyErr_Occurred())
1840 PyErr_SetString(PyExc_SystemError,
1841 "vars(): no locals!?");
1842 }
1843 else
1844 Py_INCREF(d);
1845 }
1846 else {
1847 d = PyObject_GetAttrString(v, "__dict__");
1848 if (d == NULL) {
1849 PyErr_SetString(PyExc_TypeError,
1850 "vars() argument must have __dict__ attribute");
1851 return NULL;
1852 }
1853 }
1854 return d;
Guido van Rossum2d951851994-08-29 12:52:16 +00001855}
1856
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001857PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001858"vars([object]) -> dictionary\n\
1859\n\
1860Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001861With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001862
Alex Martellia70b1912003-04-22 08:12:33 +00001863static PyObject*
1864builtin_sum(PyObject *self, PyObject *args)
1865{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 PyObject *seq;
1867 PyObject *result = NULL;
1868 PyObject *temp, *item, *iter;
Alex Martellia70b1912003-04-22 08:12:33 +00001869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001870 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
1871 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001872
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 iter = PyObject_GetIter(seq);
1874 if (iter == NULL)
1875 return NULL;
Alex Martellia70b1912003-04-22 08:12:33 +00001876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 if (result == NULL) {
1878 result = PyLong_FromLong(0);
1879 if (result == NULL) {
1880 Py_DECREF(iter);
1881 return NULL;
1882 }
1883 } else {
1884 /* reject string values for 'start' parameter */
1885 if (PyUnicode_Check(result)) {
1886 PyErr_SetString(PyExc_TypeError,
1887 "sum() can't sum strings [use ''.join(seq) instead]");
1888 Py_DECREF(iter);
1889 return NULL;
1890 }
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001891 if (PyBytes_Check(result)) {
1892 PyErr_SetString(PyExc_TypeError,
1893 "sum() can't sum bytes [use b''.join(seq) instead]");
Benjamin Peterson405f32c2011-07-29 22:43:45 -05001894 Py_DECREF(iter);
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001895 return NULL;
1896 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 if (PyByteArray_Check(result)) {
1898 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001899 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 Py_DECREF(iter);
1901 return NULL;
1902 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 Py_INCREF(result);
1905 }
Alex Martellia70b1912003-04-22 08:12:33 +00001906
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001907#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1909 Assumes all inputs are the same type. If the assumption fails, default
1910 to the more general routine.
1911 */
1912 if (PyLong_CheckExact(result)) {
1913 int overflow;
1914 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1915 /* If this already overflowed, don't even enter the loop. */
1916 if (overflow == 0) {
1917 Py_DECREF(result);
1918 result = NULL;
1919 }
1920 while(result == NULL) {
1921 item = PyIter_Next(iter);
1922 if (item == NULL) {
1923 Py_DECREF(iter);
1924 if (PyErr_Occurred())
1925 return NULL;
1926 return PyLong_FromLong(i_result);
1927 }
1928 if (PyLong_CheckExact(item)) {
1929 long b = PyLong_AsLongAndOverflow(item, &overflow);
1930 long x = i_result + b;
1931 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
1932 i_result = x;
1933 Py_DECREF(item);
1934 continue;
1935 }
1936 }
1937 /* Either overflowed or is not an int. Restore real objects and process normally */
1938 result = PyLong_FromLong(i_result);
1939 temp = PyNumber_Add(result, item);
1940 Py_DECREF(result);
1941 Py_DECREF(item);
1942 result = temp;
1943 if (result == NULL) {
1944 Py_DECREF(iter);
1945 return NULL;
1946 }
1947 }
1948 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001950 if (PyFloat_CheckExact(result)) {
1951 double f_result = PyFloat_AS_DOUBLE(result);
1952 Py_DECREF(result);
1953 result = NULL;
1954 while(result == NULL) {
1955 item = PyIter_Next(iter);
1956 if (item == NULL) {
1957 Py_DECREF(iter);
1958 if (PyErr_Occurred())
1959 return NULL;
1960 return PyFloat_FromDouble(f_result);
1961 }
1962 if (PyFloat_CheckExact(item)) {
1963 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1964 f_result += PyFloat_AS_DOUBLE(item);
1965 PyFPE_END_PROTECT(f_result)
1966 Py_DECREF(item);
1967 continue;
1968 }
1969 if (PyLong_CheckExact(item)) {
1970 long value;
1971 int overflow;
1972 value = PyLong_AsLongAndOverflow(item, &overflow);
1973 if (!overflow) {
1974 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1975 f_result += (double)value;
1976 PyFPE_END_PROTECT(f_result)
1977 Py_DECREF(item);
1978 continue;
1979 }
1980 }
1981 result = PyFloat_FromDouble(f_result);
1982 temp = PyNumber_Add(result, item);
1983 Py_DECREF(result);
1984 Py_DECREF(item);
1985 result = temp;
1986 if (result == NULL) {
1987 Py_DECREF(iter);
1988 return NULL;
1989 }
1990 }
1991 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001992#endif
1993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 for(;;) {
1995 item = PyIter_Next(iter);
1996 if (item == NULL) {
1997 /* error, or end-of-sequence */
1998 if (PyErr_Occurred()) {
1999 Py_DECREF(result);
2000 result = NULL;
2001 }
2002 break;
2003 }
2004 /* It's tempting to use PyNumber_InPlaceAdd instead of
2005 PyNumber_Add here, to avoid quadratic running time
2006 when doing 'sum(list_of_lists, [])'. However, this
2007 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002009 empty = []
2010 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002011
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 would change the value of empty. */
2013 temp = PyNumber_Add(result, item);
2014 Py_DECREF(result);
2015 Py_DECREF(item);
2016 result = temp;
2017 if (result == NULL)
2018 break;
2019 }
2020 Py_DECREF(iter);
2021 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002022}
2023
2024PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002025"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002026\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002027Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2028of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002029empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002030
2031
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002033builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002034{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 PyObject *inst;
2036 PyObject *cls;
2037 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2040 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002042 retval = PyObject_IsInstance(inst, cls);
2043 if (retval < 0)
2044 return NULL;
2045 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002046}
2047
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002048PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002049"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002050\n\
2051Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002052With a type as second argument, return whether that is the object's type.\n\
2053The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002054isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002055
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002056
2057static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002058builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002059{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002060 PyObject *derived;
2061 PyObject *cls;
2062 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002064 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2065 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002066
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 retval = PyObject_IsSubclass(derived, cls);
2068 if (retval < 0)
2069 return NULL;
2070 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002071}
2072
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002073PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002074"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002075\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002076Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2077When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2078is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002079
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002080
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002081typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 PyObject_HEAD
2083 Py_ssize_t tuplesize;
2084 PyObject *ittuple; /* tuple of iterators */
2085 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002086} zipobject;
2087
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002088static PyObject *
2089zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002090{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 zipobject *lz;
2092 Py_ssize_t i;
2093 PyObject *ittuple; /* tuple of iterators */
2094 PyObject *result;
2095 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2098 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 /* args must be a tuple */
2101 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002102
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002103 /* obtain iterators */
2104 ittuple = PyTuple_New(tuplesize);
2105 if (ittuple == NULL)
2106 return NULL;
2107 for (i=0; i < tuplesize; ++i) {
2108 PyObject *item = PyTuple_GET_ITEM(args, i);
2109 PyObject *it = PyObject_GetIter(item);
2110 if (it == NULL) {
2111 if (PyErr_ExceptionMatches(PyExc_TypeError))
2112 PyErr_Format(PyExc_TypeError,
2113 "zip argument #%zd must support iteration",
2114 i+1);
2115 Py_DECREF(ittuple);
2116 return NULL;
2117 }
2118 PyTuple_SET_ITEM(ittuple, i, it);
2119 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002121 /* create a result holder */
2122 result = PyTuple_New(tuplesize);
2123 if (result == NULL) {
2124 Py_DECREF(ittuple);
2125 return NULL;
2126 }
2127 for (i=0 ; i < tuplesize ; i++) {
2128 Py_INCREF(Py_None);
2129 PyTuple_SET_ITEM(result, i, Py_None);
2130 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 /* create zipobject structure */
2133 lz = (zipobject *)type->tp_alloc(type, 0);
2134 if (lz == NULL) {
2135 Py_DECREF(ittuple);
2136 Py_DECREF(result);
2137 return NULL;
2138 }
2139 lz->ittuple = ittuple;
2140 lz->tuplesize = tuplesize;
2141 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002142
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002144}
2145
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002146static void
2147zip_dealloc(zipobject *lz)
2148{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 PyObject_GC_UnTrack(lz);
2150 Py_XDECREF(lz->ittuple);
2151 Py_XDECREF(lz->result);
2152 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002153}
2154
2155static int
2156zip_traverse(zipobject *lz, visitproc visit, void *arg)
2157{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002158 Py_VISIT(lz->ittuple);
2159 Py_VISIT(lz->result);
2160 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002161}
2162
2163static PyObject *
2164zip_next(zipobject *lz)
2165{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 Py_ssize_t i;
2167 Py_ssize_t tuplesize = lz->tuplesize;
2168 PyObject *result = lz->result;
2169 PyObject *it;
2170 PyObject *item;
2171 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002173 if (tuplesize == 0)
2174 return NULL;
2175 if (Py_REFCNT(result) == 1) {
2176 Py_INCREF(result);
2177 for (i=0 ; i < tuplesize ; i++) {
2178 it = PyTuple_GET_ITEM(lz->ittuple, i);
2179 item = (*Py_TYPE(it)->tp_iternext)(it);
2180 if (item == NULL) {
2181 Py_DECREF(result);
2182 return NULL;
2183 }
2184 olditem = PyTuple_GET_ITEM(result, i);
2185 PyTuple_SET_ITEM(result, i, item);
2186 Py_DECREF(olditem);
2187 }
2188 } else {
2189 result = PyTuple_New(tuplesize);
2190 if (result == NULL)
2191 return NULL;
2192 for (i=0 ; i < tuplesize ; i++) {
2193 it = PyTuple_GET_ITEM(lz->ittuple, i);
2194 item = (*Py_TYPE(it)->tp_iternext)(it);
2195 if (item == NULL) {
2196 Py_DECREF(result);
2197 return NULL;
2198 }
2199 PyTuple_SET_ITEM(result, i, item);
2200 }
2201 }
2202 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002203}
Barry Warsawbd599b52000-08-03 15:45:29 +00002204
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002205PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002206"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002207\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002208Return a zip object whose .__next__() method returns a tuple where\n\
2209the i-th element comes from the i-th iterable argument. The .__next__()\n\
2210method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002211is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002212
2213PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002214 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2215 "zip", /* tp_name */
2216 sizeof(zipobject), /* tp_basicsize */
2217 0, /* tp_itemsize */
2218 /* methods */
2219 (destructor)zip_dealloc, /* tp_dealloc */
2220 0, /* tp_print */
2221 0, /* tp_getattr */
2222 0, /* tp_setattr */
2223 0, /* tp_reserved */
2224 0, /* tp_repr */
2225 0, /* tp_as_number */
2226 0, /* tp_as_sequence */
2227 0, /* tp_as_mapping */
2228 0, /* tp_hash */
2229 0, /* tp_call */
2230 0, /* tp_str */
2231 PyObject_GenericGetAttr, /* tp_getattro */
2232 0, /* tp_setattro */
2233 0, /* tp_as_buffer */
2234 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2235 Py_TPFLAGS_BASETYPE, /* tp_flags */
2236 zip_doc, /* tp_doc */
2237 (traverseproc)zip_traverse, /* tp_traverse */
2238 0, /* tp_clear */
2239 0, /* tp_richcompare */
2240 0, /* tp_weaklistoffset */
2241 PyObject_SelfIter, /* tp_iter */
2242 (iternextfunc)zip_next, /* tp_iternext */
2243 0, /* tp_methods */
2244 0, /* tp_members */
2245 0, /* tp_getset */
2246 0, /* tp_base */
2247 0, /* tp_dict */
2248 0, /* tp_descr_get */
2249 0, /* tp_descr_set */
2250 0, /* tp_dictoffset */
2251 0, /* tp_init */
2252 PyType_GenericAlloc, /* tp_alloc */
2253 zip_new, /* tp_new */
2254 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002255};
Barry Warsawbd599b52000-08-03 15:45:29 +00002256
2257
Guido van Rossum79f25d91997-04-29 20:08:16 +00002258static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002259 {"__build_class__", (PyCFunction)builtin___build_class__,
2260 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2261 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2262 {"abs", builtin_abs, METH_O, abs_doc},
2263 {"all", builtin_all, METH_O, all_doc},
2264 {"any", builtin_any, METH_O, any_doc},
2265 {"ascii", builtin_ascii, METH_O, ascii_doc},
2266 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002267 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002268 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2269 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2270 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2271 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2272 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2273 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2274 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2275 {"format", builtin_format, METH_VARARGS, format_doc},
2276 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2277 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2278 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2279 {"hash", builtin_hash, METH_O, hash_doc},
2280 {"hex", builtin_hex, METH_O, hex_doc},
2281 {"id", builtin_id, METH_O, id_doc},
2282 {"input", builtin_input, METH_VARARGS, input_doc},
2283 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2284 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2285 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2286 {"len", builtin_len, METH_O, len_doc},
2287 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2288 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2289 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2290 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2291 {"oct", builtin_oct, METH_O, oct_doc},
2292 {"ord", builtin_ord, METH_O, ord_doc},
2293 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2294 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2295 {"repr", builtin_repr, METH_O, repr_doc},
2296 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2297 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2298 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2299 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2300 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2301 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002302};
2303
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002304PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002305"Built-in functions, exceptions, and other objects.\n\
2306\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002307Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002308
Martin v. Löwis1a214512008-06-11 05:26:20 +00002309static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002310 PyModuleDef_HEAD_INIT,
2311 "builtins",
2312 builtin_doc,
2313 -1, /* multiple "initialization" just copies the module dict. */
2314 builtin_methods,
2315 NULL,
2316 NULL,
2317 NULL,
2318 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002319};
2320
2321
Guido van Rossum25ce5661997-08-02 03:10:38 +00002322PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002323_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002324{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002325 PyObject *mod, *dict, *debug;
2326 mod = PyModule_Create(&builtinsmodule);
2327 if (mod == NULL)
2328 return NULL;
2329 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002330
Tim Peters7571a0f2003-03-23 17:52:28 +00002331#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002332 /* "builtins" exposes a number of statically allocated objects
2333 * that, before this code was added in 2.3, never showed up in
2334 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2335 * result, programs leaking references to None and False (etc)
2336 * couldn't be diagnosed by examining sys.getobjects(0).
2337 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002338#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2339#else
2340#define ADD_TO_ALL(OBJECT) (void)0
2341#endif
2342
Tim Peters4b7625e2001-09-13 21:37:17 +00002343#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002344 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2345 return NULL; \
2346 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002347
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002348 SETBUILTIN("None", Py_None);
2349 SETBUILTIN("Ellipsis", Py_Ellipsis);
2350 SETBUILTIN("NotImplemented", Py_NotImplemented);
2351 SETBUILTIN("False", Py_False);
2352 SETBUILTIN("True", Py_True);
2353 SETBUILTIN("bool", &PyBool_Type);
2354 SETBUILTIN("memoryview", &PyMemoryView_Type);
2355 SETBUILTIN("bytearray", &PyByteArray_Type);
2356 SETBUILTIN("bytes", &PyBytes_Type);
2357 SETBUILTIN("classmethod", &PyClassMethod_Type);
2358 SETBUILTIN("complex", &PyComplex_Type);
2359 SETBUILTIN("dict", &PyDict_Type);
2360 SETBUILTIN("enumerate", &PyEnum_Type);
2361 SETBUILTIN("filter", &PyFilter_Type);
2362 SETBUILTIN("float", &PyFloat_Type);
2363 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2364 SETBUILTIN("property", &PyProperty_Type);
2365 SETBUILTIN("int", &PyLong_Type);
2366 SETBUILTIN("list", &PyList_Type);
2367 SETBUILTIN("map", &PyMap_Type);
2368 SETBUILTIN("object", &PyBaseObject_Type);
2369 SETBUILTIN("range", &PyRange_Type);
2370 SETBUILTIN("reversed", &PyReversed_Type);
2371 SETBUILTIN("set", &PySet_Type);
2372 SETBUILTIN("slice", &PySlice_Type);
2373 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2374 SETBUILTIN("str", &PyUnicode_Type);
2375 SETBUILTIN("super", &PySuper_Type);
2376 SETBUILTIN("tuple", &PyTuple_Type);
2377 SETBUILTIN("type", &PyType_Type);
2378 SETBUILTIN("zip", &PyZip_Type);
2379 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2380 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2381 Py_XDECREF(debug);
2382 return NULL;
2383 }
2384 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002387#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002388#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002389}