blob: b3d8b160e48a9c9bd98f38eb493cfd670a3322b4 [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"
Guido van Rossum3f5da241990-12-20 15:06:42 +00004
5#include "node.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "code.h"
Guido van Rossum5b722181993-03-30 17:46:03 +00007#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00008
Guido van Rossum6bf62da1997-04-11 20:37:35 +00009#include <ctype.h>
10
Mark Hammond26cffde42001-05-14 12:17:34 +000011/* The default encoding used by the platform file system APIs
12 Can remain NULL for all platforms that don't have such a concept
Guido van Rossum00bc0e02007-10-15 02:52:41 +000013
14 Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
15 values for Py_FileSystemDefaultEncoding!
Mark Hammond26cffde42001-05-14 12:17:34 +000016*/
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000017#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
Mark Hammond26cffde42001-05-14 12:17:34 +000018const char *Py_FileSystemDefaultEncoding = "mbcs";
Christian Heimesc8967002007-11-30 10:18:26 +000019const int Py_HasFileSystemDefaultEncoding = 1;
Just van Rossumb9b8e9c2003-02-10 09:22:01 +000020#elif defined(__APPLE__)
21const char *Py_FileSystemDefaultEncoding = "utf-8";
Christian Heimesc8967002007-11-30 10:18:26 +000022const int Py_HasFileSystemDefaultEncoding = 1;
Mark Hammond26cffde42001-05-14 12:17:34 +000023#else
24const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
Christian Heimesc8967002007-11-30 10:18:26 +000025const int Py_HasFileSystemDefaultEncoding = 0;
Mark Hammond26cffde42001-05-14 12:17:34 +000026#endif
Mark Hammondef8b6542001-05-13 08:04:26 +000027
Guido van Rossum79f25d91997-04-29 20:08:16 +000028static PyObject *
Guido van Rossum52cc1d82007-03-18 15:41:51 +000029builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
30{
Guido van Rossumcd16bf62007-06-13 18:07:49 +000031 PyObject *func, *name, *bases, *mkw, *meta, *prep, *ns, *cell;
32 PyObject *cls = NULL;
Guido van Rossum52cc1d82007-03-18 15:41:51 +000033 Py_ssize_t nargs, nbases;
34
35 assert(args != NULL);
36 if (!PyTuple_Check(args)) {
37 PyErr_SetString(PyExc_TypeError,
38 "__build_class__: args is not a tuple");
39 return NULL;
40 }
41 nargs = PyTuple_GET_SIZE(args);
42 if (nargs < 2) {
43 PyErr_SetString(PyExc_TypeError,
44 "__build_class__: not enough arguments");
45 return NULL;
46 }
47 func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
48 name = PyTuple_GET_ITEM(args, 1);
Neal Norwitz6ea45d32007-08-26 04:19:43 +000049 if (!PyUnicode_Check(name)) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +000050 PyErr_SetString(PyExc_TypeError,
51 "__build_class__: name is not a string");
52 return NULL;
53 }
54 bases = PyTuple_GetSlice(args, 2, nargs);
55 if (bases == NULL)
56 return NULL;
57 nbases = nargs - 2;
58
59 if (kwds == NULL) {
60 meta = NULL;
61 mkw = NULL;
62 }
63 else {
64 mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
65 if (mkw == NULL) {
66 Py_DECREF(bases);
67 return NULL;
68 }
69 meta = PyDict_GetItemString(mkw, "metaclass");
70 if (meta != NULL) {
71 Py_INCREF(meta);
72 if (PyDict_DelItemString(mkw, "metaclass") < 0) {
73 Py_DECREF(meta);
74 Py_DECREF(mkw);
75 Py_DECREF(bases);
76 return NULL;
77 }
78 }
79 }
80 if (meta == NULL) {
81 if (PyTuple_GET_SIZE(bases) == 0)
82 meta = (PyObject *) (&PyType_Type);
83 else {
84 PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
85 meta = (PyObject *) (base0->ob_type);
86 }
87 Py_INCREF(meta);
88 }
89 prep = PyObject_GetAttrString(meta, "__prepare__");
90 if (prep == NULL) {
91 PyErr_Clear();
92 ns = PyDict_New();
93 }
94 else {
95 PyObject *pargs = Py_BuildValue("OO", name, bases);
96 if (pargs == NULL) {
97 Py_DECREF(prep);
98 Py_DECREF(meta);
99 Py_XDECREF(mkw);
100 Py_DECREF(bases);
101 return NULL;
102 }
103 ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw);
104 Py_DECREF(pargs);
105 Py_DECREF(prep);
106 if (ns == NULL) {
107 Py_DECREF(meta);
108 Py_XDECREF(mkw);
109 Py_DECREF(bases);
110 return NULL;
111 }
112 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000113 cell = PyObject_CallFunctionObjArgs(func, ns, NULL);
114 if (cell != NULL) {
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000115 PyObject *margs;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000116 margs = Py_BuildValue("OOO", name, bases, ns);
117 if (margs != NULL) {
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000118 cls = PyEval_CallObjectWithKeywords(meta, margs, mkw);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000119 Py_DECREF(margs);
120 }
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000121 if (cls != NULL && PyCell_Check(cell)) {
122 Py_INCREF(cls);
123 PyCell_SET(cell, cls);
124 }
125 Py_DECREF(cell);
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000126 }
127 Py_DECREF(ns);
128 Py_DECREF(meta);
129 Py_XDECREF(mkw);
130 Py_DECREF(bases);
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000131 return cls;
Guido van Rossum52cc1d82007-03-18 15:41:51 +0000132}
133
134PyDoc_STRVAR(build_class_doc,
135"__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
136\n\
137Internal helper function used by the class statement.");
138
139static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000140builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000141{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000142 static char *kwlist[] = {"name", "globals", "locals", "fromlist",
143 "level", 0};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000144 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000145 PyObject *globals = NULL;
146 PyObject *locals = NULL;
147 PyObject *fromlist = NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000148 int level = -1;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000150 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|OOOi:__import__",
151 kwlist, &name, &globals, &locals, &fromlist, &level))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000152 return NULL;
Thomas Woutersf7f438b2006-02-28 16:09:29 +0000153 return PyImport_ImportModuleLevel(name, globals, locals,
154 fromlist, level);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000155}
156
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000157PyDoc_STRVAR(import_doc,
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000158"__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000159\n\
160Import a module. The globals are only used to determine the context;\n\
161they are not modified. The locals are currently unused. The fromlist\n\
162should be a list of names to emulate ``from name import ...'', or an\n\
163empty list to emulate ``import name''.\n\
164When importing a module from a package, note that __import__('A.B', ...)\n\
165returns package A when fromlist is empty, but its submodule B when\n\
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000166fromlist is not empty. Level is used to determine whether to perform \n\
167absolute or relative imports. -1 is the original strategy of attempting\n\
168both absolute and relative imports, 0 is absolute, a positive number\n\
169is the number of parent directories to search relative to the current module.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000170
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000171
Guido van Rossum79f25d91997-04-29 20:08:16 +0000172static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000173builtin_abs(PyObject *self, PyObject *v)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000174{
Guido van Rossum09df08a1998-05-22 00:51:39 +0000175 return PyNumber_Absolute(v);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000176}
177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000178PyDoc_STRVAR(abs_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000179"abs(number) -> number\n\
180\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000181Return the absolute value of the argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000182
Raymond Hettinger96229b12005-03-11 06:49:40 +0000183static PyObject *
184builtin_all(PyObject *self, PyObject *v)
185{
186 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000187 PyObject *(*iternext)(PyObject *);
188 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000189
190 it = PyObject_GetIter(v);
191 if (it == NULL)
192 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000193 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000194
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000195 for (;;) {
196 item = iternext(it);
197 if (item == NULL)
198 break;
199 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000200 Py_DECREF(item);
201 if (cmp < 0) {
202 Py_DECREF(it);
203 return NULL;
204 }
205 if (cmp == 0) {
206 Py_DECREF(it);
207 Py_RETURN_FALSE;
208 }
209 }
210 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000211 if (PyErr_Occurred()) {
212 if (PyErr_ExceptionMatches(PyExc_StopIteration))
213 PyErr_Clear();
214 else
215 return NULL;
216 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000217 Py_RETURN_TRUE;
218}
219
220PyDoc_STRVAR(all_doc,
221"all(iterable) -> bool\n\
222\n\
223Return True if bool(x) is True for all values x in the iterable.");
224
225static PyObject *
226builtin_any(PyObject *self, PyObject *v)
227{
228 PyObject *it, *item;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000229 PyObject *(*iternext)(PyObject *);
230 int cmp;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000231
232 it = PyObject_GetIter(v);
233 if (it == NULL)
234 return NULL;
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000235 iternext = *Py_TYPE(it)->tp_iternext;
Raymond Hettinger96229b12005-03-11 06:49:40 +0000236
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000237 for (;;) {
238 item = iternext(it);
239 if (item == NULL)
240 break;
241 cmp = PyObject_IsTrue(item);
Raymond Hettinger96229b12005-03-11 06:49:40 +0000242 Py_DECREF(item);
243 if (cmp < 0) {
244 Py_DECREF(it);
245 return NULL;
246 }
247 if (cmp == 1) {
248 Py_DECREF(it);
249 Py_RETURN_TRUE;
250 }
251 }
252 Py_DECREF(it);
Christian Heimes5fb7c2a2007-12-24 08:52:31 +0000253 if (PyErr_Occurred()) {
254 if (PyErr_ExceptionMatches(PyExc_StopIteration))
255 PyErr_Clear();
256 else
257 return NULL;
258 }
Raymond Hettinger96229b12005-03-11 06:49:40 +0000259 Py_RETURN_FALSE;
260}
261
262PyDoc_STRVAR(any_doc,
263"any(iterable) -> bool\n\
264\n\
265Return True if bool(x) is True for any x in the iterable.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000266
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000267
Guido van Rossum79f25d91997-04-29 20:08:16 +0000268static PyObject *
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000269builtin_bin(PyObject *self, PyObject *v)
270{
271 return PyNumber_ToBase(v, 2);
272}
273
274PyDoc_STRVAR(bin_doc,
275"bin(number) -> string\n\
276\n\
277Return the binary representation of an integer or long integer.");
278
279
Raymond Hettinger17301e92008-03-13 00:19:26 +0000280typedef struct {
281 PyObject_HEAD
282 PyObject *func;
283 PyObject *it;
284} filterobject;
285
286PyTypeObject PyFilter_Type;
287
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000288static PyObject *
Raymond Hettinger17301e92008-03-13 00:19:26 +0000289filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000290{
Raymond Hettinger17301e92008-03-13 00:19:26 +0000291 PyObject *func, *seq;
292 PyObject *it;
293 filterobject *lz;
294
295 if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000296 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000297
298 if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
Georg Brandle35b6572005-07-19 22:20:20 +0000299 return NULL;
Raymond Hettinger17301e92008-03-13 00:19:26 +0000300
301 /* Get iterator. */
302 it = PyObject_GetIter(seq);
303 if (it == NULL)
304 return NULL;
305
306 /* create filterobject structure */
307 lz = (filterobject *)type->tp_alloc(type, 0);
308 if (lz == NULL) {
309 Py_DECREF(it);
310 return NULL;
311 }
312 Py_INCREF(func);
313 lz->func = func;
314 lz->it = it;
315
316 return (PyObject *)lz;
317}
318
319static void
320filter_dealloc(filterobject *lz)
321{
322 PyObject_GC_UnTrack(lz);
323 Py_XDECREF(lz->func);
324 Py_XDECREF(lz->it);
325 Py_TYPE(lz)->tp_free(lz);
326}
327
328static int
329filter_traverse(filterobject *lz, visitproc visit, void *arg)
330{
331 Py_VISIT(lz->it);
332 Py_VISIT(lz->func);
333 return 0;
334}
335
336static PyObject *
337filter_next(filterobject *lz)
338{
339 PyObject *item;
340 PyObject *it = lz->it;
341 long ok;
342 PyObject *(*iternext)(PyObject *);
343
344 assert(PyIter_Check(it));
345 iternext = *Py_TYPE(it)->tp_iternext;
346 for (;;) {
347 item = iternext(it);
348 if (item == NULL)
349 return NULL;
350
351 if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) {
352 ok = PyObject_IsTrue(item);
353 } else {
354 PyObject *good;
355 good = PyObject_CallFunctionObjArgs(lz->func,
356 item, NULL);
357 if (good == NULL) {
358 Py_DECREF(item);
359 return NULL;
360 }
361 ok = PyObject_IsTrue(good);
362 Py_DECREF(good);
363 }
364 if (ok)
365 return item;
366 Py_DECREF(item);
367 }
Guido van Rossum12d12c51993-10-26 17:58:25 +0000368}
369
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000370PyDoc_STRVAR(filter_doc,
Raymond Hettinger17301e92008-03-13 00:19:26 +0000371"filter(function or None, sequence) --> filter object\n\
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000372\n\
Raymond Hettinger17301e92008-03-13 00:19:26 +0000373Return an iterator yielding those items of sequence for which function(item)\n\
374is true. If function is None, return the items that are true.");
375
376PyTypeObject PyFilter_Type = {
377 PyVarObject_HEAD_INIT(&PyType_Type, 0)
378 "filter", /* tp_name */
379 sizeof(filterobject), /* tp_basicsize */
380 0, /* tp_itemsize */
381 /* methods */
382 (destructor)filter_dealloc, /* tp_dealloc */
383 0, /* tp_print */
384 0, /* tp_getattr */
385 0, /* tp_setattr */
386 0, /* tp_compare */
387 0, /* tp_repr */
388 0, /* tp_as_number */
389 0, /* tp_as_sequence */
390 0, /* tp_as_mapping */
391 0, /* tp_hash */
392 0, /* tp_call */
393 0, /* tp_str */
394 PyObject_GenericGetAttr, /* tp_getattro */
395 0, /* tp_setattro */
396 0, /* tp_as_buffer */
397 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
398 Py_TPFLAGS_BASETYPE, /* tp_flags */
399 filter_doc, /* tp_doc */
400 (traverseproc)filter_traverse, /* tp_traverse */
401 0, /* tp_clear */
402 0, /* tp_richcompare */
403 0, /* tp_weaklistoffset */
404 PyObject_SelfIter, /* tp_iter */
405 (iternextfunc)filter_next, /* tp_iternext */
406 0, /* tp_methods */
407 0, /* tp_members */
408 0, /* tp_getset */
409 0, /* tp_base */
410 0, /* tp_dict */
411 0, /* tp_descr_get */
412 0, /* tp_descr_set */
413 0, /* tp_dictoffset */
414 0, /* tp_init */
415 PyType_GenericAlloc, /* tp_alloc */
416 filter_new, /* tp_new */
417 PyObject_GC_Del, /* tp_free */
418};
419
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000420
Eric Smith8c663262007-08-25 02:26:07 +0000421static PyObject *
422builtin_format(PyObject *self, PyObject *args)
423{
Christian Heimes94b7d3d2007-12-11 20:20:39 +0000424 PyObject *value;
Eric Smith8fd3eba2008-02-17 19:48:00 +0000425 PyObject *format_spec = NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000426
Eric Smith8fd3eba2008-02-17 19:48:00 +0000427 if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec))
428 return NULL;
Eric Smith8c663262007-08-25 02:26:07 +0000429
Eric Smith8fd3eba2008-02-17 19:48:00 +0000430 return PyObject_Format(value, format_spec);
Eric Smith8c663262007-08-25 02:26:07 +0000431}
432
Eric Smith8c663262007-08-25 02:26:07 +0000433PyDoc_STRVAR(format_doc,
Eric Smith81936692007-08-31 01:14:01 +0000434"format(value[, format_spec]) -> string\n\
Eric Smith8c663262007-08-25 02:26:07 +0000435\n\
Eric Smith81936692007-08-31 01:14:01 +0000436Returns value.__format__(format_spec)\n\
437format_spec defaults to \"\"");
438
Guido van Rossum7fcf2242007-05-04 17:43:11 +0000439static PyObject *
Walter Dörwalde7efd592007-06-05 20:07:21 +0000440builtin_chr(PyObject *self, PyObject *args)
Guido van Rossum09095f32000-03-10 23:00:52 +0000441{
442 long x;
Guido van Rossum09095f32000-03-10 23:00:52 +0000443
Walter Dörwalde7efd592007-06-05 20:07:21 +0000444 if (!PyArg_ParseTuple(args, "l:chr", &x))
Guido van Rossum09095f32000-03-10 23:00:52 +0000445 return NULL;
Fredrik Lundh0dcf67e2001-06-26 20:01:56 +0000446
Marc-André Lemburgcc8764c2002-08-11 12:23:04 +0000447 return PyUnicode_FromOrdinal(x);
Guido van Rossum09095f32000-03-10 23:00:52 +0000448}
449
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000450PyDoc_VAR(chr_doc) = PyDoc_STR(
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000451"chr(i) -> Unicode character\n\
Guido van Rossum09095f32000-03-10 23:00:52 +0000452\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000453Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000454)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000455#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000456PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000457"\nIf 0x10000 <= i, a surrogate pair is returned."
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000458)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000459#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +0000460;
Guido van Rossum09095f32000-03-10 23:00:52 +0000461
462
463static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000464builtin_cmp(PyObject *self, PyObject *args)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000465{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000466 PyObject *a, *b;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000467 int c;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000468
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000469 if (!PyArg_UnpackTuple(args, "cmp", 2, 2, &a, &b))
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000470 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000471 if (PyObject_Cmp(a, b, &c) < 0)
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000472 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +0000473 return PyLong_FromLong((long)c);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000474}
475
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000476PyDoc_STRVAR(cmp_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000477"cmp(x, y) -> integer\n\
478\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000479Return negative if x<y, zero if x==y, positive if x>y.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000480
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000481
482static char *
483source_as_string(PyObject *cmd)
484{
485 char *str;
486 Py_ssize_t size;
487
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000488 if (PyUnicode_Check(cmd)) {
489 cmd = _PyUnicode_AsDefaultEncodedString(cmd, NULL);
490 if (cmd == NULL)
491 return NULL;
492 }
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +0000493 else if (!PyObject_CheckReadBuffer(cmd)) {
494 PyErr_SetString(PyExc_TypeError,
495 "eval()/exec() arg 1 must be a string, bytes or code object");
496 return NULL;
497 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000498 if (PyObject_AsReadBuffer(cmd, (const void **)&str, &size) < 0) {
499 return NULL;
500 }
501 if (strlen(str) != size) {
502 PyErr_SetString(PyExc_TypeError,
503 "source code string cannot contain null bytes");
504 return NULL;
505 }
506 return str;
507}
508
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509static PyObject *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000510builtin_compile(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum5b722181993-03-30 17:46:03 +0000511{
512 char *str;
513 char *filename;
514 char *startstr;
515 int start;
Tim Peters6cd6a822001-08-17 22:11:27 +0000516 int dont_inherit = 0;
517 int supplied_flags = 0;
Tim Peters5ba58662001-07-16 02:29:45 +0000518 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000519 PyObject *cmd;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000520 static char *kwlist[] = {"source", "filename", "mode", "flags",
521 "dont_inherit", NULL};
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000522
Guido van Rossumd8faa362007-04-27 19:54:29 +0000523 if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile",
524 kwlist, &cmd, &filename, &startstr,
525 &supplied_flags, &dont_inherit))
Guido van Rossum5b722181993-03-30 17:46:03 +0000526 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000527
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000528 cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000529
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000530 str = source_as_string(cmd);
531 if (str == NULL)
Just van Rossumb9b8e9c2003-02-10 09:22:01 +0000532 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000533
Guido van Rossum5b722181993-03-30 17:46:03 +0000534 if (strcmp(startstr, "exec") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000535 start = Py_file_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000536 else if (strcmp(startstr, "eval") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000537 start = Py_eval_input;
Guido van Rossum872537c1995-07-07 22:43:42 +0000538 else if (strcmp(startstr, "single") == 0)
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000539 start = Py_single_input;
Guido van Rossum5b722181993-03-30 17:46:03 +0000540 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000541 PyErr_SetString(PyExc_ValueError,
Fred Drake661ea262000-10-24 19:57:45 +0000542 "compile() arg 3 must be 'exec' or 'eval' or 'single'");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000543 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000544 }
Tim Peters6cd6a822001-08-17 22:11:27 +0000545
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000546 if (supplied_flags &
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000547 ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
Guido van Rossum4b499dd32003-02-13 22:07:59 +0000548 {
Tim Peters6cd6a822001-08-17 22:11:27 +0000549 PyErr_SetString(PyExc_ValueError,
550 "compile(): unrecognised flags");
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000551 return NULL;
Tim Peters6cd6a822001-08-17 22:11:27 +0000552 }
553 /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
554
Tim Peters6cd6a822001-08-17 22:11:27 +0000555 if (!dont_inherit) {
556 PyEval_MergeCompilerFlags(&cf);
557 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000558 return Py_CompileStringFlags(str, filename, start, &cf);
Guido van Rossum5b722181993-03-30 17:46:03 +0000559}
560
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000561PyDoc_STRVAR(compile_doc,
Tim Peters6cd6a822001-08-17 22:11:27 +0000562"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000563\n\
564Compile the source string (a Python module, statement or expression)\n\
Georg Brandl7cae87c2006-09-06 06:51:57 +0000565into a code object that can be executed by exec() or eval().\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000566The filename will be used for run-time error messages.\n\
567The mode must be 'exec' to compile a module, 'single' to compile a\n\
Tim Peters6cd6a822001-08-17 22:11:27 +0000568single (interactive) statement, or 'eval' to compile an expression.\n\
569The flags argument, if present, controls which future statements influence\n\
570the compilation of the code.\n\
571The dont_inherit argument, if non-zero, stops the compilation inheriting\n\
572the effects of any future statements in effect in the code calling\n\
573compile; if absent or zero these statements do influence the compilation,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000574in addition to any features explicitly specified.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000575
Guido van Rossum79f25d91997-04-29 20:08:16 +0000576static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000577builtin_dir(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000578{
Tim Peters5d2b77c2001-09-03 05:47:38 +0000579 PyObject *arg = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000580
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000581 if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000582 return NULL;
Tim Peters7eea37e2001-09-04 22:08:56 +0000583 return PyObject_Dir(arg);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000584}
585
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000586PyDoc_STRVAR(dir_doc,
Tim Peters5d2b77c2001-09-03 05:47:38 +0000587"dir([object]) -> list of strings\n"
588"\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000589"If called without an argument, return the names in the current scope.\n"
590"Else, return an alphabetized list of names comprising (some of) the attributes\n"
591"of the given object, and of attributes reachable from it.\n"
592"If the object supplies a method named __dir__, it will be used; otherwise\n"
593"the default dir() logic is used and returns:\n"
594" for a module object: the module's attributes.\n"
595" for a class object: its attributes, and recursively the attributes\n"
596" of its bases.\n"
Guido van Rossumd8faa362007-04-27 19:54:29 +0000597" for any other object: its attributes, its class's attributes, and\n"
Georg Brandle32b4222007-03-10 22:13:27 +0000598" recursively the attributes of its class's base classes.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000599
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000601builtin_divmod(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000602{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 PyObject *v, *w;
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000604
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000605 if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w))
Guido van Rossum6a00cd81995-01-07 12:39:01 +0000606 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +0000607 return PyNumber_Divmod(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000608}
609
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000610PyDoc_STRVAR(divmod_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000611"divmod(x, y) -> (div, mod)\n\
612\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000613Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000614
615
Guido van Rossum79f25d91997-04-29 20:08:16 +0000616static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000617builtin_eval(PyObject *self, PyObject *args)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000618{
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000619 PyObject *cmd, *result, *tmp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000620 PyObject *globals = Py_None, *locals = Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621 char *str;
Tim Peters9fa96be2001-08-17 23:04:59 +0000622 PyCompilerFlags cf;
Guido van Rossum590baa41993-11-30 13:40:46 +0000623
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000624 if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000625 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000626 if (locals != Py_None && !PyMapping_Check(locals)) {
627 PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000628 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000629 }
630 if (globals != Py_None && !PyDict_Check(globals)) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +0000631 PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000632 "globals must be a real dict; try eval(expr, {}, mapping)"
633 : "globals must be a dict");
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000634 return NULL;
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000635 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 if (globals == Py_None) {
637 globals = PyEval_GetGlobals();
638 if (locals == Py_None)
639 locals = PyEval_GetLocals();
Guido van Rossum6135a871995-01-09 17:53:26 +0000640 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 else if (locals == Py_None)
Guido van Rossum6135a871995-01-09 17:53:26 +0000642 locals = globals;
Tim Peters9fa96be2001-08-17 23:04:59 +0000643
Georg Brandl77c85e62005-09-15 10:46:13 +0000644 if (globals == NULL || locals == NULL) {
645 PyErr_SetString(PyExc_TypeError,
646 "eval must be given globals and locals "
647 "when called without a frame");
648 return NULL;
649 }
650
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
652 if (PyDict_SetItemString(globals, "__builtins__",
653 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000654 return NULL;
655 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000656
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000657 if (PyCode_Check(cmd)) {
Jeremy Hylton733c8932001-12-13 19:51:56 +0000658 if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) {
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000659 PyErr_SetString(PyExc_TypeError,
660 "code object passed to eval() may not contain free variables");
661 return NULL;
662 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000663 return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
Jeremy Hylton15c1c4f2001-07-30 21:50:55 +0000664 }
Tim Peters9fa96be2001-08-17 23:04:59 +0000665
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000666 str = source_as_string(cmd);
667 if (str == NULL)
Guido van Rossum94390a41992-08-14 15:14:30 +0000668 return NULL;
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000669
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000670 while (*str == ' ' || *str == '\t')
671 str++;
Tim Peters9fa96be2001-08-17 23:04:59 +0000672
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000673 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Tim Peters9fa96be2001-08-17 23:04:59 +0000674 (void)PyEval_MergeCompilerFlags(&cf);
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000675 result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
676 Py_XDECREF(tmp);
677 return result;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000678}
679
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000680PyDoc_STRVAR(eval_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000681"eval(source[, globals[, locals]]) -> value\n\
682\n\
683Evaluate the source in the context of globals and locals.\n\
684The source may be a string representing a Python expression\n\
685or a code object as returned by compile().\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +0000686The globals must be a dictionary and locals can be any mapping,\n\
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000687defaulting to the current globals and locals.\n\
688If only globals is given, locals defaults to it.\n");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000689
Georg Brandl7cae87c2006-09-06 06:51:57 +0000690static PyObject *
691builtin_exec(PyObject *self, PyObject *args)
692{
693 PyObject *v;
694 PyObject *prog, *globals = Py_None, *locals = Py_None;
695 int plain = 0;
696
697 if (!PyArg_ParseTuple(args, "O|OO:exec", &prog, &globals, &locals))
698 return NULL;
699
700 if (globals == Py_None) {
701 globals = PyEval_GetGlobals();
702 if (locals == Py_None) {
703 locals = PyEval_GetLocals();
704 plain = 1;
705 }
706 if (!globals || !locals) {
707 PyErr_SetString(PyExc_SystemError,
708 "globals and locals cannot be NULL");
709 return NULL;
710 }
711 }
712 else if (locals == Py_None)
713 locals = globals;
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000714 if (!PyUnicode_Check(prog) &&
Guido van Rossumda5b8f22007-06-12 23:30:11 +0000715 !PyCode_Check(prog)) {
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716 PyErr_Format(PyExc_TypeError,
717 "exec() arg 1 must be a string, file, or code "
718 "object, not %.100s", prog->ob_type->tp_name);
719 return NULL;
720 }
721 if (!PyDict_Check(globals)) {
722 PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s",
723 globals->ob_type->tp_name);
724 return NULL;
725 }
726 if (!PyMapping_Check(locals)) {
727 PyErr_Format(PyExc_TypeError,
728 "arg 3 must be a mapping or None, not %.100s",
729 locals->ob_type->tp_name);
730 return NULL;
731 }
732 if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
733 if (PyDict_SetItemString(globals, "__builtins__",
734 PyEval_GetBuiltins()) != 0)
735 return NULL;
736 }
737
738 if (PyCode_Check(prog)) {
739 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
740 PyErr_SetString(PyExc_TypeError,
741 "code object passed to exec() may not "
742 "contain free variables");
743 return NULL;
744 }
745 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
746 }
Georg Brandl7cae87c2006-09-06 06:51:57 +0000747 else {
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000748 char *str = source_as_string(prog);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000749 PyCompilerFlags cf;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000750 if (str == NULL)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000751 return NULL;
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000752 cf.cf_flags = PyCF_SOURCE_IS_UTF8;
Georg Brandl7cae87c2006-09-06 06:51:57 +0000753 if (PyEval_MergeCompilerFlags(&cf))
754 v = PyRun_StringFlags(str, Py_file_input, globals,
755 locals, &cf);
756 else
757 v = PyRun_String(str, Py_file_input, globals, locals);
Georg Brandl7cae87c2006-09-06 06:51:57 +0000758 }
759 if (v == NULL)
760 return NULL;
761 Py_DECREF(v);
762 Py_RETURN_NONE;
763}
764
765PyDoc_STRVAR(exec_doc,
766"exec(object[, globals[, locals]])\n\
767\n\
768Read and execute code from a object, which can be a string, a code\n\
769object or a file object.\n\
770The globals and locals are dictionaries, defaulting to the current\n\
771globals and locals. If only globals is given, locals defaults to it.");
772
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000773
Guido van Rossum79f25d91997-04-29 20:08:16 +0000774static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000775builtin_getattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +0000776{
Neal Norwitz6ea45d32007-08-26 04:19:43 +0000777 PyObject *v, *result, *dflt = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000780 if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
Guido van Rossum33894be1992-01-27 16:53:09 +0000781 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000782
Martin v. Löwis5b222132007-06-10 09:51:05 +0000783 if (!PyUnicode_Check(name)) {
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000784 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000785 "getattr(): attribute name must be string");
Jeremy Hylton0eb11152001-07-30 22:39:31 +0000786 return NULL;
787 }
Guido van Rossum950ff291998-06-29 13:38:57 +0000788 result = PyObject_GetAttr(v, name);
Guido van Rossumd8923572001-10-16 21:31:32 +0000789 if (result == NULL && dflt != NULL &&
790 PyErr_ExceptionMatches(PyExc_AttributeError))
791 {
Guido van Rossum950ff291998-06-29 13:38:57 +0000792 PyErr_Clear();
793 Py_INCREF(dflt);
794 result = dflt;
795 }
796 return result;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000797}
798
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000799PyDoc_STRVAR(getattr_doc,
Guido van Rossum950ff291998-06-29 13:38:57 +0000800"getattr(object, name[, default]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000801\n\
Guido van Rossum950ff291998-06-29 13:38:57 +0000802Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
803When a default argument is given, it is returned when the attribute doesn't\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000804exist; without it, an exception is raised in that case.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000805
806
Guido van Rossum79f25d91997-04-29 20:08:16 +0000807static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000808builtin_globals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +0000809{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000810 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +0000811
Guido van Rossum79f25d91997-04-29 20:08:16 +0000812 d = PyEval_GetGlobals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000813 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +0000814 return d;
815}
816
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000817PyDoc_STRVAR(globals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000818"globals() -> dictionary\n\
819\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000820Return the dictionary containing the current scope's global variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000821
822
Guido van Rossum79f25d91997-04-29 20:08:16 +0000823static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000824builtin_hasattr(PyObject *self, PyObject *args)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000825{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000826 PyObject *v;
827 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000828
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000829 if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name))
Guido van Rossum9bfef441993-03-29 10:43:31 +0000830 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000831 if (!PyUnicode_Check(name)) {
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000832 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +0000833 "hasattr(): attribute name must be string");
Jeremy Hylton302b54a2001-07-30 22:45:19 +0000834 return NULL;
835 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000836 v = PyObject_GetAttr(v, name);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000837 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000838 PyErr_Clear();
Guido van Rossum09df08a1998-05-22 00:51:39 +0000839 Py_INCREF(Py_False);
840 return Py_False;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000841 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 Py_DECREF(v);
Guido van Rossum09df08a1998-05-22 00:51:39 +0000843 Py_INCREF(Py_True);
844 return Py_True;
Guido van Rossum33894be1992-01-27 16:53:09 +0000845}
846
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000847PyDoc_STRVAR(hasattr_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +0000848"hasattr(object, name) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000849\n\
850Return whether the object has an attribute with the given name.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000851(This is done by calling getattr(object, name) and catching exceptions.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000852
853
Guido van Rossum79f25d91997-04-29 20:08:16 +0000854static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +0000855builtin_id(PyObject *self, PyObject *v)
Guido van Rossum5b722181993-03-30 17:46:03 +0000856{
Guido van Rossum106f2da2000-06-28 21:12:25 +0000857 return PyLong_FromVoidPtr(v);
Guido van Rossum5b722181993-03-30 17:46:03 +0000858}
859
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000860PyDoc_STRVAR(id_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000861"id(object) -> integer\n\
862\n\
863Return the identity of an object. This is guaranteed to be unique among\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000864simultaneously existing objects. (Hint: it's the object's memory address.)");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000865
866
Raymond Hettingera6c60372008-03-13 01:26:19 +0000867/* map object ************************************************************/
868
869typedef struct {
870 PyObject_HEAD
871 PyObject *iters;
872 PyObject *func;
873} mapobject;
874
875PyTypeObject PyMap_Type;
876
Guido van Rossum79f25d91997-04-29 20:08:16 +0000877static PyObject *
Raymond Hettingera6c60372008-03-13 01:26:19 +0000878map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Guido van Rossum12d12c51993-10-26 17:58:25 +0000879{
Raymond Hettingera6c60372008-03-13 01:26:19 +0000880 PyObject *it, *iters, *func;
881 mapobject *lz;
882 Py_ssize_t numargs, i;
883
884 if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
Guido van Rossum12d12c51993-10-26 17:58:25 +0000885 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000886
887 numargs = PyTuple_Size(args);
888 if (numargs < 2) {
889 PyErr_SetString(PyExc_TypeError,
890 "map() must have at least two arguments.");
Tim Peters4e9afdc2001-05-03 23:54:49 +0000891 return NULL;
Raymond Hettingera6c60372008-03-13 01:26:19 +0000892 }
893
894 iters = PyTuple_New(numargs-1);
895 if (iters == NULL)
896 return NULL;
897
898 for (i=1 ; i<numargs ; i++) {
899 /* Get iterator. */
900 it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
901 if (it == NULL) {
902 Py_DECREF(iters);
903 return NULL;
904 }
905 PyTuple_SET_ITEM(iters, i-1, it);
906 }
907
908 /* create mapobject structure */
909 lz = (mapobject *)type->tp_alloc(type, 0);
910 if (lz == NULL) {
911 Py_DECREF(iters);
912 return NULL;
913 }
914 lz->iters = iters;
915 func = PyTuple_GET_ITEM(args, 0);
916 Py_INCREF(func);
917 lz->func = func;
918
919 return (PyObject *)lz;
920}
921
922static void
923map_dealloc(mapobject *lz)
924{
925 PyObject_GC_UnTrack(lz);
926 Py_XDECREF(lz->iters);
927 Py_XDECREF(lz->func);
928 Py_TYPE(lz)->tp_free(lz);
929}
930
931static int
932map_traverse(mapobject *lz, visitproc visit, void *arg)
933{
934 Py_VISIT(lz->iters);
935 Py_VISIT(lz->func);
936 return 0;
937}
938
939static PyObject *
940map_next(mapobject *lz)
941{
942 PyObject *val;
943 PyObject *argtuple;
944 PyObject *result;
945 Py_ssize_t numargs, i;
946
947 numargs = PyTuple_Size(lz->iters);
948 argtuple = PyTuple_New(numargs);
949 if (argtuple == NULL)
950 return NULL;
951
952 for (i=0 ; i<numargs ; i++) {
953 val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
954 if (val == NULL) {
955 Py_DECREF(argtuple);
956 return NULL;
957 }
958 PyTuple_SET_ITEM(argtuple, i, val);
959 }
960 result = PyObject_Call(lz->func, argtuple, NULL);
961 Py_DECREF(argtuple);
Tim Peters4e9afdc2001-05-03 23:54:49 +0000962 return result;
Guido van Rossum12d12c51993-10-26 17:58:25 +0000963}
964
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000965PyDoc_STRVAR(map_doc,
Raymond Hettingera6c60372008-03-13 01:26:19 +0000966"map(func, *iterables) --> map object\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000967\n\
Raymond Hettingera6c60372008-03-13 01:26:19 +0000968Make an iterator that computes the function using arguments from\n\
969each of the iterables. Stops when the shortest iterable is exhausted.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +0000970
Raymond Hettingera6c60372008-03-13 01:26:19 +0000971PyTypeObject PyMap_Type = {
972 PyVarObject_HEAD_INIT(&PyType_Type, 0)
973 "map", /* tp_name */
974 sizeof(mapobject), /* tp_basicsize */
975 0, /* tp_itemsize */
976 /* methods */
977 (destructor)map_dealloc, /* tp_dealloc */
978 0, /* tp_print */
979 0, /* tp_getattr */
980 0, /* tp_setattr */
981 0, /* tp_compare */
982 0, /* tp_repr */
983 0, /* tp_as_number */
984 0, /* tp_as_sequence */
985 0, /* tp_as_mapping */
986 0, /* tp_hash */
987 0, /* tp_call */
988 0, /* tp_str */
989 PyObject_GenericGetAttr, /* tp_getattro */
990 0, /* tp_setattro */
991 0, /* tp_as_buffer */
992 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
993 Py_TPFLAGS_BASETYPE, /* tp_flags */
994 map_doc, /* tp_doc */
995 (traverseproc)map_traverse, /* tp_traverse */
996 0, /* tp_clear */
997 0, /* tp_richcompare */
998 0, /* tp_weaklistoffset */
999 PyObject_SelfIter, /* tp_iter */
1000 (iternextfunc)map_next, /* tp_iternext */
1001 0, /* tp_methods */
1002 0, /* tp_members */
1003 0, /* tp_getset */
1004 0, /* tp_base */
1005 0, /* tp_dict */
1006 0, /* tp_descr_get */
1007 0, /* tp_descr_set */
1008 0, /* tp_dictoffset */
1009 0, /* tp_init */
1010 PyType_GenericAlloc, /* tp_alloc */
1011 map_new, /* tp_new */
1012 PyObject_GC_Del, /* tp_free */
1013};
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001014
Guido van Rossum79f25d91997-04-29 20:08:16 +00001015static PyObject *
Georg Brandla18af4e2007-04-21 15:47:16 +00001016builtin_next(PyObject *self, PyObject *args)
1017{
1018 PyObject *it, *res;
1019 PyObject *def = NULL;
1020
1021 if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
1022 return NULL;
1023 if (!PyIter_Check(it)) {
1024 PyErr_Format(PyExc_TypeError,
1025 "%.200s object is not an iterator", it->ob_type->tp_name);
1026 return NULL;
1027 }
1028
1029 res = (*it->ob_type->tp_iternext)(it);
1030 if (res == NULL) {
1031 if (def) {
1032 if (PyErr_Occurred() &&
1033 !PyErr_ExceptionMatches(PyExc_StopIteration))
1034 return NULL;
1035 PyErr_Clear();
1036 Py_INCREF(def);
1037 return def;
1038 } else if (PyErr_Occurred()) {
1039 return NULL;
1040 } else {
1041 PyErr_SetNone(PyExc_StopIteration);
1042 return NULL;
1043 }
1044 }
1045 return res;
1046}
1047
1048PyDoc_STRVAR(next_doc,
1049"next(iterator[, default])\n\
1050\n\
1051Return the next item from the iterator. If default is given and the iterator\n\
1052is exhausted, it is returned instead of raising StopIteration.");
1053
1054
1055static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001056builtin_setattr(PyObject *self, PyObject *args)
Guido van Rossum33894be1992-01-27 16:53:09 +00001057{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001058 PyObject *v;
1059 PyObject *name;
1060 PyObject *value;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001062 if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value))
Guido van Rossum33894be1992-01-27 16:53:09 +00001063 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001064 if (PyObject_SetAttr(v, name, value) != 0)
Guido van Rossum33894be1992-01-27 16:53:09 +00001065 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001066 Py_INCREF(Py_None);
1067 return Py_None;
Guido van Rossum33894be1992-01-27 16:53:09 +00001068}
1069
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001070PyDoc_STRVAR(setattr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001071"setattr(object, name, value)\n\
1072\n\
1073Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074``x.y = v''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001075
1076
Guido van Rossum79f25d91997-04-29 20:08:16 +00001077static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001078builtin_delattr(PyObject *self, PyObject *args)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001079{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001080 PyObject *v;
1081 PyObject *name;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001082
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001083 if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name))
Guido van Rossum14144fc1994-08-29 12:53:40 +00001084 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001085 if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0)
Guido van Rossum14144fc1994-08-29 12:53:40 +00001086 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001087 Py_INCREF(Py_None);
1088 return Py_None;
Guido van Rossum14144fc1994-08-29 12:53:40 +00001089}
1090
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001091PyDoc_STRVAR(delattr_doc,
Guido van Rossumdf12a591998-11-23 22:13:04 +00001092"delattr(object, name)\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001093\n\
1094Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001095``del x.y''.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001096
1097
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001099builtin_hash(PyObject *self, PyObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00001100{
Guido van Rossum9bfef441993-03-29 10:43:31 +00001101 long x;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001102
Guido van Rossum79f25d91997-04-29 20:08:16 +00001103 x = PyObject_Hash(v);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001104 if (x == -1)
1105 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001106 return PyLong_FromLong(x);
Guido van Rossum9bfef441993-03-29 10:43:31 +00001107}
1108
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001109PyDoc_STRVAR(hash_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001110"hash(object) -> integer\n\
1111\n\
1112Return a hash value for the object. Two objects with the same value have\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001113the same hash value. The reverse is not necessarily true, but likely.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001114
1115
Guido van Rossum79f25d91997-04-29 20:08:16 +00001116static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001117builtin_hex(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001118{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001119 return PyNumber_ToBase(v, 16);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001120}
1121
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001122PyDoc_STRVAR(hex_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001123"hex(number) -> string\n\
1124\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001125Return the hexadecimal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001126
1127
Guido van Rossum79f25d91997-04-29 20:08:16 +00001128static PyObject *
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001129builtin_iter(PyObject *self, PyObject *args)
1130{
1131 PyObject *v, *w = NULL;
1132
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001133 if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001134 return NULL;
1135 if (w == NULL)
1136 return PyObject_GetIter(v);
1137 if (!PyCallable_Check(v)) {
1138 PyErr_SetString(PyExc_TypeError,
1139 "iter(v, w): v must be callable");
1140 return NULL;
1141 }
1142 return PyCallIter_New(v, w);
1143}
1144
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001145PyDoc_STRVAR(iter_doc,
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001146"iter(collection) -> iterator\n\
1147iter(callable, sentinel) -> iterator\n\
1148\n\
1149Get an iterator from an object. In the first form, the argument must\n\
1150supply its own iterator, or be a sequence.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001151In the second form, the callable is called until it returns the sentinel.");
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001152
1153
1154static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001155builtin_len(PyObject *self, PyObject *v)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001156{
Martin v. Löwis18e16552006-02-15 17:27:45 +00001157 Py_ssize_t res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001158
Jeremy Hylton03657cf2000-07-12 13:05:33 +00001159 res = PyObject_Size(v);
Guido van Rossum8ea9f4d1998-06-29 22:26:50 +00001160 if (res < 0 && PyErr_Occurred())
1161 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001162 return PyLong_FromSsize_t(res);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001163}
1164
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001165PyDoc_STRVAR(len_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001166"len(object) -> integer\n\
1167\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001168Return the number of items of a sequence or mapping.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001169
1170
Guido van Rossum79f25d91997-04-29 20:08:16 +00001171static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001172builtin_locals(PyObject *self)
Guido van Rossum872537c1995-07-07 22:43:42 +00001173{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001174 PyObject *d;
Guido van Rossum872537c1995-07-07 22:43:42 +00001175
Guido van Rossum79f25d91997-04-29 20:08:16 +00001176 d = PyEval_GetLocals();
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001177 Py_XINCREF(d);
Guido van Rossum872537c1995-07-07 22:43:42 +00001178 return d;
1179}
1180
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001181PyDoc_STRVAR(locals_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001182"locals() -> dictionary\n\
1183\n\
Raymond Hettinger69bf8f32003-01-04 02:16:22 +00001184Update and return a dictionary containing the current scope's local variables.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001185
1186
Guido van Rossum79f25d91997-04-29 20:08:16 +00001187static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001188min_max(PyObject *args, PyObject *kwds, int op)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001189{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001190 PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001191 const char *name = op == Py_LT ? "min" : "max";
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001192
Guido van Rossum79f25d91997-04-29 20:08:16 +00001193 if (PyTuple_Size(args) > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001194 v = args;
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001195 else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v))
Guido van Rossum3f5da241990-12-20 15:06:42 +00001196 return NULL;
Tim Peters67d687a2002-04-29 21:27:32 +00001197
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001198 if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) {
1199 keyfunc = PyDict_GetItemString(kwds, "key");
1200 if (PyDict_Size(kwds)!=1 || keyfunc == NULL) {
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001201 PyErr_Format(PyExc_TypeError,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001202 "%s() got an unexpected keyword argument", name);
1203 return NULL;
1204 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001205 Py_INCREF(keyfunc);
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001206 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001207
Tim Petersc3074532001-05-03 07:00:32 +00001208 it = PyObject_GetIter(v);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001209 if (it == NULL) {
1210 Py_XDECREF(keyfunc);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001211 return NULL;
Christian Heimesbbffeb62008-01-24 09:42:52 +00001212 }
Tim Petersc3074532001-05-03 07:00:32 +00001213
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001214 maxitem = NULL; /* the result */
1215 maxval = NULL; /* the value associated with the result */
Brett Cannon9e635cf2004-12-07 00:25:35 +00001216 while (( item = PyIter_Next(it) )) {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217 /* get the value from the key function */
1218 if (keyfunc != NULL) {
1219 val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
1220 if (val == NULL)
1221 goto Fail_it_item;
1222 }
1223 /* no key function; the value is the item */
1224 else {
1225 val = item;
1226 Py_INCREF(val);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001227 }
Tim Petersc3074532001-05-03 07:00:32 +00001228
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001229 /* maximum value and item are unset; set them */
1230 if (maxval == NULL) {
1231 maxitem = item;
1232 maxval = val;
1233 }
1234 /* maximum value and item are set; update them as necessary */
Guido van Rossum2d951851994-08-29 12:52:16 +00001235 else {
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001236 int cmp = PyObject_RichCompareBool(val, maxval, op);
1237 if (cmp < 0)
1238 goto Fail_it_item_and_val;
1239 else if (cmp > 0) {
1240 Py_DECREF(maxval);
1241 Py_DECREF(maxitem);
1242 maxval = val;
1243 maxitem = item;
Guido van Rossum53451b32001-01-17 15:47:24 +00001244 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001245 else {
1246 Py_DECREF(item);
1247 Py_DECREF(val);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00001248 }
Guido van Rossum2d951851994-08-29 12:52:16 +00001249 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00001250 }
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001251 if (PyErr_Occurred())
1252 goto Fail_it;
1253 if (maxval == NULL) {
Martin v. Löwisfd39ad42004-08-12 14:42:37 +00001254 PyErr_Format(PyExc_ValueError,
1255 "%s() arg is an empty sequence", name);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001256 assert(maxitem == NULL);
1257 }
1258 else
1259 Py_DECREF(maxval);
Tim Petersc3074532001-05-03 07:00:32 +00001260 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001261 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001262 return maxitem;
1263
1264Fail_it_item_and_val:
1265 Py_DECREF(val);
1266Fail_it_item:
1267 Py_DECREF(item);
1268Fail_it:
1269 Py_XDECREF(maxval);
1270 Py_XDECREF(maxitem);
1271 Py_DECREF(it);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001272 Py_XDECREF(keyfunc);
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001273 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001274}
1275
Guido van Rossum79f25d91997-04-29 20:08:16 +00001276static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001277builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001278{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001279 return min_max(args, kwds, Py_LT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001280}
1281
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001282PyDoc_STRVAR(min_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001283"min(iterable[, key=func]) -> value\n\
1284min(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001285\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001286With a single iterable argument, return its smallest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001287With two or more arguments, return the smallest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001288
1289
Guido van Rossum79f25d91997-04-29 20:08:16 +00001290static PyObject *
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001291builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001292{
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001293 return min_max(args, kwds, Py_GT);
Guido van Rossum3f5da241990-12-20 15:06:42 +00001294}
1295
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001296PyDoc_STRVAR(max_doc,
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001297"max(iterable[, key=func]) -> value\n\
1298max(a, b, c, ...[, key=func]) -> value\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001299\n\
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001300With a single iterable argument, return its largest item.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001301With two or more arguments, return the largest argument.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001302
1303
Guido van Rossum79f25d91997-04-29 20:08:16 +00001304static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001305builtin_oct(PyObject *self, PyObject *v)
Guido van Rossum006bcd41991-10-24 14:54:44 +00001306{
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001307 return PyNumber_ToBase(v, 8);
Guido van Rossum006bcd41991-10-24 14:54:44 +00001308}
1309
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001310PyDoc_STRVAR(oct_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001311"oct(number) -> string\n\
1312\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001313Return the octal representation of an integer or long integer.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001314
1315
Guido van Rossum79f25d91997-04-29 20:08:16 +00001316static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001317builtin_ord(PyObject *self, PyObject* obj)
Guido van Rossum3f5da241990-12-20 15:06:42 +00001318{
Guido van Rossum09095f32000-03-10 23:00:52 +00001319 long ord;
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001320 Py_ssize_t size;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001321
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001322 if (PyString_Check(obj)) {
1323 size = PyString_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001324 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001325 ord = (long)((unsigned char)*PyString_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001326 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001327 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001328 }
1329 else if (PyUnicode_Check(obj)) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001330 size = PyUnicode_GET_SIZE(obj);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001331 if (size == 1) {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001332 ord = (long)*PyUnicode_AS_UNICODE(obj);
Christian Heimes217cfd12007-12-02 14:31:20 +00001333 return PyLong_FromLong(ord);
Andrew M. Kuchling34c20cf2000-12-20 14:36:56 +00001334 }
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001335#ifndef Py_UNICODE_WIDE
1336 if (size == 2) {
1337 /* Decode a valid surrogate pair */
1338 int c0 = PyUnicode_AS_UNICODE(obj)[0];
1339 int c1 = PyUnicode_AS_UNICODE(obj)[1];
1340 if (0xD800 <= c0 && c0 <= 0xDBFF &&
1341 0xDC00 <= c1 && c1 <= 0xDFFF) {
1342 ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
1343 0x00010000);
Christian Heimes217cfd12007-12-02 14:31:20 +00001344 return PyLong_FromLong(ord);
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001345 }
1346 }
1347#endif
Guido van Rossum6f376c42007-05-24 14:31:33 +00001348 }
Guido van Rossum98f97462007-04-13 03:31:13 +00001349 else if (PyBytes_Check(obj)) {
1350 /* XXX Hopefully this is temporary */
1351 size = PyBytes_GET_SIZE(obj);
1352 if (size == 1) {
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001353 ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
Christian Heimes217cfd12007-12-02 14:31:20 +00001354 return PyLong_FromLong(ord);
Guido van Rossum98f97462007-04-13 03:31:13 +00001355 }
1356 }
1357 else {
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001358 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001359 "ord() expected string of length 1, but " \
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001360 "%.200s found", obj->ob_type->tp_name);
Guido van Rossum09095f32000-03-10 23:00:52 +00001361 return NULL;
1362 }
1363
Guido van Rossumad991772001-01-12 16:03:05 +00001364 PyErr_Format(PyExc_TypeError,
Andrew M. Kuchlingf07aad12000-12-23 14:11:28 +00001365 "ord() expected a character, "
Martin v. Löwisd96ee902006-02-16 14:37:16 +00001366 "but string of length %zd found",
Jeremy Hylton394b54d2000-04-12 21:19:47 +00001367 size);
1368 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001369}
1370
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001371PyDoc_VAR(ord_doc) = PyDoc_STR(
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001372"ord(c) -> integer\n\
1373\n\
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001374Return the integer ordinal of a one-character string."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001375)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001376#ifndef Py_UNICODE_WIDE
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001377PyDoc_STR(
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001378"\nA valid surrogate pair is also accepted."
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001379)
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001380#endif
Guido van Rossum307fa8c2007-07-16 20:46:27 +00001381;
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001382
1383
Guido van Rossum79f25d91997-04-29 20:08:16 +00001384static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001385builtin_pow(PyObject *self, PyObject *args)
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001386{
Guido van Rossum09df08a1998-05-22 00:51:39 +00001387 PyObject *v, *w, *z = Py_None;
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001388
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001389 if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z))
Guido van Rossum6a00cd81995-01-07 12:39:01 +00001390 return NULL;
Guido van Rossum09df08a1998-05-22 00:51:39 +00001391 return PyNumber_Power(v, w, z);
Guido van Rossumd4905451991-05-05 20:00:36 +00001392}
1393
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001394PyDoc_STRVAR(pow_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001395"pow(x, y[, z]) -> number\n\
1396\n\
1397With two arguments, equivalent to x**y. With three arguments,\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001398equivalent to (x**y) % z, but may be more efficient (e.g. for longs).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001399
1400
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001401
Guido van Rossum34343512006-11-30 22:13:52 +00001402static PyObject *
1403builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
1404{
1405 static char *kwlist[] = {"sep", "end", "file", 0};
Georg Brandl257d3d92007-02-26 10:35:10 +00001406 static PyObject *dummy_args;
Guido van Rossum34343512006-11-30 22:13:52 +00001407 PyObject *sep = NULL, *end = NULL, *file = NULL;
1408 int i, err;
1409
Georg Brandl257d3d92007-02-26 10:35:10 +00001410 if (dummy_args == NULL) {
1411 if (!(dummy_args = PyTuple_New(0)))
1412 return NULL;
1413 }
Georg Brandl88fc6642007-02-09 21:28:07 +00001414 if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
Guido van Rossum34343512006-11-30 22:13:52 +00001415 kwlist, &sep, &end, &file))
Christian Heimesfef9bba2007-11-13 15:24:14 +00001416 return NULL;
1417 if (file == NULL || file == Py_None) {
Guido van Rossum34343512006-11-30 22:13:52 +00001418 file = PySys_GetObject("stdout");
Christian Heimesfef9bba2007-11-13 15:24:14 +00001419 /* sys.stdout may be None when FILE* stdout isn't connected */
1420 if (file == Py_None)
1421 Py_RETURN_NONE;
1422 }
Guido van Rossum34343512006-11-30 22:13:52 +00001423
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001424 if (sep && sep != Py_None && !PyUnicode_Check(sep)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001425 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001426 "sep must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001427 sep->ob_type->tp_name);
1428 return NULL;
1429 }
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001430 if (end && end != Py_None && !PyUnicode_Check(end)) {
Georg Brandl16f3e032006-11-30 22:46:03 +00001431 PyErr_Format(PyExc_TypeError,
Neal Norwitz6ea45d32007-08-26 04:19:43 +00001432 "end must be None or a string, not %.200s",
Georg Brandl16f3e032006-11-30 22:46:03 +00001433 end->ob_type->tp_name);
1434 return NULL;
1435 }
Guido van Rossum34343512006-11-30 22:13:52 +00001436
1437 for (i = 0; i < PyTuple_Size(args); i++) {
1438 if (i > 0) {
1439 if (sep == NULL || sep == Py_None)
1440 err = PyFile_WriteString(" ", file);
1441 else
1442 err = PyFile_WriteObject(sep, file,
1443 Py_PRINT_RAW);
1444 if (err)
1445 return NULL;
1446 }
1447 err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
1448 Py_PRINT_RAW);
1449 if (err)
1450 return NULL;
1451 }
1452
1453 if (end == NULL || end == Py_None)
1454 err = PyFile_WriteString("\n", file);
1455 else
1456 err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
1457 if (err)
1458 return NULL;
1459
1460 Py_RETURN_NONE;
1461}
1462
1463PyDoc_STRVAR(print_doc,
Georg Brandlcd5da7d2008-02-01 15:47:37 +00001464"print(value, ..., sep=' ', end='\\n', file=sys.stdout)\n\
Guido van Rossum34343512006-11-30 22:13:52 +00001465\n\
1466Prints the values to a stream, or to sys.stdout by default.\n\
1467Optional keyword arguments:\n\
1468file: a file-like object (stream); defaults to the current sys.stdout.\n\
1469sep: string inserted between values, default a space.\n\
1470end: string appended after the last value, default a newline.");
1471
1472
Guido van Rossuma88a0332007-02-26 16:59:55 +00001473static PyObject *
1474builtin_input(PyObject *self, PyObject *args)
1475{
Guido van Rossumeba76962007-05-27 09:13:28 +00001476 PyObject *promptarg = NULL;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001477 PyObject *fin = PySys_GetObject("stdin");
1478 PyObject *fout = PySys_GetObject("stdout");
Guido van Rossumeba76962007-05-27 09:13:28 +00001479 PyObject *ferr = PySys_GetObject("stderr");
1480 PyObject *tmp;
1481 long fd;
1482 int tty;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001483
Guido van Rossumeba76962007-05-27 09:13:28 +00001484 /* Parse arguments */
1485 if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg))
Guido van Rossuma88a0332007-02-26 16:59:55 +00001486 return NULL;
1487
Guido van Rossumeba76962007-05-27 09:13:28 +00001488 /* Check that stdin/out/err are intact */
Christian Heimes2be03732007-11-15 02:26:46 +00001489 if (fin == NULL || fin == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001490 PyErr_SetString(PyExc_RuntimeError,
1491 "input(): lost sys.stdin");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001492 return NULL;
1493 }
Christian Heimes2be03732007-11-15 02:26:46 +00001494 if (fout == NULL || fout == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001495 PyErr_SetString(PyExc_RuntimeError,
1496 "input(): lost sys.stdout");
Guido van Rossuma88a0332007-02-26 16:59:55 +00001497 return NULL;
1498 }
Christian Heimes2be03732007-11-15 02:26:46 +00001499 if (ferr == NULL || ferr == Py_None) {
Guido van Rossumeba76962007-05-27 09:13:28 +00001500 PyErr_SetString(PyExc_RuntimeError,
1501 "input(): lost sys.stderr");
1502 return NULL;
1503 }
1504
1505 /* First of all, flush stderr */
1506 tmp = PyObject_CallMethod(ferr, "flush", "");
1507 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001508 PyErr_Clear();
1509 else
1510 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001511
1512 /* We should only use (GNU) readline if Python's sys.stdin and
1513 sys.stdout are the same as C's stdin and stdout, because we
1514 need to pass it those. */
1515 tmp = PyObject_CallMethod(fin, "fileno", "");
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001516 if (tmp == NULL) {
1517 PyErr_Clear();
1518 tty = 0;
1519 }
1520 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001521 fd = PyLong_AsLong(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001522 Py_DECREF(tmp);
1523 if (fd < 0 && PyErr_Occurred())
1524 return NULL;
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001525 tty = fd == fileno(stdin) && isatty(fd);
1526 }
1527 if (tty) {
1528 tmp = PyObject_CallMethod(fout, "fileno", "");
1529 if (tmp == NULL)
1530 PyErr_Clear();
1531 else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001532 fd = PyLong_AsLong(tmp);
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001533 Py_DECREF(tmp);
1534 if (fd < 0 && PyErr_Occurred())
1535 return NULL;
1536 tty = fd == fileno(stdout) && isatty(fd);
1537 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001538 }
1539
1540 /* If we're interactive, use (GNU) readline */
1541 if (tty) {
Guido van Rossuma88a0332007-02-26 16:59:55 +00001542 PyObject *po;
1543 char *prompt;
1544 char *s;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001545 PyObject *stdin_encoding;
Guido van Rossuma88a0332007-02-26 16:59:55 +00001546 PyObject *result;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001547
1548 stdin_encoding = PyObject_GetAttrString(fin, "encoding");
1549 if (!stdin_encoding)
1550 /* stdin is a text stream, so it must have an
1551 encoding. */
1552 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001553 tmp = PyObject_CallMethod(fout, "flush", "");
1554 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001555 PyErr_Clear();
1556 else
1557 Py_DECREF(tmp);
Guido van Rossumeba76962007-05-27 09:13:28 +00001558 if (promptarg != NULL) {
1559 po = PyObject_Str(promptarg);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001560 if (po == NULL) {
1561 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001562 return NULL;
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001563 }
Christian Heimes91c77302007-11-25 09:18:01 +00001564 prompt = PyUnicode_AsString(po);
Guido van Rossumeba76962007-05-27 09:13:28 +00001565 if (prompt == NULL) {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001566 Py_DECREF(stdin_encoding);
Guido van Rossumeba76962007-05-27 09:13:28 +00001567 Py_DECREF(po);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001568 return NULL;
Guido van Rossumeba76962007-05-27 09:13:28 +00001569 }
Guido van Rossuma88a0332007-02-26 16:59:55 +00001570 }
1571 else {
1572 po = NULL;
1573 prompt = "";
1574 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001575 s = PyOS_Readline(stdin, stdout, prompt);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001576 Py_XDECREF(po);
1577 if (s == NULL) {
1578 if (!PyErr_Occurred())
1579 PyErr_SetNone(PyExc_KeyboardInterrupt);
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001580 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001581 return NULL;
1582 }
1583 if (*s == '\0') {
1584 PyErr_SetNone(PyExc_EOFError);
1585 result = NULL;
1586 }
1587 else { /* strip trailing '\n' */
1588 size_t len = strlen(s);
1589 if (len > PY_SSIZE_T_MAX) {
1590 PyErr_SetString(PyExc_OverflowError,
1591 "input: input too long");
1592 result = NULL;
1593 }
1594 else {
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001595 result = PyUnicode_Decode
1596 (s, len-1,
1597 PyUnicode_AsString(stdin_encoding),
1598 NULL);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001599 }
1600 }
Martin v. Löwis4a7b5d52007-09-04 05:24:49 +00001601 Py_DECREF(stdin_encoding);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001602 PyMem_FREE(s);
1603 return result;
1604 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001605
1606 /* Fallback if we're not interactive */
1607 if (promptarg != NULL) {
1608 if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0)
Guido van Rossuma88a0332007-02-26 16:59:55 +00001609 return NULL;
1610 }
Guido van Rossumeba76962007-05-27 09:13:28 +00001611 tmp = PyObject_CallMethod(fout, "flush", "");
1612 if (tmp == NULL)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001613 PyErr_Clear();
1614 else
1615 Py_DECREF(tmp);
Guido van Rossuma88a0332007-02-26 16:59:55 +00001616 return PyFile_GetLine(fin, -1);
1617}
1618
1619PyDoc_STRVAR(input_doc,
1620"input([prompt]) -> string\n\
1621\n\
1622Read a string from standard input. The trailing newline is stripped.\n\
1623If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\
1624On Unix, GNU readline is used if enabled. The prompt string, if given,\n\
1625is printed without a trailing newline before reading.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001626
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001627
Guido van Rossum79f25d91997-04-29 20:08:16 +00001628static PyObject *
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00001629builtin_repr(PyObject *self, PyObject *v)
Guido van Rossumc89705d1992-11-26 08:54:07 +00001630{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001631 return PyObject_Repr(v);
Guido van Rossumc89705d1992-11-26 08:54:07 +00001632}
1633
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001634PyDoc_STRVAR(repr_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001635"repr(object) -> string\n\
1636\n\
1637Return the canonical string representation of the object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001638For most object types, eval(repr(object)) == object.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001639
1640
Guido van Rossum79f25d91997-04-29 20:08:16 +00001641static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001642builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001643{
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001644#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
1645 static PyObject *round_str = NULL;
1646 int ndigits = UNDEF_NDIGITS;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001647 static char *kwlist[] = {"number", "ndigits", 0};
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001648 PyObject *number, *round;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001649
Alex Martelliae211f92007-08-22 23:21:33 +00001650 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|i:round",
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001651 kwlist, &number, &ndigits))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001652 return NULL;
Alex Martelliae211f92007-08-22 23:21:33 +00001653
Christian Heimes90aa7642007-12-19 02:45:37 +00001654 if (Py_TYPE(number)->tp_dict == NULL) {
1655 if (PyType_Ready(Py_TYPE(number)) < 0)
Guido van Rossum15d3d042007-08-24 02:02:45 +00001656 return NULL;
1657 }
1658
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001659 if (round_str == NULL) {
Christian Heimesfe82e772008-01-28 02:38:20 +00001660 round_str = PyUnicode_InternFromString("__round__");
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001661 if (round_str == NULL)
Alex Martelliae211f92007-08-22 23:21:33 +00001662 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001663 }
1664
Christian Heimes90aa7642007-12-19 02:45:37 +00001665 round = _PyType_Lookup(Py_TYPE(number), round_str);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001666 if (round == NULL) {
1667 PyErr_Format(PyExc_TypeError,
1668 "type %.100s doesn't define __round__ method",
Christian Heimes90aa7642007-12-19 02:45:37 +00001669 Py_TYPE(number)->tp_name);
Alex Martelliae211f92007-08-22 23:21:33 +00001670 return NULL;
1671 }
1672
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001673 if (ndigits == UNDEF_NDIGITS)
1674 return PyObject_CallFunction(round, "O", number);
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001675 else
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001676 return PyObject_CallFunction(round, "Oi", number, ndigits);
1677#undef UNDEF_NDIGITS
Guido van Rossum9e51f9b1993-02-12 16:29:05 +00001678}
1679
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001680PyDoc_STRVAR(round_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001681"round(number[, ndigits]) -> floating point number\n\
1682\n\
1683Round a number to a given precision in decimal digits (default 0 digits).\n\
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001684This returns an int when called with one argument, otherwise a float.\n\
1685Precision may be negative.");
1686
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001687
Raymond Hettinger64958a12003-12-17 20:43:33 +00001688static PyObject *
1689builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
1690{
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001691 PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001692 PyObject *callable;
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001693 static char *kwlist[] = {"iterable", "key", "reverse", 0};
Neal Norwitz6f0d4792005-12-15 06:40:36 +00001694 int reverse;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001695
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001696 /* args 1-3 should match listsort in Objects/listobject.c */
1697 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
1698 kwlist, &seq, &keyfunc, &reverse))
Armin Rigo71d7e702005-09-20 18:13:03 +00001699 return NULL;
Raymond Hettinger64958a12003-12-17 20:43:33 +00001700
1701 newlist = PySequence_List(seq);
1702 if (newlist == NULL)
1703 return NULL;
1704
1705 callable = PyObject_GetAttrString(newlist, "sort");
1706 if (callable == NULL) {
1707 Py_DECREF(newlist);
1708 return NULL;
1709 }
Georg Brandl99d7e4e2005-08-31 22:21:15 +00001710
Raymond Hettinger64958a12003-12-17 20:43:33 +00001711 newargs = PyTuple_GetSlice(args, 1, 4);
1712 if (newargs == NULL) {
1713 Py_DECREF(newlist);
1714 Py_DECREF(callable);
1715 return NULL;
1716 }
1717
1718 v = PyObject_Call(callable, newargs, kwds);
1719 Py_DECREF(newargs);
1720 Py_DECREF(callable);
1721 if (v == NULL) {
1722 Py_DECREF(newlist);
1723 return NULL;
1724 }
1725 Py_DECREF(v);
1726 return newlist;
1727}
1728
1729PyDoc_STRVAR(sorted_doc,
Raymond Hettinger70b64fc2008-01-30 20:15:17 +00001730"sorted(iterable, key=None, reverse=False) --> new sorted list");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001731
Guido van Rossum79f25d91997-04-29 20:08:16 +00001732static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001733builtin_vars(PyObject *self, PyObject *args)
Guido van Rossum2d951851994-08-29 12:52:16 +00001734{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001735 PyObject *v = NULL;
1736 PyObject *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001737
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001738 if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001739 return NULL;
Guido van Rossum2d951851994-08-29 12:52:16 +00001740 if (v == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 d = PyEval_GetLocals();
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001742 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001743 if (!PyErr_Occurred())
1744 PyErr_SetString(PyExc_SystemError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001745 "vars(): no locals!?");
Guido van Rossum53bb7ff1995-07-26 16:26:31 +00001746 }
1747 else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 Py_INCREF(d);
Guido van Rossum2d951851994-08-29 12:52:16 +00001749 }
1750 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751 d = PyObject_GetAttrString(v, "__dict__");
Guido van Rossum2d951851994-08-29 12:52:16 +00001752 if (d == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001753 PyErr_SetString(PyExc_TypeError,
Guido van Rossum2d951851994-08-29 12:52:16 +00001754 "vars() argument must have __dict__ attribute");
1755 return NULL;
1756 }
1757 }
1758 return d;
1759}
1760
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001761PyDoc_STRVAR(vars_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001762"vars([object]) -> dictionary\n\
1763\n\
1764Without arguments, equivalent to locals().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001765With an argument, equivalent to object.__dict__.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001766
Alex Martellia70b1912003-04-22 08:12:33 +00001767static PyObject*
1768builtin_sum(PyObject *self, PyObject *args)
1769{
1770 PyObject *seq;
1771 PyObject *result = NULL;
1772 PyObject *temp, *item, *iter;
1773
Raymond Hettinger5cf63942003-10-25 06:41:37 +00001774 if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result))
Alex Martellia70b1912003-04-22 08:12:33 +00001775 return NULL;
1776
1777 iter = PyObject_GetIter(seq);
1778 if (iter == NULL)
1779 return NULL;
1780
1781 if (result == NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +00001782 result = PyLong_FromLong(0);
Alex Martellia70b1912003-04-22 08:12:33 +00001783 if (result == NULL) {
1784 Py_DECREF(iter);
1785 return NULL;
1786 }
1787 } else {
1788 /* reject string values for 'start' parameter */
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001789 if (PyUnicode_Check(result)) {
Alex Martellia70b1912003-04-22 08:12:33 +00001790 PyErr_SetString(PyExc_TypeError,
Alex Martellia9b9c9f2003-04-23 13:34:35 +00001791 "sum() can't sum strings [use ''.join(seq) instead]");
Alex Martellia70b1912003-04-22 08:12:33 +00001792 Py_DECREF(iter);
1793 return NULL;
1794 }
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001795 if (PyBytes_Check(result)) {
1796 PyErr_SetString(PyExc_TypeError,
1797 "sum() can't sum bytes [use b''.join(seq) instead]");
1798 Py_DECREF(iter);
1799 return NULL;
1800 }
1801
Alex Martelli41c9f882003-04-22 09:24:48 +00001802 Py_INCREF(result);
Alex Martellia70b1912003-04-22 08:12:33 +00001803 }
1804
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001805#ifndef SLOW_SUM
1806 /* Fast addition by keeping temporary sums in C instead of new Python objects.
1807 Assumes all inputs are the same type. If the assumption fails, default
1808 to the more general routine.
1809 */
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001810 if (PyLong_CheckExact(result)) {
1811 int overflow;
1812 long i_result = PyLong_AsLongAndOverflow(result, &overflow);
1813 /* If this already overflowed, don't even enter the loop. */
1814 if (overflow == 0) {
1815 Py_DECREF(result);
1816 result = NULL;
1817 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001818 while(result == NULL) {
1819 item = PyIter_Next(iter);
1820 if (item == NULL) {
1821 Py_DECREF(iter);
1822 if (PyErr_Occurred())
1823 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00001824 return PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001825 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001826 if (PyLong_CheckExact(item)) {
1827 long b = PyLong_AsLongAndOverflow(item, &overflow);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001828 long x = i_result + b;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001829 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001830 i_result = x;
1831 Py_DECREF(item);
1832 continue;
1833 }
1834 }
1835 /* Either overflowed or is not an int. Restore real objects and process normally */
Christian Heimes217cfd12007-12-02 14:31:20 +00001836 result = PyLong_FromLong(i_result);
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001837 temp = PyNumber_Add(result, item);
1838 Py_DECREF(result);
1839 Py_DECREF(item);
1840 result = temp;
1841 if (result == NULL) {
1842 Py_DECREF(iter);
1843 return NULL;
1844 }
1845 }
1846 }
1847
1848 if (PyFloat_CheckExact(result)) {
1849 double f_result = PyFloat_AS_DOUBLE(result);
1850 Py_DECREF(result);
1851 result = NULL;
1852 while(result == NULL) {
1853 item = PyIter_Next(iter);
1854 if (item == NULL) {
1855 Py_DECREF(iter);
1856 if (PyErr_Occurred())
1857 return NULL;
1858 return PyFloat_FromDouble(f_result);
1859 }
1860 if (PyFloat_CheckExact(item)) {
1861 PyFPE_START_PROTECT("add", return 0)
1862 f_result += PyFloat_AS_DOUBLE(item);
1863 PyFPE_END_PROTECT(f_result)
1864 Py_DECREF(item);
1865 continue;
1866 }
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00001867 if (PyLong_CheckExact(item)) {
1868 long value;
1869 int overflow;
1870 value = PyLong_AsLongAndOverflow(item, &overflow);
1871 if (!overflow) {
1872 PyFPE_START_PROTECT("add", return 0)
1873 f_result += (double)value;
1874 PyFPE_END_PROTECT(f_result)
1875 Py_DECREF(item);
1876 continue;
1877 }
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001878 }
1879 result = PyFloat_FromDouble(f_result);
1880 temp = PyNumber_Add(result, item);
1881 Py_DECREF(result);
1882 Py_DECREF(item);
1883 result = temp;
1884 if (result == NULL) {
1885 Py_DECREF(iter);
1886 return NULL;
1887 }
1888 }
1889 }
1890#endif
1891
Alex Martellia70b1912003-04-22 08:12:33 +00001892 for(;;) {
1893 item = PyIter_Next(iter);
1894 if (item == NULL) {
1895 /* error, or end-of-sequence */
1896 if (PyErr_Occurred()) {
1897 Py_DECREF(result);
1898 result = NULL;
1899 }
1900 break;
1901 }
Alex Martellia253e182003-10-25 23:24:14 +00001902 temp = PyNumber_Add(result, item);
Alex Martellia70b1912003-04-22 08:12:33 +00001903 Py_DECREF(result);
1904 Py_DECREF(item);
1905 result = temp;
1906 if (result == NULL)
1907 break;
1908 }
1909 Py_DECREF(iter);
1910 return result;
1911}
1912
1913PyDoc_STRVAR(sum_doc,
Thomas Wouters89f507f2006-12-13 04:49:30 +00001914"sum(sequence[, start]) -> value\n\
Alex Martellia70b1912003-04-22 08:12:33 +00001915\n\
1916Returns the sum of a sequence of numbers (NOT strings) plus the value\n\
Thomas Wouters89f507f2006-12-13 04:49:30 +00001917of parameter 'start' (which defaults to 0). When the sequence is\n\
1918empty, returns start.");
Alex Martellia70b1912003-04-22 08:12:33 +00001919
1920
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001921static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001922builtin_isinstance(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001923{
1924 PyObject *inst;
1925 PyObject *cls;
Guido van Rossum823649d2001-03-21 18:40:58 +00001926 int retval;
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001927
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001928 if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001929 return NULL;
Guido van Rossumf5dd9141997-12-02 19:11:45 +00001930
Guido van Rossum823649d2001-03-21 18:40:58 +00001931 retval = PyObject_IsInstance(inst, cls);
1932 if (retval < 0)
Guido van Rossumad991772001-01-12 16:03:05 +00001933 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001934 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001935}
1936
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001937PyDoc_STRVAR(isinstance_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001938"isinstance(object, class-or-type-or-tuple) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001939\n\
1940Return whether an object is an instance of a class or of a subclass thereof.\n\
Guido van Rossum03290ec2001-10-07 20:54:12 +00001941With a type as second argument, return whether that is the object's type.\n\
1942The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001943isinstance(x, A) or isinstance(x, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001944
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001945
1946static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001947builtin_issubclass(PyObject *self, PyObject *args)
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001948{
1949 PyObject *derived;
1950 PyObject *cls;
1951 int retval;
1952
Raymond Hettingerea3fdf42002-12-29 16:33:45 +00001953 if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls))
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001954 return NULL;
Guido van Rossum668213d1999-06-16 17:28:37 +00001955
Guido van Rossum823649d2001-03-21 18:40:58 +00001956 retval = PyObject_IsSubclass(derived, cls);
1957 if (retval < 0)
1958 return NULL;
Guido van Rossum77f6a652002-04-03 22:41:51 +00001959 return PyBool_FromLong(retval);
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001960}
1961
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001962PyDoc_STRVAR(issubclass_doc,
Guido van Rossum77f6a652002-04-03 22:41:51 +00001963"issubclass(C, B) -> bool\n\
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001964\n\
Walter Dörwaldd9a6ad32002-12-12 16:41:44 +00001965Return whether class C is a subclass (i.e., a derived class) of class B.\n\
1966When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\
1967is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00001968
Barry Warsawcde8b1b1997-08-22 21:14:38 +00001969
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00001970typedef struct {
1971 PyObject_HEAD
1972 Py_ssize_t tuplesize;
1973 PyObject *ittuple; /* tuple of iterators */
1974 PyObject *result;
1975} zipobject;
1976
1977PyTypeObject PyZip_Type;
1978
1979static PyObject *
1980zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Barry Warsawbd599b52000-08-03 15:45:29 +00001981{
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00001982 zipobject *lz;
1983 Py_ssize_t i;
1984 PyObject *ittuple; /* tuple of iterators */
1985 PyObject *result;
1986 Py_ssize_t tuplesize = PySequence_Length(args);
1987
1988 if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
1989 return NULL;
1990
Guido van Rossumb65fb332006-08-25 23:26:40 +00001991 /* args must be a tuple */
1992 assert(PyTuple_Check(args));
Barry Warsawbd599b52000-08-03 15:45:29 +00001993
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00001994 /* obtain iterators */
1995 ittuple = PyTuple_New(tuplesize);
1996 if (ittuple == NULL)
1997 return NULL;
1998 for (i=0; i < tuplesize; ++i) {
1999 PyObject *item = PyTuple_GET_ITEM(args, i);
2000 PyObject *it = PyObject_GetIter(item);
2001 if (it == NULL) {
2002 if (PyErr_ExceptionMatches(PyExc_TypeError))
2003 PyErr_Format(PyExc_TypeError,
2004 "zip argument #%zd must support iteration",
2005 i+1);
2006 Py_DECREF(ittuple);
2007 return NULL;
2008 }
2009 PyTuple_SET_ITEM(ittuple, i, it);
2010 }
2011
2012 /* create a result holder */
2013 result = PyTuple_New(tuplesize);
2014 if (result == NULL) {
2015 Py_DECREF(ittuple);
2016 return NULL;
2017 }
2018 for (i=0 ; i < tuplesize ; i++) {
2019 Py_INCREF(Py_None);
2020 PyTuple_SET_ITEM(result, i, Py_None);
2021 }
2022
2023 /* create zipobject structure */
2024 lz = (zipobject *)type->tp_alloc(type, 0);
2025 if (lz == NULL) {
2026 Py_DECREF(ittuple);
2027 Py_DECREF(result);
2028 return NULL;
2029 }
2030 lz->ittuple = ittuple;
2031 lz->tuplesize = tuplesize;
2032 lz->result = result;
2033
2034 return (PyObject *)lz;
Barry Warsawbd599b52000-08-03 15:45:29 +00002035}
2036
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002037static void
2038zip_dealloc(zipobject *lz)
2039{
2040 PyObject_GC_UnTrack(lz);
2041 Py_XDECREF(lz->ittuple);
2042 Py_XDECREF(lz->result);
2043 Py_TYPE(lz)->tp_free(lz);
2044}
2045
2046static int
2047zip_traverse(zipobject *lz, visitproc visit, void *arg)
2048{
2049 Py_VISIT(lz->ittuple);
2050 Py_VISIT(lz->result);
2051 return 0;
2052}
2053
2054static PyObject *
2055zip_next(zipobject *lz)
2056{
2057 Py_ssize_t i;
2058 Py_ssize_t tuplesize = lz->tuplesize;
2059 PyObject *result = lz->result;
2060 PyObject *it;
2061 PyObject *item;
2062 PyObject *olditem;
2063
2064 if (tuplesize == 0)
2065 return NULL;
2066 if (Py_REFCNT(result) == 1) {
2067 Py_INCREF(result);
2068 for (i=0 ; i < tuplesize ; i++) {
2069 it = PyTuple_GET_ITEM(lz->ittuple, i);
2070 assert(PyIter_Check(it));
2071 item = (*Py_TYPE(it)->tp_iternext)(it);
2072 if (item == NULL) {
2073 Py_DECREF(result);
2074 return NULL;
2075 }
2076 olditem = PyTuple_GET_ITEM(result, i);
2077 PyTuple_SET_ITEM(result, i, item);
2078 Py_DECREF(olditem);
2079 }
2080 } else {
2081 result = PyTuple_New(tuplesize);
2082 if (result == NULL)
2083 return NULL;
2084 for (i=0 ; i < tuplesize ; i++) {
2085 it = PyTuple_GET_ITEM(lz->ittuple, i);
2086 assert(PyIter_Check(it));
2087 item = (*Py_TYPE(it)->tp_iternext)(it);
2088 if (item == NULL) {
2089 Py_DECREF(result);
2090 return NULL;
2091 }
2092 PyTuple_SET_ITEM(result, i, item);
2093 }
2094 }
2095 return result;
2096}
Barry Warsawbd599b52000-08-03 15:45:29 +00002097
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002098PyDoc_STRVAR(zip_doc,
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002099"zip(iter1 [,iter2 [...]]) --> zip object\n\
Barry Warsawbd599b52000-08-03 15:45:29 +00002100\n\
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002101Return a zip object whose .__next__() method returns a tuple where\n\
2102the i-th element comes from the i-th iterable argument. The .__next__()\n\
2103method continues until the shortest iterable in the argument sequence\n\
2104is exhausted and then it raises StopIteration. Works like the zip()\n\
2105function but consumes less memory by returning an iterator instead of\n\
2106a list.");
2107
2108PyTypeObject PyZip_Type = {
2109 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2110 "zip", /* tp_name */
2111 sizeof(zipobject), /* tp_basicsize */
2112 0, /* tp_itemsize */
2113 /* methods */
2114 (destructor)zip_dealloc, /* tp_dealloc */
2115 0, /* tp_print */
2116 0, /* tp_getattr */
2117 0, /* tp_setattr */
2118 0, /* tp_compare */
2119 0, /* tp_repr */
2120 0, /* tp_as_number */
2121 0, /* tp_as_sequence */
2122 0, /* tp_as_mapping */
2123 0, /* tp_hash */
2124 0, /* tp_call */
2125 0, /* tp_str */
2126 PyObject_GenericGetAttr, /* tp_getattro */
2127 0, /* tp_setattro */
2128 0, /* tp_as_buffer */
2129 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2130 Py_TPFLAGS_BASETYPE, /* tp_flags */
2131 zip_doc, /* tp_doc */
2132 (traverseproc)zip_traverse, /* tp_traverse */
2133 0, /* tp_clear */
2134 0, /* tp_richcompare */
2135 0, /* tp_weaklistoffset */
2136 PyObject_SelfIter, /* tp_iter */
2137 (iternextfunc)zip_next, /* tp_iternext */
2138 0, /* tp_methods */
2139 0, /* tp_members */
2140 0, /* tp_getset */
2141 0, /* tp_base */
2142 0, /* tp_dict */
2143 0, /* tp_descr_get */
2144 0, /* tp_descr_set */
2145 0, /* tp_dictoffset */
2146 0, /* tp_init */
2147 PyType_GenericAlloc, /* tp_alloc */
2148 zip_new, /* tp_new */
2149 PyObject_GC_Del, /* tp_free */
2150};
Barry Warsawbd599b52000-08-03 15:45:29 +00002151
2152
Guido van Rossum79f25d91997-04-29 20:08:16 +00002153static PyMethodDef builtin_methods[] = {
Guido van Rossum52cc1d82007-03-18 15:41:51 +00002154 {"__build_class__", (PyCFunction)builtin___build_class__,
2155 METH_VARARGS | METH_KEYWORDS, build_class_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002156 {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002157 {"abs", builtin_abs, METH_O, abs_doc},
Raymond Hettinger96229b12005-03-11 06:49:40 +00002158 {"all", builtin_all, METH_O, all_doc},
2159 {"any", builtin_any, METH_O, any_doc},
Guido van Rossumcd16bf62007-06-13 18:07:49 +00002160 {"bin", builtin_bin, METH_O, bin_doc},
Neal Norwitzc2550c72007-08-31 04:17:51 +00002161 {"chr", builtin_chr, METH_VARARGS, chr_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002162 {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
Guido van Rossumd8faa362007-04-27 19:54:29 +00002163 {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002164 {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
2165 {"dir", builtin_dir, METH_VARARGS, dir_doc},
2166 {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
2167 {"eval", builtin_eval, METH_VARARGS, eval_doc},
Georg Brandl7cae87c2006-09-06 06:51:57 +00002168 {"exec", builtin_exec, METH_VARARGS, exec_doc},
Eric Smith8c663262007-08-25 02:26:07 +00002169 {"format", builtin_format, METH_VARARGS, format_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002170 {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
2171 {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
2172 {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
2173 {"hash", builtin_hash, METH_O, hash_doc},
2174 {"hex", builtin_hex, METH_O, hex_doc},
2175 {"id", builtin_id, METH_O, id_doc},
Guido van Rossuma88a0332007-02-26 16:59:55 +00002176 {"input", builtin_input, METH_VARARGS, input_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002177 {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
2178 {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
2179 {"iter", builtin_iter, METH_VARARGS, iter_doc},
2180 {"len", builtin_len, METH_O, len_doc},
2181 {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00002182 {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
2183 {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
Georg Brandla18af4e2007-04-21 15:47:16 +00002184 {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002185 {"oct", builtin_oct, METH_O, oct_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002186 {"ord", builtin_ord, METH_O, ord_doc},
2187 {"pow", builtin_pow, METH_VARARGS, pow_doc},
Guido van Rossum452bf512007-02-09 05:32:43 +00002188 {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002189 {"repr", builtin_repr, METH_O, repr_doc},
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002190 {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002191 {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
Raymond Hettinger64958a12003-12-17 20:43:33 +00002192 {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc},
Alex Martellia70b1912003-04-22 08:12:33 +00002193 {"sum", builtin_sum, METH_VARARGS, sum_doc},
Martin v. Löwise3eb1f22001-08-16 13:15:00 +00002194 {"vars", builtin_vars, METH_VARARGS, vars_doc},
Guido van Rossumc02e15c1991-12-16 13:03:00 +00002195 {NULL, NULL},
Guido van Rossum3f5da241990-12-20 15:06:42 +00002196};
2197
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002198PyDoc_STRVAR(builtin_doc,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002199"Built-in functions, exceptions, and other objects.\n\
2200\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002201Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002202
Guido van Rossum25ce5661997-08-02 03:10:38 +00002203PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002204_PyBuiltin_Init(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002205{
Fred Drake5550de32000-06-20 04:54:19 +00002206 PyObject *mod, *dict, *debug;
Georg Brandl1a3284e2007-12-02 09:40:06 +00002207 mod = Py_InitModule4("builtins", builtin_methods,
Guido van Rossumf9d9c6c1998-06-26 21:23:49 +00002208 builtin_doc, (PyObject *)NULL,
2209 PYTHON_API_VERSION);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002210 if (mod == NULL)
2211 return NULL;
2212 dict = PyModule_GetDict(mod);
Tim Peters4b7625e2001-09-13 21:37:17 +00002213
Tim Peters7571a0f2003-03-23 17:52:28 +00002214#ifdef Py_TRACE_REFS
Georg Brandl1a3284e2007-12-02 09:40:06 +00002215 /* "builtins" exposes a number of statically allocated objects
Tim Peters7571a0f2003-03-23 17:52:28 +00002216 * that, before this code was added in 2.3, never showed up in
2217 * the list of "all objects" maintained by Py_TRACE_REFS. As a
2218 * result, programs leaking references to None and False (etc)
2219 * couldn't be diagnosed by examining sys.getobjects(0).
2220 */
2221#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
2222#else
2223#define ADD_TO_ALL(OBJECT) (void)0
2224#endif
2225
Tim Peters4b7625e2001-09-13 21:37:17 +00002226#define SETBUILTIN(NAME, OBJECT) \
Tim Peters7571a0f2003-03-23 17:52:28 +00002227 if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \
2228 return NULL; \
2229 ADD_TO_ALL(OBJECT)
Tim Peters4b7625e2001-09-13 21:37:17 +00002230
2231 SETBUILTIN("None", Py_None);
2232 SETBUILTIN("Ellipsis", Py_Ellipsis);
2233 SETBUILTIN("NotImplemented", Py_NotImplemented);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002234 SETBUILTIN("False", Py_False);
2235 SETBUILTIN("True", Py_True);
2236 SETBUILTIN("bool", &PyBool_Type);
Guido van Rossumbae07c92007-10-08 02:46:15 +00002237 SETBUILTIN("memoryview", &PyMemoryView_Type);
Guido van Rossum254348e2007-11-21 19:29:53 +00002238 SETBUILTIN("bytearray", &PyBytes_Type);
Guido van Rossum98297ee2007-11-06 21:34:58 +00002239 SETBUILTIN("bytes", &PyString_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002240 SETBUILTIN("classmethod", &PyClassMethod_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002241#ifndef WITHOUT_COMPLEX
Tim Peters4b7625e2001-09-13 21:37:17 +00002242 SETBUILTIN("complex", &PyComplex_Type);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002243#endif
Tim Petersa427a2b2001-10-29 22:25:45 +00002244 SETBUILTIN("dict", &PyDict_Type);
Tim Peters67d687a2002-04-29 21:27:32 +00002245 SETBUILTIN("enumerate", &PyEnum_Type);
Raymond Hettinger17301e92008-03-13 00:19:26 +00002246 SETBUILTIN("filter", &PyFilter_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002247 SETBUILTIN("float", &PyFloat_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002248 SETBUILTIN("frozenset", &PyFrozenSet_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002249 SETBUILTIN("property", &PyProperty_Type);
Guido van Rossumddefaf32007-01-14 03:31:43 +00002250 SETBUILTIN("int", &PyLong_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002251 SETBUILTIN("list", &PyList_Type);
Raymond Hettingera6c60372008-03-13 01:26:19 +00002252 SETBUILTIN("map", &PyMap_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002253 SETBUILTIN("object", &PyBaseObject_Type);
Guido van Rossum805365e2007-05-07 22:24:25 +00002254 SETBUILTIN("range", &PyRange_Type);
Raymond Hettinger85c20a42003-11-06 14:06:48 +00002255 SETBUILTIN("reversed", &PyReversed_Type);
Raymond Hettingera690a992003-11-16 16:17:49 +00002256 SETBUILTIN("set", &PySet_Type);
Guido van Rossumbea18cc2002-06-14 20:41:17 +00002257 SETBUILTIN("slice", &PySlice_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002258 SETBUILTIN("staticmethod", &PyStaticMethod_Type);
Guido van Rossum572dbf82007-04-27 23:53:51 +00002259 SETBUILTIN("str", &PyUnicode_Type);
Tim Peters4b7625e2001-09-13 21:37:17 +00002260 SETBUILTIN("super", &PySuper_Type);
2261 SETBUILTIN("tuple", &PyTuple_Type);
2262 SETBUILTIN("type", &PyType_Type);
Raymond Hettinger736c0ab2008-03-13 02:09:15 +00002263 SETBUILTIN("zip", &PyZip_Type);
Guido van Rossum77f6a652002-04-03 22:41:51 +00002264 debug = PyBool_FromLong(Py_OptimizeFlag == 0);
Fred Drake5550de32000-06-20 04:54:19 +00002265 if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
2266 Py_XDECREF(debug);
Guido van Rossum25ce5661997-08-02 03:10:38 +00002267 return NULL;
Fred Drake5550de32000-06-20 04:54:19 +00002268 }
2269 Py_XDECREF(debug);
Barry Warsaw757af0e1997-08-29 22:13:51 +00002270
Guido van Rossum25ce5661997-08-02 03:10:38 +00002271 return mod;
Tim Peters7571a0f2003-03-23 17:52:28 +00002272#undef ADD_TO_ALL
Tim Peters4b7625e2001-09-13 21:37:17 +00002273#undef SETBUILTIN
Guido van Rossum3f5da241990-12-20 15:06:42 +00002274}