blob: ccfce068b43e2176abedb8202b7a17c274da4a74 [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 Rossum5b722181993-03-30 17:46:03 +00008#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00009
Guido van Rossum6bf62da1997-04-11 20:37:35 +000010#include <ctype.h>
11
Mark Hammond26cffde42001-05-14 12:17:34 +000012/* The default encoding used by the platform file system APIs
13 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000014
15 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
16 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000017*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000018#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000019const char *Py_FileSystemDefaultEncoding = "mbcs";
Christian Heimesc8967002007-11-30 10:18:26 +000020const int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000021#elif defined(__APPLE__)
22const char *Py_FileSystemDefaultEncoding = "utf-8";
Christian Heimesc8967002007-11-30 10:18:26 +000023const int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000024#else
25const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Christian Heimesc8967002007-11-30 10:18:26 +000026const int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000027#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000028
Guido van Rossum79f25d91997-04-29 20:08:16 +000029static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000030builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
31{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000032 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
33 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000034 Py_ssize_t nargs, nbases;
35
36 assert(args != NULL);
37 if (!PyTuple_Check(args)) {
38 PyErr_SetString(PyExc_TypeError,
39 "__build_class__: args is not a tuple");
40 return NULL;
41 }
42 nargs = PyTuple_GET_SIZE(args);
43 if (nargs < 2) {
44 PyErr_SetString(PyExc_TypeError,
45 "__build_class__: not enough arguments");
46 return NULL;
47 }
48 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
49 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000050 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000051 PyErr_SetString(PyExc_TypeError,
52 "__build_class__: name is not a string");
53 return NULL;
54 }
55 bases = PyTuple_GetSlice(args, 2, nargs);
56 if (bases == NULL)
57 return NULL;
58 nbases = nargs - 2;
59
60 if (kwds == NULL) {
61 meta = NULL;
62 mkw = NULL;
63 }
64 else {
65 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
66 if (mkw == NULL) {
67 Py_DECREF(bases);
68 return NULL;
69 }
70 meta = PyDict_GetItemString(mkw, "metaclass");
71 if (meta != NULL) {
72 Py_INCREF(meta);
73 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
74 Py_DECREF(meta);
75 Py_DECREF(mkw);
76 Py_DECREF(bases);
77 return NULL;
78 }
79 }
80 }
81 if (meta == NULL) {
82 if (PyTuple_GET_SIZE(bases) == 0)
83 meta = (PyObject *) (&PyType_Type);
84 else {
85 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
86 meta = (PyObject *) (base0->ob_type);
87 }
88 Py_INCREF(meta);
89 }
90 prep = PyObject_GetAttrString(meta, "__prepare__");
91 if (prep == NULL) {
92 PyErr_Clear();
93 ns = PyDict_New();
94 }
95 else {
96 PyObject *pargs = Py_BuildValue("OO", name, bases);
97 if (pargs == NULL) {
98 Py_DECREF(prep);
99 Py_DECREF(meta);
100 Py_XDECREF(mkw);
101 Py_DECREF(bases);
102 return NULL;
103 }
104 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
105 Py_DECREF(pargs);
106 Py_DECREF(prep);
107 if (ns == NULL) {
108 Py_DECREF(meta);
109 Py_XDECREF(mkw);
110 Py_DECREF(bases);
111 return NULL;
112 }
113 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000114 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
115 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000117 margs = Py_BuildValue("OOO", name, bases, ns);
118 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000119 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000120 Py_DECREF(margs);
121 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000122 if (cls != NULL && PyCell_Check(cell)) {
123 Py_INCREF(cls);
124 PyCell_SET(cell, cls);
125 }
126 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000127 }
128 Py_DECREF(ns);
129 Py_DECREF(meta);
130 Py_XDECREF(mkw);
131 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000132 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000133}
134
135PyDoc_STRVAR(build_class_doc,
136"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
137\n\
138Internal helper function used by the class statement.");
139
140static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000141builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000142{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000143 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
144 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000145 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000146 PyObject *globals = NULL;
147 PyObject *locals = NULL;
148 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000149 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000150
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000151 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
152 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000153 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000154 return PyImport_ImportModuleLevel(name, globals, locals,
155 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000156}
157
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000158PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000159"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000160\n\
161Import a module. The globals are only used to determine the context;\n\
162they are not modified. The locals are currently unused. The fromlist\n\
163should be a list of names to emulate ``from name import ...'', or an\n\
164empty list to emulate ``import name''.\n\
165When importing a module from a package, note that __import__('A.B', ...)\n\
166returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000167fromlist is not empty. Level is used to determine whether to perform \n\
168absolute or relative imports. -1 is the original strategy of attempting\n\
169both absolute and relative imports, 0 is absolute, a positive number\n\
170is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000171
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172
Guido van Rossum79f25d91997-04-29 20:08:16 +0000173static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000174builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000175{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000176 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000177}
178
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000179PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000180"abs(number) -> number\n\
181\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000182Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000183
Raymond Hettinger96229b12005-03-11 06:49:40 +0000184static PyObject *
185builtin_all(PyObject *self, PyObject *v)
186{
187 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000188 PyObject *(*iternext)(PyObject *);
189 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000190
191 it = PyObject_GetIter(v);
192 if (it == NULL)
193 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000194 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000195
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000196 for (;;) {
197 item = iternext(it);
198 if (item == NULL)
199 break;
200 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000201 Py_DECREF(item);
202 if (cmp < 0) {
203 Py_DECREF(it);
204 return NULL;
205 }
206 if (cmp == 0) {
207 Py_DECREF(it);
208 Py_RETURN_FALSE;
209 }
210 }
211 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000212 if (PyErr_Occurred()) {
213 if (PyErr_ExceptionMatches(PyExc_StopIteration))
214 PyErr_Clear();
215 else
216 return NULL;
217 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000218 Py_RETURN_TRUE;
219}
220
221PyDoc_STRVAR(all_doc,
222"all(iterable) -> bool\n\
223\n\
224Return True if bool(x) is True for all values x in the iterable.");
225
226static PyObject *
227builtin_any(PyObject *self, PyObject *v)
228{
229 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000230 PyObject *(*iternext)(PyObject *);
231 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000232
233 it = PyObject_GetIter(v);
234 if (it == NULL)
235 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000236 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000237
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000238 for (;;) {
239 item = iternext(it);
240 if (item == NULL)
241 break;
242 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000243 Py_DECREF(item);
244 if (cmp < 0) {
245 Py_DECREF(it);
246 return NULL;
247 }
248 if (cmp == 1) {
249 Py_DECREF(it);
250 Py_RETURN_TRUE;
251 }
252 }
253 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000254 if (PyErr_Occurred()) {
255 if (PyErr_ExceptionMatches(PyExc_StopIteration))
256 PyErr_Clear();
257 else
258 return NULL;
259 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000260 Py_RETURN_FALSE;
261}
262
263PyDoc_STRVAR(any_doc,
264"any(iterable) -> bool\n\
265\n\
266Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000268
Guido van Rossum79f25d91997-04-29 20:08:16 +0000269static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000270builtin_bin(PyObject *self, PyObject *v)
271{
272 return PyNumber_ToBase(v, 2);
273}
274
275PyDoc_STRVAR(bin_doc,
276"bin(number) -> string\n\
277\n\
278Return the binary representation of an integer or long integer.");
279
280
Raymond Hettinger17301e92008-03-13 00:19:26 +0000281typedef struct {
282 PyObject_HEAD
283 PyObject *func;
284 PyObject *it;
285} filterobject;
286
287PyTypeObject PyFilter_Type;
288
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000289static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000290filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000291{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000292 PyObject *func, *seq;
293 PyObject *it;
294 filterobject *lz;
295
296 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000297 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000298
299 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000300 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000301
302 /* Get iterator. */
303 it = PyObject_GetIter(seq);
304 if (it == NULL)
305 return NULL;
306
307 /* create filterobject structure */
308 lz = (filterobject *)type->tp_alloc(type, 0);
309 if (lz == NULL) {
310 Py_DECREF(it);
311 return NULL;
312 }
313 Py_INCREF(func);
314 lz->func = func;
315 lz->it = it;
316
317 return (PyObject *)lz;
318}
319
320static void
321filter_dealloc(filterobject *lz)
322{
323 PyObject_GC_UnTrack(lz);
324 Py_XDECREF(lz->func);
325 Py_XDECREF(lz->it);
326 Py_TYPE(lz)->tp_free(lz);
327}
328
329static int
330filter_traverse(filterobject *lz, visitproc visit, void *arg)
331{
332 Py_VISIT(lz->it);
333 Py_VISIT(lz->func);
334 return 0;
335}
336
337static PyObject *
338filter_next(filterobject *lz)
339{
340 PyObject *item;
341 PyObject *it = lz->it;
342 long ok;
343 PyObject *(*iternext)(PyObject *);
344
345 assert(PyIter_Check(it));
346 iternext = *Py_TYPE(it)->tp_iternext;
347 for (;;) {
348 item = iternext(it);
349 if (item == NULL)
350 return NULL;
351
352 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
353 ok = PyObject_IsTrue(item);
354 } else {
355 PyObject *good;
356 good = PyObject_CallFunctionObjArgs(lz->func,
357 item, NULL);
358 if (good == NULL) {
359 Py_DECREF(item);
360 return NULL;
361 }
362 ok = PyObject_IsTrue(good);
363 Py_DECREF(good);
364 }
365 if (ok)
366 return item;
367 Py_DECREF(item);
368 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000369}
370
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000371PyDoc_STRVAR(filter_doc,
Raymond Hettinger17301e92008-03-13 00:19:26 +0000372"filter(function or None, sequence) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000373\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000374Return an iterator yielding those items of sequence for which function(item)\n\
375is true. If function is None, return the items that are true.");
376
377PyTypeObject PyFilter_Type = {
378 PyVarObject_HEAD_INIT(&PyType_Type, 0)
379 "filter", /* tp_name */
380 sizeof(filterobject), /* tp_basicsize */
381 0, /* tp_itemsize */
382 /* methods */
383 (destructor)filter_dealloc, /* tp_dealloc */
384 0, /* tp_print */
385 0, /* tp_getattr */
386 0, /* tp_setattr */
387 0, /* tp_compare */
388 0, /* tp_repr */
389 0, /* tp_as_number */
390 0, /* tp_as_sequence */
391 0, /* tp_as_mapping */
392 0, /* tp_hash */
393 0, /* tp_call */
394 0, /* tp_str */
395 PyObject_GenericGetAttr, /* tp_getattro */
396 0, /* tp_setattro */
397 0, /* tp_as_buffer */
398 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
399 Py_TPFLAGS_BASETYPE, /* tp_flags */
400 filter_doc, /* tp_doc */
401 (traverseproc)filter_traverse, /* tp_traverse */
402 0, /* tp_clear */
403 0, /* tp_richcompare */
404 0, /* tp_weaklistoffset */
405 PyObject_SelfIter, /* tp_iter */
406 (iternextfunc)filter_next, /* tp_iternext */
407 0, /* tp_methods */
408 0, /* tp_members */
409 0, /* tp_getset */
410 0, /* tp_base */
411 0, /* tp_dict */
412 0, /* tp_descr_get */
413 0, /* tp_descr_set */
414 0, /* tp_dictoffset */
415 0, /* tp_init */
416 PyType_GenericAlloc, /* tp_alloc */
417 filter_new, /* tp_new */
418 PyObject_GC_Del, /* tp_free */
419};
420
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000421
Eric Smith8c663262007-08-25 02:26:07 +0000422static PyObject *
423builtin_format(PyObject *self, PyObject *args)
424{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000425 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000426 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000427
Eric Smith8fd3eba2008-02-17 19:48:00 +0000428 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
429 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000430
Eric Smith8fd3eba2008-02-17 19:48:00 +0000431 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000432}
433
Eric Smith8c663262007-08-25 02:26:07 +0000434PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000435"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000436\n\
Eric Smith81936692007-08-31 01:14:01 +0000437Returns value.__format__(format_spec)\n\
438format_spec defaults to \"\"");
439
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000440static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000441builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000442{
443 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000444
Walter Dörwalde7efd592007-06-05 20:07:21 +0000445 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000446 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000447
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000448 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000449}
450
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000451PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000452"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000453\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000454Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000455)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000456#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000457PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000458"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000459)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000460#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000461;
Guido van Rossum09095f32000-03-10 23:00:52 +0000462
463
464static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000465builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000466{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000468 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000469
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000470 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000471 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000472 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000473 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000474 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000475}
476
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000477PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000478"cmp(x, y) -> integer\n\
479\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000480Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000481
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000482
483static char *
484source_as_string(PyObject *cmd)
485{
486 char *str;
487 Py_ssize_t size;
488
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000489 if (PyUnicode_Check(cmd)) {
490 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
491 if (cmd == NULL)
492 return NULL;
493 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000494 else if (!PyObject_CheckReadBuffer(cmd)) {
495 PyErr_SetString(PyExc_TypeError,
496 "eval()/exec() arg 1 must be a string, bytes or code object");
497 return NULL;
498 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000499 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
500 return NULL;
501 }
502 if (strlen(str) != size) {
503 PyErr_SetString(PyExc_TypeError,
504 "source code string cannot contain null bytes");
505 return NULL;
506 }
507 return str;
508}
509
Guido van Rossum79f25d91997-04-29 20:08:16 +0000510static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000511builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000512{
513 char *str;
514 char *filename;
515 char *startstr;
516 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000517 int dont_inherit = 0;
518 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000519 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000520 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000521 static char *kwlist[] = {"source", "filename", "mode", "flags",
522 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000523
Guido van Rossumd8faa362007-04-27 19:54:29 +0000524 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
525 kwlist, &cmd, &filename, &startstr,
526 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000527 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000528
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000529 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000530
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000531 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000532 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000533 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000534 PyErr_SetString(PyExc_ValueError,
535 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000536 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000537 }
538 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
539
Tim Peters6cd6a822001-08-17 22:11:27 +0000540 if (!dont_inherit) {
541 PyEval_MergeCompilerFlags(&cf);
542 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000543
544 if (PyAST_Check(cmd)) {
545 PyObject *result;
546 if (supplied_flags & PyCF_ONLY_AST) {
547 Py_INCREF(cmd);
548 result = cmd;
549 }
550 else {
551 PyArena *arena;
552 mod_ty mod;
553
554 arena = PyArena_New();
555 mod = PyAST_obj2mod(cmd, arena);
556 if (mod == NULL) {
557 PyArena_Free(arena);
558 return NULL;
559 }
560 result = (PyObject*)PyAST_Compile(mod, filename,
561 &cf, arena);
562 PyArena_Free(arena);
563 }
564 return result;
565 }
566
567 /* XXX: is it possible to pass start to the PyAST_ branch? */
568 if (strcmp(startstr, "exec") == 0)
569 start = Py_file_input;
570 else if (strcmp(startstr, "eval") == 0)
571 start = Py_eval_input;
572 else if (strcmp(startstr, "single") == 0)
573 start = Py_single_input;
574 else {
575 PyErr_SetString(PyExc_ValueError,
576 "compile() arg 3 must be 'exec'"
577 "or 'eval' or 'single'");
578 return NULL;
579 }
580
581 str = source_as_string(cmd);
582 if (str == NULL)
583 return NULL;
584
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000585 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000586}
587
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000588PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000589"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000590\n\
591Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000592into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000593The filename will be used for run-time error messages.\n\
594The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000595single (interactive) statement, or 'eval' to compile an expression.\n\
596The flags argument, if present, controls which future statements influence\n\
597the compilation of the code.\n\
598The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
599the effects of any future statements in effect in the code calling\n\
600compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000601in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000602
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000604builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000605{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000606 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000607
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000608 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000609 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000610 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000611}
612
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000613PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000614"dir([object]) -> list of strings\n"
615"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000616"If called without an argument, return the names in the current scope.\n"
617"Else, return an alphabetized list of names comprising (some of) the attributes\n"
618"of the given object, and of attributes reachable from it.\n"
619"If the object supplies a method named __dir__, it will be used; otherwise\n"
620"the default dir() logic is used and returns:\n"
621" for a module object: the module's attributes.\n"
622" for a class object: its attributes, and recursively the attributes\n"
623" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000624" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000625" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000626
Guido van Rossum79f25d91997-04-29 20:08:16 +0000627static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000628builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000629{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000630 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000631
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000632 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000633 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000634 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000635}
636
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000637PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000638"divmod(x, y) -> (div, mod)\n\
639\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000640Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000641
642
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000644builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000645{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000646 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000647 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000649 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000650
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000651 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000652 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000653 if (locals != Py_None && !PyMapping_Check(locals)) {
654 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000655 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000656 }
657 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000658 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000659 "globals must be a real dict; try eval(expr, {}, mapping)"
660 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000661 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000662 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 if (globals == Py_None) {
664 globals = PyEval_GetGlobals();
665 if (locals == Py_None)
666 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000667 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000669 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000670
Georg Brandl77c85e62005-09-15 10:46:13 +0000671 if (globals == NULL || locals == NULL) {
672 PyErr_SetString(PyExc_TypeError,
673 "eval must be given globals and locals "
674 "when called without a frame");
675 return NULL;
676 }
677
Guido van Rossum79f25d91997-04-29 20:08:16 +0000678 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
679 if (PyDict_SetItemString(globals, "__builtins__",
680 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000681 return NULL;
682 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000683
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000684 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000685 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000686 PyErr_SetString(PyExc_TypeError,
687 "code object passed to eval() may not contain free variables");
688 return NULL;
689 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000690 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000691 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000692
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000693 str = source_as_string(cmd);
694 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000695 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000696
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697 while (*str == ' ' || *str == '\t')
698 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000699
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000700 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000701 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000702 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
703 Py_XDECREF(tmp);
704 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000705}
706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000707PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000708"eval(source[, globals[, locals]]) -> value\n\
709\n\
710Evaluate the source in the context of globals and locals.\n\
711The source may be a string representing a Python expression\n\
712or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000713The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000714defaulting to the current globals and locals.\n\
715If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000716
Georg Brandl7cae87c2006-09-06 06:51:57 +0000717static PyObject *
718builtin_exec(PyObject *self, PyObject *args)
719{
720 PyObject *v;
721 PyObject *prog, *globals = Py_None, *locals = Py_None;
722 int plain = 0;
723
724 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
725 return NULL;
726
727 if (globals == Py_None) {
728 globals = PyEval_GetGlobals();
729 if (locals == Py_None) {
730 locals = PyEval_GetLocals();
731 plain = 1;
732 }
733 if (!globals || !locals) {
734 PyErr_SetString(PyExc_SystemError,
735 "globals and locals cannot be NULL");
736 return NULL;
737 }
738 }
739 else if (locals == Py_None)
740 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000741 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000742 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000743 PyErr_Format(PyExc_TypeError,
744 "exec() arg 1 must be a string, file, or code "
745 "object, not %.100s", prog->ob_type->tp_name);
746 return NULL;
747 }
748 if (!PyDict_Check(globals)) {
749 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
750 globals->ob_type->tp_name);
751 return NULL;
752 }
753 if (!PyMapping_Check(locals)) {
754 PyErr_Format(PyExc_TypeError,
755 "arg 3 must be a mapping or None, not %.100s",
756 locals->ob_type->tp_name);
757 return NULL;
758 }
759 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
760 if (PyDict_SetItemString(globals, "__builtins__",
761 PyEval_GetBuiltins()) != 0)
762 return NULL;
763 }
764
765 if (PyCode_Check(prog)) {
766 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
767 PyErr_SetString(PyExc_TypeError,
768 "code object passed to exec() may not "
769 "contain free variables");
770 return NULL;
771 }
772 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
773 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000774 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000775 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000776 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000777 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000778 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000779 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000780 if (PyEval_MergeCompilerFlags(&cf))
781 v = PyRun_StringFlags(str, Py_file_input, globals,
782 locals, &cf);
783 else
784 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000785 }
786 if (v == NULL)
787 return NULL;
788 Py_DECREF(v);
789 Py_RETURN_NONE;
790}
791
792PyDoc_STRVAR(exec_doc,
793"exec(object[, globals[, locals]])\n\
794\n\
795Read and execute code from a object, which can be a string, a code\n\
796object or a file object.\n\
797The globals and locals are dictionaries, defaulting to the current\n\
798globals and locals. If only globals is given, locals defaults to it.");
799
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000800
Guido van Rossum79f25d91997-04-29 20:08:16 +0000801static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000802builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000803{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000804 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000806
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000807 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000808 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000809
Martin v. Löwis5b222132007-06-10 09:51:05 +0000810 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000811 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000812 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000813 return NULL;
814 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000815 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000816 if (result == NULL && dflt != NULL &&
817 PyErr_ExceptionMatches(PyExc_AttributeError))
818 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000819 PyErr_Clear();
820 Py_INCREF(dflt);
821 result = dflt;
822 }
823 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000824}
825
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000826PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000827"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000828\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000829Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
830When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000831exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000832
833
Guido van Rossum79f25d91997-04-29 20:08:16 +0000834static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000835builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000836{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000838
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000840 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000841 return d;
842}
843
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000844PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000845"globals() -> dictionary\n\
846\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000847Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000848
849
Guido van Rossum79f25d91997-04-29 20:08:16 +0000850static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000851builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000852{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000853 PyObject *v;
854 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000855
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000856 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000857 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000858 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000859 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000860 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000861 return NULL;
862 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000864 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000865 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000866 Py_INCREF(Py_False);
867 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000868 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000869 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000870 Py_INCREF(Py_True);
871 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000872}
873
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000874PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000875"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000876\n\
877Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000878(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000879
880
Guido van Rossum79f25d91997-04-29 20:08:16 +0000881static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000882builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000883{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000884 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000885}
886
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000887PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000888"id(object) -> integer\n\
889\n\
890Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000891simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000892
893
Raymond Hettingera6c60372008-03-13 01:26:19 +0000894/* map object ************************************************************/
895
896typedef struct {
897 PyObject_HEAD
898 PyObject *iters;
899 PyObject *func;
900} mapobject;
901
902PyTypeObject PyMap_Type;
903
Guido van Rossum79f25d91997-04-29 20:08:16 +0000904static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000905map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000906{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000907 PyObject *it, *iters, *func;
908 mapobject *lz;
909 Py_ssize_t numargs, i;
910
911 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000912 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000913
914 numargs = PyTuple_Size(args);
915 if (numargs < 2) {
916 PyErr_SetString(PyExc_TypeError,
917 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000918 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000919 }
920
921 iters = PyTuple_New(numargs-1);
922 if (iters == NULL)
923 return NULL;
924
925 for (i=1 ; i<numargs ; i++) {
926 /* Get iterator. */
927 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
928 if (it == NULL) {
929 Py_DECREF(iters);
930 return NULL;
931 }
932 PyTuple_SET_ITEM(iters, i-1, it);
933 }
934
935 /* create mapobject structure */
936 lz = (mapobject *)type->tp_alloc(type, 0);
937 if (lz == NULL) {
938 Py_DECREF(iters);
939 return NULL;
940 }
941 lz->iters = iters;
942 func = PyTuple_GET_ITEM(args, 0);
943 Py_INCREF(func);
944 lz->func = func;
945
946 return (PyObject *)lz;
947}
948
949static void
950map_dealloc(mapobject *lz)
951{
952 PyObject_GC_UnTrack(lz);
953 Py_XDECREF(lz->iters);
954 Py_XDECREF(lz->func);
955 Py_TYPE(lz)->tp_free(lz);
956}
957
958static int
959map_traverse(mapobject *lz, visitproc visit, void *arg)
960{
961 Py_VISIT(lz->iters);
962 Py_VISIT(lz->func);
963 return 0;
964}
965
966static PyObject *
967map_next(mapobject *lz)
968{
969 PyObject *val;
970 PyObject *argtuple;
971 PyObject *result;
972 Py_ssize_t numargs, i;
973
974 numargs = PyTuple_Size(lz->iters);
975 argtuple = PyTuple_New(numargs);
976 if (argtuple == NULL)
977 return NULL;
978
979 for (i=0 ; i<numargs ; i++) {
980 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
981 if (val == NULL) {
982 Py_DECREF(argtuple);
983 return NULL;
984 }
985 PyTuple_SET_ITEM(argtuple, i, val);
986 }
987 result = PyObject_Call(lz->func, argtuple, NULL);
988 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000989 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000990}
991
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000992PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +0000993"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000994\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +0000995Make an iterator that computes the function using arguments from\n\
996each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000997
Raymond Hettingera6c60372008-03-13 01:26:19 +0000998PyTypeObject PyMap_Type = {
999 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1000 "map", /* tp_name */
1001 sizeof(mapobject), /* tp_basicsize */
1002 0, /* tp_itemsize */
1003 /* methods */
1004 (destructor)map_dealloc, /* tp_dealloc */
1005 0, /* tp_print */
1006 0, /* tp_getattr */
1007 0, /* tp_setattr */
1008 0, /* tp_compare */
1009 0, /* tp_repr */
1010 0, /* tp_as_number */
1011 0, /* tp_as_sequence */
1012 0, /* tp_as_mapping */
1013 0, /* tp_hash */
1014 0, /* tp_call */
1015 0, /* tp_str */
1016 PyObject_GenericGetAttr, /* tp_getattro */
1017 0, /* tp_setattro */
1018 0, /* tp_as_buffer */
1019 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1020 Py_TPFLAGS_BASETYPE, /* tp_flags */
1021 map_doc, /* tp_doc */
1022 (traverseproc)map_traverse, /* tp_traverse */
1023 0, /* tp_clear */
1024 0, /* tp_richcompare */
1025 0, /* tp_weaklistoffset */
1026 PyObject_SelfIter, /* tp_iter */
1027 (iternextfunc)map_next, /* tp_iternext */
1028 0, /* tp_methods */
1029 0, /* tp_members */
1030 0, /* tp_getset */
1031 0, /* tp_base */
1032 0, /* tp_dict */
1033 0, /* tp_descr_get */
1034 0, /* tp_descr_set */
1035 0, /* tp_dictoffset */
1036 0, /* tp_init */
1037 PyType_GenericAlloc, /* tp_alloc */
1038 map_new, /* tp_new */
1039 PyObject_GC_Del, /* tp_free */
1040};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001041
Guido van Rossum79f25d91997-04-29 20:08:16 +00001042static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001043builtin_next(PyObject *self, PyObject *args)
1044{
1045 PyObject *it, *res;
1046 PyObject *def = NULL;
1047
1048 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1049 return NULL;
1050 if (!PyIter_Check(it)) {
1051 PyErr_Format(PyExc_TypeError,
1052 "%.200s object is not an iterator", it->ob_type->tp_name);
1053 return NULL;
1054 }
1055
1056 res = (*it->ob_type->tp_iternext)(it);
1057 if (res == NULL) {
1058 if (def) {
1059 if (PyErr_Occurred() &&
1060 !PyErr_ExceptionMatches(PyExc_StopIteration))
1061 return NULL;
1062 PyErr_Clear();
1063 Py_INCREF(def);
1064 return def;
1065 } else if (PyErr_Occurred()) {
1066 return NULL;
1067 } else {
1068 PyErr_SetNone(PyExc_StopIteration);
1069 return NULL;
1070 }
1071 }
1072 return res;
1073}
1074
1075PyDoc_STRVAR(next_doc,
1076"next(iterator[, default])\n\
1077\n\
1078Return the next item from the iterator. If default is given and the iterator\n\
1079is exhausted, it is returned instead of raising StopIteration.");
1080
1081
1082static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001083builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001084{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 PyObject *v;
1086 PyObject *name;
1087 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001088
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001089 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001090 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001091 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001092 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001093 Py_INCREF(Py_None);
1094 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001095}
1096
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001097PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001098"setattr(object, name, value)\n\
1099\n\
1100Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001101``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001102
1103
Guido van Rossum79f25d91997-04-29 20:08:16 +00001104static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001105builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001106{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001107 PyObject *v;
1108 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001109
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001110 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001111 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001112 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001113 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001114 Py_INCREF(Py_None);
1115 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001116}
1117
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001118PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001119"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001120\n\
1121Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001122``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001123
1124
Guido van Rossum79f25d91997-04-29 20:08:16 +00001125static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001126builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001127{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001128 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001129
Guido van Rossum79f25d91997-04-29 20:08:16 +00001130 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001131 if (x == -1)
1132 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001133 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001134}
1135
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001136PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001137"hash(object) -> integer\n\
1138\n\
1139Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001140the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001141
1142
Guido van Rossum79f25d91997-04-29 20:08:16 +00001143static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001144builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001145{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001146 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001147}
1148
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001149PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001150"hex(number) -> string\n\
1151\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001152Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001153
1154
Guido van Rossum79f25d91997-04-29 20:08:16 +00001155static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001156builtin_iter(PyObject *self, PyObject *args)
1157{
1158 PyObject *v, *w = NULL;
1159
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001160 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001161 return NULL;
1162 if (w == NULL)
1163 return PyObject_GetIter(v);
1164 if (!PyCallable_Check(v)) {
1165 PyErr_SetString(PyExc_TypeError,
1166 "iter(v, w): v must be callable");
1167 return NULL;
1168 }
1169 return PyCallIter_New(v, w);
1170}
1171
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001172PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001173"iter(collection) -> iterator\n\
1174iter(callable, sentinel) -> iterator\n\
1175\n\
1176Get an iterator from an object. In the first form, the argument must\n\
1177supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001178In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001179
1180
1181static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001182builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001183{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001184 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001185
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001186 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001187 if (res < 0 && PyErr_Occurred())
1188 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001189 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001190}
1191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001193"len(object) -> integer\n\
1194\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001195Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001196
1197
Guido van Rossum79f25d91997-04-29 20:08:16 +00001198static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001199builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001200{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001201 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001202
Guido van Rossum79f25d91997-04-29 20:08:16 +00001203 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001204 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001205 return d;
1206}
1207
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001208PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001209"locals() -> dictionary\n\
1210\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001211Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001212
1213
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001215min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001216{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001218 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001219
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001222 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001223 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001224
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001225 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1226 keyfunc = PyDict_GetItemString(kwds, "key");
1227 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001228 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001229 "%s() got an unexpected keyword argument", name);
1230 return NULL;
1231 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001232 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001233 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001234
Tim Petersc3074532001-05-03 07:00:32 +00001235 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001236 if (it == NULL) {
1237 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001238 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001239 }
Tim Petersc3074532001-05-03 07:00:32 +00001240
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001241 maxitem = NULL; /* the result */
1242 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001243 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001244 /* get the value from the key function */
1245 if (keyfunc != NULL) {
1246 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1247 if (val == NULL)
1248 goto Fail_it_item;
1249 }
1250 /* no key function; the value is the item */
1251 else {
1252 val = item;
1253 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001254 }
Tim Petersc3074532001-05-03 07:00:32 +00001255
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001256 /* maximum value and item are unset; set them */
1257 if (maxval == NULL) {
1258 maxitem = item;
1259 maxval = val;
1260 }
1261 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001262 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001263 int cmp = PyObject_RichCompareBool(val, maxval, op);
1264 if (cmp < 0)
1265 goto Fail_it_item_and_val;
1266 else if (cmp > 0) {
1267 Py_DECREF(maxval);
1268 Py_DECREF(maxitem);
1269 maxval = val;
1270 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001271 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001272 else {
1273 Py_DECREF(item);
1274 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001275 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001276 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001277 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001278 if (PyErr_Occurred())
1279 goto Fail_it;
1280 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001281 PyErr_Format(PyExc_ValueError,
1282 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001283 assert(maxitem == NULL);
1284 }
1285 else
1286 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001287 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001288 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001289 return maxitem;
1290
1291Fail_it_item_and_val:
1292 Py_DECREF(val);
1293Fail_it_item:
1294 Py_DECREF(item);
1295Fail_it:
1296 Py_XDECREF(maxval);
1297 Py_XDECREF(maxitem);
1298 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001299 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001300 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001301}
1302
Guido van Rossum79f25d91997-04-29 20:08:16 +00001303static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001305{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001307}
1308
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001309PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001310"min(iterable[, key=func]) -> value\n\
1311min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001312\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001313With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001314With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001315
1316
Guido van Rossum79f25d91997-04-29 20:08:16 +00001317static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001318builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001319{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001320 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001321}
1322
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001323PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001324"max(iterable[, key=func]) -> value\n\
1325max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001326\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001327With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001328With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001329
1330
Guido van Rossum79f25d91997-04-29 20:08:16 +00001331static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001332builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001333{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001334 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001335}
1336
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001337PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001338"oct(number) -> string\n\
1339\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001340Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001341
1342
Guido van Rossum79f25d91997-04-29 20:08:16 +00001343static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001344builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001345{
Guido van Rossum09095f32000-03-10 23:00:52 +00001346 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001347 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001348
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001349 if (PyString_Check(obj)) {
1350 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001351 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001352 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001353 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001354 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001355 }
1356 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001357 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001358 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001359 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001360 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001361 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001362#ifndef Py_UNICODE_WIDE
1363 if (size == 2) {
1364 /* Decode a valid surrogate pair */
1365 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1366 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1367 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1368 0xDC00 <= c1 && c1 <= 0xDFFF) {
1369 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1370 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001371 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001372 }
1373 }
1374#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001375 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001376 else if (PyBytes_Check(obj)) {
1377 /* XXX Hopefully this is temporary */
1378 size = PyBytes_GET_SIZE(obj);
1379 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001380 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001381 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001382 }
1383 }
1384 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001385 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001386 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001387 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001388 return NULL;
1389 }
1390
Guido van Rossumad991772001-01-12 16:03:05 +00001391 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001392 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001393 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001394 size);
1395 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001396}
1397
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001398PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001399"ord(c) -> integer\n\
1400\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001401Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001402)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001403#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001404PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001405"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001406)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001407#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001408;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001409
1410
Guido van Rossum79f25d91997-04-29 20:08:16 +00001411static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001412builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001413{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001414 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001415
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001416 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001417 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001418 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001419}
1420
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001421PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001422"pow(x, y[, z]) -> number\n\
1423\n\
1424With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001425equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001426
1427
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001428
Guido van Rossum34343512006-11-30 22:13:52 +00001429static PyObject *
1430builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1431{
1432 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001433 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001434 PyObject *sep = NULL, *end = NULL, *file = NULL;
1435 int i, err;
1436
Georg Brandl257d3d92007-02-26 10:35:10 +00001437 if (dummy_args == NULL) {
1438 if (!(dummy_args = PyTuple_New(0)))
1439 return NULL;
1440 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001441 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001442 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001443 return NULL;
1444 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001445 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001446 /* sys.stdout may be None when FILE* stdout isn't connected */
1447 if (file == Py_None)
1448 Py_RETURN_NONE;
1449 }
Guido van Rossum34343512006-11-30 22:13:52 +00001450
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001451 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001452 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001453 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001454 sep->ob_type->tp_name);
1455 return NULL;
1456 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001457 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001458 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001459 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001460 end->ob_type->tp_name);
1461 return NULL;
1462 }
Guido van Rossum34343512006-11-30 22:13:52 +00001463
1464 for (i = 0; i < PyTuple_Size(args); i++) {
1465 if (i > 0) {
1466 if (sep == NULL || sep == Py_None)
1467 err = PyFile_WriteString(" ", file);
1468 else
1469 err = PyFile_WriteObject(sep, file,
1470 Py_PRINT_RAW);
1471 if (err)
1472 return NULL;
1473 }
1474 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1475 Py_PRINT_RAW);
1476 if (err)
1477 return NULL;
1478 }
1479
1480 if (end == NULL || end == Py_None)
1481 err = PyFile_WriteString("\n", file);
1482 else
1483 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1484 if (err)
1485 return NULL;
1486
1487 Py_RETURN_NONE;
1488}
1489
1490PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001491"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001492\n\
1493Prints the values to a stream, or to sys.stdout by default.\n\
1494Optional keyword arguments:\n\
1495file: a file-like object (stream); defaults to the current sys.stdout.\n\
1496sep: string inserted between values, default a space.\n\
1497end: string appended after the last value, default a newline.");
1498
1499
Guido van Rossuma88a0332007-02-26 16:59:55 +00001500static PyObject *
1501builtin_input(PyObject *self, PyObject *args)
1502{
Guido van Rossumeba76962007-05-27 09:13:28 +00001503 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001504 PyObject *fin = PySys_GetObject("stdin");
1505 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001506 PyObject *ferr = PySys_GetObject("stderr");
1507 PyObject *tmp;
1508 long fd;
1509 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001510
Guido van Rossumeba76962007-05-27 09:13:28 +00001511 /* Parse arguments */
1512 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001513 return NULL;
1514
Guido van Rossumeba76962007-05-27 09:13:28 +00001515 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001516 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001517 PyErr_SetString(PyExc_RuntimeError,
1518 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001519 return NULL;
1520 }
Christian Heimes2be03732007-11-15 02:26:46 +00001521 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001522 PyErr_SetString(PyExc_RuntimeError,
1523 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001524 return NULL;
1525 }
Christian Heimes2be03732007-11-15 02:26:46 +00001526 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001527 PyErr_SetString(PyExc_RuntimeError,
1528 "input(): lost sys.stderr");
1529 return NULL;
1530 }
1531
1532 /* First of all, flush stderr */
1533 tmp = PyObject_CallMethod(ferr, "flush", "");
1534 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001535 PyErr_Clear();
1536 else
1537 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001538
1539 /* We should only use (GNU) readline if Python's sys.stdin and
1540 sys.stdout are the same as C's stdin and stdout, because we
1541 need to pass it those. */
1542 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001543 if (tmp == NULL) {
1544 PyErr_Clear();
1545 tty = 0;
1546 }
1547 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001548 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001549 Py_DECREF(tmp);
1550 if (fd < 0 && PyErr_Occurred())
1551 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001552 tty = fd == fileno(stdin) && isatty(fd);
1553 }
1554 if (tty) {
1555 tmp = PyObject_CallMethod(fout, "fileno", "");
1556 if (tmp == NULL)
1557 PyErr_Clear();
1558 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001559 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001560 Py_DECREF(tmp);
1561 if (fd < 0 && PyErr_Occurred())
1562 return NULL;
1563 tty = fd == fileno(stdout) && isatty(fd);
1564 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001565 }
1566
1567 /* If we're interactive, use (GNU) readline */
1568 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001569 PyObject *po;
1570 char *prompt;
1571 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001572 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001573 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001574
1575 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1576 if (!stdin_encoding)
1577 /* stdin is a text stream, so it must have an
1578 encoding. */
1579 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001580 tmp = PyObject_CallMethod(fout, "flush", "");
1581 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001582 PyErr_Clear();
1583 else
1584 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001585 if (promptarg != NULL) {
1586 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001587 if (po == NULL) {
1588 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001589 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001590 }
Christian Heimes91c77302007-11-25 09:18:01 +00001591 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001592 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001593 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001594 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001595 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001596 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001597 }
1598 else {
1599 po = NULL;
1600 prompt = "";
1601 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001602 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001603 Py_XDECREF(po);
1604 if (s == NULL) {
1605 if (!PyErr_Occurred())
1606 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001607 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001608 return NULL;
1609 }
1610 if (*s == '\0') {
1611 PyErr_SetNone(PyExc_EOFError);
1612 result = NULL;
1613 }
1614 else { /* strip trailing '\n' */
1615 size_t len = strlen(s);
1616 if (len > PY_SSIZE_T_MAX) {
1617 PyErr_SetString(PyExc_OverflowError,
1618 "input: input too long");
1619 result = NULL;
1620 }
1621 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001622 result = PyUnicode_Decode
1623 (s, len-1,
1624 PyUnicode_AsString(stdin_encoding),
1625 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001626 }
1627 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001628 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001629 PyMem_FREE(s);
1630 return result;
1631 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001632
1633 /* Fallback if we're not interactive */
1634 if (promptarg != NULL) {
1635 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001636 return NULL;
1637 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001638 tmp = PyObject_CallMethod(fout, "flush", "");
1639 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001640 PyErr_Clear();
1641 else
1642 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001643 return PyFile_GetLine(fin, -1);
1644}
1645
1646PyDoc_STRVAR(input_doc,
1647"input([prompt]) -> string\n\
1648\n\
1649Read a string from standard input. The trailing newline is stripped.\n\
1650If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1651On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1652is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001653
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001654
Guido van Rossum79f25d91997-04-29 20:08:16 +00001655static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001656builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001657{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001658 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001659}
1660
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001661PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001662"repr(object) -> string\n\
1663\n\
1664Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001665For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001666
1667
Guido van Rossum79f25d91997-04-29 20:08:16 +00001668static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001669builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001670{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001671#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1672 static PyObject *round_str = NULL;
1673 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001674 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001675 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001676
Alex Martelliae211f92007-08-22 23:21:33 +00001677 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001678 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001679 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001680
Christian Heimes90aa7642007-12-19 02:45:37 +00001681 if (Py_TYPE(number)->tp_dict == NULL) {
1682 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001683 return NULL;
1684 }
1685
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001686 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001687 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001688 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001689 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001690 }
1691
Christian Heimes90aa7642007-12-19 02:45:37 +00001692 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001693 if (round == NULL) {
1694 PyErr_Format(PyExc_TypeError,
1695 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001696 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001697 return NULL;
1698 }
1699
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001700 if (ndigits == UNDEF_NDIGITS)
1701 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001702 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001703 return PyObject_CallFunction(round, "Oi", number, ndigits);
1704#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001705}
1706
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001707PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001708"round(number[, ndigits]) -> floating point number\n\
1709\n\
1710Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001711This returns an int when called with one argument, otherwise a float.\n\
1712Precision may be negative.");
1713
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001714
Raymond Hettinger64958a12003-12-17 20:43:33 +00001715static PyObject *
1716builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1717{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001718 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001719 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001720 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001721 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001722
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001723 /* args 1-3 should match listsort in Objects/listobject.c */
1724 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1725 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001726 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001727
1728 newlist = PySequence_List(seq);
1729 if (newlist == NULL)
1730 return NULL;
1731
1732 callable = PyObject_GetAttrString(newlist, "sort");
1733 if (callable == NULL) {
1734 Py_DECREF(newlist);
1735 return NULL;
1736 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001737
Raymond Hettinger64958a12003-12-17 20:43:33 +00001738 newargs = PyTuple_GetSlice(args, 1, 4);
1739 if (newargs == NULL) {
1740 Py_DECREF(newlist);
1741 Py_DECREF(callable);
1742 return NULL;
1743 }
1744
1745 v = PyObject_Call(callable, newargs, kwds);
1746 Py_DECREF(newargs);
1747 Py_DECREF(callable);
1748 if (v == NULL) {
1749 Py_DECREF(newlist);
1750 return NULL;
1751 }
1752 Py_DECREF(v);
1753 return newlist;
1754}
1755
1756PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001757"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001758
Guido van Rossum79f25d91997-04-29 20:08:16 +00001759static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001760builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001761{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762 PyObject *v = NULL;
1763 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001764
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001765 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001766 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001767 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001769 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001770 if (!PyErr_Occurred())
1771 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001772 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001773 }
1774 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001775 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001776 }
1777 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001778 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001779 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001781 "vars() argument must have __dict__ attribute");
1782 return NULL;
1783 }
1784 }
1785 return d;
1786}
1787
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001788PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001789"vars([object]) -> dictionary\n\
1790\n\
1791Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001792With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001793
Alex Martellia70b1912003-04-22 08:12:33 +00001794static PyObject*
1795builtin_sum(PyObject *self, PyObject *args)
1796{
1797 PyObject *seq;
1798 PyObject *result = NULL;
1799 PyObject *temp, *item, *iter;
1800
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001801 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001802 return NULL;
1803
1804 iter = PyObject_GetIter(seq);
1805 if (iter == NULL)
1806 return NULL;
1807
1808 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001809 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001810 if (result == NULL) {
1811 Py_DECREF(iter);
1812 return NULL;
1813 }
1814 } else {
1815 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001816 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001817 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001818 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001819 Py_DECREF(iter);
1820 return NULL;
1821 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001822 if (PyBytes_Check(result)) {
1823 PyErr_SetString(PyExc_TypeError,
1824 "sum() can't sum bytes [use b''.join(seq) instead]");
1825 Py_DECREF(iter);
1826 return NULL;
1827 }
1828
Alex Martelli41c9f882003-04-22 09:24:48 +00001829 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001830 }
1831
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001832#ifndef SLOW_SUM
1833 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1834 Assumes all inputs are the same type. If the assumption fails, default
1835 to the more general routine.
1836 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001837 if (PyLong_CheckExact(result)) {
1838 int overflow;
1839 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1840 /* If this already overflowed, don't even enter the loop. */
1841 if (overflow == 0) {
1842 Py_DECREF(result);
1843 result = NULL;
1844 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001845 while(result == NULL) {
1846 item = PyIter_Next(iter);
1847 if (item == NULL) {
1848 Py_DECREF(iter);
1849 if (PyErr_Occurred())
1850 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001851 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001852 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001853 if (PyLong_CheckExact(item)) {
1854 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001855 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001856 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001857 i_result = x;
1858 Py_DECREF(item);
1859 continue;
1860 }
1861 }
1862 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001863 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001864 temp = PyNumber_Add(result, item);
1865 Py_DECREF(result);
1866 Py_DECREF(item);
1867 result = temp;
1868 if (result == NULL) {
1869 Py_DECREF(iter);
1870 return NULL;
1871 }
1872 }
1873 }
1874
1875 if (PyFloat_CheckExact(result)) {
1876 double f_result = PyFloat_AS_DOUBLE(result);
1877 Py_DECREF(result);
1878 result = NULL;
1879 while(result == NULL) {
1880 item = PyIter_Next(iter);
1881 if (item == NULL) {
1882 Py_DECREF(iter);
1883 if (PyErr_Occurred())
1884 return NULL;
1885 return PyFloat_FromDouble(f_result);
1886 }
1887 if (PyFloat_CheckExact(item)) {
1888 PyFPE_START_PROTECT("add", return 0)
1889 f_result += PyFloat_AS_DOUBLE(item);
1890 PyFPE_END_PROTECT(f_result)
1891 Py_DECREF(item);
1892 continue;
1893 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001894 if (PyLong_CheckExact(item)) {
1895 long value;
1896 int overflow;
1897 value = PyLong_AsLongAndOverflow(item, &overflow);
1898 if (!overflow) {
1899 PyFPE_START_PROTECT("add", return 0)
1900 f_result += (double)value;
1901 PyFPE_END_PROTECT(f_result)
1902 Py_DECREF(item);
1903 continue;
1904 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001905 }
1906 result = PyFloat_FromDouble(f_result);
1907 temp = PyNumber_Add(result, item);
1908 Py_DECREF(result);
1909 Py_DECREF(item);
1910 result = temp;
1911 if (result == NULL) {
1912 Py_DECREF(iter);
1913 return NULL;
1914 }
1915 }
1916 }
1917#endif
1918
Alex Martellia70b1912003-04-22 08:12:33 +00001919 for(;;) {
1920 item = PyIter_Next(iter);
1921 if (item == NULL) {
1922 /* error, or end-of-sequence */
1923 if (PyErr_Occurred()) {
1924 Py_DECREF(result);
1925 result = NULL;
1926 }
1927 break;
1928 }
Alex Martellia253e182003-10-25 23:24:14 +00001929 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001930 Py_DECREF(result);
1931 Py_DECREF(item);
1932 result = temp;
1933 if (result == NULL)
1934 break;
1935 }
1936 Py_DECREF(iter);
1937 return result;
1938}
1939
1940PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001941"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001942\n\
1943Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001944of parameter 'start' (which defaults to 0). When the sequence is\n\
1945empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001946
1947
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001948static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001949builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001950{
1951 PyObject *inst;
1952 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001953 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001954
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001955 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001956 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001957
Guido van Rossum823649d2001-03-21 18:40:58 +00001958 retval = PyObject_IsInstance(inst, cls);
1959 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001960 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001961 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001962}
1963
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001964PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001965"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001966\n\
1967Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001968With a type as second argument, return whether that is the object's type.\n\
1969The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001970isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001971
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001972
1973static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001974builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001975{
1976 PyObject *derived;
1977 PyObject *cls;
1978 int retval;
1979
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001980 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001981 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001982
Guido van Rossum823649d2001-03-21 18:40:58 +00001983 retval = PyObject_IsSubclass(derived, cls);
1984 if (retval < 0)
1985 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001986 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001987}
1988
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001989PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001990"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001991\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001992Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1993When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1994is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001995
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001996
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00001997typedef struct {
1998 PyObject_HEAD
1999 Py_ssize_t tuplesize;
2000 PyObject *ittuple; /* tuple of iterators */
2001 PyObject *result;
2002} zipobject;
2003
2004PyTypeObject PyZip_Type;
2005
2006static PyObject *
2007zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002008{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002009 zipobject *lz;
2010 Py_ssize_t i;
2011 PyObject *ittuple; /* tuple of iterators */
2012 PyObject *result;
2013 Py_ssize_t tuplesize = PySequence_Length(args);
2014
2015 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2016 return NULL;
2017
Guido van Rossumb65fb332006-08-25 23:26:40 +00002018 /* args must be a tuple */
2019 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002020
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002021 /* obtain iterators */
2022 ittuple = PyTuple_New(tuplesize);
2023 if (ittuple == NULL)
2024 return NULL;
2025 for (i=0; i < tuplesize; ++i) {
2026 PyObject *item = PyTuple_GET_ITEM(args, i);
2027 PyObject *it = PyObject_GetIter(item);
2028 if (it == NULL) {
2029 if (PyErr_ExceptionMatches(PyExc_TypeError))
2030 PyErr_Format(PyExc_TypeError,
2031 "zip argument #%zd must support iteration",
2032 i+1);
2033 Py_DECREF(ittuple);
2034 return NULL;
2035 }
2036 PyTuple_SET_ITEM(ittuple, i, it);
2037 }
2038
2039 /* create a result holder */
2040 result = PyTuple_New(tuplesize);
2041 if (result == NULL) {
2042 Py_DECREF(ittuple);
2043 return NULL;
2044 }
2045 for (i=0 ; i < tuplesize ; i++) {
2046 Py_INCREF(Py_None);
2047 PyTuple_SET_ITEM(result, i, Py_None);
2048 }
2049
2050 /* create zipobject structure */
2051 lz = (zipobject *)type->tp_alloc(type, 0);
2052 if (lz == NULL) {
2053 Py_DECREF(ittuple);
2054 Py_DECREF(result);
2055 return NULL;
2056 }
2057 lz->ittuple = ittuple;
2058 lz->tuplesize = tuplesize;
2059 lz->result = result;
2060
2061 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002062}
2063
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002064static void
2065zip_dealloc(zipobject *lz)
2066{
2067 PyObject_GC_UnTrack(lz);
2068 Py_XDECREF(lz->ittuple);
2069 Py_XDECREF(lz->result);
2070 Py_TYPE(lz)->tp_free(lz);
2071}
2072
2073static int
2074zip_traverse(zipobject *lz, visitproc visit, void *arg)
2075{
2076 Py_VISIT(lz->ittuple);
2077 Py_VISIT(lz->result);
2078 return 0;
2079}
2080
2081static PyObject *
2082zip_next(zipobject *lz)
2083{
2084 Py_ssize_t i;
2085 Py_ssize_t tuplesize = lz->tuplesize;
2086 PyObject *result = lz->result;
2087 PyObject *it;
2088 PyObject *item;
2089 PyObject *olditem;
2090
2091 if (tuplesize == 0)
2092 return NULL;
2093 if (Py_REFCNT(result) == 1) {
2094 Py_INCREF(result);
2095 for (i=0 ; i < tuplesize ; i++) {
2096 it = PyTuple_GET_ITEM(lz->ittuple, i);
2097 assert(PyIter_Check(it));
2098 item = (*Py_TYPE(it)->tp_iternext)(it);
2099 if (item == NULL) {
2100 Py_DECREF(result);
2101 return NULL;
2102 }
2103 olditem = PyTuple_GET_ITEM(result, i);
2104 PyTuple_SET_ITEM(result, i, item);
2105 Py_DECREF(olditem);
2106 }
2107 } else {
2108 result = PyTuple_New(tuplesize);
2109 if (result == NULL)
2110 return NULL;
2111 for (i=0 ; i < tuplesize ; i++) {
2112 it = PyTuple_GET_ITEM(lz->ittuple, i);
2113 assert(PyIter_Check(it));
2114 item = (*Py_TYPE(it)->tp_iternext)(it);
2115 if (item == NULL) {
2116 Py_DECREF(result);
2117 return NULL;
2118 }
2119 PyTuple_SET_ITEM(result, i, item);
2120 }
2121 }
2122 return result;
2123}
Barry Warsawbd599b52000-08-03 15:45:29 +00002124
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002125PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002126"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002127\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002128Return a zip object whose .__next__() method returns a tuple where\n\
2129the i-th element comes from the i-th iterable argument. The .__next__()\n\
2130method continues until the shortest iterable in the argument sequence\n\
2131is exhausted and then it raises StopIteration. Works like the zip()\n\
2132function but consumes less memory by returning an iterator instead of\n\
2133a list.");
2134
2135PyTypeObject PyZip_Type = {
2136 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2137 "zip", /* tp_name */
2138 sizeof(zipobject), /* tp_basicsize */
2139 0, /* tp_itemsize */
2140 /* methods */
2141 (destructor)zip_dealloc, /* tp_dealloc */
2142 0, /* tp_print */
2143 0, /* tp_getattr */
2144 0, /* tp_setattr */
2145 0, /* tp_compare */
2146 0, /* tp_repr */
2147 0, /* tp_as_number */
2148 0, /* tp_as_sequence */
2149 0, /* tp_as_mapping */
2150 0, /* tp_hash */
2151 0, /* tp_call */
2152 0, /* tp_str */
2153 PyObject_GenericGetAttr, /* tp_getattro */
2154 0, /* tp_setattro */
2155 0, /* tp_as_buffer */
2156 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2157 Py_TPFLAGS_BASETYPE, /* tp_flags */
2158 zip_doc, /* tp_doc */
2159 (traverseproc)zip_traverse, /* tp_traverse */
2160 0, /* tp_clear */
2161 0, /* tp_richcompare */
2162 0, /* tp_weaklistoffset */
2163 PyObject_SelfIter, /* tp_iter */
2164 (iternextfunc)zip_next, /* tp_iternext */
2165 0, /* tp_methods */
2166 0, /* tp_members */
2167 0, /* tp_getset */
2168 0, /* tp_base */
2169 0, /* tp_dict */
2170 0, /* tp_descr_get */
2171 0, /* tp_descr_set */
2172 0, /* tp_dictoffset */
2173 0, /* tp_init */
2174 PyType_GenericAlloc, /* tp_alloc */
2175 zip_new, /* tp_new */
2176 PyObject_GC_Del, /* tp_free */
2177};
Barry Warsawbd599b52000-08-03 15:45:29 +00002178
2179
Guido van Rossum79f25d91997-04-29 20:08:16 +00002180static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002181 {"__build_class__", (PyCFunction)builtin___build_class__,
2182 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002183 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002184 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002185 {"all", builtin_all, METH_O, all_doc},
2186 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002187 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002188 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002189 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002190 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002191 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2192 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2193 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2194 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002195 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002196 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002197 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2198 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2199 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2200 {"hash", builtin_hash, METH_O, hash_doc},
2201 {"hex", builtin_hex, METH_O, hex_doc},
2202 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002203 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002204 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2205 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2206 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2207 {"len", builtin_len, METH_O, len_doc},
2208 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002209 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2210 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002211 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002212 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002213 {"ord", builtin_ord, METH_O, ord_doc},
2214 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002215 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002216 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002217 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002218 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002219 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002220 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002221 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002222 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002223};
2224
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002225PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002226"Built-in functions, exceptions, and other objects.\n\
2227\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002228Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002229
Guido van Rossum25ce5661997-08-02 03:10:38 +00002230PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002231_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002232{
Fred Drake5550de32000-06-20 04:54:19 +00002233 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00002234 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002235 builtin_doc, (PyObject *)NULL,
2236 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002237 if (mod == NULL)
2238 return NULL;
2239 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002240
Tim Peters7571a0f2003-03-23 17:52:28 +00002241#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002242 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002243 * that, before this code was added in 2.3, never showed up in
2244 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2245 * result, programs leaking references to None and False (etc)
2246 * couldn't be diagnosed by examining sys.getobjects(0).
2247 */
2248#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2249#else
2250#define ADD_TO_ALL(OBJECT) (void)0
2251#endif
2252
Tim Peters4b7625e2001-09-13 21:37:17 +00002253#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002254 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2255 return NULL; \
2256 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002257
2258 SETBUILTIN("None", Py_None);
2259 SETBUILTIN("Ellipsis", Py_Ellipsis);
2260 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002261 SETBUILTIN("False", Py_False);
2262 SETBUILTIN("True", Py_True);
2263 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002264 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00002265 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00002266 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002267 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002268#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002269 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002270#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002271 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002272 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002273 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002274 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002275 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002276 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002277 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002278 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002279 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002280 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002281 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002282 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002283 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002284 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002285 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002286 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002287 SETBUILTIN("super", &PySuper_Type);
2288 SETBUILTIN("tuple", &PyTuple_Type);
2289 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002290 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002291 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002292 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2293 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002294 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002295 }
2296 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002297
Guido van Rossum25ce5661997-08-02 03:10:38 +00002298 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002299#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002300#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002301}