blob: 199ebc087de8bab89b143112b961ec78b78a2241 [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;
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000516 int mode = -1;
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};
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000523 int start[] = {Py_file_input, Py_eval_input, Py_single_input};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000524
Guido van Rossumd8faa362007-04-27 19:54:29 +0000525 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
526 kwlist, &cmd, &filename, &startstr,
527 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000528 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000529
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000530 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000531
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000532 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000533 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000534 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000535 PyErr_SetString(PyExc_ValueError,
536 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000537 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000538 }
539 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
540
Tim Peters6cd6a822001-08-17 22:11:27 +0000541 if (!dont_inherit) {
542 PyEval_MergeCompilerFlags(&cf);
543 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000544
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000545 if (strcmp(startstr, "exec") == 0)
546 mode = 0;
547 else if (strcmp(startstr, "eval") == 0)
548 mode = 1;
549 else if (strcmp(startstr, "single") == 0)
550 mode = 2;
551 else {
552 PyErr_SetString(PyExc_ValueError,
553 "compile() arg 3 must be 'exec', 'eval' or 'single'");
554 return NULL;
555 }
556
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000557 if (PyAST_Check(cmd)) {
558 PyObject *result;
559 if (supplied_flags & PyCF_ONLY_AST) {
560 Py_INCREF(cmd);
561 result = cmd;
562 }
563 else {
564 PyArena *arena;
565 mod_ty mod;
566
567 arena = PyArena_New();
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000568 mod = PyAST_obj2mod(cmd, arena, mode);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000569 if (mod == NULL) {
570 PyArena_Free(arena);
571 return NULL;
572 }
573 result = (PyObject*)PyAST_Compile(mod, filename,
574 &cf, arena);
575 PyArena_Free(arena);
576 }
577 return result;
578 }
579
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000580 str = source_as_string(cmd);
581 if (str == NULL)
582 return NULL;
583
Neal Norwitzdb4115f2008-03-31 04:20:05 +0000584 return Py_CompileStringFlags(str, filename, start[mode], &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000585}
586
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000587PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000588"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000589\n\
590Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000591into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000592The filename will be used for run-time error messages.\n\
593The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000594single (interactive) statement, or 'eval' to compile an expression.\n\
595The flags argument, if present, controls which future statements influence\n\
596the compilation of the code.\n\
597The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
598the effects of any future statements in effect in the code calling\n\
599compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000600in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000601
Guido van Rossum79f25d91997-04-29 20:08:16 +0000602static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000603builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000604{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000605 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000607 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000608 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000609 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000610}
611
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000612PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000613"dir([object]) -> list of strings\n"
614"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000615"If called without an argument, return the names in the current scope.\n"
616"Else, return an alphabetized list of names comprising (some of) the attributes\n"
617"of the given object, and of attributes reachable from it.\n"
618"If the object supplies a method named __dir__, it will be used; otherwise\n"
619"the default dir() logic is used and returns:\n"
620" for a module object: the module's attributes.\n"
621" for a class object: its attributes, and recursively the attributes\n"
622" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000623" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000624" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000625
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000627builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000628{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000630
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000631 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000632 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000633 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000634}
635
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000636PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000637"divmod(x, y) -> (div, mod)\n\
638\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000639Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000640
641
Guido van Rossum79f25d91997-04-29 20:08:16 +0000642static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000643builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000644{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000645 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000646 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000647 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000648 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000649
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000650 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000651 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000652 if (locals != Py_None && !PyMapping_Check(locals)) {
653 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000654 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000655 }
656 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000657 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000658 "globals must be a real dict; try eval(expr, {}, mapping)"
659 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000660 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000661 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000662 if (globals == Py_None) {
663 globals = PyEval_GetGlobals();
664 if (locals == Py_None)
665 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000666 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000668 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000669
Georg Brandl77c85e62005-09-15 10:46:13 +0000670 if (globals == NULL || locals == NULL) {
671 PyErr_SetString(PyExc_TypeError,
672 "eval must be given globals and locals "
673 "when called without a frame");
674 return NULL;
675 }
676
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
678 if (PyDict_SetItemString(globals, "__builtins__",
679 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000680 return NULL;
681 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000682
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000683 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000684 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000685 PyErr_SetString(PyExc_TypeError,
686 "code object passed to eval() may not contain free variables");
687 return NULL;
688 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000690 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000691
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000692 str = source_as_string(cmd);
693 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000694 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000695
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696 while (*str == ' ' || *str == '\t')
697 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000698
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000699 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000700 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000701 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
702 Py_XDECREF(tmp);
703 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000704}
705
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000706PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000707"eval(source[, globals[, locals]]) -> value\n\
708\n\
709Evaluate the source in the context of globals and locals.\n\
710The source may be a string representing a Python expression\n\
711or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000712The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000713defaulting to the current globals and locals.\n\
714If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000715
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716static PyObject *
717builtin_exec(PyObject *self, PyObject *args)
718{
719 PyObject *v;
720 PyObject *prog, *globals = Py_None, *locals = Py_None;
721 int plain = 0;
722
723 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
724 return NULL;
725
726 if (globals == Py_None) {
727 globals = PyEval_GetGlobals();
728 if (locals == Py_None) {
729 locals = PyEval_GetLocals();
730 plain = 1;
731 }
732 if (!globals || !locals) {
733 PyErr_SetString(PyExc_SystemError,
734 "globals and locals cannot be NULL");
735 return NULL;
736 }
737 }
738 else if (locals == Py_None)
739 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000740 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000741 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000742 PyErr_Format(PyExc_TypeError,
743 "exec() arg 1 must be a string, file, or code "
744 "object, not %.100s", prog->ob_type->tp_name);
745 return NULL;
746 }
747 if (!PyDict_Check(globals)) {
748 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
749 globals->ob_type->tp_name);
750 return NULL;
751 }
752 if (!PyMapping_Check(locals)) {
753 PyErr_Format(PyExc_TypeError,
754 "arg 3 must be a mapping or None, not %.100s",
755 locals->ob_type->tp_name);
756 return NULL;
757 }
758 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
759 if (PyDict_SetItemString(globals, "__builtins__",
760 PyEval_GetBuiltins()) != 0)
761 return NULL;
762 }
763
764 if (PyCode_Check(prog)) {
765 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
766 PyErr_SetString(PyExc_TypeError,
767 "code object passed to exec() may not "
768 "contain free variables");
769 return NULL;
770 }
771 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
772 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000773 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000774 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000775 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000776 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000777 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000778 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000779 if (PyEval_MergeCompilerFlags(&cf))
780 v = PyRun_StringFlags(str, Py_file_input, globals,
781 locals, &cf);
782 else
783 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000784 }
785 if (v == NULL)
786 return NULL;
787 Py_DECREF(v);
788 Py_RETURN_NONE;
789}
790
791PyDoc_STRVAR(exec_doc,
792"exec(object[, globals[, locals]])\n\
793\n\
794Read and execute code from a object, which can be a string, a code\n\
795object or a file object.\n\
796The globals and locals are dictionaries, defaulting to the current\n\
797globals and locals. If only globals is given, locals defaults to it.");
798
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000799
Guido van Rossum79f25d91997-04-29 20:08:16 +0000800static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000801builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000802{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000803 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000804 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000805
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000806 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000807 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000808
Martin v. Löwis5b222132007-06-10 09:51:05 +0000809 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000810 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000811 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000812 return NULL;
813 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000814 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000815 if (result == NULL && dflt != NULL &&
816 PyErr_ExceptionMatches(PyExc_AttributeError))
817 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000818 PyErr_Clear();
819 Py_INCREF(dflt);
820 result = dflt;
821 }
822 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000823}
824
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000825PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000826"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000827\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000828Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
829When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000830exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000831
832
Guido van Rossum79f25d91997-04-29 20:08:16 +0000833static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000834builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000835{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000837
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000839 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000840 return d;
841}
842
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000843PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000844"globals() -> dictionary\n\
845\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000846Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000847
848
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000850builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000851{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 PyObject *v;
853 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000855 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000856 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000857 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000858 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000859 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000860 return NULL;
861 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000862 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000863 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000864 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000865 Py_INCREF(Py_False);
866 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000867 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000868 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000869 Py_INCREF(Py_True);
870 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000871}
872
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000873PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000874"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000875\n\
876Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000877(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000878
879
Guido van Rossum79f25d91997-04-29 20:08:16 +0000880static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000881builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000882{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000883 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000884}
885
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000886PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000887"id(object) -> integer\n\
888\n\
889Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000890simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000891
892
Raymond Hettingera6c60372008-03-13 01:26:19 +0000893/* map object ************************************************************/
894
895typedef struct {
896 PyObject_HEAD
897 PyObject *iters;
898 PyObject *func;
899} mapobject;
900
901PyTypeObject PyMap_Type;
902
Guido van Rossum79f25d91997-04-29 20:08:16 +0000903static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000904map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000905{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000906 PyObject *it, *iters, *func;
907 mapobject *lz;
908 Py_ssize_t numargs, i;
909
910 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000911 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000912
913 numargs = PyTuple_Size(args);
914 if (numargs < 2) {
915 PyErr_SetString(PyExc_TypeError,
916 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000917 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000918 }
919
920 iters = PyTuple_New(numargs-1);
921 if (iters == NULL)
922 return NULL;
923
924 for (i=1 ; i<numargs ; i++) {
925 /* Get iterator. */
926 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
927 if (it == NULL) {
928 Py_DECREF(iters);
929 return NULL;
930 }
931 PyTuple_SET_ITEM(iters, i-1, it);
932 }
933
934 /* create mapobject structure */
935 lz = (mapobject *)type->tp_alloc(type, 0);
936 if (lz == NULL) {
937 Py_DECREF(iters);
938 return NULL;
939 }
940 lz->iters = iters;
941 func = PyTuple_GET_ITEM(args, 0);
942 Py_INCREF(func);
943 lz->func = func;
944
945 return (PyObject *)lz;
946}
947
948static void
949map_dealloc(mapobject *lz)
950{
951 PyObject_GC_UnTrack(lz);
952 Py_XDECREF(lz->iters);
953 Py_XDECREF(lz->func);
954 Py_TYPE(lz)->tp_free(lz);
955}
956
957static int
958map_traverse(mapobject *lz, visitproc visit, void *arg)
959{
960 Py_VISIT(lz->iters);
961 Py_VISIT(lz->func);
962 return 0;
963}
964
965static PyObject *
966map_next(mapobject *lz)
967{
968 PyObject *val;
969 PyObject *argtuple;
970 PyObject *result;
971 Py_ssize_t numargs, i;
972
973 numargs = PyTuple_Size(lz->iters);
974 argtuple = PyTuple_New(numargs);
975 if (argtuple == NULL)
976 return NULL;
977
978 for (i=0 ; i<numargs ; i++) {
979 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
980 if (val == NULL) {
981 Py_DECREF(argtuple);
982 return NULL;
983 }
984 PyTuple_SET_ITEM(argtuple, i, val);
985 }
986 result = PyObject_Call(lz->func, argtuple, NULL);
987 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000988 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000989}
990
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000991PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +0000992"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000993\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +0000994Make an iterator that computes the function using arguments from\n\
995each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000996
Raymond Hettingera6c60372008-03-13 01:26:19 +0000997PyTypeObject PyMap_Type = {
998 PyVarObject_HEAD_INIT(&PyType_Type, 0)
999 "map", /* tp_name */
1000 sizeof(mapobject), /* tp_basicsize */
1001 0, /* tp_itemsize */
1002 /* methods */
1003 (destructor)map_dealloc, /* tp_dealloc */
1004 0, /* tp_print */
1005 0, /* tp_getattr */
1006 0, /* tp_setattr */
1007 0, /* tp_compare */
1008 0, /* tp_repr */
1009 0, /* tp_as_number */
1010 0, /* tp_as_sequence */
1011 0, /* tp_as_mapping */
1012 0, /* tp_hash */
1013 0, /* tp_call */
1014 0, /* tp_str */
1015 PyObject_GenericGetAttr, /* tp_getattro */
1016 0, /* tp_setattro */
1017 0, /* tp_as_buffer */
1018 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1019 Py_TPFLAGS_BASETYPE, /* tp_flags */
1020 map_doc, /* tp_doc */
1021 (traverseproc)map_traverse, /* tp_traverse */
1022 0, /* tp_clear */
1023 0, /* tp_richcompare */
1024 0, /* tp_weaklistoffset */
1025 PyObject_SelfIter, /* tp_iter */
1026 (iternextfunc)map_next, /* tp_iternext */
1027 0, /* tp_methods */
1028 0, /* tp_members */
1029 0, /* tp_getset */
1030 0, /* tp_base */
1031 0, /* tp_dict */
1032 0, /* tp_descr_get */
1033 0, /* tp_descr_set */
1034 0, /* tp_dictoffset */
1035 0, /* tp_init */
1036 PyType_GenericAlloc, /* tp_alloc */
1037 map_new, /* tp_new */
1038 PyObject_GC_Del, /* tp_free */
1039};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001040
Guido van Rossum79f25d91997-04-29 20:08:16 +00001041static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001042builtin_next(PyObject *self, PyObject *args)
1043{
1044 PyObject *it, *res;
1045 PyObject *def = NULL;
1046
1047 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1048 return NULL;
1049 if (!PyIter_Check(it)) {
1050 PyErr_Format(PyExc_TypeError,
1051 "%.200s object is not an iterator", it->ob_type->tp_name);
1052 return NULL;
1053 }
1054
1055 res = (*it->ob_type->tp_iternext)(it);
1056 if (res == NULL) {
1057 if (def) {
1058 if (PyErr_Occurred() &&
1059 !PyErr_ExceptionMatches(PyExc_StopIteration))
1060 return NULL;
1061 PyErr_Clear();
1062 Py_INCREF(def);
1063 return def;
1064 } else if (PyErr_Occurred()) {
1065 return NULL;
1066 } else {
1067 PyErr_SetNone(PyExc_StopIteration);
1068 return NULL;
1069 }
1070 }
1071 return res;
1072}
1073
1074PyDoc_STRVAR(next_doc,
1075"next(iterator[, default])\n\
1076\n\
1077Return the next item from the iterator. If default is given and the iterator\n\
1078is exhausted, it is returned instead of raising StopIteration.");
1079
1080
1081static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001082builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001083{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001084 PyObject *v;
1085 PyObject *name;
1086 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001087
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001088 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001089 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001090 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001091 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001092 Py_INCREF(Py_None);
1093 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001094}
1095
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001096PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001097"setattr(object, name, value)\n\
1098\n\
1099Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001100``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001101
1102
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001104builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001105{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001106 PyObject *v;
1107 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001108
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001109 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001110 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001111 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001112 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001113 Py_INCREF(Py_None);
1114 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001115}
1116
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001117PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001118"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001119\n\
1120Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001121``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001122
1123
Guido van Rossum79f25d91997-04-29 20:08:16 +00001124static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001125builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001126{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001127 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001128
Guido van Rossum79f25d91997-04-29 20:08:16 +00001129 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001130 if (x == -1)
1131 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001132 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001133}
1134
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001135PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001136"hash(object) -> integer\n\
1137\n\
1138Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001139the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001140
1141
Guido van Rossum79f25d91997-04-29 20:08:16 +00001142static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001143builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001144{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001145 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001146}
1147
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001148PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001149"hex(number) -> string\n\
1150\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001151Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001152
1153
Guido van Rossum79f25d91997-04-29 20:08:16 +00001154static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001155builtin_iter(PyObject *self, PyObject *args)
1156{
1157 PyObject *v, *w = NULL;
1158
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001159 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001160 return NULL;
1161 if (w == NULL)
1162 return PyObject_GetIter(v);
1163 if (!PyCallable_Check(v)) {
1164 PyErr_SetString(PyExc_TypeError,
1165 "iter(v, w): v must be callable");
1166 return NULL;
1167 }
1168 return PyCallIter_New(v, w);
1169}
1170
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001171PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001172"iter(collection) -> iterator\n\
1173iter(callable, sentinel) -> iterator\n\
1174\n\
1175Get an iterator from an object. In the first form, the argument must\n\
1176supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001177In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001178
1179
1180static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001181builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001182{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001183 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001184
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001185 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001186 if (res < 0 && PyErr_Occurred())
1187 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001188 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001189}
1190
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001191PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001192"len(object) -> integer\n\
1193\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001194Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001195
1196
Guido van Rossum79f25d91997-04-29 20:08:16 +00001197static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001198builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001199{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001200 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001201
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001203 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001204 return d;
1205}
1206
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001207PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001208"locals() -> dictionary\n\
1209\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001210Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001211
1212
Guido van Rossum79f25d91997-04-29 20:08:16 +00001213static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001214min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001215{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001216 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001217 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001218
Guido van Rossum79f25d91997-04-29 20:08:16 +00001219 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001221 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001222 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001223
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001224 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1225 keyfunc = PyDict_GetItemString(kwds, "key");
1226 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001227 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001228 "%s() got an unexpected keyword argument", name);
1229 return NULL;
1230 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001231 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001232 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001233
Tim Petersc3074532001-05-03 07:00:32 +00001234 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001235 if (it == NULL) {
1236 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001237 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001238 }
Tim Petersc3074532001-05-03 07:00:32 +00001239
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001240 maxitem = NULL; /* the result */
1241 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001242 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001243 /* get the value from the key function */
1244 if (keyfunc != NULL) {
1245 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1246 if (val == NULL)
1247 goto Fail_it_item;
1248 }
1249 /* no key function; the value is the item */
1250 else {
1251 val = item;
1252 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001253 }
Tim Petersc3074532001-05-03 07:00:32 +00001254
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001255 /* maximum value and item are unset; set them */
1256 if (maxval == NULL) {
1257 maxitem = item;
1258 maxval = val;
1259 }
1260 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001261 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001262 int cmp = PyObject_RichCompareBool(val, maxval, op);
1263 if (cmp < 0)
1264 goto Fail_it_item_and_val;
1265 else if (cmp > 0) {
1266 Py_DECREF(maxval);
1267 Py_DECREF(maxitem);
1268 maxval = val;
1269 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001270 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001271 else {
1272 Py_DECREF(item);
1273 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001274 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001275 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001276 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001277 if (PyErr_Occurred())
1278 goto Fail_it;
1279 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001280 PyErr_Format(PyExc_ValueError,
1281 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001282 assert(maxitem == NULL);
1283 }
1284 else
1285 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001286 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001287 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001288 return maxitem;
1289
1290Fail_it_item_and_val:
1291 Py_DECREF(val);
1292Fail_it_item:
1293 Py_DECREF(item);
1294Fail_it:
1295 Py_XDECREF(maxval);
1296 Py_XDECREF(maxitem);
1297 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001298 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001299 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001300}
1301
Guido van Rossum79f25d91997-04-29 20:08:16 +00001302static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001303builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001304{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001305 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001306}
1307
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001308PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001309"min(iterable[, key=func]) -> value\n\
1310min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001311\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001312With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001313With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001314
1315
Guido van Rossum79f25d91997-04-29 20:08:16 +00001316static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001317builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001320}
1321
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001322PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001323"max(iterable[, key=func]) -> value\n\
1324max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001325\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001326With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001327With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001328
1329
Guido van Rossum79f25d91997-04-29 20:08:16 +00001330static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001331builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001332{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001333 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001334}
1335
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001336PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001337"oct(number) -> string\n\
1338\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001339Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001340
1341
Guido van Rossum79f25d91997-04-29 20:08:16 +00001342static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001343builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001344{
Guido van Rossum09095f32000-03-10 23:00:52 +00001345 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001346 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001347
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001348 if (PyString_Check(obj)) {
1349 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001350 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001351 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001352 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001353 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001354 }
1355 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001356 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001357 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001358 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001359 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001360 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001361#ifndef Py_UNICODE_WIDE
1362 if (size == 2) {
1363 /* Decode a valid surrogate pair */
1364 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1365 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1366 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1367 0xDC00 <= c1 && c1 <= 0xDFFF) {
1368 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1369 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001370 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001371 }
1372 }
1373#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001374 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001375 else if (PyBytes_Check(obj)) {
1376 /* XXX Hopefully this is temporary */
1377 size = PyBytes_GET_SIZE(obj);
1378 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001379 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001380 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001381 }
1382 }
1383 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001384 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001385 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001386 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001387 return NULL;
1388 }
1389
Guido van Rossumad991772001-01-12 16:03:05 +00001390 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001391 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001392 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001393 size);
1394 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001395}
1396
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001397PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001398"ord(c) -> integer\n\
1399\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001400Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001401)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001402#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001403PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001404"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001405)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001406#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001407;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001408
1409
Guido van Rossum79f25d91997-04-29 20:08:16 +00001410static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001411builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001412{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001413 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001414
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001415 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001416 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001417 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001418}
1419
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001420PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001421"pow(x, y[, z]) -> number\n\
1422\n\
1423With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001424equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001425
1426
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001427
Guido van Rossum34343512006-11-30 22:13:52 +00001428static PyObject *
1429builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1430{
1431 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001432 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001433 PyObject *sep = NULL, *end = NULL, *file = NULL;
1434 int i, err;
1435
Georg Brandl257d3d92007-02-26 10:35:10 +00001436 if (dummy_args == NULL) {
1437 if (!(dummy_args = PyTuple_New(0)))
1438 return NULL;
1439 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001440 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001441 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001442 return NULL;
1443 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001444 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001445 /* sys.stdout may be None when FILE* stdout isn't connected */
1446 if (file == Py_None)
1447 Py_RETURN_NONE;
1448 }
Guido van Rossum34343512006-11-30 22:13:52 +00001449
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001450 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001451 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001452 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001453 sep->ob_type->tp_name);
1454 return NULL;
1455 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001456 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001457 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001458 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001459 end->ob_type->tp_name);
1460 return NULL;
1461 }
Guido van Rossum34343512006-11-30 22:13:52 +00001462
1463 for (i = 0; i < PyTuple_Size(args); i++) {
1464 if (i > 0) {
1465 if (sep == NULL || sep == Py_None)
1466 err = PyFile_WriteString(" ", file);
1467 else
1468 err = PyFile_WriteObject(sep, file,
1469 Py_PRINT_RAW);
1470 if (err)
1471 return NULL;
1472 }
1473 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1474 Py_PRINT_RAW);
1475 if (err)
1476 return NULL;
1477 }
1478
1479 if (end == NULL || end == Py_None)
1480 err = PyFile_WriteString("\n", file);
1481 else
1482 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1483 if (err)
1484 return NULL;
1485
1486 Py_RETURN_NONE;
1487}
1488
1489PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001490"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001491\n\
1492Prints the values to a stream, or to sys.stdout by default.\n\
1493Optional keyword arguments:\n\
1494file: a file-like object (stream); defaults to the current sys.stdout.\n\
1495sep: string inserted between values, default a space.\n\
1496end: string appended after the last value, default a newline.");
1497
1498
Guido van Rossuma88a0332007-02-26 16:59:55 +00001499static PyObject *
1500builtin_input(PyObject *self, PyObject *args)
1501{
Guido van Rossumeba76962007-05-27 09:13:28 +00001502 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001503 PyObject *fin = PySys_GetObject("stdin");
1504 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001505 PyObject *ferr = PySys_GetObject("stderr");
1506 PyObject *tmp;
1507 long fd;
1508 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001509
Guido van Rossumeba76962007-05-27 09:13:28 +00001510 /* Parse arguments */
1511 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001512 return NULL;
1513
Guido van Rossumeba76962007-05-27 09:13:28 +00001514 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001515 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001516 PyErr_SetString(PyExc_RuntimeError,
1517 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001518 return NULL;
1519 }
Christian Heimes2be03732007-11-15 02:26:46 +00001520 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001521 PyErr_SetString(PyExc_RuntimeError,
1522 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001523 return NULL;
1524 }
Christian Heimes2be03732007-11-15 02:26:46 +00001525 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001526 PyErr_SetString(PyExc_RuntimeError,
1527 "input(): lost sys.stderr");
1528 return NULL;
1529 }
1530
1531 /* First of all, flush stderr */
1532 tmp = PyObject_CallMethod(ferr, "flush", "");
1533 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001534 PyErr_Clear();
1535 else
1536 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001537
1538 /* We should only use (GNU) readline if Python's sys.stdin and
1539 sys.stdout are the same as C's stdin and stdout, because we
1540 need to pass it those. */
1541 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001542 if (tmp == NULL) {
1543 PyErr_Clear();
1544 tty = 0;
1545 }
1546 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001547 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001548 Py_DECREF(tmp);
1549 if (fd < 0 && PyErr_Occurred())
1550 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001551 tty = fd == fileno(stdin) && isatty(fd);
1552 }
1553 if (tty) {
1554 tmp = PyObject_CallMethod(fout, "fileno", "");
1555 if (tmp == NULL)
1556 PyErr_Clear();
1557 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001558 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001559 Py_DECREF(tmp);
1560 if (fd < 0 && PyErr_Occurred())
1561 return NULL;
1562 tty = fd == fileno(stdout) && isatty(fd);
1563 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001564 }
1565
1566 /* If we're interactive, use (GNU) readline */
1567 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001568 PyObject *po;
1569 char *prompt;
1570 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001571 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001572 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001573
1574 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1575 if (!stdin_encoding)
1576 /* stdin is a text stream, so it must have an
1577 encoding. */
1578 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001579 tmp = PyObject_CallMethod(fout, "flush", "");
1580 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001581 PyErr_Clear();
1582 else
1583 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001584 if (promptarg != NULL) {
1585 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001586 if (po == NULL) {
1587 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001588 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001589 }
Christian Heimes91c77302007-11-25 09:18:01 +00001590 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001591 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001592 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001593 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001594 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001595 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001596 }
1597 else {
1598 po = NULL;
1599 prompt = "";
1600 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001601 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001602 Py_XDECREF(po);
1603 if (s == NULL) {
1604 if (!PyErr_Occurred())
1605 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001606 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001607 return NULL;
1608 }
1609 if (*s == '\0') {
1610 PyErr_SetNone(PyExc_EOFError);
1611 result = NULL;
1612 }
1613 else { /* strip trailing '\n' */
1614 size_t len = strlen(s);
1615 if (len > PY_SSIZE_T_MAX) {
1616 PyErr_SetString(PyExc_OverflowError,
1617 "input: input too long");
1618 result = NULL;
1619 }
1620 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001621 result = PyUnicode_Decode
1622 (s, len-1,
1623 PyUnicode_AsString(stdin_encoding),
1624 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001625 }
1626 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001627 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001628 PyMem_FREE(s);
1629 return result;
1630 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001631
1632 /* Fallback if we're not interactive */
1633 if (promptarg != NULL) {
1634 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001635 return NULL;
1636 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001637 tmp = PyObject_CallMethod(fout, "flush", "");
1638 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001639 PyErr_Clear();
1640 else
1641 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001642 return PyFile_GetLine(fin, -1);
1643}
1644
1645PyDoc_STRVAR(input_doc,
1646"input([prompt]) -> string\n\
1647\n\
1648Read a string from standard input. The trailing newline is stripped.\n\
1649If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1650On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1651is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001652
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001653
Guido van Rossum79f25d91997-04-29 20:08:16 +00001654static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001655builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001656{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001657 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001658}
1659
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001660PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001661"repr(object) -> string\n\
1662\n\
1663Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001664For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001665
1666
Guido van Rossum79f25d91997-04-29 20:08:16 +00001667static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001668builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001669{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001670#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1671 static PyObject *round_str = NULL;
1672 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001673 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001674 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001675
Alex Martelliae211f92007-08-22 23:21:33 +00001676 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001677 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001678 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001679
Christian Heimes90aa7642007-12-19 02:45:37 +00001680 if (Py_TYPE(number)->tp_dict == NULL) {
1681 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001682 return NULL;
1683 }
1684
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001685 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001686 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001687 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001688 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001689 }
1690
Christian Heimes90aa7642007-12-19 02:45:37 +00001691 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001692 if (round == NULL) {
1693 PyErr_Format(PyExc_TypeError,
1694 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001695 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001696 return NULL;
1697 }
1698
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001699 if (ndigits == UNDEF_NDIGITS)
1700 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001701 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001702 return PyObject_CallFunction(round, "Oi", number, ndigits);
1703#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001704}
1705
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001706PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001707"round(number[, ndigits]) -> floating point number\n\
1708\n\
1709Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001710This returns an int when called with one argument, otherwise a float.\n\
1711Precision may be negative.");
1712
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001713
Raymond Hettinger64958a12003-12-17 20:43:33 +00001714static PyObject *
1715builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1716{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001717 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001718 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001719 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001720 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001721
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001722 /* args 1-3 should match listsort in Objects/listobject.c */
1723 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1724 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001725 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001726
1727 newlist = PySequence_List(seq);
1728 if (newlist == NULL)
1729 return NULL;
1730
1731 callable = PyObject_GetAttrString(newlist, "sort");
1732 if (callable == NULL) {
1733 Py_DECREF(newlist);
1734 return NULL;
1735 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001736
Raymond Hettinger64958a12003-12-17 20:43:33 +00001737 newargs = PyTuple_GetSlice(args, 1, 4);
1738 if (newargs == NULL) {
1739 Py_DECREF(newlist);
1740 Py_DECREF(callable);
1741 return NULL;
1742 }
1743
1744 v = PyObject_Call(callable, newargs, kwds);
1745 Py_DECREF(newargs);
1746 Py_DECREF(callable);
1747 if (v == NULL) {
1748 Py_DECREF(newlist);
1749 return NULL;
1750 }
1751 Py_DECREF(v);
1752 return newlist;
1753}
1754
1755PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001756"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001757
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001759builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001760{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001761 PyObject *v = NULL;
1762 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001763
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001764 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001765 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001766 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001767 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001768 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001769 if (!PyErr_Occurred())
1770 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001771 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001772 }
1773 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001774 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001775 }
1776 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001777 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001778 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001780 "vars() argument must have __dict__ attribute");
1781 return NULL;
1782 }
1783 }
1784 return d;
1785}
1786
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001787PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001788"vars([object]) -> dictionary\n\
1789\n\
1790Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001791With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001792
Alex Martellia70b1912003-04-22 08:12:33 +00001793static PyObject*
1794builtin_sum(PyObject *self, PyObject *args)
1795{
1796 PyObject *seq;
1797 PyObject *result = NULL;
1798 PyObject *temp, *item, *iter;
1799
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001800 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001801 return NULL;
1802
1803 iter = PyObject_GetIter(seq);
1804 if (iter == NULL)
1805 return NULL;
1806
1807 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001808 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001809 if (result == NULL) {
1810 Py_DECREF(iter);
1811 return NULL;
1812 }
1813 } else {
1814 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001815 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001816 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001817 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001818 Py_DECREF(iter);
1819 return NULL;
1820 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001821 if (PyBytes_Check(result)) {
1822 PyErr_SetString(PyExc_TypeError,
1823 "sum() can't sum bytes [use b''.join(seq) instead]");
1824 Py_DECREF(iter);
1825 return NULL;
1826 }
1827
Alex Martelli41c9f882003-04-22 09:24:48 +00001828 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001829 }
1830
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001831#ifndef SLOW_SUM
1832 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1833 Assumes all inputs are the same type. If the assumption fails, default
1834 to the more general routine.
1835 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001836 if (PyLong_CheckExact(result)) {
1837 int overflow;
1838 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1839 /* If this already overflowed, don't even enter the loop. */
1840 if (overflow == 0) {
1841 Py_DECREF(result);
1842 result = NULL;
1843 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001844 while(result == NULL) {
1845 item = PyIter_Next(iter);
1846 if (item == NULL) {
1847 Py_DECREF(iter);
1848 if (PyErr_Occurred())
1849 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001850 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001851 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001852 if (PyLong_CheckExact(item)) {
1853 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001854 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001855 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001856 i_result = x;
1857 Py_DECREF(item);
1858 continue;
1859 }
1860 }
1861 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001862 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001863 temp = PyNumber_Add(result, item);
1864 Py_DECREF(result);
1865 Py_DECREF(item);
1866 result = temp;
1867 if (result == NULL) {
1868 Py_DECREF(iter);
1869 return NULL;
1870 }
1871 }
1872 }
1873
1874 if (PyFloat_CheckExact(result)) {
1875 double f_result = PyFloat_AS_DOUBLE(result);
1876 Py_DECREF(result);
1877 result = NULL;
1878 while(result == NULL) {
1879 item = PyIter_Next(iter);
1880 if (item == NULL) {
1881 Py_DECREF(iter);
1882 if (PyErr_Occurred())
1883 return NULL;
1884 return PyFloat_FromDouble(f_result);
1885 }
1886 if (PyFloat_CheckExact(item)) {
1887 PyFPE_START_PROTECT("add", return 0)
1888 f_result += PyFloat_AS_DOUBLE(item);
1889 PyFPE_END_PROTECT(f_result)
1890 Py_DECREF(item);
1891 continue;
1892 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001893 if (PyLong_CheckExact(item)) {
1894 long value;
1895 int overflow;
1896 value = PyLong_AsLongAndOverflow(item, &overflow);
1897 if (!overflow) {
1898 PyFPE_START_PROTECT("add", return 0)
1899 f_result += (double)value;
1900 PyFPE_END_PROTECT(f_result)
1901 Py_DECREF(item);
1902 continue;
1903 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001904 }
1905 result = PyFloat_FromDouble(f_result);
1906 temp = PyNumber_Add(result, item);
1907 Py_DECREF(result);
1908 Py_DECREF(item);
1909 result = temp;
1910 if (result == NULL) {
1911 Py_DECREF(iter);
1912 return NULL;
1913 }
1914 }
1915 }
1916#endif
1917
Alex Martellia70b1912003-04-22 08:12:33 +00001918 for(;;) {
1919 item = PyIter_Next(iter);
1920 if (item == NULL) {
1921 /* error, or end-of-sequence */
1922 if (PyErr_Occurred()) {
1923 Py_DECREF(result);
1924 result = NULL;
1925 }
1926 break;
1927 }
Alex Martellia253e182003-10-25 23:24:14 +00001928 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001929 Py_DECREF(result);
1930 Py_DECREF(item);
1931 result = temp;
1932 if (result == NULL)
1933 break;
1934 }
1935 Py_DECREF(iter);
1936 return result;
1937}
1938
1939PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001940"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001941\n\
1942Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001943of parameter 'start' (which defaults to 0). When the sequence is\n\
1944empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001945
1946
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001947static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001948builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001949{
1950 PyObject *inst;
1951 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001952 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001953
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001954 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001955 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001956
Guido van Rossum823649d2001-03-21 18:40:58 +00001957 retval = PyObject_IsInstance(inst, cls);
1958 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001959 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001960 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001961}
1962
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001963PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001964"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001965\n\
1966Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001967With a type as second argument, return whether that is the object's type.\n\
1968The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001969isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001970
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001971
1972static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001973builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001974{
1975 PyObject *derived;
1976 PyObject *cls;
1977 int retval;
1978
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001979 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001980 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001981
Guido van Rossum823649d2001-03-21 18:40:58 +00001982 retval = PyObject_IsSubclass(derived, cls);
1983 if (retval < 0)
1984 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001985 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001986}
1987
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001988PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001989"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001990\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001991Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1992When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1993is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001994
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001995
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00001996typedef struct {
1997 PyObject_HEAD
1998 Py_ssize_t tuplesize;
1999 PyObject *ittuple; /* tuple of iterators */
2000 PyObject *result;
2001} zipobject;
2002
2003PyTypeObject PyZip_Type;
2004
2005static PyObject *
2006zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00002007{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002008 zipobject *lz;
2009 Py_ssize_t i;
2010 PyObject *ittuple; /* tuple of iterators */
2011 PyObject *result;
2012 Py_ssize_t tuplesize = PySequence_Length(args);
2013
2014 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
2015 return NULL;
2016
Guido van Rossumb65fb332006-08-25 23:26:40 +00002017 /* args must be a tuple */
2018 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00002019
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002020 /* obtain iterators */
2021 ittuple = PyTuple_New(tuplesize);
2022 if (ittuple == NULL)
2023 return NULL;
2024 for (i=0; i < tuplesize; ++i) {
2025 PyObject *item = PyTuple_GET_ITEM(args, i);
2026 PyObject *it = PyObject_GetIter(item);
2027 if (it == NULL) {
2028 if (PyErr_ExceptionMatches(PyExc_TypeError))
2029 PyErr_Format(PyExc_TypeError,
2030 "zip argument #%zd must support iteration",
2031 i+1);
2032 Py_DECREF(ittuple);
2033 return NULL;
2034 }
2035 PyTuple_SET_ITEM(ittuple, i, it);
2036 }
2037
2038 /* create a result holder */
2039 result = PyTuple_New(tuplesize);
2040 if (result == NULL) {
2041 Py_DECREF(ittuple);
2042 return NULL;
2043 }
2044 for (i=0 ; i < tuplesize ; i++) {
2045 Py_INCREF(Py_None);
2046 PyTuple_SET_ITEM(result, i, Py_None);
2047 }
2048
2049 /* create zipobject structure */
2050 lz = (zipobject *)type->tp_alloc(type, 0);
2051 if (lz == NULL) {
2052 Py_DECREF(ittuple);
2053 Py_DECREF(result);
2054 return NULL;
2055 }
2056 lz->ittuple = ittuple;
2057 lz->tuplesize = tuplesize;
2058 lz->result = result;
2059
2060 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002061}
2062
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002063static void
2064zip_dealloc(zipobject *lz)
2065{
2066 PyObject_GC_UnTrack(lz);
2067 Py_XDECREF(lz->ittuple);
2068 Py_XDECREF(lz->result);
2069 Py_TYPE(lz)->tp_free(lz);
2070}
2071
2072static int
2073zip_traverse(zipobject *lz, visitproc visit, void *arg)
2074{
2075 Py_VISIT(lz->ittuple);
2076 Py_VISIT(lz->result);
2077 return 0;
2078}
2079
2080static PyObject *
2081zip_next(zipobject *lz)
2082{
2083 Py_ssize_t i;
2084 Py_ssize_t tuplesize = lz->tuplesize;
2085 PyObject *result = lz->result;
2086 PyObject *it;
2087 PyObject *item;
2088 PyObject *olditem;
2089
2090 if (tuplesize == 0)
2091 return NULL;
2092 if (Py_REFCNT(result) == 1) {
2093 Py_INCREF(result);
2094 for (i=0 ; i < tuplesize ; i++) {
2095 it = PyTuple_GET_ITEM(lz->ittuple, i);
2096 assert(PyIter_Check(it));
2097 item = (*Py_TYPE(it)->tp_iternext)(it);
2098 if (item == NULL) {
2099 Py_DECREF(result);
2100 return NULL;
2101 }
2102 olditem = PyTuple_GET_ITEM(result, i);
2103 PyTuple_SET_ITEM(result, i, item);
2104 Py_DECREF(olditem);
2105 }
2106 } else {
2107 result = PyTuple_New(tuplesize);
2108 if (result == NULL)
2109 return NULL;
2110 for (i=0 ; i < tuplesize ; i++) {
2111 it = PyTuple_GET_ITEM(lz->ittuple, i);
2112 assert(PyIter_Check(it));
2113 item = (*Py_TYPE(it)->tp_iternext)(it);
2114 if (item == NULL) {
2115 Py_DECREF(result);
2116 return NULL;
2117 }
2118 PyTuple_SET_ITEM(result, i, item);
2119 }
2120 }
2121 return result;
2122}
Barry Warsawbd599b52000-08-03 15:45:29 +00002123
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002124PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002125"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002126\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002127Return a zip object whose .__next__() method returns a tuple where\n\
2128the i-th element comes from the i-th iterable argument. The .__next__()\n\
2129method continues until the shortest iterable in the argument sequence\n\
2130is exhausted and then it raises StopIteration. Works like the zip()\n\
2131function but consumes less memory by returning an iterator instead of\n\
2132a list.");
2133
2134PyTypeObject PyZip_Type = {
2135 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2136 "zip", /* tp_name */
2137 sizeof(zipobject), /* tp_basicsize */
2138 0, /* tp_itemsize */
2139 /* methods */
2140 (destructor)zip_dealloc, /* tp_dealloc */
2141 0, /* tp_print */
2142 0, /* tp_getattr */
2143 0, /* tp_setattr */
2144 0, /* tp_compare */
2145 0, /* tp_repr */
2146 0, /* tp_as_number */
2147 0, /* tp_as_sequence */
2148 0, /* tp_as_mapping */
2149 0, /* tp_hash */
2150 0, /* tp_call */
2151 0, /* tp_str */
2152 PyObject_GenericGetAttr, /* tp_getattro */
2153 0, /* tp_setattro */
2154 0, /* tp_as_buffer */
2155 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2156 Py_TPFLAGS_BASETYPE, /* tp_flags */
2157 zip_doc, /* tp_doc */
2158 (traverseproc)zip_traverse, /* tp_traverse */
2159 0, /* tp_clear */
2160 0, /* tp_richcompare */
2161 0, /* tp_weaklistoffset */
2162 PyObject_SelfIter, /* tp_iter */
2163 (iternextfunc)zip_next, /* tp_iternext */
2164 0, /* tp_methods */
2165 0, /* tp_members */
2166 0, /* tp_getset */
2167 0, /* tp_base */
2168 0, /* tp_dict */
2169 0, /* tp_descr_get */
2170 0, /* tp_descr_set */
2171 0, /* tp_dictoffset */
2172 0, /* tp_init */
2173 PyType_GenericAlloc, /* tp_alloc */
2174 zip_new, /* tp_new */
2175 PyObject_GC_Del, /* tp_free */
2176};
Barry Warsawbd599b52000-08-03 15:45:29 +00002177
2178
Guido van Rossum79f25d91997-04-29 20:08:16 +00002179static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002180 {"__build_class__", (PyCFunction)builtin___build_class__,
2181 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002182 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002183 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002184 {"all", builtin_all, METH_O, all_doc},
2185 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002186 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002187 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002188 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002189 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002190 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2191 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2192 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2193 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002194 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002195 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002196 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2197 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2198 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2199 {"hash", builtin_hash, METH_O, hash_doc},
2200 {"hex", builtin_hex, METH_O, hex_doc},
2201 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002202 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002203 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2204 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2205 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2206 {"len", builtin_len, METH_O, len_doc},
2207 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002208 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2209 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002210 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002211 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002212 {"ord", builtin_ord, METH_O, ord_doc},
2213 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002214 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002215 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002216 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002217 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002218 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002219 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002220 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002221 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002222};
2223
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002224PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002225"Built-in functions, exceptions, and other objects.\n\
2226\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002227Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002228
Guido van Rossum25ce5661997-08-02 03:10:38 +00002229PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002230_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002231{
Fred Drake5550de32000-06-20 04:54:19 +00002232 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00002233 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002234 builtin_doc, (PyObject *)NULL,
2235 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002236 if (mod == NULL)
2237 return NULL;
2238 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002239
Tim Peters7571a0f2003-03-23 17:52:28 +00002240#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002241 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002242 * that, before this code was added in 2.3, never showed up in
2243 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2244 * result, programs leaking references to None and False (etc)
2245 * couldn't be diagnosed by examining sys.getobjects(0).
2246 */
2247#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2248#else
2249#define ADD_TO_ALL(OBJECT) (void)0
2250#endif
2251
Tim Peters4b7625e2001-09-13 21:37:17 +00002252#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002253 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2254 return NULL; \
2255 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002256
2257 SETBUILTIN("None", Py_None);
2258 SETBUILTIN("Ellipsis", Py_Ellipsis);
2259 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002260 SETBUILTIN("False", Py_False);
2261 SETBUILTIN("True", Py_True);
2262 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002263 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00002264 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00002265 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002266 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002267#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002268 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002269#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002270 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002271 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002272 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002273 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002274 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002275 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002276 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002277 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002278 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002279 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002280 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002281 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002282 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002283 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002284 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002285 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002286 SETBUILTIN("super", &PySuper_Type);
2287 SETBUILTIN("tuple", &PyTuple_Type);
2288 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002289 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002290 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002291 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2292 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002293 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002294 }
2295 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002296
Guido van Rossum25ce5661997-08-02 03:10:38 +00002297 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002298#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002299#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002300}