blob: 064b8477f239339fbb227288bca117149ff4c0fb [file] [log] [blame]
Guido van Rossum3f5da241990-12-20 15:06:42 +00001/* Built-in functions */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004#include "Python-ast.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00005
6#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Victor Stinnerb744ba12010-05-15 12:27:16 +000011#ifdef HAVE_LANGINFO_H
12#include <langinfo.h> /* CODESET */
13#endif
14
Mark Hammond26cffde42001-05-14 12:17:34 +000015/* The default encoding used by the platform file system APIs
16 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000017
18 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
19 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000020*/
Victor Stinner99b95382011-07-04 14:23:54 +020021#ifdef HAVE_MBCS
Mark Hammond26cffde42001-05-14 12:17:34 +000022const char *Py_FileSystemDefaultEncoding = "mbcs";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000023int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000024#elif defined(__APPLE__)
25const char *Py_FileSystemDefaultEncoding = "utf-8";
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000026int Py_HasFileSystemDefaultEncoding = 1;
Victor Stinnerd64e8a72011-07-04 13:48:30 +020027#else
Victor Stinnerb744ba12010-05-15 12:27:16 +000028const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
Martin v. Löwis04dc25c2008-10-03 16:09:28 +000029int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000030#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000031
Guido van Rossum79f25d91997-04-29 20:08:16 +000032static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000033builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
34{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000035 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
36 PyObject *cls = NULL;
Brett Cannonb94767f2011-02-22 20:15:44 +000037 Py_ssize_t nargs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000039 assert(args != NULL);
40 if (!PyTuple_Check(args)) {
41 PyErr_SetString(PyExc_TypeError,
42 "__build_class__: args is not a tuple");
43 return NULL;
44 }
45 nargs = PyTuple_GET_SIZE(args);
46 if (nargs < 2) {
47 PyErr_SetString(PyExc_TypeError,
48 "__build_class__: not enough arguments");
49 return NULL;
50 }
51 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
52 name = PyTuple_GET_ITEM(args, 1);
53 if (!PyUnicode_Check(name)) {
54 PyErr_SetString(PyExc_TypeError,
55 "__build_class__: name is not a string");
56 return NULL;
57 }
58 bases = PyTuple_GetSlice(args, 2, nargs);
59 if (bases == NULL)
60 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000062 if (kwds == NULL) {
63 meta = NULL;
64 mkw = NULL;
65 }
66 else {
67 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
68 if (mkw == NULL) {
69 Py_DECREF(bases);
70 return NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000071 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000072 meta = PyDict_GetItemString(mkw, "metaclass");
73 if (meta != NULL) {
74 Py_INCREF(meta);
75 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
76 Py_DECREF(meta);
77 Py_DECREF(mkw);
78 Py_DECREF(bases);
79 return NULL;
80 }
81 }
82 }
83 if (meta == NULL) {
84 if (PyTuple_GET_SIZE(bases) == 0)
85 meta = (PyObject *) (&PyType_Type);
86 else {
87 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
88 meta = (PyObject *) (base0->ob_type);
89 }
90 Py_INCREF(meta);
91 }
92 prep = PyObject_GetAttrString(meta, "__prepare__");
93 if (prep == NULL) {
94 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
95 PyErr_Clear();
96 ns = PyDict_New();
97 }
98 else {
99 Py_DECREF(meta);
100 Py_XDECREF(mkw);
101 Py_DECREF(bases);
102 return NULL;
103 }
104 }
105 else {
106 PyObject *pargs = PyTuple_Pack(2, name, bases);
107 if (pargs == NULL) {
108 Py_DECREF(prep);
109 Py_DECREF(meta);
110 Py_XDECREF(mkw);
111 Py_DECREF(bases);
112 return NULL;
113 }
114 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
115 Py_DECREF(pargs);
116 Py_DECREF(prep);
117 }
118 if (ns == NULL) {
119 Py_DECREF(meta);
120 Py_XDECREF(mkw);
121 Py_DECREF(bases);
122 return NULL;
123 }
124 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
125 if (cell != NULL) {
126 PyObject *margs;
127 margs = PyTuple_Pack(3, name, bases, ns);
128 if (margs != NULL) {
129 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
130 Py_DECREF(margs);
131 }
132 if (cls != NULL && PyCell_Check(cell)) {
133 Py_INCREF(cls);
134 PyCell_SET(cell, cls);
135 }
136 Py_DECREF(cell);
137 }
138 Py_DECREF(ns);
139 Py_DECREF(meta);
140 Py_XDECREF(mkw);
141 Py_DECREF(bases);
142 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000143}
144
145PyDoc_STRVAR(build_class_doc,
146"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
147\n\
148Internal helper function used by the class statement.");
149
150static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000151builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000152{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000153 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
154 "level", 0};
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400155 PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000157
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400158 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000159 kwlist, &name, &globals, &locals, &fromlist, &level))
160 return NULL;
Victor Stinnerfe93faf2011-03-14 15:54:52 -0400161 return PyImport_ImportModuleLevelObject(name, globals, locals,
162 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000163}
164
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000165PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000166"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000167\n\
Brett Cannon5305a992010-09-27 21:08:38 +0000168Import a module. Because this function is meant for use by the Python\n\
169interpreter and not for general use it is better to use\n\
170importlib.import_module() to programmatically import a module.\n\
171\n\
172The globals argument is only used to determine the context;\n\
173they are not modified. The locals argument is unused. The fromlist\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000174should be a list of names to emulate ``from name import ...'', or an\n\
175empty list to emulate ``import name''.\n\
176When importing a module from a package, note that __import__('A.B', ...)\n\
177returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000178fromlist is not empty. Level is used to determine whether to perform \n\
179absolute or relative imports. -1 is the original strategy of attempting\n\
180both absolute and relative imports, 0 is absolute, a positive number\n\
181is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000182
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000183
Guido van Rossum79f25d91997-04-29 20:08:16 +0000184static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000185builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000186{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000188}
189
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000190PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000191"abs(number) -> number\n\
192\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000193Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000194
Raymond Hettinger96229b12005-03-11 06:49:40 +0000195static PyObject *
196builtin_all(PyObject *self, PyObject *v)
197{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000198 PyObject *it, *item;
199 PyObject *(*iternext)(PyObject *);
200 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 it = PyObject_GetIter(v);
203 if (it == NULL)
204 return NULL;
205 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000206
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 for (;;) {
208 item = iternext(it);
209 if (item == NULL)
210 break;
211 cmp = PyObject_IsTrue(item);
212 Py_DECREF(item);
213 if (cmp < 0) {
214 Py_DECREF(it);
215 return NULL;
216 }
217 if (cmp == 0) {
218 Py_DECREF(it);
219 Py_RETURN_FALSE;
220 }
221 }
222 Py_DECREF(it);
223 if (PyErr_Occurred()) {
224 if (PyErr_ExceptionMatches(PyExc_StopIteration))
225 PyErr_Clear();
226 else
227 return NULL;
228 }
229 Py_RETURN_TRUE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000230}
231
232PyDoc_STRVAR(all_doc,
233"all(iterable) -> bool\n\
234\n\
235Return True if bool(x) is True for all values x in the iterable.");
236
237static PyObject *
238builtin_any(PyObject *self, PyObject *v)
239{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 PyObject *it, *item;
241 PyObject *(*iternext)(PyObject *);
242 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 it = PyObject_GetIter(v);
245 if (it == NULL)
246 return NULL;
247 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000248
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000249 for (;;) {
250 item = iternext(it);
251 if (item == NULL)
252 break;
253 cmp = PyObject_IsTrue(item);
254 Py_DECREF(item);
255 if (cmp < 0) {
256 Py_DECREF(it);
257 return NULL;
258 }
259 if (cmp == 1) {
260 Py_DECREF(it);
261 Py_RETURN_TRUE;
262 }
263 }
264 Py_DECREF(it);
265 if (PyErr_Occurred()) {
266 if (PyErr_ExceptionMatches(PyExc_StopIteration))
267 PyErr_Clear();
268 else
269 return NULL;
270 }
271 Py_RETURN_FALSE;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000272}
273
274PyDoc_STRVAR(any_doc,
275"any(iterable) -> bool\n\
276\n\
277Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000278
Georg Brandl559e5d72008-06-11 18:37:52 +0000279static PyObject *
280builtin_ascii(PyObject *self, PyObject *v)
281{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000282 return PyObject_ASCII(v);
Georg Brandl559e5d72008-06-11 18:37:52 +0000283}
284
285PyDoc_STRVAR(ascii_doc,
286"ascii(object) -> string\n\
287\n\
288As repr(), return a string containing a printable representation of an\n\
289object, but escape the non-ASCII characters in the string returned by\n\
290repr() using \\x, \\u or \\U escapes. This generates a string similar\n\
291to that returned by repr() in Python 2.");
292
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000293
Guido van Rossum79f25d91997-04-29 20:08:16 +0000294static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000295builtin_bin(PyObject *self, PyObject *v)
296{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000297 return PyNumber_ToBase(v, 2);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000298}
299
300PyDoc_STRVAR(bin_doc,
301"bin(number) -> string\n\
302\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -0400303Return the binary representation of an integer.");
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000304
305
Antoine Pitroue71362d2010-11-27 22:00:11 +0000306static PyObject *
307builtin_callable(PyObject *self, PyObject *v)
308{
309 return PyBool_FromLong((long)PyCallable_Check(v));
310}
311
312PyDoc_STRVAR(callable_doc,
313"callable(object) -> bool\n\
314\n\
315Return whether the object is callable (i.e., some kind of function).\n\
316Note that classes are callable, as are instances of classes with a\n\
317__call__() method.");
318
319
Raymond Hettinger17301e92008-03-13 00:19:26 +0000320typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 PyObject_HEAD
322 PyObject *func;
323 PyObject *it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000324} filterobject;
325
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000326static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000327filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000328{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000329 PyObject *func, *seq;
330 PyObject *it;
331 filterobject *lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000332
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000333 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
334 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000336 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
337 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 /* Get iterator. */
340 it = PyObject_GetIter(seq);
341 if (it == NULL)
342 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000344 /* create filterobject structure */
345 lz = (filterobject *)type->tp_alloc(type, 0);
346 if (lz == NULL) {
347 Py_DECREF(it);
348 return NULL;
349 }
350 Py_INCREF(func);
351 lz->func = func;
352 lz->it = it;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 return (PyObject *)lz;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000355}
356
357static void
358filter_dealloc(filterobject *lz)
359{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000360 PyObject_GC_UnTrack(lz);
361 Py_XDECREF(lz->func);
362 Py_XDECREF(lz->it);
363 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000364}
365
366static int
367filter_traverse(filterobject *lz, visitproc visit, void *arg)
368{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 Py_VISIT(lz->it);
370 Py_VISIT(lz->func);
371 return 0;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000372}
373
374static PyObject *
375filter_next(filterobject *lz)
376{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000377 PyObject *item;
378 PyObject *it = lz->it;
379 long ok;
380 PyObject *(*iternext)(PyObject *);
Raymond Hettinger17301e92008-03-13 00:19:26 +0000381
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000382 iternext = *Py_TYPE(it)->tp_iternext;
383 for (;;) {
384 item = iternext(it);
385 if (item == NULL)
386 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000387
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
389 ok = PyObject_IsTrue(item);
390 } else {
391 PyObject *good;
392 good = PyObject_CallFunctionObjArgs(lz->func,
393 item, NULL);
394 if (good == NULL) {
395 Py_DECREF(item);
396 return NULL;
397 }
398 ok = PyObject_IsTrue(good);
399 Py_DECREF(good);
400 }
401 if (ok)
402 return item;
403 Py_DECREF(item);
404 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000405}
406
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000407PyDoc_STRVAR(filter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +0000408"filter(function or None, iterable) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000409\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +0000410Return an iterator yielding those items of iterable for which function(item)\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000411is true. If function is None, return the items that are true.");
412
413PyTypeObject PyFilter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000414 PyVarObject_HEAD_INIT(&PyType_Type, 0)
415 "filter", /* tp_name */
416 sizeof(filterobject), /* tp_basicsize */
417 0, /* tp_itemsize */
418 /* methods */
419 (destructor)filter_dealloc, /* tp_dealloc */
420 0, /* tp_print */
421 0, /* tp_getattr */
422 0, /* tp_setattr */
423 0, /* tp_reserved */
424 0, /* tp_repr */
425 0, /* tp_as_number */
426 0, /* tp_as_sequence */
427 0, /* tp_as_mapping */
428 0, /* tp_hash */
429 0, /* tp_call */
430 0, /* tp_str */
431 PyObject_GenericGetAttr, /* tp_getattro */
432 0, /* tp_setattro */
433 0, /* tp_as_buffer */
434 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
435 Py_TPFLAGS_BASETYPE, /* tp_flags */
436 filter_doc, /* tp_doc */
437 (traverseproc)filter_traverse, /* tp_traverse */
438 0, /* tp_clear */
439 0, /* tp_richcompare */
440 0, /* tp_weaklistoffset */
441 PyObject_SelfIter, /* tp_iter */
442 (iternextfunc)filter_next, /* tp_iternext */
443 0, /* tp_methods */
444 0, /* tp_members */
445 0, /* tp_getset */
446 0, /* tp_base */
447 0, /* tp_dict */
448 0, /* tp_descr_get */
449 0, /* tp_descr_set */
450 0, /* tp_dictoffset */
451 0, /* tp_init */
452 PyType_GenericAlloc, /* tp_alloc */
453 filter_new, /* tp_new */
454 PyObject_GC_Del, /* tp_free */
Raymond Hettinger17301e92008-03-13 00:19:26 +0000455};
456
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000457
Eric Smith8c663262007-08-25 02:26:07 +0000458static PyObject *
459builtin_format(PyObject *self, PyObject *args)
460{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000461 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000462 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000463
Eric Smith8fd3eba2008-02-17 19:48:00 +0000464 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000465 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000466
Eric Smith8fd3eba2008-02-17 19:48:00 +0000467 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000468}
469
Eric Smith8c663262007-08-25 02:26:07 +0000470PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000471"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000472\n\
Eric Smith81936692007-08-31 01:14:01 +0000473Returns value.__format__(format_spec)\n\
474format_spec defaults to \"\"");
475
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000476static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000477builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000478{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000479 int x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 if (!PyArg_ParseTuple(args, "i:chr", &x))
482 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000484 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000485}
486
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000487PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000488"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000489\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000490Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000491)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000492#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000493PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000494"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000495)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000496#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000497;
Guido van Rossum09095f32000-03-10 23:00:52 +0000498
499
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000500static char *
Benjamin Petersonf5b52242009-03-02 23:31:26 +0000501source_as_string(PyObject *cmd, char *funcname, char *what, PyCompilerFlags *cf)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000502{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 char *str;
504 Py_ssize_t size;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 if (PyUnicode_Check(cmd)) {
507 cf->cf_flags |= PyCF_IGNORE_COOKIE;
Victor Stinnerf3fd7332011-03-02 01:03:11 +0000508 cmd = _PyUnicode_AsDefaultEncodedString(cmd);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 if (cmd == NULL)
510 return NULL;
511 }
512 else if (!PyObject_CheckReadBuffer(cmd)) {
513 PyErr_Format(PyExc_TypeError,
514 "%s() arg 1 must be a %s object",
515 funcname, what);
516 return NULL;
517 }
518 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
519 return NULL;
520 }
521 if (strlen(str) != size) {
522 PyErr_SetString(PyExc_TypeError,
523 "source code string cannot contain null bytes");
524 return NULL;
525 }
526 return str;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000527}
528
Guido van Rossum79f25d91997-04-29 20:08:16 +0000529static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000530builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000531{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 char *str;
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000533 PyObject *filename_obj;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 char *filename;
535 char *startstr;
536 int mode = -1;
537 int dont_inherit = 0;
538 int supplied_flags = 0;
Georg Brandl8334fd92010-12-04 10:26:46 +0000539 int optimize = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000540 int is_ast;
541 PyCompilerFlags cf;
542 PyObject *cmd;
543 static char *kwlist[] = {"source", "filename", "mode", "flags",
Georg Brandl8334fd92010-12-04 10:26:46 +0000544 "dont_inherit", "optimize", NULL};
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000546 PyObject *result;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000547
Georg Brandl8334fd92010-12-04 10:26:46 +0000548 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist,
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000549 &cmd,
550 PyUnicode_FSConverter, &filename_obj,
551 &startstr, &supplied_flags,
Georg Brandl8334fd92010-12-04 10:26:46 +0000552 &dont_inherit, &optimize))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000553 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000554
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000555 filename = PyBytes_AS_STRING(filename_obj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 if (supplied_flags &
559 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
560 {
561 PyErr_SetString(PyExc_ValueError,
562 "compile(): unrecognised flags");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000563 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 }
565 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
Tim Peters6cd6a822001-08-17 22:11:27 +0000566
Georg Brandl8334fd92010-12-04 10:26:46 +0000567 if (optimize < -1 || optimize > 2) {
568 PyErr_SetString(PyExc_ValueError,
569 "compile(): invalid optimize value");
570 goto error;
571 }
572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 if (!dont_inherit) {
574 PyEval_MergeCompilerFlags(&cf);
575 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 if (strcmp(startstr, "exec") == 0)
578 mode = 0;
579 else if (strcmp(startstr, "eval") == 0)
580 mode = 1;
581 else if (strcmp(startstr, "single") == 0)
582 mode = 2;
583 else {
584 PyErr_SetString(PyExc_ValueError,
585 "compile() arg 3 must be 'exec', 'eval' or 'single'");
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000586 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 }
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 is_ast = PyAST_Check(cmd);
590 if (is_ast == -1)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000591 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000592 if (is_ast) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 if (supplied_flags & PyCF_ONLY_AST) {
594 Py_INCREF(cmd);
595 result = cmd;
596 }
597 else {
598 PyArena *arena;
599 mod_ty mod;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 arena = PyArena_New();
602 mod = PyAST_obj2mod(cmd, arena, mode);
603 if (mod == NULL) {
604 PyArena_Free(arena);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000605 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 }
Georg Brandl8334fd92010-12-04 10:26:46 +0000607 result = (PyObject*)PyAST_CompileEx(mod, filename,
608 &cf, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000609 PyArena_Free(arena);
610 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000611 goto finally;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf);
615 if (str == NULL)
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000616 goto error;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000617
Georg Brandl8334fd92010-12-04 10:26:46 +0000618 result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize);
Victor Stinner4c7c8c32010-10-16 13:14:10 +0000619 goto finally;
620
621error:
622 result = NULL;
623finally:
624 Py_DECREF(filename_obj);
625 return result;
Guido van Rossum5b722181993-03-30 17:46:03 +0000626}
627
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000628PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000629"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000630\n\
631Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000632into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000633The filename will be used for run-time error messages.\n\
634The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000635single (interactive) statement, or 'eval' to compile an expression.\n\
636The flags argument, if present, controls which future statements influence\n\
637the compilation of the code.\n\
638The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
639the effects of any future statements in effect in the code calling\n\
640compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000641in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000642
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000644builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000645{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000646 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000648 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
649 return NULL;
650 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000651}
652
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000653PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000654"dir([object]) -> list of strings\n"
655"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000656"If called without an argument, return the names in the current scope.\n"
657"Else, return an alphabetized list of names comprising (some of) the attributes\n"
658"of the given object, and of attributes reachable from it.\n"
659"If the object supplies a method named __dir__, it will be used; otherwise\n"
660"the default dir() logic is used and returns:\n"
661" for a module object: the module's attributes.\n"
662" for a class object: its attributes, and recursively the attributes\n"
663" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000664" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000665" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000666
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000668builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000669{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000671
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000672 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
673 return NULL;
674 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000675}
676
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000677PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000678"divmod(x, y) -> (div, mod)\n\
679\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000680Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000681
682
Guido van Rossum79f25d91997-04-29 20:08:16 +0000683static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000684builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000685{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 PyObject *cmd, *result, *tmp = NULL;
687 PyObject *globals = Py_None, *locals = Py_None;
688 char *str;
689 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
692 return NULL;
693 if (locals != Py_None && !PyMapping_Check(locals)) {
694 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
695 return NULL;
696 }
697 if (globals != Py_None && !PyDict_Check(globals)) {
698 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
699 "globals must be a real dict; try eval(expr, {}, mapping)"
700 : "globals must be a dict");
701 return NULL;
702 }
703 if (globals == Py_None) {
704 globals = PyEval_GetGlobals();
705 if (locals == Py_None)
706 locals = PyEval_GetLocals();
707 }
708 else if (locals == Py_None)
709 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 if (globals == NULL || locals == NULL) {
712 PyErr_SetString(PyExc_TypeError,
713 "eval must be given globals and locals "
714 "when called without a frame");
715 return NULL;
716 }
Georg Brandl77c85e62005-09-15 10:46:13 +0000717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
719 if (PyDict_SetItemString(globals, "__builtins__",
720 PyEval_GetBuiltins()) != 0)
721 return NULL;
722 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 if (PyCode_Check(cmd)) {
725 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
726 PyErr_SetString(PyExc_TypeError,
727 "code object passed to eval() may not contain free variables");
728 return NULL;
729 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000730 return PyEval_EvalCode(cmd, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000731 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
734 str = source_as_string(cmd, "eval", "string, bytes or code", &cf);
735 if (str == NULL)
736 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000737
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000738 while (*str == ' ' || *str == '\t')
739 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 (void)PyEval_MergeCompilerFlags(&cf);
742 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
743 Py_XDECREF(tmp);
744 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000745}
746
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000747PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000748"eval(source[, globals[, locals]]) -> value\n\
749\n\
750Evaluate the source in the context of globals and locals.\n\
751The source may be a string representing a Python expression\n\
752or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000753The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000754defaulting to the current globals and locals.\n\
755If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000756
Georg Brandl7cae87c2006-09-06 06:51:57 +0000757static PyObject *
758builtin_exec(PyObject *self, PyObject *args)
759{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 PyObject *v;
761 PyObject *prog, *globals = Py_None, *locals = Py_None;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals))
764 return NULL;
Georg Brandl2cabc562008-08-28 07:57:16 +0000765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 if (globals == Py_None) {
767 globals = PyEval_GetGlobals();
768 if (locals == Py_None) {
769 locals = PyEval_GetLocals();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000770 }
771 if (!globals || !locals) {
772 PyErr_SetString(PyExc_SystemError,
773 "globals and locals cannot be NULL");
774 return NULL;
775 }
776 }
777 else if (locals == Py_None)
778 locals = globals;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 if (!PyDict_Check(globals)) {
781 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
782 globals->ob_type->tp_name);
783 return NULL;
784 }
785 if (!PyMapping_Check(locals)) {
786 PyErr_Format(PyExc_TypeError,
787 "arg 3 must be a mapping or None, not %.100s",
788 locals->ob_type->tp_name);
789 return NULL;
790 }
791 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
792 if (PyDict_SetItemString(globals, "__builtins__",
793 PyEval_GetBuiltins()) != 0)
794 return NULL;
795 }
796
797 if (PyCode_Check(prog)) {
798 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
799 PyErr_SetString(PyExc_TypeError,
800 "code object passed to exec() may not "
801 "contain free variables");
802 return NULL;
803 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000804 v = PyEval_EvalCode(prog, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000805 }
806 else {
807 char *str;
808 PyCompilerFlags cf;
809 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
810 str = source_as_string(prog, "exec",
811 "string, bytes or code", &cf);
812 if (str == NULL)
813 return NULL;
814 if (PyEval_MergeCompilerFlags(&cf))
815 v = PyRun_StringFlags(str, Py_file_input, globals,
816 locals, &cf);
817 else
818 v = PyRun_String(str, Py_file_input, globals, locals);
819 }
820 if (v == NULL)
821 return NULL;
822 Py_DECREF(v);
823 Py_RETURN_NONE;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000824}
825
826PyDoc_STRVAR(exec_doc,
827"exec(object[, globals[, locals]])\n\
828\n\
Mark Dickinson480e8e32009-12-19 21:19:35 +0000829Read and execute code from an object, which can be a string or a code\n\
Benjamin Peterson38090262009-01-04 15:30:39 +0000830object.\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000831The globals and locals are dictionaries, defaulting to the current\n\
832globals and locals. If only globals is given, locals defaults to it.");
833
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000834
Guido van Rossum79f25d91997-04-29 20:08:16 +0000835static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000836builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000837{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000838 PyObject *v, *result, *dflt = NULL;
839 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
842 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 if (!PyUnicode_Check(name)) {
845 PyErr_SetString(PyExc_TypeError,
846 "getattr(): attribute name must be string");
847 return NULL;
848 }
849 result = PyObject_GetAttr(v, name);
850 if (result == NULL && dflt != NULL &&
851 PyErr_ExceptionMatches(PyExc_AttributeError))
852 {
853 PyErr_Clear();
854 Py_INCREF(dflt);
855 result = dflt;
856 }
857 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000858}
859
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000860PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000861"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000862\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000863Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
864When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000865exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000866
867
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000869builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000870{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000872
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 d = PyEval_GetGlobals();
874 Py_XINCREF(d);
875 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000876}
877
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000878PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879"globals() -> dictionary\n\
880\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000881Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000882
883
Guido van Rossum79f25d91997-04-29 20:08:16 +0000884static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000885builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000886{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000887 PyObject *v;
888 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
891 return NULL;
892 if (!PyUnicode_Check(name)) {
893 PyErr_SetString(PyExc_TypeError,
894 "hasattr(): attribute name must be string");
895 return NULL;
896 }
897 v = PyObject_GetAttr(v, name);
898 if (v == NULL) {
Benjamin Peterson17689992010-08-24 03:26:23 +0000899 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000900 PyErr_Clear();
Benjamin Peterson17689992010-08-24 03:26:23 +0000901 Py_RETURN_FALSE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 }
Benjamin Peterson17689992010-08-24 03:26:23 +0000903 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 }
905 Py_DECREF(v);
Benjamin Peterson17689992010-08-24 03:26:23 +0000906 Py_RETURN_TRUE;
Guido van Rossum33894be1992-01-27 16:53:09 +0000907}
908
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000909PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000910"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000911\n\
912Return whether the object has an attribute with the given name.\n\
Benjamin Peterson17689992010-08-24 03:26:23 +0000913(This is done by calling getattr(object, name) and catching AttributeError.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000914
915
Guido van Rossum79f25d91997-04-29 20:08:16 +0000916static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000917builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000920}
921
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000922PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000923"id(object) -> integer\n\
924\n\
925Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000926simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000927
928
Raymond Hettingera6c60372008-03-13 01:26:19 +0000929/* map object ************************************************************/
930
931typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 PyObject_HEAD
933 PyObject *iters;
934 PyObject *func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000935} mapobject;
936
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000938map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000939{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 PyObject *it, *iters, *func;
941 mapobject *lz;
942 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
945 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 numargs = PyTuple_Size(args);
948 if (numargs < 2) {
949 PyErr_SetString(PyExc_TypeError,
950 "map() must have at least two arguments.");
951 return NULL;
952 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000953
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 iters = PyTuple_New(numargs-1);
955 if (iters == NULL)
956 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000958 for (i=1 ; i<numargs ; i++) {
959 /* Get iterator. */
960 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
961 if (it == NULL) {
962 Py_DECREF(iters);
963 return NULL;
964 }
965 PyTuple_SET_ITEM(iters, i-1, it);
966 }
Raymond Hettingera6c60372008-03-13 01:26:19 +0000967
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 /* create mapobject structure */
969 lz = (mapobject *)type->tp_alloc(type, 0);
970 if (lz == NULL) {
971 Py_DECREF(iters);
972 return NULL;
973 }
974 lz->iters = iters;
975 func = PyTuple_GET_ITEM(args, 0);
976 Py_INCREF(func);
977 lz->func = func;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 return (PyObject *)lz;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000980}
981
982static void
983map_dealloc(mapobject *lz)
984{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 PyObject_GC_UnTrack(lz);
986 Py_XDECREF(lz->iters);
987 Py_XDECREF(lz->func);
988 Py_TYPE(lz)->tp_free(lz);
Raymond Hettingera6c60372008-03-13 01:26:19 +0000989}
990
991static int
992map_traverse(mapobject *lz, visitproc visit, void *arg)
993{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 Py_VISIT(lz->iters);
995 Py_VISIT(lz->func);
996 return 0;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000997}
998
999static PyObject *
1000map_next(mapobject *lz)
1001{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 PyObject *val;
1003 PyObject *argtuple;
1004 PyObject *result;
1005 Py_ssize_t numargs, i;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 numargs = PyTuple_Size(lz->iters);
1008 argtuple = PyTuple_New(numargs);
1009 if (argtuple == NULL)
1010 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +00001011
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 for (i=0 ; i<numargs ; i++) {
1013 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
1014 if (val == NULL) {
1015 Py_DECREF(argtuple);
1016 return NULL;
1017 }
1018 PyTuple_SET_ITEM(argtuple, i, val);
1019 }
1020 result = PyObject_Call(lz->func, argtuple, NULL);
1021 Py_DECREF(argtuple);
1022 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +00001023}
1024
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001025PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +00001026"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001027\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +00001028Make an iterator that computes the function using arguments from\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001030
Raymond Hettingera6c60372008-03-13 01:26:19 +00001031PyTypeObject PyMap_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1033 "map", /* tp_name */
1034 sizeof(mapobject), /* tp_basicsize */
1035 0, /* tp_itemsize */
1036 /* methods */
1037 (destructor)map_dealloc, /* tp_dealloc */
1038 0, /* tp_print */
1039 0, /* tp_getattr */
1040 0, /* tp_setattr */
1041 0, /* tp_reserved */
1042 0, /* tp_repr */
1043 0, /* tp_as_number */
1044 0, /* tp_as_sequence */
1045 0, /* tp_as_mapping */
1046 0, /* tp_hash */
1047 0, /* tp_call */
1048 0, /* tp_str */
1049 PyObject_GenericGetAttr, /* tp_getattro */
1050 0, /* tp_setattro */
1051 0, /* tp_as_buffer */
1052 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1053 Py_TPFLAGS_BASETYPE, /* tp_flags */
1054 map_doc, /* tp_doc */
1055 (traverseproc)map_traverse, /* tp_traverse */
1056 0, /* tp_clear */
1057 0, /* tp_richcompare */
1058 0, /* tp_weaklistoffset */
1059 PyObject_SelfIter, /* tp_iter */
1060 (iternextfunc)map_next, /* tp_iternext */
1061 0, /* tp_methods */
1062 0, /* tp_members */
1063 0, /* tp_getset */
1064 0, /* tp_base */
1065 0, /* tp_dict */
1066 0, /* tp_descr_get */
1067 0, /* tp_descr_set */
1068 0, /* tp_dictoffset */
1069 0, /* tp_init */
1070 PyType_GenericAlloc, /* tp_alloc */
1071 map_new, /* tp_new */
1072 PyObject_GC_Del, /* tp_free */
Raymond Hettingera6c60372008-03-13 01:26:19 +00001073};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001074
Guido van Rossum79f25d91997-04-29 20:08:16 +00001075static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001076builtin_next(PyObject *self, PyObject *args)
1077{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 PyObject *it, *res;
1079 PyObject *def = NULL;
Georg Brandla18af4e2007-04-21 15:47:16 +00001080
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1082 return NULL;
1083 if (!PyIter_Check(it)) {
1084 PyErr_Format(PyExc_TypeError,
1085 "%.200s object is not an iterator",
1086 it->ob_type->tp_name);
1087 return NULL;
1088 }
1089
1090 res = (*it->ob_type->tp_iternext)(it);
1091 if (res != NULL) {
1092 return res;
1093 } else if (def != NULL) {
1094 if (PyErr_Occurred()) {
1095 if(!PyErr_ExceptionMatches(PyExc_StopIteration))
1096 return NULL;
1097 PyErr_Clear();
1098 }
1099 Py_INCREF(def);
1100 return def;
1101 } else if (PyErr_Occurred()) {
1102 return NULL;
1103 } else {
1104 PyErr_SetNone(PyExc_StopIteration);
1105 return NULL;
1106 }
Georg Brandla18af4e2007-04-21 15:47:16 +00001107}
1108
1109PyDoc_STRVAR(next_doc,
1110"next(iterator[, default])\n\
1111\n\
1112Return the next item from the iterator. If default is given and the iterator\n\
1113is exhausted, it is returned instead of raising StopIteration.");
1114
1115
1116static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001117builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001118{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 PyObject *v;
1120 PyObject *name;
1121 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001122
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
1124 return NULL;
1125 if (PyObject_SetAttr(v, name, value) != 0)
1126 return NULL;
1127 Py_INCREF(Py_None);
1128 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001129}
1130
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001131PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001132"setattr(object, name, value)\n\
1133\n\
1134Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001135``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001136
1137
Guido van Rossum79f25d91997-04-29 20:08:16 +00001138static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001139builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001140{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001141 PyObject *v;
1142 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001144 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
1145 return NULL;
1146 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
1147 return NULL;
1148 Py_INCREF(Py_None);
1149 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001150}
1151
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001152PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001153"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001154\n\
1155Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001156``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001157
1158
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001160builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001161{
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001162 Py_hash_t x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 x = PyObject_Hash(v);
1165 if (x == -1)
1166 return NULL;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00001167 return PyLong_FromSsize_t(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001168}
1169
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001170PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001171"hash(object) -> integer\n\
1172\n\
1173Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001174the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001175
1176
Guido van Rossum79f25d91997-04-29 20:08:16 +00001177static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001178builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001181}
1182
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001183PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001184"hex(number) -> string\n\
1185\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001186Return the hexadecimal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001187
1188
Guido van Rossum79f25d91997-04-29 20:08:16 +00001189static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001190builtin_iter(PyObject *self, PyObject *args)
1191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 PyObject *v, *w = NULL;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001193
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
1195 return NULL;
1196 if (w == NULL)
1197 return PyObject_GetIter(v);
1198 if (!PyCallable_Check(v)) {
1199 PyErr_SetString(PyExc_TypeError,
1200 "iter(v, w): v must be callable");
1201 return NULL;
1202 }
1203 return PyCallIter_New(v, w);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001204}
1205
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001206PyDoc_STRVAR(iter_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00001207"iter(iterable) -> iterator\n\
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001208iter(callable, sentinel) -> iterator\n\
1209\n\
1210Get an iterator from an object. In the first form, the argument must\n\
1211supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001212In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001213
1214
1215static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001216builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001217{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 res = PyObject_Size(v);
1221 if (res < 0 && PyErr_Occurred())
1222 return NULL;
1223 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001224}
1225
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001226PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001227"len(object) -> integer\n\
1228\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001229Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001230
1231
Guido van Rossum79f25d91997-04-29 20:08:16 +00001232static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001233builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001234{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001237 d = PyEval_GetLocals();
1238 Py_XINCREF(d);
1239 return d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001240}
1241
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001242PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001243"locals() -> dictionary\n\
1244\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001245Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001246
1247
Guido van Rossum79f25d91997-04-29 20:08:16 +00001248static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001250{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
1252 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001253
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 if (PyTuple_Size(args) > 1)
1255 v = args;
1256 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
1257 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1260 keyfunc = PyDict_GetItemString(kwds, "key");
1261 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
1262 PyErr_Format(PyExc_TypeError,
1263 "%s() got an unexpected keyword argument", name);
1264 return NULL;
1265 }
1266 Py_INCREF(keyfunc);
1267 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 it = PyObject_GetIter(v);
1270 if (it == NULL) {
1271 Py_XDECREF(keyfunc);
1272 return NULL;
1273 }
Tim Petersc3074532001-05-03 07:00:32 +00001274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 maxitem = NULL; /* the result */
1276 maxval = NULL; /* the value associated with the result */
1277 while (( item = PyIter_Next(it) )) {
1278 /* get the value from the key function */
1279 if (keyfunc != NULL) {
1280 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1281 if (val == NULL)
1282 goto Fail_it_item;
1283 }
1284 /* no key function; the value is the item */
1285 else {
1286 val = item;
1287 Py_INCREF(val);
1288 }
Tim Petersc3074532001-05-03 07:00:32 +00001289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 /* maximum value and item are unset; set them */
1291 if (maxval == NULL) {
1292 maxitem = item;
1293 maxval = val;
1294 }
1295 /* maximum value and item are set; update them as necessary */
1296 else {
1297 int cmp = PyObject_RichCompareBool(val, maxval, op);
1298 if (cmp < 0)
1299 goto Fail_it_item_and_val;
1300 else if (cmp > 0) {
1301 Py_DECREF(maxval);
1302 Py_DECREF(maxitem);
1303 maxval = val;
1304 maxitem = item;
1305 }
1306 else {
1307 Py_DECREF(item);
1308 Py_DECREF(val);
1309 }
1310 }
1311 }
1312 if (PyErr_Occurred())
1313 goto Fail_it;
1314 if (maxval == NULL) {
1315 PyErr_Format(PyExc_ValueError,
1316 "%s() arg is an empty sequence", name);
1317 assert(maxitem == NULL);
1318 }
1319 else
1320 Py_DECREF(maxval);
1321 Py_DECREF(it);
1322 Py_XDECREF(keyfunc);
1323 return maxitem;
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001324
1325Fail_it_item_and_val:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 Py_DECREF(val);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001327Fail_it_item:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 Py_DECREF(item);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001329Fail_it:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001330 Py_XDECREF(maxval);
1331 Py_XDECREF(maxitem);
1332 Py_DECREF(it);
1333 Py_XDECREF(keyfunc);
1334 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001335}
1336
Guido van Rossum79f25d91997-04-29 20:08:16 +00001337static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001338builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001339{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001340 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001341}
1342
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001343PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001344"min(iterable[, key=func]) -> value\n\
1345min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001346\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001347With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001348With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001349
1350
Guido van Rossum79f25d91997-04-29 20:08:16 +00001351static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001352builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001353{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001354 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001355}
1356
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001357PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001358"max(iterable[, key=func]) -> value\n\
1359max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001360\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001361With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001362With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001363
1364
Guido van Rossum79f25d91997-04-29 20:08:16 +00001365static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001366builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001367{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001368 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001369}
1370
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001371PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001372"oct(number) -> string\n\
1373\n\
Alexander Belopolsky12338ab2011-04-07 00:15:33 -04001374Return the octal representation of an integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001375
1376
Guido van Rossum79f25d91997-04-29 20:08:16 +00001377static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001378builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001379{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001380 long ord;
1381 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001383 if (PyBytes_Check(obj)) {
1384 size = PyBytes_GET_SIZE(obj);
1385 if (size == 1) {
1386 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
1387 return PyLong_FromLong(ord);
1388 }
1389 }
1390 else if (PyUnicode_Check(obj)) {
1391 size = PyUnicode_GET_SIZE(obj);
1392 if (size == 1) {
1393 ord = (long)*PyUnicode_AS_UNICODE(obj);
1394 return PyLong_FromLong(ord);
1395 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001396#ifndef Py_UNICODE_WIDE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001397 if (size == 2) {
1398 /* Decode a valid surrogate pair */
1399 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1400 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1401 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1402 0xDC00 <= c1 && c1 <= 0xDFFF) {
1403 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1404 0x00010000);
1405 return PyLong_FromLong(ord);
1406 }
1407 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001408#endif
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 */
1573 tmp = PyObject_CallMethod(ferr, "flush", "");
1574 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. */
1582 tmp = PyObject_CallMethod(fin, "fileno", "");
1583 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) {
1595 tmp = PyObject_CallMethod(fout, "fileno", "");
1596 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 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 tmp = PyObject_CallMethod(fout, "flush", "");
1628 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 }
1709 tmp = PyObject_CallMethod(fout, "flush", "");
1710 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]");
1894 return NULL;
1895 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001896 if (PyByteArray_Check(result)) {
1897 PyErr_SetString(PyExc_TypeError,
Benjamin Peterson4f921c22011-07-29 14:24:29 -05001898 "sum() can't sum bytearray [use b''.join(seq) instead]");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001899 Py_DECREF(iter);
1900 return NULL;
1901 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 Py_INCREF(result);
1904 }
Alex Martellia70b1912003-04-22 08:12:33 +00001905
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001906#ifndef SLOW_SUM
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1908 Assumes all inputs are the same type. If the assumption fails, default
1909 to the more general routine.
1910 */
1911 if (PyLong_CheckExact(result)) {
1912 int overflow;
1913 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1914 /* If this already overflowed, don't even enter the loop. */
1915 if (overflow == 0) {
1916 Py_DECREF(result);
1917 result = NULL;
1918 }
1919 while(result == NULL) {
1920 item = PyIter_Next(iter);
1921 if (item == NULL) {
1922 Py_DECREF(iter);
1923 if (PyErr_Occurred())
1924 return NULL;
1925 return PyLong_FromLong(i_result);
1926 }
1927 if (PyLong_CheckExact(item)) {
1928 long b = PyLong_AsLongAndOverflow(item, &overflow);
1929 long x = i_result + b;
1930 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
1931 i_result = x;
1932 Py_DECREF(item);
1933 continue;
1934 }
1935 }
1936 /* Either overflowed or is not an int. Restore real objects and process normally */
1937 result = PyLong_FromLong(i_result);
1938 temp = PyNumber_Add(result, item);
1939 Py_DECREF(result);
1940 Py_DECREF(item);
1941 result = temp;
1942 if (result == NULL) {
1943 Py_DECREF(iter);
1944 return NULL;
1945 }
1946 }
1947 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001948
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 if (PyFloat_CheckExact(result)) {
1950 double f_result = PyFloat_AS_DOUBLE(result);
1951 Py_DECREF(result);
1952 result = NULL;
1953 while(result == NULL) {
1954 item = PyIter_Next(iter);
1955 if (item == NULL) {
1956 Py_DECREF(iter);
1957 if (PyErr_Occurred())
1958 return NULL;
1959 return PyFloat_FromDouble(f_result);
1960 }
1961 if (PyFloat_CheckExact(item)) {
1962 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1963 f_result += PyFloat_AS_DOUBLE(item);
1964 PyFPE_END_PROTECT(f_result)
1965 Py_DECREF(item);
1966 continue;
1967 }
1968 if (PyLong_CheckExact(item)) {
1969 long value;
1970 int overflow;
1971 value = PyLong_AsLongAndOverflow(item, &overflow);
1972 if (!overflow) {
1973 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
1974 f_result += (double)value;
1975 PyFPE_END_PROTECT(f_result)
1976 Py_DECREF(item);
1977 continue;
1978 }
1979 }
1980 result = PyFloat_FromDouble(f_result);
1981 temp = PyNumber_Add(result, item);
1982 Py_DECREF(result);
1983 Py_DECREF(item);
1984 result = temp;
1985 if (result == NULL) {
1986 Py_DECREF(iter);
1987 return NULL;
1988 }
1989 }
1990 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001991#endif
1992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 for(;;) {
1994 item = PyIter_Next(iter);
1995 if (item == NULL) {
1996 /* error, or end-of-sequence */
1997 if (PyErr_Occurred()) {
1998 Py_DECREF(result);
1999 result = NULL;
2000 }
2001 break;
2002 }
2003 /* It's tempting to use PyNumber_InPlaceAdd instead of
2004 PyNumber_Add here, to avoid quadratic running time
2005 when doing 'sum(list_of_lists, [])'. However, this
2006 would produce a change in behaviour: a snippet like
Mark Dickinson9acadc52009-10-26 14:19:42 +00002007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002008 empty = []
2009 sum([[x] for x in range(10)], empty)
Mark Dickinson9acadc52009-10-26 14:19:42 +00002010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002011 would change the value of empty. */
2012 temp = PyNumber_Add(result, item);
2013 Py_DECREF(result);
2014 Py_DECREF(item);
2015 result = temp;
2016 if (result == NULL)
2017 break;
2018 }
2019 Py_DECREF(iter);
2020 return result;
Alex Martellia70b1912003-04-22 08:12:33 +00002021}
2022
2023PyDoc_STRVAR(sum_doc,
Georg Brandld11ae5d2008-05-16 13:27:32 +00002024"sum(iterable[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00002025\n\
Georg Brandld11ae5d2008-05-16 13:27:32 +00002026Returns the sum of an iterable of numbers (NOT strings) plus the value\n\
2027of parameter 'start' (which defaults to 0). When the iterable is\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00002028empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00002029
2030
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002031static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002032builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002033{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002034 PyObject *inst;
2035 PyObject *cls;
2036 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
2039 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00002040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002041 retval = PyObject_IsInstance(inst, cls);
2042 if (retval < 0)
2043 return NULL;
2044 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002045}
2046
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002047PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002048"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002049\n\
2050Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00002051With a type as second argument, return whether that is the object's type.\n\
2052The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002053isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002054
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002055
2056static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002057builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002058{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002059 PyObject *derived;
2060 PyObject *cls;
2061 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002062
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
2064 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00002065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002066 retval = PyObject_IsSubclass(derived, cls);
2067 if (retval < 0)
2068 return NULL;
2069 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002070}
2071
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002072PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00002073"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002074\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00002075Return whether class C is a subclass (i.e., a derived class) of class B.\n\
2076When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
2077is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002078
Barry Warsawcde8b1b1997-08-22 21:14:38 +00002079
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002080typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002081 PyObject_HEAD
2082 Py_ssize_t tuplesize;
2083 PyObject *ittuple; /* tuple of iterators */
2084 PyObject *result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002085} zipobject;
2086
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002087static PyObject *
2088zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002089{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 zipobject *lz;
2091 Py_ssize_t i;
2092 PyObject *ittuple; /* tuple of iterators */
2093 PyObject *result;
2094 Py_ssize_t tuplesize = PySequence_Length(args);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002095
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002096 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2097 return NULL;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002098
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002099 /* args must be a tuple */
2100 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002102 /* obtain iterators */
2103 ittuple = PyTuple_New(tuplesize);
2104 if (ittuple == NULL)
2105 return NULL;
2106 for (i=0; i < tuplesize; ++i) {
2107 PyObject *item = PyTuple_GET_ITEM(args, i);
2108 PyObject *it = PyObject_GetIter(item);
2109 if (it == NULL) {
2110 if (PyErr_ExceptionMatches(PyExc_TypeError))
2111 PyErr_Format(PyExc_TypeError,
2112 "zip argument #%zd must support iteration",
2113 i+1);
2114 Py_DECREF(ittuple);
2115 return NULL;
2116 }
2117 PyTuple_SET_ITEM(ittuple, i, it);
2118 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002120 /* create a result holder */
2121 result = PyTuple_New(tuplesize);
2122 if (result == NULL) {
2123 Py_DECREF(ittuple);
2124 return NULL;
2125 }
2126 for (i=0 ; i < tuplesize ; i++) {
2127 Py_INCREF(Py_None);
2128 PyTuple_SET_ITEM(result, i, Py_None);
2129 }
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002131 /* create zipobject structure */
2132 lz = (zipobject *)type->tp_alloc(type, 0);
2133 if (lz == NULL) {
2134 Py_DECREF(ittuple);
2135 Py_DECREF(result);
2136 return NULL;
2137 }
2138 lz->ittuple = ittuple;
2139 lz->tuplesize = tuplesize;
2140 lz->result = result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002142 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002143}
2144
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002145static void
2146zip_dealloc(zipobject *lz)
2147{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002148 PyObject_GC_UnTrack(lz);
2149 Py_XDECREF(lz->ittuple);
2150 Py_XDECREF(lz->result);
2151 Py_TYPE(lz)->tp_free(lz);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002152}
2153
2154static int
2155zip_traverse(zipobject *lz, visitproc visit, void *arg)
2156{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 Py_VISIT(lz->ittuple);
2158 Py_VISIT(lz->result);
2159 return 0;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002160}
2161
2162static PyObject *
2163zip_next(zipobject *lz)
2164{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002165 Py_ssize_t i;
2166 Py_ssize_t tuplesize = lz->tuplesize;
2167 PyObject *result = lz->result;
2168 PyObject *it;
2169 PyObject *item;
2170 PyObject *olditem;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 if (tuplesize == 0)
2173 return NULL;
2174 if (Py_REFCNT(result) == 1) {
2175 Py_INCREF(result);
2176 for (i=0 ; i < tuplesize ; i++) {
2177 it = PyTuple_GET_ITEM(lz->ittuple, i);
2178 item = (*Py_TYPE(it)->tp_iternext)(it);
2179 if (item == NULL) {
2180 Py_DECREF(result);
2181 return NULL;
2182 }
2183 olditem = PyTuple_GET_ITEM(result, i);
2184 PyTuple_SET_ITEM(result, i, item);
2185 Py_DECREF(olditem);
2186 }
2187 } else {
2188 result = PyTuple_New(tuplesize);
2189 if (result == NULL)
2190 return NULL;
2191 for (i=0 ; i < tuplesize ; i++) {
2192 it = PyTuple_GET_ITEM(lz->ittuple, i);
2193 item = (*Py_TYPE(it)->tp_iternext)(it);
2194 if (item == NULL) {
2195 Py_DECREF(result);
2196 return NULL;
2197 }
2198 PyTuple_SET_ITEM(result, i, item);
2199 }
2200 }
2201 return result;
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002202}
Barry Warsawbd599b52000-08-03 15:45:29 +00002203
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002204PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002205"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002206\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002207Return a zip object whose .__next__() method returns a tuple where\n\
2208the i-th element comes from the i-th iterable argument. The .__next__()\n\
2209method continues until the shortest iterable in the argument sequence\n\
Georg Brandlced51db2008-12-04 18:28:38 +00002210is exhausted and then it raises StopIteration.");
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002211
2212PyTypeObject PyZip_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002213 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2214 "zip", /* tp_name */
2215 sizeof(zipobject), /* tp_basicsize */
2216 0, /* tp_itemsize */
2217 /* methods */
2218 (destructor)zip_dealloc, /* tp_dealloc */
2219 0, /* tp_print */
2220 0, /* tp_getattr */
2221 0, /* tp_setattr */
2222 0, /* tp_reserved */
2223 0, /* tp_repr */
2224 0, /* tp_as_number */
2225 0, /* tp_as_sequence */
2226 0, /* tp_as_mapping */
2227 0, /* tp_hash */
2228 0, /* tp_call */
2229 0, /* tp_str */
2230 PyObject_GenericGetAttr, /* tp_getattro */
2231 0, /* tp_setattro */
2232 0, /* tp_as_buffer */
2233 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2234 Py_TPFLAGS_BASETYPE, /* tp_flags */
2235 zip_doc, /* tp_doc */
2236 (traverseproc)zip_traverse, /* tp_traverse */
2237 0, /* tp_clear */
2238 0, /* tp_richcompare */
2239 0, /* tp_weaklistoffset */
2240 PyObject_SelfIter, /* tp_iter */
2241 (iternextfunc)zip_next, /* tp_iternext */
2242 0, /* tp_methods */
2243 0, /* tp_members */
2244 0, /* tp_getset */
2245 0, /* tp_base */
2246 0, /* tp_dict */
2247 0, /* tp_descr_get */
2248 0, /* tp_descr_set */
2249 0, /* tp_dictoffset */
2250 0, /* tp_init */
2251 PyType_GenericAlloc, /* tp_alloc */
2252 zip_new, /* tp_new */
2253 PyObject_GC_Del, /* tp_free */
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002254};
Barry Warsawbd599b52000-08-03 15:45:29 +00002255
2256
Guido van Rossum79f25d91997-04-29 20:08:16 +00002257static PyMethodDef builtin_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002258 {"__build_class__", (PyCFunction)builtin___build_class__,
2259 METH_VARARGS | METH_KEYWORDS, build_class_doc},
2260 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
2261 {"abs", builtin_abs, METH_O, abs_doc},
2262 {"all", builtin_all, METH_O, all_doc},
2263 {"any", builtin_any, METH_O, any_doc},
2264 {"ascii", builtin_ascii, METH_O, ascii_doc},
2265 {"bin", builtin_bin, METH_O, bin_doc},
Antoine Pitroue71362d2010-11-27 22:00:11 +00002266 {"callable", builtin_callable, METH_O, callable_doc},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002267 {"chr", builtin_chr, METH_VARARGS, chr_doc},
2268 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
2269 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2270 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2271 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2272 {"eval", builtin_eval, METH_VARARGS, eval_doc},
2273 {"exec", builtin_exec, METH_VARARGS, exec_doc},
2274 {"format", builtin_format, METH_VARARGS, format_doc},
2275 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2276 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2277 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2278 {"hash", builtin_hash, METH_O, hash_doc},
2279 {"hex", builtin_hex, METH_O, hex_doc},
2280 {"id", builtin_id, METH_O, id_doc},
2281 {"input", builtin_input, METH_VARARGS, input_doc},
2282 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2283 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2284 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2285 {"len", builtin_len, METH_O, len_doc},
2286 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
2287 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2288 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
2289 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
2290 {"oct", builtin_oct, METH_O, oct_doc},
2291 {"ord", builtin_ord, METH_O, ord_doc},
2292 {"pow", builtin_pow, METH_VARARGS, pow_doc},
2293 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
2294 {"repr", builtin_repr, METH_O, repr_doc},
2295 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
2296 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
2297 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
2298 {"sum", builtin_sum, METH_VARARGS, sum_doc},
2299 {"vars", builtin_vars, METH_VARARGS, vars_doc},
2300 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002301};
2302
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002303PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002304"Built-in functions, exceptions, and other objects.\n\
2305\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002306Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002307
Martin v. Löwis1a214512008-06-11 05:26:20 +00002308static struct PyModuleDef builtinsmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 PyModuleDef_HEAD_INIT,
2310 "builtins",
2311 builtin_doc,
2312 -1, /* multiple "initialization" just copies the module dict. */
2313 builtin_methods,
2314 NULL,
2315 NULL,
2316 NULL,
2317 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002318};
2319
2320
Guido van Rossum25ce5661997-08-02 03:10:38 +00002321PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002322_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002324 PyObject *mod, *dict, *debug;
2325 mod = PyModule_Create(&builtinsmodule);
2326 if (mod == NULL)
2327 return NULL;
2328 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002329
Tim Peters7571a0f2003-03-23 17:52:28 +00002330#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002331 /* "builtins" exposes a number of statically allocated objects
2332 * that, before this code was added in 2.3, never showed up in
2333 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2334 * result, programs leaking references to None and False (etc)
2335 * couldn't be diagnosed by examining sys.getobjects(0).
2336 */
Tim Peters7571a0f2003-03-23 17:52:28 +00002337#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2338#else
2339#define ADD_TO_ALL(OBJECT) (void)0
2340#endif
2341
Tim Peters4b7625e2001-09-13 21:37:17 +00002342#define SETBUILTIN(NAME, OBJECT) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002343 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2344 return NULL; \
2345 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002347 SETBUILTIN("None", Py_None);
2348 SETBUILTIN("Ellipsis", Py_Ellipsis);
2349 SETBUILTIN("NotImplemented", Py_NotImplemented);
2350 SETBUILTIN("False", Py_False);
2351 SETBUILTIN("True", Py_True);
2352 SETBUILTIN("bool", &PyBool_Type);
2353 SETBUILTIN("memoryview", &PyMemoryView_Type);
2354 SETBUILTIN("bytearray", &PyByteArray_Type);
2355 SETBUILTIN("bytes", &PyBytes_Type);
2356 SETBUILTIN("classmethod", &PyClassMethod_Type);
2357 SETBUILTIN("complex", &PyComplex_Type);
2358 SETBUILTIN("dict", &PyDict_Type);
2359 SETBUILTIN("enumerate", &PyEnum_Type);
2360 SETBUILTIN("filter", &PyFilter_Type);
2361 SETBUILTIN("float", &PyFloat_Type);
2362 SETBUILTIN("frozenset", &PyFrozenSet_Type);
2363 SETBUILTIN("property", &PyProperty_Type);
2364 SETBUILTIN("int", &PyLong_Type);
2365 SETBUILTIN("list", &PyList_Type);
2366 SETBUILTIN("map", &PyMap_Type);
2367 SETBUILTIN("object", &PyBaseObject_Type);
2368 SETBUILTIN("range", &PyRange_Type);
2369 SETBUILTIN("reversed", &PyReversed_Type);
2370 SETBUILTIN("set", &PySet_Type);
2371 SETBUILTIN("slice", &PySlice_Type);
2372 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
2373 SETBUILTIN("str", &PyUnicode_Type);
2374 SETBUILTIN("super", &PySuper_Type);
2375 SETBUILTIN("tuple", &PyTuple_Type);
2376 SETBUILTIN("type", &PyType_Type);
2377 SETBUILTIN("zip", &PyZip_Type);
2378 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
2379 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2380 Py_XDECREF(debug);
2381 return NULL;
2382 }
2383 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002384
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002385 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002386#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002387#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002388}